summaryrefslogtreecommitdiff
path: root/libvirt/resource_libvirt_network.go
diff options
context:
space:
mode:
authorThomas Hipp <thipp@suse.de>2017-07-07 17:40:35 +0200
committerFlavio Castelli <flavio@castelli.me>2017-07-27 14:59:30 +0200
commitccf4dff4f872291b5cf131cbdfb3d3c5b2f0dd47 (patch)
treedfd1952f157bf6f369c561379ed90ba500fd0853 /libvirt/resource_libvirt_network.go
parented3000f4d3b2ee5eeab855f32e9fde80193944df (diff)
downloadterraform-provider-libvirt-ccf4dff4f872291b5cf131cbdfb3d3c5b2f0dd47.tar
terraform-provider-libvirt-ccf4dff4f872291b5cf131cbdfb3d3c5b2f0dd47.tar.gz
use github.com/libvirt-go-xml
Replace the custom XML structs with libvirt's offcial ones. This resolves #143. Signed-off-by: Thomas Hipp <thipp@suse.de>
Diffstat (limited to 'libvirt/resource_libvirt_network.go')
-rw-r--r--libvirt/resource_libvirt_network.go49
1 files changed, 29 insertions, 20 deletions
diff --git a/libvirt/resource_libvirt_network.go b/libvirt/resource_libvirt_network.go
index 05a1db4c..344440c8 100644
--- a/libvirt/resource_libvirt_network.go
+++ b/libvirt/resource_libvirt_network.go
@@ -4,12 +4,14 @@ import (
"fmt"
"log"
"net"
+ "strconv"
"strings"
"time"
"github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/helper/schema"
libvirt "github.com/libvirt/libvirt-go"
+ "github.com/libvirt/libvirt-go-xml"
)
const (
@@ -156,7 +158,7 @@ func resourceLibvirtNetworkCreate(d *schema.ResourceData, meta interface{}) erro
networkDef := newNetworkDef()
networkDef.Name = d.Get("name").(string)
- networkDef.Domain = &defNetworkDomain{
+ networkDef.Domain = &libvirtxml.NetworkDomain{
Name: d.Get("domain").(string),
}
@@ -165,13 +167,15 @@ func resourceLibvirtNetworkCreate(d *schema.ResourceData, meta interface{}) erro
if b, ok := d.GetOk("bridge"); ok {
bridgeName = b.(string)
}
- networkDef.Bridge = &defNetworkBridge{
+ networkDef.Bridge = &libvirtxml.NetworkBridge{
Name: bridgeName,
- Stp: "on",
+ STP: "on",
}
// check the network mode
- networkDef.Forward.Mode = strings.ToLower(d.Get("mode").(string))
+ networkDef.Forward = &libvirtxml.NetworkForward{
+ Mode: strings.ToLower(d.Get("mode").(string)),
+ }
if networkDef.Forward.Mode == netModeIsolated || networkDef.Forward.Mode == netModeNat || networkDef.Forward.Mode == netModeRoute {
if networkDef.Forward.Mode == netModeIsolated {
@@ -179,13 +183,13 @@ func resourceLibvirtNetworkCreate(d *schema.ResourceData, meta interface{}) erro
networkDef.Forward = nil
} else if networkDef.Forward.Mode == netModeRoute {
// there is no NAT when using a routed network
- networkDef.Forward.Nat = nil
+ networkDef.Forward.NAT = nil
}
// some network modes require a DHCP/DNS server
// set the addresses for DHCP
if addresses, ok := d.GetOk("addresses"); ok {
- ipsPtrsLst := []*defNetworkIp{}
+ ipsPtrsLst := []libvirtxml.NetworkIP{}
for _, addressI := range addresses.([]interface{}) {
address := addressI.(string)
_, ipNet, err := net.ParseCIDR(address)
@@ -210,46 +214,49 @@ func resourceLibvirtNetworkCreate(d *schema.ResourceData, meta interface{}) erro
start[len(start)-1]++
// assign the .1 to the host interface
- dni := defNetworkIp{
+ dni := libvirtxml.NetworkIP{
Address: start.String(),
- Prefix: ones,
+ Prefix: strconv.Itoa(ones),
Family: family,
}
start[len(start)-1]++ // then skip the .1
end[len(end)-1]-- // and skip the .255 (for broadcast)
- dni.Dhcp = &defNetworkIpDhcp{
- Ranges: []*defNetworkIpDhcpRange{
- &defNetworkIpDhcpRange{
+ dni.DHCP = &libvirtxml.NetworkDHCP{
+ Ranges: []libvirtxml.NetworkDHCPRange{
+ libvirtxml.NetworkDHCPRange{
Start: start.String(),
End: end.String(),
},
},
}
- ipsPtrsLst = append(ipsPtrsLst, &dni)
+ ipsPtrsLst = append(ipsPtrsLst, dni)
}
- networkDef.Ips = ipsPtrsLst
+ networkDef.IPs = ipsPtrsLst
}
if dns_forward_count, ok := d.GetOk("dns_forwarder.#"); ok {
- var dns defNetworkDns
+ dns := libvirtxml.NetworkDNS{
+ Forwarders: []libvirtxml.NetworkDNSForwarder{},
+ }
+
for i := 0; i < dns_forward_count.(int); i++ {
- forward := defDnsForwarder{}
+ forward := libvirtxml.NetworkDNSForwarder{}
forwardPrefix := fmt.Sprintf("dns_forwarder.%d", i)
if address, ok := d.GetOk(forwardPrefix + ".address"); ok {
ip := net.ParseIP(address.(string))
if ip == nil {
return fmt.Errorf("Could not parse address '%s'", address)
}
- forward.Address = ip.String()
+ forward.Addr = ip.String()
}
if domain, ok := d.GetOk(forwardPrefix + ".domain"); ok {
forward.Domain = domain.(string)
}
- dns.Forwarder = append(dns.Forwarder, &forward)
+ dns.Forwarders = append(dns.Forwarders, forward)
}
- networkDef.Dns = &dns
+ networkDef.DNS = &dns
}
} else if networkDef.Forward.Mode == netModeBridge {
@@ -347,7 +354,7 @@ func resourceLibvirtNetworkRead(d *schema.ResourceData, meta interface{}) error
d.Set("running", active)
addresses := []string{}
- for _, address := range networkDef.Ips {
+ for _, address := range networkDef.IPs {
// we get the host interface IP (ie, 10.10.8.1) but we want the network CIDR (ie, 10.10.8.0/24)
// so we need some transformations...
addr := net.ParseIP(address.Address)
@@ -358,7 +365,9 @@ func resourceLibvirtNetworkRead(d *schema.ResourceData, meta interface{}) error
if addr.To4() != nil {
bits = net.IPv4len * 8
}
- mask := net.CIDRMask(address.Prefix, bits)
+
+ prefix, _ := strconv.Atoi(address.Prefix)
+ mask := net.CIDRMask(prefix, bits)
network := addr.Mask(mask)
addresses = append(addresses, fmt.Sprintf("%s/%d", network, address.Prefix))
}