diff options
-rw-r--r-- | libvirt/cloudinit_def.go | 18 | ||||
-rw-r--r-- | libvirt/resource_cloud_init.go | 7 |
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) |