summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDuncan Mac-Vicar P <dmacvicar@suse.de>2016-05-06 00:09:55 +0200
committerDuncan Mac-Vicar P <dmacvicar@suse.de>2016-05-06 00:09:55 +0200
commit2fcab49b25f4eac97b836fda8380465047c6d5e3 (patch)
tree511ee2049db8497ab3782e54ee2d672d01ddef34
parent1fc7609dd72655c42017d0b8e3846d392ddd18ed (diff)
downloadterraform-provider-libvirt-2fcab49b25f4eac97b836fda8380465047c6d5e3.tar
terraform-provider-libvirt-2fcab49b25f4eac97b836fda8380465047c6d5e3.tar.gz
use different names for each disk. closes #14
-rw-r--r--libvirt/disk_def.go2
-rw-r--r--libvirt/resource_libvirt_domain.go1
-rw-r--r--libvirt/utils.go21
-rw-r--r--libvirt/utils_test.go18
4 files changed, 40 insertions, 2 deletions
diff --git a/libvirt/disk_def.go b/libvirt/disk_def.go
index 41e8d5f2..88a9f76a 100644
--- a/libvirt/disk_def.go
+++ b/libvirt/disk_def.go
@@ -37,8 +37,6 @@ func newDefDisk() defDisk {
disk.Type = "volume"
disk.Device = "disk"
disk.Format.Type = "qcow2"
-
- disk.Target.Dev = "sda"
disk.Target.Bus = "virtio"
return disk
diff --git a/libvirt/resource_libvirt_domain.go b/libvirt/resource_libvirt_domain.go
index 8752a574..7d26e1b9 100644
--- a/libvirt/resource_libvirt_domain.go
+++ b/libvirt/resource_libvirt_domain.go
@@ -65,6 +65,7 @@ func resourceLibvirtDomainCreate(d *schema.ResourceData, meta interface{}) error
for i := 0; i < disksCount; i++ {
prefix := fmt.Sprintf("disk.%d", i)
disk := newDefDisk()
+ disk.Target.Dev = fmt.Sprintf("sd%s", DiskLetterForIndex(i))
volumeKey := d.Get(prefix + ".volume_id").(string)
diskVolume, err := virConn.LookupStorageVolByKey(volumeKey)
diff --git a/libvirt/utils.go b/libvirt/utils.go
new file mode 100644
index 00000000..335003a9
--- /dev/null
+++ b/libvirt/utils.go
@@ -0,0 +1,21 @@
+package libvirt
+
+import (
+ "fmt"
+)
+
+var diskLetters []rune = []rune("abcdefghijklmnopqrstuvwxyz")
+
+func DiskLetterForIndex(i int) string {
+
+ q := i / len(diskLetters)
+ r := i % len(diskLetters)
+ letter := diskLetters[r]
+
+ if q == 0 {
+ return fmt.Sprintf("%c", letter)
+ }
+
+ return fmt.Sprintf("%s%c", DiskLetterForIndex(q - 1), letter)
+}
+
diff --git a/libvirt/utils_test.go b/libvirt/utils_test.go
new file mode 100644
index 00000000..6e945fac
--- /dev/null
+++ b/libvirt/utils_test.go
@@ -0,0 +1,18 @@
+package libvirt
+
+import (
+ "testing"
+)
+
+func TestDiskLetterForIndex(t *testing.T) {
+
+ diskNumbers := []int{0, 1, 2, 3, 4, 16, 24, 25, 26, 30, 300}
+ names := []string{"a", "b", "c", "d", "e", "q", "y", "z", "aa", "ae", "ko"}
+
+ for i, diskNumber := range(diskNumbers) {
+ ret := DiskLetterForIndex(diskNumber)
+ if ret != names[i] {
+ t.Errorf("Expected %s, got %s for disk %d", names[i], ret, diskNumber)
+ }
+ }
+}