Skip to content

Commit

Permalink
Standardize google_compute_instance import ID
Browse files Browse the repository at this point in the history
This patch changes the import ID of google_compute_instance to have a
format that is more consistent with other resources like
google_compute_subnetwork while still supporting the previously
supported import ID of {{project}}/{{zone}}/{{name}} in order to have
backwards compatibility.
  • Loading branch information
jcanseco committed Apr 1, 2020
1 parent cbe367e commit 8309830
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 11 deletions.
22 changes: 13 additions & 9 deletions google/resource_compute_instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -1773,16 +1773,20 @@ func resourceComputeInstanceDelete(d *schema.ResourceData, meta interface{}) err
}

func resourceComputeInstanceImportState(d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) {
parts := strings.Split(d.Id(), "/")

if len(parts) != 3 {
return nil, fmt.Errorf("Invalid import id %q. Expecting {project}/{zone}/{instance_name}", d.Id())
config := meta.(*Config)
if err := parseImportId([]string{
"projects/(?P<project>[^/]+)/zones/(?P<zone>[^/]+)/instances/(?P<name>[^/]+)",
"(?P<project>[^/]+)/(?P<zone>[^/]+)/(?P<name>[^/]+)",
"(?P<name>[^/]+)",
}, d, config); err != nil {
return nil, err
}

d.Set("project", parts[0])
d.Set("zone", parts[1])
d.Set("name", parts[2])
d.SetId(fmt.Sprintf("projects/%s/zones/%s/instances/%s", parts[0], parts[1], parts[2]))
// Replace import id for the resource id
id, err := replaceVars(d, config, "{{project}}/{{zone}}/{{name}}")
if err != nil {
return nil, fmt.Errorf("Error constructing id: %s", err)
}
d.SetId(id)

return []*schema.ResourceData{d}, nil
}
Expand Down
6 changes: 4 additions & 2 deletions website/docs/r/compute_instance.html.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -394,10 +394,12 @@ This resource provides the following
-> **Note:** The `desired_status` field will not be set on import. If you have it set, Terraform will update the field on the next `terraform apply`, bringing your instance to the desired status.


Instances can be imported using the `project`, `zone` and `name`, e.g.
Instances can be imported using any of these accepted formats:

```
$ terraform import google_compute_instance.default gcp-project/us-central1-a/test
$ terraform import google_compute_instance.default projects/{{project}}/zones/{{zone}}/instances/{{name}}
$ terraform import google_compute_instance.default {{project}}/{{zone}}/{{name}}
$ terraform import google_compute_instance.default {{name}}
```

[custom-vm-types]: https://cloud.google.com/dataproc/docs/concepts/compute/custom-machine-types
Expand Down

0 comments on commit 8309830

Please sign in to comment.