Skip to content

Commit 4fdfe1c

Browse files
drzero42rosbo
authored andcommitted
Container cluster importable (hashicorp#391)
1 parent ec66a47 commit 4fdfe1c

4 files changed

+65
-5
lines changed
+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package google
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
7+
"github.com/hashicorp/terraform/helper/acctest"
8+
"github.com/hashicorp/terraform/helper/resource"
9+
)
10+
11+
func TestAccGoogleContainerCluster_import(t *testing.T) {
12+
resourceName := "google_container_cluster.primary"
13+
name := fmt.Sprintf("tf-cluster-test-%s", acctest.RandString(10))
14+
conf := testAccContainerCluster_basic(name)
15+
resource.Test(t, resource.TestCase{
16+
PreCheck: func() { testAccPreCheck(t) },
17+
Providers: testAccProviders,
18+
CheckDestroy: testAccCheckContainerClusterDestroy,
19+
Steps: []resource.TestStep{
20+
resource.TestStep{
21+
Config: conf,
22+
},
23+
24+
resource.TestStep{
25+
ResourceName: resourceName,
26+
ImportStateIdPrefix: "us-central1-a/",
27+
ImportState: true,
28+
ImportStateVerify: true,
29+
},
30+
},
31+
})
32+
}

google/resource_container_cluster.go

+19-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"log"
66
"net"
77
"regexp"
8+
"strings"
89
"time"
910

1011
"github.com/hashicorp/terraform/helper/resource"
@@ -33,6 +34,10 @@ func resourceContainerCluster() *schema.Resource {
3334
SchemaVersion: 1,
3435
MigrateState: resourceContainerClusterMigrateState,
3536

37+
Importer: &schema.ResourceImporter{
38+
State: resourceContainerClusterStateImporter,
39+
},
40+
3641
Schema: map[string]*schema.Schema{
3742
"master_auth": {
3843
Type: schema.TypeList,
@@ -492,7 +497,7 @@ func resourceContainerClusterRead(d *schema.ResourceData, meta interface{}) erro
492497
d.Set("enable_legacy_abac", cluster.LegacyAbac.Enabled)
493498
d.Set("logging_service", cluster.LoggingService)
494499
d.Set("monitoring_service", cluster.MonitoringService)
495-
d.Set("network", d.Get("network").(string))
500+
d.Set("network", cluster.Network)
496501
d.Set("subnetwork", cluster.Subnetwork)
497502
d.Set("node_config", flattenNodeConfig(cluster.NodeConfig))
498503
nps, err := flattenClusterNodePools(d, config, cluster.NodePools)
@@ -779,3 +784,16 @@ func generateNodePoolName(prefix string, d *schema.ResourceData) (string, error)
779784
return resource.UniqueId(), nil
780785
}
781786
}
787+
788+
func resourceContainerClusterStateImporter(d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) {
789+
parts := strings.Split(d.Id(), "/")
790+
if len(parts) != 2 {
791+
return nil, fmt.Errorf("Invalid container cluster specifier. Expecting {zone}/{name}")
792+
}
793+
794+
d.Set("zone", parts[0])
795+
d.Set("name", parts[1])
796+
d.SetId(parts[1])
797+
798+
return []*schema.ResourceData{d}, nil
799+
}

google/resource_container_cluster_test.go

+6-4
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ func TestAccContainerCluster_basic(t *testing.T) {
2323
CheckDestroy: testAccCheckContainerClusterDestroy,
2424
Steps: []resource.TestStep{
2525
{
26-
Config: testAccContainerCluster_basic,
26+
Config: testAccContainerCluster_basic(fmt.Sprintf("cluster-test-%s", acctest.RandString(10))),
2727
Check: resource.ComposeTestCheckFunc(
2828
testAccCheckContainerCluster(
2929
"google_container_cluster.primary"),
@@ -623,12 +623,14 @@ func matchError(attr, tf interface{}, gcp interface{}) string {
623623
return fmt.Sprintf("Cluster has mismatched %s.\nTF State: %+v\nGCP State: %+v", attr, tf, gcp)
624624
}
625625

626-
var testAccContainerCluster_basic = fmt.Sprintf(`
626+
func testAccContainerCluster_basic(name string) string {
627+
return fmt.Sprintf(`
627628
resource "google_container_cluster" "primary" {
628-
name = "cluster-test-%s"
629+
name = "%s"
629630
zone = "us-central1-a"
630631
initial_node_count = 3
631-
}`, acctest.RandString(10))
632+
}`, name)
633+
}
632634

633635
var testAccContainerCluster_withTimeout = fmt.Sprintf(`
634636
resource "google_container_cluster" "primary" {

website/docs/r/container_cluster.html.markdown

+8
Original file line numberDiff line numberDiff line change
@@ -216,3 +216,11 @@ exported:
216216
- `create` - (Default `30 minutes`) Used for clusters
217217
- `update` - (Default `10 minutes`) Used for updates to clusters
218218
- `delete` - (Default `10 minutes`) Used for destroying clusters.
219+
220+
## Import
221+
222+
Container clusters can be imported using the `zone`, and `name`, e.g.
223+
224+
```
225+
$ terraform import google_container_cluster.mycluster us-east1-a/my-cluster
226+
```

0 commit comments

Comments
 (0)