summaryrefslogtreecommitdiff
path: root/libvirt/resource_libvirt_domain.go
diff options
context:
space:
mode:
authorThomas Hipp <thomashipp@gmail.com>2017-12-08 13:28:08 +0100
committerGitHub <noreply@github.com>2017-12-08 13:28:08 +0100
commit8aa37bc03ce12e487d8a4d1ba9df56355da235ea (patch)
tree733d794a54d7f1fc68a3942636a9e18c4e1537aa /libvirt/resource_libvirt_domain.go
parent79ad36eed30a9664b31709b599d984f365060190 (diff)
parent9be42d2996fd6acd34b1bda8a4245d3aa7544135 (diff)
downloadterraform-provider-libvirt-8aa37bc03ce12e487d8a4d1ba9df56355da235ea.tar
terraform-provider-libvirt-8aa37bc03ce12e487d8a4d1ba9df56355da235ea.tar.gz
Merge pull request #258 from monstermunchkin/support-cdroms
support local cdroms
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{}