summaryrefslogtreecommitdiff
path: root/libvirt/resource_libvirt_domain.go
diff options
context:
space:
mode:
authorThomas Hipp <thipp@suse.de>2017-12-01 13:29:00 +0100
committerThomas Hipp <thipp@suse.de>2017-12-01 15:23:31 +0100
commit9be42d2996fd6acd34b1bda8a4245d3aa7544135 (patch)
tree182fc4aa0093693c723f967fd68748e3bf0c302b /libvirt/resource_libvirt_domain.go
parent380076c1943ebd10c5e5f54ad4ac751a736c5c1f (diff)
downloadterraform-provider-libvirt-9be42d2996fd6acd34b1bda8a4245d3aa7544135.tar
terraform-provider-libvirt-9be42d2996fd6acd34b1bda8a4245d3aa7544135.tar.gz
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 <thipp@suse.de>
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 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{}