aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDuncan Mac-Vicar P <dmacvicar@suse.de>2016-03-11 22:49:42 +0100
committerDuncan Mac-Vicar P <dmacvicar@suse.de>2016-03-11 22:49:42 +0100
commitf4cfd935e5a24b011ac8de9abe44ffabd52313f7 (patch)
tree9976817431b455b385a768699a984296170bb238
parentd98d2779a5470832629436168afe7475c4aa7ad6 (diff)
downloadterraform-provider-libvirt-f4cfd935e5a24b011ac8de9abe44ffabd52313f7.tar
terraform-provider-libvirt-f4cfd935e5a24b011ac8de9abe44ffabd52313f7.tar.gz
implement resourceLibvirtDomainRead for real
-rw-r--r--libvirt/resource_libvirt_domain.go40
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
}