From 77220a530297029735eaf7deb73100d59b95e74e Mon Sep 17 00:00:00 2001 From: Rodion Gyrbu Date: Mon, 24 May 2021 18:09:58 +0300 Subject: [PATCH 1/4] Add possibility to import CCE Node Pool --- ...ource_opentelekomcloud_cce_node_pool_v3.go | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/opentelekomcloud/services/cce/resource_opentelekomcloud_cce_node_pool_v3.go b/opentelekomcloud/services/cce/resource_opentelekomcloud_cce_node_pool_v3.go index af8d3f9ce..511314151 100644 --- a/opentelekomcloud/services/cce/resource_opentelekomcloud_cce_node_pool_v3.go +++ b/opentelekomcloud/services/cce/resource_opentelekomcloud_cce_node_pool_v3.go @@ -47,6 +47,10 @@ func ResourceCCENodePoolV3() *schema.Resource { Default: schema.DefaultTimeout(15 * time.Minute), }, + Importer: &schema.ResourceImporter{ + State: resourceCCENodePoolV3Import, + }, + CustomizeDiff: common.MultipleCustomizeDiffs( common.ValidateVolumeType("root_volume.*.volumetype"), common.ValidateVolumeType("data_volumes.*.volumetype"), @@ -538,3 +542,27 @@ func waitForCceNodePoolDelete(cceClient *golangsdk.ServiceClient, clusterId, nod return r, r.Status.Phase, nil } } + +func resourceCCENodePoolV3Import(d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) { + parts := strings.SplitN(d.Id(), "/", 2) + if len(parts) != 2 { + err := fmt.Errorf("invalid format specified for CCE NodePool. Format must be /") + return nil, err + } + clusterID := parts[0] + nodePool := parts[1] + + d.SetId(nodePool) + if err := d.Set("cluster_id", clusterID); err != nil { + return nil, err + } + + results := make([]*schema.ResourceData, 1) + if err := resourceCCENodePoolV3Read(d, meta); err != nil { + return nil, fmt.Errorf("error reading opentelekomcloud_cce_node_pool_v3 %s: %w", d.Id(), err) + } + + results[0] = d + + return results, nil +} From a7b3d7171be6a64970e075c2a779c1c9c16400fc Mon Sep 17 00:00:00 2001 From: Rodion Gyrbu Date: Mon, 24 May 2021 18:10:16 +0300 Subject: [PATCH 2/4] Update doc --- docs/resources/cce_node_pool_v3.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/resources/cce_node_pool_v3.md b/docs/resources/cce_node_pool_v3.md index 331ff45de..2df6ce54e 100644 --- a/docs/resources/cce_node_pool_v3.md +++ b/docs/resources/cce_node_pool_v3.md @@ -120,3 +120,11 @@ This resource provides the following timeouts configuration options: - `create` - Default is 30 minutes. - `update` - Default is 30 minutes. - `delete` - Default is 30 minutes. + +## Import + +CCE NodePool can be imported using the `cluster_id/node_pool_id`, e.g. + +```sh +terraform import opentelekomcloud_cce_node_pool_v3.pool_1 14a80bc7-c12c-4fe0-a38a-cb77eeac9bd6/89c60255-9bd6-460c-822a-e2b959ede9d2 +``` From ffccc7a31d561423eebb16e67566aa0a987cd10b Mon Sep 17 00:00:00 2001 From: Rodion Gyrbu Date: Mon, 24 May 2021 18:10:29 +0300 Subject: [PATCH 3/4] Add import test --- ..._opentelekomcloud_cce_node_pool_v3_test.go | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 opentelekomcloud/acceptance/cce/import_opentelekomcloud_cce_node_pool_v3_test.go diff --git a/opentelekomcloud/acceptance/cce/import_opentelekomcloud_cce_node_pool_v3_test.go b/opentelekomcloud/acceptance/cce/import_opentelekomcloud_cce_node_pool_v3_test.go new file mode 100644 index 000000000..583063672 --- /dev/null +++ b/opentelekomcloud/acceptance/cce/import_opentelekomcloud_cce_node_pool_v3_test.go @@ -0,0 +1,50 @@ +package acceptance + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/terraform" + "github.com/opentelekomcloud/terraform-provider-opentelekomcloud/opentelekomcloud/acceptance/common" +) + +func TestAccCCENodePoolV3ImportBasic(t *testing.T) { + resourceName := "opentelekomcloud_cce_node_pool_v3.node_pool" + + resource.Test(t, resource.TestCase{ + PreCheck: func() { common.TestAccPreCheck(t) }, + Providers: common.TestAccProviders, + CheckDestroy: testAccCheckCCENodePoolV3Destroy, + Steps: []resource.TestStep{ + { + Config: testAccCCENodePoolV3_basic, + }, + + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateIdFunc: testAccCCENodePoolV3ImportStateIdFunc(), + }, + }, + }) +} + +func testAccCCENodePoolV3ImportStateIdFunc() resource.ImportStateIdFunc { + return func(s *terraform.State) (string, error) { + var clusterID string + var nodePoolID string + for _, rs := range s.RootModule().Resources { + if rs.Type == "opentelekomcloud_cce_cluster_v3" { + clusterID = rs.Primary.ID + } else if rs.Type == "opentelekomcloud_cce_node_pool_v3" { + nodePoolID = rs.Primary.ID + } + } + if clusterID == "" || nodePoolID == "" { + return "", fmt.Errorf("resource not found: %s/%s", clusterID, nodePoolID) + } + return fmt.Sprintf("%s/%s", clusterID, nodePoolID), nil + } +} From 3caf18672d39662ee5e8b01169178bf89cb875a5 Mon Sep 17 00:00:00 2001 From: Rodion Gyrbu Date: Tue, 25 May 2021 14:25:22 +0300 Subject: [PATCH 4/4] Add `ImportStateVerifyIgnore` for import test --- .../cce/import_opentelekomcloud_cce_node_pool_v3_test.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/opentelekomcloud/acceptance/cce/import_opentelekomcloud_cce_node_pool_v3_test.go b/opentelekomcloud/acceptance/cce/import_opentelekomcloud_cce_node_pool_v3_test.go index 583063672..7d7752e20 100644 --- a/opentelekomcloud/acceptance/cce/import_opentelekomcloud_cce_node_pool_v3_test.go +++ b/opentelekomcloud/acceptance/cce/import_opentelekomcloud_cce_node_pool_v3_test.go @@ -26,6 +26,9 @@ func TestAccCCENodePoolV3ImportBasic(t *testing.T) { ImportState: true, ImportStateVerify: true, ImportStateIdFunc: testAccCCENodePoolV3ImportStateIdFunc(), + ImportStateVerifyIgnore: []string{ + "max_node_count", "min_node_count", "priority", "scale_down_cooldown_time", + }, }, }, })