aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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
}