From 9be42d2996fd6acd34b1bda8a4245d3aa7544135 Mon Sep 17 00:00:00 2001 From: Thomas Hipp Date: Fri, 1 Dec 2017 13:29:00 +0100 Subject: support local cdroms Local cdroms can now be added directly to the domain. See the following example: ```hcl resource "libvirt_domain" "test-domain" { name = "test" disk { file = "path/to/file.iso" } } ``` Furthermore, a small Tiny Core Linux (TCL) ISO image has been added to the testdata. This can be used for testing purposes. Signed-off-by: Thomas Hipp --- libvirt/resource_libvirt_domain.go | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) (limited to 'libvirt/resource_libvirt_domain.go') diff --git a/libvirt/resource_libvirt_domain.go b/libvirt/resource_libvirt_domain.go index 95a7b7fe..95ac6c52 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{} -- cgit v1.2.3