summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libvirt/cloudinit_def.go18
-rw-r--r--libvirt/resource_cloud_init.go7
2 files changed, 21 insertions, 4 deletions
diff --git a/libvirt/cloudinit_def.go b/libvirt/cloudinit_def.go
index ea7c0dbe..7ff16288 100644
--- a/libvirt/cloudinit_def.go
+++ b/libvirt/cloudinit_def.go
@@ -29,7 +29,8 @@ type defCloudInit struct {
LocalHostname string `yaml:"local-hostname,omitempty"`
InstanceID string `yaml:"instance-id"`
}
- UserData struct {
+ UserDataRaw string `yaml:"user_data"`
+ UserData struct {
SSHAuthorizedKeys []string `yaml:"ssh_authorized_keys"`
}
}
@@ -182,11 +183,20 @@ func (ci *defCloudInit) createFiles() (string, error) {
}
// Create files required by ISO file
- ud, err := yaml.Marshal(&ci.UserData)
- if err != nil {
+ userdata := ""
+ if len(ci.UserDataRaw) > 0 {
+ userdata = ci.UserDataRaw
+ } else {
+ userdata = "#cloud-config\n"
+ }
+
+ // append the extra user data flags
+ if userdata_extra, err := yaml.Marshal(&ci.UserData); err != nil {
return "", fmt.Errorf("Error dumping cloudinit's user data: %s", err)
+ } else {
+ userdata = fmt.Sprintf("%s\n%s", userdata, string(userdata_extra))
}
- userdata := fmt.Sprintf("#cloud-config\n%s", string(ud))
+
if err = ioutil.WriteFile(
filepath.Join(tmpDir, USERDATA),
[]byte(userdata),
diff --git a/libvirt/resource_cloud_init.go b/libvirt/resource_cloud_init.go
index f9b7be57..b6a6851f 100644
--- a/libvirt/resource_cloud_init.go
+++ b/libvirt/resource_cloud_init.go
@@ -29,6 +29,11 @@ func resourceCloudInit() *schema.Resource {
Optional: true,
ForceNew: true,
},
+ "user_data": &schema.Schema{
+ Type: schema.TypeString,
+ Optional: true,
+ ForceNew: true,
+ },
"ssh_authorized_key": &schema.Schema{
Type: schema.TypeString,
Optional: true,
@@ -47,6 +52,7 @@ func resourceCloudInitCreate(d *schema.ResourceData, meta interface{}) error {
cloudInit := newCloudInitDef()
cloudInit.Metadata.LocalHostname = d.Get("local_hostname").(string)
+ cloudInit.UserDataRaw = d.Get("user_data").(string)
if _, ok := d.GetOk("ssh_authorized_key"); ok {
sshKey := d.Get("ssh_authorized_key").(string)
@@ -86,6 +92,7 @@ func resourceCloudInitRead(d *schema.ResourceData, meta interface{}) error {
d.Set("pool", ci.PoolName)
d.Set("name", ci.Name)
d.Set("local_hostname", ci.Metadata.LocalHostname)
+ d.Set("user_data", ci.UserDataRaw)
if err != nil {
return fmt.Errorf("Error while retrieving remote ISO: %s", err)