diff options
Diffstat (limited to 'libvirt/domain_def.go')
-rw-r--r-- | libvirt/domain_def.go | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/libvirt/domain_def.go b/libvirt/domain_def.go index 5f443a62..dc74c608 100644 --- a/libvirt/domain_def.go +++ b/libvirt/domain_def.go @@ -1,9 +1,11 @@ package libvirt import ( + "os" + + "github.com/hashicorp/terraform/helper/schema" libvirt "github.com/libvirt/libvirt-go" libvirtxml "github.com/libvirt/libvirt-go-xml" - "os" ) func newFilesystemDef() libvirtxml.DomainFilesystem { @@ -20,9 +22,7 @@ func newDomainDef() libvirtxml.Domain { domainDef := libvirtxml.Domain{ OS: &libvirtxml.DomainOS{ Type: &libvirtxml.DomainOSType{ - Type: "hvm", - Arch: "x86_64", - Machine: "pc", + Type: "hvm", }, }, Memory: &libvirtxml.DomainMemory{ @@ -75,8 +75,19 @@ func newDomainDef() libvirtxml.Domain { return domainDef } -func newDomainDefForConnection(virConn *libvirt.Connect) (libvirtxml.Domain, error) { +func newDomainDefForConnection(virConn *libvirt.Connect, rd *schema.ResourceData) (libvirtxml.Domain, error) { d := newDomainDef() + + if arch, ok := rd.GetOk("arch"); ok { + d.OS.Type.Arch = arch.(string) + } else { + arch, err := getHostArchitecture(virConn) + if err != nil { + return d, err + } + d.OS.Type.Arch = arch + } + caps, err := getHostCapabilities(virConn) if err != nil { return d, err @@ -86,7 +97,17 @@ func newDomainDefForConnection(virConn *libvirt.Connect) (libvirtxml.Domain, err return d, err } - d.Devices.Emulator = guest.Arch.Emulator + if emulator, ok := rd.GetOk("emulator"); ok { + d.Devices.Emulator = emulator.(string) + } else { + d.Devices.Emulator = guest.Arch.Emulator + } + + if machine, ok := rd.GetOk("machine"); ok { + d.OS.Type.Machine = machine.(string) + } else if len(guest.Arch.Machines) > 0 { + d.OS.Type.Machine = guest.Arch.Machines[0].Name + } canonicalmachine, err := getCanonicalMachineName(caps, d.OS.Type.Arch, d.OS.Type.Type, d.OS.Type.Machine) if err != nil { |