summaryrefslogtreecommitdiff
path: root/libvirt/resource_libvirt_domain.go
diff options
context:
space:
mode:
Diffstat (limited to 'libvirt/resource_libvirt_domain.go')
-rw-r--r--libvirt/resource_libvirt_domain.go46
1 files changed, 46 insertions, 0 deletions
diff --git a/libvirt/resource_libvirt_domain.go b/libvirt/resource_libvirt_domain.go
index a3b16792..b5d0fb6d 100644
--- a/libvirt/resource_libvirt_domain.go
+++ b/libvirt/resource_libvirt_domain.go
@@ -9,6 +9,7 @@ import (
"net"
"net/url"
"os"
+ "sort"
"strconv"
"strings"
"time"
@@ -170,6 +171,27 @@ func resourceLibvirtDomain() *schema.Resource {
Default: "/usr/bin/qemu-system-x86_64",
Optional: true,
},
+ "kernel": {
+ Type: schema.TypeString,
+ Required: false,
+ Optional: true,
+ ForceNew: false,
+ },
+ "initrd": {
+ Type: schema.TypeString,
+ Required: false,
+ Optional: true,
+ ForceNew: false,
+ },
+ "cmdline": {
+ Type: schema.TypeList,
+ Optional: true,
+ Required: false,
+ ForceNew: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeMap,
+ },
+ },
},
}
}
@@ -267,6 +289,22 @@ 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)
+ }
+
+ var cmdlineArgs []string
+ for i := 0; i < d.Get("cmdline.#").(int); i++ {
+ for k, v := range d.Get(fmt.Sprintf("cmdline.%d", i)).(map[string]interface{}) {
+ cmdlineArgs = append(cmdlineArgs, fmt.Sprintf("%s=%v", k, v))
+ }
+ }
+ sort.Strings(cmdlineArgs)
+ domainDef.OS.KernelArgs = strings.Join(cmdlineArgs, " ")
+
if cpu, ok := d.GetOk("cpu"); ok {
cpuMap := cpu.(map[string]interface{})
if cpuMode, ok := cpuMap["mode"]; ok {
@@ -863,6 +901,14 @@ func resourceLibvirtDomainRead(d *schema.ResourceData, meta interface{}) error {
d.Set("autostart", autostart)
d.Set("arch", domainDef.OS.Type.Arch)
+ cmdLines, err := splitKernelCmdLine(domainDef.OS.KernelArgs)
+ if err != nil {
+ return err
+ }
+ d.Set("cmdline", cmdLines)
+ d.Set("kernel", domainDef.OS.Kernel)
+ d.Set("initrd", domainDef.OS.Initrd)
+
caps, err := getHostCapabilities(virConn)
if err != nil {
return err