summaryrefslogtreecommitdiff
path: root/libvirt/resource_libvirt_domain.go
diff options
context:
space:
mode:
Diffstat (limited to 'libvirt/resource_libvirt_domain.go')
-rw-r--r--libvirt/resource_libvirt_domain.go33
1 files changed, 29 insertions, 4 deletions
diff --git a/libvirt/resource_libvirt_domain.go b/libvirt/resource_libvirt_domain.go
index ffbdc40b..616f919b 100644
--- a/libvirt/resource_libvirt_domain.go
+++ b/libvirt/resource_libvirt_domain.go
@@ -450,6 +450,24 @@ func resourceLibvirtDomainCreate(d *schema.ResourceData, meta interface{}) error
if !strings.HasSuffix(url.Path, ".qcow2") {
disk.Driver.Type = "raw"
}
+ } else if _, ok := diskMap["file"].(string); ok {
+ // support for local disks, e.g. CDs
+ disk.Type = "file"
+ disk.Source = &libvirtxml.DomainDiskSource{
+ File: diskMap["file"].(string),
+ }
+
+ if strings.HasSuffix(diskMap["file"].(string), ".iso") {
+ disk.Device = "cdrom"
+ disk.Target = &libvirtxml.DomainDiskTarget{
+ Dev: "hda",
+ Bus: "ide",
+ }
+ disk.Driver = &libvirtxml.DomainDiskDriver{
+ Name: "qemu",
+ Type: "raw",
+ }
+ }
}
disks = append(disks, disk)
@@ -899,7 +917,10 @@ func resourceLibvirtDomainRead(d *schema.ResourceData, meta interface{}) error {
// Emulator is the same as the default don't set it in domainDef
// or it will show as changed
d.Set("emulator", domainDef.Devices.Emulator)
- var disks []map[string]interface{}
+ var (
+ disks []map[string]interface{}
+ disk map[string]interface{}
+ )
for _, diskDef := range domainDef.Devices.Disks {
// network drives do not have a volume associated
if diskDef.Type == "network" {
@@ -914,10 +935,14 @@ func resourceLibvirtDomainRead(d *schema.ResourceData, meta interface{}) error {
if err != nil {
return err
}
- disk := map[string]interface{}{
+ disk = map[string]interface{}{
"url": url.String(),
}
disks = append(disks, disk)
+ } else if diskDef.Device == "cdrom" {
+ disk = map[string]interface{}{
+ "file": diskDef.Source.File,
+ }
} else {
var virVol *libvirt.StorageVol
if len(diskDef.Source.File) > 0 {
@@ -942,11 +967,11 @@ func resourceLibvirtDomainRead(d *schema.ResourceData, meta interface{}) error {
return fmt.Errorf("Error retrieving volume for disk: %s", err)
}
- disk := map[string]interface{}{
+ disk = map[string]interface{}{
"volume_id": virVolKey,
}
- disks = append(disks, disk)
}
+ disks = append(disks, disk)
}
d.Set("disks", disks)
var filesystems []map[string]interface{}