|
|
|
|
@ -275,6 +275,24 @@ func resourceComputeInstanceV2() *schema.Resource {
|
|
|
|
|
},
|
|
|
|
|
Set: resourceComputeSchedulerHintsHash,
|
|
|
|
|
},
|
|
|
|
|
"personality": &schema.Schema{
|
|
|
|
|
Type: schema.TypeSet,
|
|
|
|
|
Optional: true,
|
|
|
|
|
ForceNew: true,
|
|
|
|
|
Elem: &schema.Resource{
|
|
|
|
|
Schema: map[string]*schema.Schema{
|
|
|
|
|
"file": &schema.Schema{
|
|
|
|
|
Type: schema.TypeString,
|
|
|
|
|
Required: true,
|
|
|
|
|
},
|
|
|
|
|
"content": &schema.Schema{
|
|
|
|
|
Type: schema.TypeString,
|
|
|
|
|
Required: true,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
Set: resourceComputeInstancePersonalityHash,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@ -334,6 +352,7 @@ func resourceComputeInstanceV2Create(d *schema.ResourceData, meta interface{}) e
|
|
|
|
|
ConfigDrive: d.Get("config_drive").(bool),
|
|
|
|
|
AdminPass: d.Get("admin_pass").(string),
|
|
|
|
|
UserData: []byte(d.Get("user_data").(string)),
|
|
|
|
|
Personality: resourceInstancePersonalityV2(d),
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if keyName, ok := d.Get("key_pair").(string); ok && keyName != "" {
|
|
|
|
|
@ -1237,3 +1256,34 @@ func checkVolumeConfig(d *schema.ResourceData) error {
|
|
|
|
|
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func resourceComputeInstancePersonalityHash(v interface{}) int {
|
|
|
|
|
var buf bytes.Buffer
|
|
|
|
|
m := v.(map[string]interface{})
|
|
|
|
|
buf.WriteString(fmt.Sprintf("%s-", m["file"].(string)))
|
|
|
|
|
|
|
|
|
|
return hashcode.String(buf.String())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func resourceInstancePersonalityV2(d *schema.ResourceData) servers.Personality {
|
|
|
|
|
var personalities servers.Personality
|
|
|
|
|
|
|
|
|
|
if v := d.Get("personality"); v != nil {
|
|
|
|
|
personalityList := v.(*schema.Set).List()
|
|
|
|
|
if len(personalityList) > 0 {
|
|
|
|
|
for _, p := range personalityList {
|
|
|
|
|
rawPersonality := p.(map[string]interface{})
|
|
|
|
|
file := servers.File{
|
|
|
|
|
Path: rawPersonality["file"].(string),
|
|
|
|
|
Contents: []byte(rawPersonality["content"].(string)),
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
log.Printf("[DEBUG] OpenStack Compute Instance Personality: %+v", file)
|
|
|
|
|
|
|
|
|
|
personalities = append(personalities, &file)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return personalities
|
|
|
|
|
}
|
|
|
|
|
|