diff options
author | Duncan Mac-Vicar P <dmacvicar@suse.de> | 2016-03-11 22:49:42 +0100 |
---|---|---|
committer | Duncan Mac-Vicar P <dmacvicar@suse.de> | 2016-03-11 22:49:42 +0100 |
commit | f4cfd935e5a24b011ac8de9abe44ffabd52313f7 (patch) | |
tree | 9976817431b455b385a768699a984296170bb238 | |
parent | d98d2779a5470832629436168afe7475c4aa7ad6 (diff) | |
download | terraform-provider-libvirt-f4cfd935e5a24b011ac8de9abe44ffabd52313f7.tar terraform-provider-libvirt-f4cfd935e5a24b011ac8de9abe44ffabd52313f7.tar.gz |
implement resourceLibvirtDomainRead for real
-rw-r--r-- | libvirt/resource_libvirt_domain.go | 40 |
1 files changed, 37 insertions, 3 deletions
diff --git a/libvirt/resource_libvirt_domain.go b/libvirt/resource_libvirt_domain.go index f8154168..d8b81e84 100644 --- a/libvirt/resource_libvirt_domain.go +++ b/libvirt/resource_libvirt_domain.go @@ -136,12 +136,46 @@ func resourceLibvirtDomainRead(d *schema.ResourceData, meta interface{}) error { return fmt.Errorf("Error retrieving libvirt domain: %s", err) } - name, err := domain.GetName() + xmlDesc, err := domain.GetXMLDesc(0) if err != nil { - return fmt.Errorf("Error retrieving libvirt domain name: %s", err) + return fmt.Errorf("Error retrieving libvirt domain XML description: %s", err) } - d.Set("name", name) + domainDef := newDomainDef() + err = xml.Unmarshal([]byte(xmlDesc), &domainDef) + if err != nil { + return fmt.Errorf("Error reading libvirt domain XML description: %s", err) + } + + d.Set("name", domainDef.Name) + d.Set("vpu", domainDef.VCpu) + d.Set("memory", domainDef.Memory) + + disks := make([]map[string]interface{}, 0) + for _, diskDef := range domainDef.Devices.Disks { + virPool, err := virConn.LookupStoragePoolByName(diskDef.Source.Pool) + if err != nil { + return fmt.Errorf("Error retrieving pool for disk: %s", err) + } + + virVol, err := virPool.LookupStorageVolByName(diskDef.Source.Volume) + if err != nil { + return fmt.Errorf("Error retrieving volume for disk: %s", err) + } + + virVolKey, err := virVol.GetKey() + if err != nil { + return fmt.Errorf("Error retrieving volume ke for disk: %s", err) + } + + + disk := map[string]interface{}{ + "volume_id": virVolKey, + } + disks = append(disks, disk) + } + + d.Set("disks", disks) return nil } |