summaryrefslogtreecommitdiff
path: root/libvirt
diff options
context:
space:
mode:
authorDuncan Mac-Vicar P <dmacvicar@suse.de>2017-11-16 18:05:01 +0100
committerDuncan Mac-Vicar P <dmacvicar@suse.de>2017-11-24 17:56:44 +0100
commit8e1bce8a4c28e69f4c84ae33bec7afd70aa7f7aa (patch)
tree3f36e19dbf57f2546459078eb6d850cddd80d29e /libvirt
parent8d80cf73c79c5c4bdd15dc28690bb06dfa364f1b (diff)
downloadterraform-provider-libvirt-8e1bce8a4c28e69f4c84ae33bec7afd70aa7f7aa.tar
terraform-provider-libvirt-8e1bce8a4c28e69f4c84ae33bec7afd70aa7f7aa.tar.gz
Add support for kernel/initrd/cmdline
Diffstat (limited to 'libvirt')
-rw-r--r--libvirt/resource_libvirt_domain.go39
-rw-r--r--libvirt/resource_libvirt_domain_test.go60
2 files changed, 99 insertions, 0 deletions
diff --git a/libvirt/resource_libvirt_domain.go b/libvirt/resource_libvirt_domain.go
index a3b16792..81cc2d70 100644
--- a/libvirt/resource_libvirt_domain.go
+++ b/libvirt/resource_libvirt_domain.go
@@ -170,6 +170,27 @@ func resourceLibvirtDomain() *schema.Resource {
Default: "/usr/bin/qemu-system-x86_64",
Optional: true,
},
+ "kernel": &schema.Schema{
+ Type: schema.TypeString,
+ Required: false,
+ Optional: true,
+ ForceNew: false,
+ },
+ "initrd": &schema.Schema{
+ Type: schema.TypeString,
+ Required: false,
+ Optional: true,
+ ForceNew: false,
+ },
+ "cmdline": &schema.Schema{
+ Type: schema.TypeList,
+ Optional: true,
+ Required: false,
+ ForceNew: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeMap,
+ },
+ },
},
}
}
@@ -267,6 +288,24 @@ func resourceLibvirtDomainCreate(d *schema.ResourceData, meta interface{}) error
}
}
+ if kernel, ok := d.GetOk("kernel"); ok {
+ domainDef.OS.Kernel = kernel.(string)
+ }
+ if initrd, ok := d.GetOk("initrd"); ok {
+ domainDef.OS.Initrd = initrd.(string)
+ }
+
+ cmdlinesCount := d.Get("cmdline.#").(int)
+ cmdlineArgs := make([]string, 0)
+ for i := 0; i < cmdlinesCount; i++ {
+ cmdlineKey := fmt.Sprintf("cmdline.%d", i)
+ cmdlineMap := d.Get(cmdlineKey).(map[string]interface{})
+ for k, v := range cmdlineMap {
+ cmdlineArgs = append(cmdlineArgs, fmt.Sprintf("%s=%v", k, v))
+ }
+ }
+ domainDef.OS.KernelArgs = strings.Join(cmdlineArgs, " ")
+
if cpu, ok := d.GetOk("cpu"); ok {
cpuMap := cpu.(map[string]interface{})
if cpuMode, ok := cpuMap["mode"]; ok {
diff --git a/libvirt/resource_libvirt_domain_test.go b/libvirt/resource_libvirt_domain_test.go
index 2c9f1b52..29e01095 100644
--- a/libvirt/resource_libvirt_domain_test.go
+++ b/libvirt/resource_libvirt_domain_test.go
@@ -235,6 +235,40 @@ func TestAccLibvirtDomainURLDisk(t *testing.T) {
}
+func TestAccLibvirtDomainKernelInitrdCmdline(t *testing.T) {
+ var domain libvirt.Domain
+
+ var config = fmt.Sprintf(`
+ resource "libvirt_domain" "acceptance-test-domain" {
+ name = "terraform-test-domain"
+ kernel = "/boot/vmlinuz"
+ initrd = "/boot/initrd"
+ cmdline {
+ foo = 1
+ bar = "bye"
+ }
+ cmdline {
+ foo = 2
+ }
+ }`)
+
+ resource.Test(t, resource.TestCase{
+ PreCheck: func() { testAccPreCheck(t) },
+ Providers: testAccProviders,
+ CheckDestroy: testAccCheckLibvirtDomainDestroy,
+ Steps: []resource.TestStep{
+ resource.TestStep{
+ Config: config,
+ Check: resource.ComposeTestCheckFunc(
+ testAccCheckLibvirtDomainExists("libvirt_domain.acceptance-test-domain", &domain),
+ testAccCheckLibvirtDomainKernelInitrdCmdline(&domain),
+ ),
+ },
+ },
+ })
+
+}
+
func TestAccLibvirtDomain_NetworkInterface(t *testing.T) {
var domain libvirt.Domain
@@ -658,6 +692,32 @@ func testAccCheckLibvirtURLDisk(u *url.URL, domain *libvirt.Domain) resource.Tes
}
}
+func testAccCheckLibvirtDomainKernelInitrdCmdline(domain *libvirt.Domain) resource.TestCheckFunc {
+ return func(s *terraform.State) error {
+ xmlDesc, err := domain.GetXMLDesc(0)
+ if err != nil {
+ return fmt.Errorf("Error retrieving libvirt domain XML description: %s", err)
+ }
+
+ domainDef := newDomainDef()
+ err = xml.Unmarshal([]byte(xmlDesc), &domainDef)
+ if err != nil {
+ return fmt.Errorf("Error reading libvirt domain XML description: %s", err)
+ }
+
+ if domainDef.OS.Kernel != "/boot/vmlinuz" {
+ return fmt.Errorf("Kernel is not set correctly")
+ }
+ if domainDef.OS.Initrd != "/boot/initrd" {
+ return fmt.Errorf("Initrd is not set correctly")
+ }
+ if domainDef.OS.KernelArgs != "bar=bye foo=1 foo=2" {
+ return fmt.Errorf("Kernel args not set correctly")
+ }
+ return nil
+ }
+}
+
func createNvramFile() (string, error) {
// size of an accepted, valid, nvram backing store
NVRAMDummyBuffer := make([]byte, 131072)