mirror of
https://github.com/letic/terraform-provider-google.git
synced 2024-07-05 17:52:38 +00:00
Add ForceNew metadata_startup_script field
This commit is contained in:
parent
14ff9f2912
commit
a4037a0f61
|
@ -191,6 +191,12 @@ func resourceComputeInstance() *schema.Resource {
|
||||||
ForceNew: true,
|
ForceNew: true,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
"metadata_startup_script": &schema.Schema{
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
ForceNew: true,
|
||||||
|
},
|
||||||
|
|
||||||
"metadata": &schema.Schema{
|
"metadata": &schema.Schema{
|
||||||
Type: schema.TypeMap,
|
Type: schema.TypeMap,
|
||||||
Optional: true,
|
Optional: true,
|
||||||
|
@ -469,13 +475,18 @@ func resourceComputeInstanceCreate(d *schema.ResourceData, meta interface{}) err
|
||||||
serviceAccounts = append(serviceAccounts, serviceAccount)
|
serviceAccounts = append(serviceAccounts, serviceAccount)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
metadata, err := resourceInstanceMetadata(d)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Error creating metadata: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
// Create the instance information
|
// Create the instance information
|
||||||
instance := compute.Instance{
|
instance := compute.Instance{
|
||||||
CanIpForward: d.Get("can_ip_forward").(bool),
|
CanIpForward: d.Get("can_ip_forward").(bool),
|
||||||
Description: d.Get("description").(string),
|
Description: d.Get("description").(string),
|
||||||
Disks: disks,
|
Disks: disks,
|
||||||
MachineType: machineType.SelfLink,
|
MachineType: machineType.SelfLink,
|
||||||
Metadata: resourceInstanceMetadata(d),
|
Metadata: metadata,
|
||||||
Name: d.Get("name").(string),
|
Name: d.Get("name").(string),
|
||||||
NetworkInterfaces: networkInterfaces,
|
NetworkInterfaces: networkInterfaces,
|
||||||
Tags: resourceInstanceTags(d),
|
Tags: resourceInstanceTags(d),
|
||||||
|
@ -662,7 +673,10 @@ func resourceComputeInstanceUpdate(d *schema.ResourceData, meta interface{}) err
|
||||||
|
|
||||||
// If the Metadata has changed, then update that.
|
// If the Metadata has changed, then update that.
|
||||||
if d.HasChange("metadata") {
|
if d.HasChange("metadata") {
|
||||||
metadata := resourceInstanceMetadata(d)
|
metadata, err := resourceInstanceMetadata(d)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Error updating metadata: %s", err)
|
||||||
|
}
|
||||||
op, err := config.clientCompute.Instances.SetMetadata(
|
op, err := config.clientCompute.Instances.SetMetadata(
|
||||||
config.Project, zone, d.Id(), metadata).Do()
|
config.Project, zone, d.Id(), metadata).Do()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -781,9 +795,18 @@ func resourceComputeInstanceDelete(d *schema.ResourceData, meta interface{}) err
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func resourceInstanceMetadata(d *schema.ResourceData) *compute.Metadata {
|
func resourceInstanceMetadata(d *schema.ResourceData) (*compute.Metadata, error) {
|
||||||
m := &compute.Metadata{}
|
m := &compute.Metadata{}
|
||||||
if mdMap := d.Get("metadata").(map[string]interface{}); len(mdMap) > 0 {
|
mdMap := d.Get("metadata").(map[string]interface{})
|
||||||
|
_, mapScriptExists := mdMap["startup-script"]
|
||||||
|
dScript, dScriptExists := d.GetOk("metadata_startup_script")
|
||||||
|
if mapScriptExists && dScriptExists {
|
||||||
|
return nil, fmt.Errorf("Not allowed to have both metadata_startup_script and metadata.startup-script")
|
||||||
|
}
|
||||||
|
if dScriptExists {
|
||||||
|
mdMap["startup-script"] = dScript
|
||||||
|
}
|
||||||
|
if len(mdMap) > 0 {
|
||||||
m.Items = make([]*compute.MetadataItems, 0, len(mdMap))
|
m.Items = make([]*compute.MetadataItems, 0, len(mdMap))
|
||||||
for key, val := range mdMap {
|
for key, val := range mdMap {
|
||||||
m.Items = append(m.Items, &compute.MetadataItems{
|
m.Items = append(m.Items, &compute.MetadataItems{
|
||||||
|
@ -797,7 +820,7 @@ func resourceInstanceMetadata(d *schema.ResourceData) *compute.Metadata {
|
||||||
m.Fingerprint = d.Get("metadata_fingerprint").(string)
|
m.Fingerprint = d.Get("metadata_fingerprint").(string)
|
||||||
}
|
}
|
||||||
|
|
||||||
return m
|
return m, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func resourceInstanceTags(d *schema.ResourceData) *compute.Tags {
|
func resourceInstanceTags(d *schema.ResourceData) *compute.Tags {
|
||||||
|
|
|
@ -331,7 +331,11 @@ func resourceComputeInstanceTemplateCreate(d *schema.ResourceData, meta interfac
|
||||||
instanceProperties.Description = d.Get("instance_description").(string)
|
instanceProperties.Description = d.Get("instance_description").(string)
|
||||||
instanceProperties.MachineType = d.Get("machine_type").(string)
|
instanceProperties.MachineType = d.Get("machine_type").(string)
|
||||||
instanceProperties.Disks = buildDisks(d, meta)
|
instanceProperties.Disks = buildDisks(d, meta)
|
||||||
instanceProperties.Metadata = resourceInstanceMetadata(d)
|
metadata, err := resourceInstanceMetadata(d)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
instanceProperties.Metadata = metadata
|
||||||
err, networks := buildNetworks(d, meta)
|
err, networks := buildNetworks(d, meta)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
|
@ -476,10 +476,10 @@ resource "google_compute_instance" "foobar" {
|
||||||
|
|
||||||
metadata {
|
metadata {
|
||||||
foo = "bar"
|
foo = "bar"
|
||||||
}
|
|
||||||
metadata {
|
|
||||||
baz = "qux"
|
baz = "qux"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
metadata_startup_script = "echo Hello"
|
||||||
}`
|
}`
|
||||||
|
|
||||||
const testAccComputeInstance_basic2 = `
|
const testAccComputeInstance_basic2 = `
|
||||||
|
|
Loading…
Reference in New Issue
Block a user