From 217b7c2352b19004c8117f2e11d81e4dff3b6047 Mon Sep 17 00:00:00 2001 From: anton-sidelnikov Date: Thu, 24 Nov 2022 09:28:56 +0100 Subject: [PATCH 1/4] init --- ...e_opentelekomcloud_dcs_instance_v1_test.go | 23 ++++++++++ ...source_opentelekomcloud_dcs_instance_v1.go | 45 ++++++++++++++++++- 2 files changed, 67 insertions(+), 1 deletion(-) diff --git a/opentelekomcloud/acceptance/dcs/resource_opentelekomcloud_dcs_instance_v1_test.go b/opentelekomcloud/acceptance/dcs/resource_opentelekomcloud_dcs_instance_v1_test.go index b5d3011c7..fbf19e3fc 100644 --- a/opentelekomcloud/acceptance/dcs/resource_opentelekomcloud_dcs_instance_v1_test.go +++ b/opentelekomcloud/acceptance/dcs/resource_opentelekomcloud_dcs_instance_v1_test.go @@ -186,6 +186,29 @@ func TestAccDcsInstancesV1_Whitelist(t *testing.T) { }) } +func TestAccDCSInstanceV1_importBasic(t *testing.T) { + var instanceName = fmt.Sprintf("dcs_instance_%s", acctest.RandString(5)) + resource.Test(t, resource.TestCase{ + PreCheck: func() { common.TestAccPreCheck(t) }, + ProviderFactories: common.TestAccProviderFactories, + CheckDestroy: testAccCheckDcsV1InstanceDestroy, + Steps: []resource.TestStep{ + { + Config: testAccDcsV1InstanceBasic(instanceName), + }, + + { + ResourceName: resourceInstanceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{ + "password", "configuration", + }, + }, + }, + }) +} + func testAccCheckDcsV1InstanceDestroy(s *terraform.State) error { config := common.TestAccProvider.Meta().(*cfg.Config) client, err := config.DcsV1Client(env.OS_REGION_NAME) diff --git a/opentelekomcloud/services/dcs/resource_opentelekomcloud_dcs_instance_v1.go b/opentelekomcloud/services/dcs/resource_opentelekomcloud_dcs_instance_v1.go index a74f51187..1e95d4840 100644 --- a/opentelekomcloud/services/dcs/resource_opentelekomcloud_dcs_instance_v1.go +++ b/opentelekomcloud/services/dcs/resource_opentelekomcloud_dcs_instance_v1.go @@ -31,7 +31,7 @@ func ResourceDcsInstanceV1() *schema.Resource { CustomizeDiff: validateEngine, Importer: &schema.ResourceImporter{ - StateContext: schema.ImportStatePassthroughContext, + StateContext: resourceDcsInstanceV1ImportState, }, Timeouts: &schema.ResourceTimeout{ @@ -729,3 +729,46 @@ func validateEngine(_ context.Context, d *schema.ResourceDiff, _ interface{}) er return mErr.ErrorOrNil() } + +func resourceDcsInstanceV1ImportState(ctx context.Context, d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) { + config := meta.(*cfg.Config) + client, err := config.DcsV1Client(config.GetRegion(d)) + if err != nil { + return nil, fmt.Errorf("error creating ComputeV2 client: %w", err) + } + + results := make([]*schema.ResourceData, 1) + if diagRead := resourceDcsInstancesV1Read(ctx, d, meta); diagRead.HasError() { + return nil, fmt.Errorf("error reading opentelekomcloud_dcs_instance_v1 %s: %s", d.Id(), diagRead[0].Summary) + } + instance, err := instances.Get(client, d.Id()).Extract() + if err != nil { + return nil, fmt.Errorf("unable to get instance %s: %s", d.Id(), err) + } + if err := d.Set("available_zones", instance.AvailableZones); err != nil { + return nil, fmt.Errorf("error setting available zones") + } + if err := d.Set("used_memory", instance.UsedMemory); err != nil { + return nil, fmt.Errorf("error setting used memory") + } + var backup []map[string]interface{} + backup_policy := make(map[string]interface{}) + backup_policy["backup_type"] = instance.InstanceBackupPolicy.BackupType + backup_policy["save_days"] = instance.InstanceBackupPolicy.SaveDays + backup_policy["begin_at"] = instance.InstanceBackupPolicy.PeriodicalBackupPlan.BeginAt + backup_policy["period_type"] = instance.InstanceBackupPolicy.PeriodicalBackupPlan.PeriodType + var backupAts []int + for _, at := range instance.InstanceBackupPolicy.PeriodicalBackupPlan.BackupAt { + backupAts = append(backupAts, at) + } + backup_policy["backup_at"] = backupAts + + backup = append(backup, backup_policy) + if err := d.Set("backup_policy", backup); err != nil { + return nil, fmt.Errorf("error setting backup policy") + } + + results[0] = d + + return results, nil +} From 93b4048048819b02bcf71b393fb86d3b35d19a23 Mon Sep 17 00:00:00 2001 From: anton-sidelnikov Date: Fri, 25 Nov 2022 14:46:39 +0100 Subject: [PATCH 2/4] dcs refactoring --- docs/resources/dcs_instance_v1.md | 4 - go.mod | 2 +- go.sum | 2 + ...e_opentelekomcloud_dcs_instance_v1_test.go | 16 +-- .../data_source_opentelekomcloud_dcs_az_v1.go | 7 +- ..._opentelekomcloud_dcs_maintainwindow_v1.go | 10 +- ..._source_opentelekomcloud_dcs_product_v1.go | 8 +- ...source_opentelekomcloud_dcs_instance_v1.go | 113 ++++++++++-------- 8 files changed, 86 insertions(+), 76 deletions(-) diff --git a/docs/resources/dcs_instance_v1.md b/docs/resources/dcs_instance_v1.md index f127401b1..5a4c95b6a 100644 --- a/docs/resources/dcs_instance_v1.md +++ b/docs/resources/dcs_instance_v1.md @@ -106,10 +106,6 @@ The following arguments are supported: For a DCS Redis instance in cluster mode, the cache capacity can be `64`, `128`, `256`, `512` GB. Changing this creates a new instance. -* `access_user` - (Optional) Username used for accessing a DCS instance after password - authentication. A username starts with a letter, consists of `1` to `64` characters, - and supports only letters, digits, and hyphens (-). Changing this creates a new instance. - * `password` - (Required) Indicates the password of an instance. An instance password must meet the following complexity requirements: Must be 8 to 32 characters long. Must contain at least 3 of the following character types: lowercase letters, uppercase diff --git a/go.mod b/go.mod index 1a3a69811..5e3c09a4f 100644 --- a/go.mod +++ b/go.mod @@ -14,7 +14,7 @@ require ( github.com/jinzhu/copier v0.3.5 github.com/keybase/go-crypto v0.0.0-20200123153347-de78d2cb44f4 github.com/mitchellh/go-homedir v1.1.0 - github.com/opentelekomcloud/gophertelekomcloud v0.5.25-0.20221116152509-1aaf58059b0c + github.com/opentelekomcloud/gophertelekomcloud v0.5.25 github.com/unknwon/com v1.0.1 golang.org/x/crypto v0.0.0-20220517005047-85d78b3ac167 golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9 diff --git a/go.sum b/go.sum index 1c868340a..1538687c0 100644 --- a/go.sum +++ b/go.sum @@ -209,6 +209,8 @@ github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/opentelekomcloud/gophertelekomcloud v0.5.25-0.20221116152509-1aaf58059b0c h1:qk3TTKMA3+GZ9kPwKEyOAWd9VPMRORpfo1gu5p35hE8= github.com/opentelekomcloud/gophertelekomcloud v0.5.25-0.20221116152509-1aaf58059b0c/go.mod h1:/QD0ZIzm3zMdE0iBSAP3+Z9eCViU2PgnQqp4KGrpR/M= +github.com/opentelekomcloud/gophertelekomcloud v0.5.25 h1:U5ERa9/AFSE/JTPNx5B8kemtIWPjQcM8BAowFyV89nM= +github.com/opentelekomcloud/gophertelekomcloud v0.5.25/go.mod h1:/QD0ZIzm3zMdE0iBSAP3+Z9eCViU2PgnQqp4KGrpR/M= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= diff --git a/opentelekomcloud/acceptance/dcs/resource_opentelekomcloud_dcs_instance_v1_test.go b/opentelekomcloud/acceptance/dcs/resource_opentelekomcloud_dcs_instance_v1_test.go index fbf19e3fc..159ee217f 100644 --- a/opentelekomcloud/acceptance/dcs/resource_opentelekomcloud_dcs_instance_v1_test.go +++ b/opentelekomcloud/acceptance/dcs/resource_opentelekomcloud_dcs_instance_v1_test.go @@ -8,7 +8,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" - "github.com/opentelekomcloud/gophertelekomcloud/openstack/dcs/v1/instances" + "github.com/opentelekomcloud/gophertelekomcloud/openstack/dcs/v1/lifecycle" "github.com/opentelekomcloud/terraform-provider-opentelekomcloud/opentelekomcloud/acceptance/common" "github.com/opentelekomcloud/terraform-provider-opentelekomcloud/opentelekomcloud/acceptance/env" @@ -18,7 +18,7 @@ import ( const resourceInstanceName = "opentelekomcloud_dcs_instance_v1.instance_1" func TestAccDcsInstancesV1_basic(t *testing.T) { - var instance instances.Instance + var instance lifecycle.Instance var instanceName = fmt.Sprintf("dcs_instance_%s", acctest.RandString(5)) resource.ParallelTest(t, resource.TestCase{ @@ -47,7 +47,7 @@ func TestAccDcsInstancesV1_basic(t *testing.T) { } func TestAccDcsInstancesV1_basicSingleInstance(t *testing.T) { - var instance instances.Instance + var instance lifecycle.Instance var instanceName = fmt.Sprintf("dcs_instance_%s", acctest.RandString(5)) resource.ParallelTest(t, resource.TestCase{ @@ -69,7 +69,7 @@ func TestAccDcsInstancesV1_basicSingleInstance(t *testing.T) { } func TestAccDcsInstancesV1_basicEngineV3Instance(t *testing.T) { - var instance instances.Instance + var instance lifecycle.Instance var instanceName = fmt.Sprintf("dcs_instance_%s", acctest.RandString(5)) resource.ParallelTest(t, resource.TestCase{ @@ -138,7 +138,7 @@ func TestAccASV1Configuration_WhitelistValidation(t *testing.T) { } func TestAccDcsInstancesV1_Whitelist(t *testing.T) { - var instance instances.Instance + var instance lifecycle.Instance var instanceName = fmt.Sprintf("dcs_instance_%s", acctest.RandString(5)) resource.ParallelTest(t, resource.TestCase{ @@ -221,7 +221,7 @@ func testAccCheckDcsV1InstanceDestroy(s *terraform.State) error { continue } - _, err := instances.Get(client, rs.Primary.ID).Extract() + _, err := lifecycle.Get(client, rs.Primary.ID) if err == nil { return fmt.Errorf("DCS instance still exists") } @@ -229,7 +229,7 @@ func testAccCheckDcsV1InstanceDestroy(s *terraform.State) error { return nil } -func testAccCheckDcsV1InstanceExists(n string, instance instances.Instance) resource.TestCheckFunc { +func testAccCheckDcsV1InstanceExists(n string, instance lifecycle.Instance) resource.TestCheckFunc { return func(s *terraform.State) error { rs, ok := s.RootModule().Resources[n] if !ok { @@ -246,7 +246,7 @@ func testAccCheckDcsV1InstanceExists(n string, instance instances.Instance) reso return fmt.Errorf("error creating DCSv1 client: %w", err) } - v, err := instances.Get(dcsClient, rs.Primary.ID).Extract() + v, err := lifecycle.Get(dcsClient, rs.Primary.ID) if err != nil { return fmt.Errorf("error getting instance (%s): %w", rs.Primary.ID, err) } diff --git a/opentelekomcloud/services/dcs/data_source_opentelekomcloud_dcs_az_v1.go b/opentelekomcloud/services/dcs/data_source_opentelekomcloud_dcs_az_v1.go index 3cac2c2f6..385578f01 100644 --- a/opentelekomcloud/services/dcs/data_source_opentelekomcloud_dcs_az_v1.go +++ b/opentelekomcloud/services/dcs/data_source_opentelekomcloud_dcs_az_v1.go @@ -7,8 +7,7 @@ import ( "github.com/hashicorp/go-multierror" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/opentelekomcloud/gophertelekomcloud/openstack/dcs/v1/availablezones" - + "github.com/opentelekomcloud/gophertelekomcloud/openstack/dcs/v1/others" "github.com/opentelekomcloud/terraform-provider-opentelekomcloud/opentelekomcloud/common/cfg" "github.com/opentelekomcloud/terraform-provider-opentelekomcloud/opentelekomcloud/common/fmterr" ) @@ -44,13 +43,13 @@ func dataSourceDcsAZV1Read(_ context.Context, d *schema.ResourceData, meta inter return fmterr.Errorf("error creating dcs key client: %s", err) } - v, err := availablezones.Get(DcsV1Client).Extract() + v, err := others.ListAvailableZones(DcsV1Client) if err != nil { return diag.FromErr(err) } log.Printf("[DEBUG] Dcs az : %+v", v) - var filteredAZs []availablezones.AvailableZone + var filteredAZs []others.AvailableZone if v.RegionID == config.GetRegion(d) { AZs := v.AvailableZones for _, newAZ := range AZs { diff --git a/opentelekomcloud/services/dcs/data_source_opentelekomcloud_dcs_maintainwindow_v1.go b/opentelekomcloud/services/dcs/data_source_opentelekomcloud_dcs_maintainwindow_v1.go index 96a01359a..aec843119 100644 --- a/opentelekomcloud/services/dcs/data_source_opentelekomcloud_dcs_maintainwindow_v1.go +++ b/opentelekomcloud/services/dcs/data_source_opentelekomcloud_dcs_maintainwindow_v1.go @@ -8,8 +8,7 @@ import ( "github.com/hashicorp/go-multierror" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/opentelekomcloud/gophertelekomcloud/openstack/dcs/v1/maintainwindows" - + "github.com/opentelekomcloud/gophertelekomcloud/openstack/dcs/v1/others" "github.com/opentelekomcloud/terraform-provider-opentelekomcloud/opentelekomcloud/common/cfg" "github.com/opentelekomcloud/terraform-provider-opentelekomcloud/opentelekomcloud/common/fmterr" ) @@ -50,14 +49,13 @@ func dataSourceDcsMaintainWindowV1Read(_ context.Context, d *schema.ResourceData return fmterr.Errorf("error creating dcs key client: %s", err) } - v, err := maintainwindows.Get(DcsV1Client).Extract() + v, err := others.ListMaintenanceWindows(DcsV1Client) if err != nil { return diag.FromErr(err) } - maintainWindows := v.MaintainWindows - var filteredMVs []maintainwindows.MaintainWindow - for _, mv := range maintainWindows { + var filteredMVs []others.MaintainWindow + for _, mv := range v { seq := d.Get("seq").(int) if seq != 0 && mv.ID != seq { continue diff --git a/opentelekomcloud/services/dcs/data_source_opentelekomcloud_dcs_product_v1.go b/opentelekomcloud/services/dcs/data_source_opentelekomcloud_dcs_product_v1.go index 8405c2bef..4c9d395ed 100644 --- a/opentelekomcloud/services/dcs/data_source_opentelekomcloud_dcs_product_v1.go +++ b/opentelekomcloud/services/dcs/data_source_opentelekomcloud_dcs_product_v1.go @@ -6,7 +6,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/opentelekomcloud/gophertelekomcloud/openstack/dcs/v1/products" + "github.com/opentelekomcloud/gophertelekomcloud/openstack/dcs/v1/others" "github.com/opentelekomcloud/terraform-provider-opentelekomcloud/opentelekomcloud/common/cfg" "github.com/opentelekomcloud/terraform-provider-opentelekomcloud/opentelekomcloud/common/fmterr" @@ -33,13 +33,13 @@ func dataSourceDcsProductV1Read(_ context.Context, d *schema.ResourceData, meta return fmterr.Errorf("error get dcs product client: %s", err) } - v, err := products.Get(DcsV1Client).Extract() + v, err := others.GetProducts(DcsV1Client) if err != nil { return diag.FromErr(err) } log.Printf("[DEBUG] Dcs get products : %+v", v) - var FilteredPd []products.Product - for _, pd := range v.Products { + var FilteredPd []others.Product + for _, pd := range v { specCode := d.Get("spec_code").(string) if specCode != "" && pd.SpecCode != specCode { continue diff --git a/opentelekomcloud/services/dcs/resource_opentelekomcloud_dcs_instance_v1.go b/opentelekomcloud/services/dcs/resource_opentelekomcloud_dcs_instance_v1.go index 1e95d4840..868951a52 100644 --- a/opentelekomcloud/services/dcs/resource_opentelekomcloud_dcs_instance_v1.go +++ b/opentelekomcloud/services/dcs/resource_opentelekomcloud_dcs_instance_v1.go @@ -14,7 +14,8 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" golangsdk "github.com/opentelekomcloud/gophertelekomcloud" "github.com/opentelekomcloud/gophertelekomcloud/openstack/dcs/v1/configs" - "github.com/opentelekomcloud/gophertelekomcloud/openstack/dcs/v1/instances" + "github.com/opentelekomcloud/gophertelekomcloud/openstack/dcs/v1/lifecycle" + "github.com/opentelekomcloud/gophertelekomcloud/openstack/dcs/v1/others" "github.com/opentelekomcloud/gophertelekomcloud/openstack/dcs/v2/whitelists" "github.com/opentelekomcloud/terraform-provider-opentelekomcloud/opentelekomcloud/common" "github.com/opentelekomcloud/terraform-provider-opentelekomcloud/opentelekomcloud/common/cfg" @@ -74,12 +75,6 @@ func ResourceDcsInstanceV1() *schema.Resource { Required: true, ForceNew: true, }, - "access_user": { - Type: schema.TypeString, - Optional: true, - Computed: true, - ForceNew: true, - }, "vpc_id": { Type: schema.TypeString, Required: true, @@ -292,17 +287,17 @@ func formatAts(src []interface{}) []int { return res } -func getInstanceBackupPolicy(d *schema.ResourceData) *instances.InstanceBackupPolicy { - var instanceBackupPolicy *instances.InstanceBackupPolicy +func getInstanceBackupPolicy(d *schema.ResourceData) *lifecycle.InstanceBackupPolicy { + var instanceBackupPolicy *lifecycle.InstanceBackupPolicy if _, ok := d.GetOk("backup_policy"); !ok { // deprecated branch backupAts := d.Get("backup_at").([]interface{}) if len(backupAts) == 0 { return nil } - instanceBackupPolicy = &instances.InstanceBackupPolicy{ + instanceBackupPolicy = &lifecycle.InstanceBackupPolicy{ SaveDays: d.Get("save_days").(int), BackupType: d.Get("backup_type").(string), - PeriodicalBackupPlan: instances.PeriodicalBackupPlan{ + PeriodicalBackupPlan: lifecycle.PeriodicalBackupPlan{ BeginAt: d.Get("begin_at").(string), PeriodType: d.Get("period_type").(string), BackupAt: formatAts(backupAts), @@ -317,10 +312,10 @@ func getInstanceBackupPolicy(d *schema.ResourceData) *instances.InstanceBackupPo } backupPolicy := backupPolicyList[0].(map[string]interface{}) backupAts := backupPolicy["backup_at"].([]interface{}) - instanceBackupPolicy = &instances.InstanceBackupPolicy{ + instanceBackupPolicy = &lifecycle.InstanceBackupPolicy{ SaveDays: backupPolicy["save_days"].(int), BackupType: backupPolicy["backup_type"].(string), - PeriodicalBackupPlan: instances.PeriodicalBackupPlan{ + PeriodicalBackupPlan: lifecycle.PeriodicalBackupPlan{ BeginAt: backupPolicy["begin_at"].(string), PeriodType: backupPolicy["period_type"].(string), BackupAt: formatAts(backupAts), @@ -388,10 +383,22 @@ func resourceDcsInstancesV1Create(ctx context.Context, d *schema.ResourceData, m } noPasswordAccess := "true" - if d.Get("access_user").(string) != "" || d.Get("password").(string) != "" { + if d.Get("password").(string) != "" { noPasswordAccess = "false" } - createOpts := &instances.CreateOps{ + productId := d.Get("product_id").(string) + var specCode string + products, err := others.GetProducts(client) + if err != nil { + return diag.FromErr(err) + } + log.Printf("[DEBUG] Dcs get products : %+v", products) + for _, pd := range products { + if productId != "" && pd.ProductID == productId { + specCode = pd.SpecCode + } + } + createOpts := lifecycle.CreateOps{ Name: d.Get("name").(string), Description: d.Get("description").(string), Engine: d.Get("engine").(string), @@ -399,45 +406,44 @@ func resourceDcsInstancesV1Create(ctx context.Context, d *schema.ResourceData, m Capacity: d.Get("capacity").(float64), NoPasswordAccess: noPasswordAccess, Password: d.Get("password").(string), - AccessUser: d.Get("access_user").(string), - VPCID: d.Get("vpc_id").(string), + VPCId: d.Get("vpc_id").(string), SecurityGroupID: d.Get("security_group_id").(string), SubnetID: d.Get("subnet_id").(string), AvailableZones: common.GetAllAvailableZones(d), - ProductID: d.Get("product_id").(string), + SpecCode: specCode, InstanceBackupPolicy: getInstanceBackupPolicy(d), MaintainBegin: d.Get("maintain_begin").(string), MaintainEnd: d.Get("maintain_end").(string), } log.Printf("[DEBUG] Create Options: %#v", createOpts) - v, err := instances.Create(client, createOpts).Extract() + instanceID, err := lifecycle.Create(client, createOpts) if err != nil { return fmterr.Errorf("error creating DCS instance: %w", err) } - log.Printf("[INFO] instance ID: %s", v.InstanceID) + log.Printf("[INFO] instance ID: %s", instanceID) stateConf := &resource.StateChangeConf{ Pending: []string{"CREATING"}, Target: []string{"RUNNING"}, - Refresh: dcsInstancesV1StateRefreshFunc(client, v.InstanceID), + Refresh: dcsInstancesV1StateRefreshFunc(client, instanceID), Timeout: d.Timeout(schema.TimeoutCreate), Delay: 10 * time.Second, MinTimeout: 3 * time.Second, } _, err = stateConf.WaitForStateContext(ctx) if err != nil { - return fmterr.Errorf("error waiting for instance (%s) to become ready: %w", v.InstanceID, err) + return fmterr.Errorf("error waiting for instance (%s) to become ready: %w", instanceID, err) } // Store the instance ID now - d.SetId(v.InstanceID) + d.SetId(instanceID) updateOpts := configs.UpdateOpts{ RedisConfigs: getInstanceRedisConfiguration(d), } if len(updateOpts.RedisConfigs) > 0 { - if err := configs.Update(client, d.Id(), updateOpts).ExtractErr(); err != nil { + if err := configs.Update(client, d.Id(), updateOpts); err != nil { return fmterr.Errorf("error updating redis configuration of DCS instance: %w", err) } stateConf := &resource.StateChangeConf{ @@ -455,7 +461,7 @@ func resourceDcsInstancesV1Create(ctx context.Context, d *schema.ResourceData, m if _, ok := d.GetOk("whitelist"); ok { whitelistOpts := getInstanceWhitelistOpts(d) - if err := whitelists.Put(client, d.Id(), whitelistOpts).ExtractErr(); err != nil { + if err := whitelists.Put(client, d.Id(), whitelistOpts); err != nil { return fmterr.Errorf("error updating redis whitelist of DCS instance: %w", err) } stateConf := &resource.StateChangeConf{ @@ -481,7 +487,7 @@ func resourceDcsInstancesV1Read(_ context.Context, d *schema.ResourceData, meta if err != nil { return fmterr.Errorf(errCreationClient, err) } - v, err := instances.Get(client, d.Id()).Extract() + v, err := lifecycle.Get(client, d.Id()) if err != nil { return diag.FromErr(err) } @@ -492,6 +498,16 @@ func resourceDcsInstancesV1Read(_ context.Context, d *schema.ResourceData, meta if v.Capacity == 0 { capacity, _ = strconv.ParseFloat(v.CapacityMinor, 32) } + var productId string + products, err := others.GetProducts(client) + if err != nil { + return diag.FromErr(err) + } + for _, pd := range products { + if pd.SpecCode == v.SpecCode { + productId = pd.ProductID + } + } mErr := multierror.Append( d.Set("name", v.Name), @@ -508,7 +524,7 @@ func resourceDcsInstancesV1Read(_ context.Context, d *schema.ResourceData, meta d.Set("vpc_id", v.VPCID), d.Set("vpc_name", v.VPCName), d.Set("created_at", v.CreatedAt), - d.Set("product_id", v.ProductID), + d.Set("product_id", productId), d.Set("subnet_id", v.SubnetID), d.Set("subnet_name", v.SubnetName), d.Set("user_id", v.UserID), @@ -516,7 +532,6 @@ func resourceDcsInstancesV1Read(_ context.Context, d *schema.ResourceData, meta d.Set("order_id", v.OrderID), d.Set("maintain_begin", v.MaintainBegin), d.Set("maintain_end", v.MaintainEnd), - d.Set("access_user", v.AccessUser), d.Set("ip", v.IP), ) @@ -526,7 +541,7 @@ func resourceDcsInstancesV1Read(_ context.Context, d *schema.ResourceData, meta d.Set("security_group_name", v.SecurityGroupName), ) } else { - w, err := whitelists.Get(client, d.Id()).Extract() + w, err := whitelists.Get(client, d.Id()) if err != nil { return diag.FromErr(err) } @@ -563,13 +578,13 @@ func resourceDcsInstancesV1Update(ctx context.Context, d *schema.ResourceData, m if err != nil { return fmterr.Errorf(errCreationClient, err) } - var updateOpts instances.UpdateOpts + var updateOpts lifecycle.UpdateOpts if d.HasChange("name") { updateOpts.Name = d.Get("name").(string) } if d.HasChange("description") { description := d.Get("description").(string) - updateOpts.Description = &description + updateOpts.Description = description } if d.HasChange("maintain_begin") { updateOpts.MaintainBegin = d.Get("maintain_begin").(string) @@ -584,7 +599,7 @@ func resourceDcsInstancesV1Update(ctx context.Context, d *schema.ResourceData, m updateOpts.InstanceBackupPolicy = getInstanceBackupPolicy(d) } - err = instances.Update(client, d.Id(), updateOpts).Err + err = lifecycle.Update(client, d.Id(), updateOpts) if err != nil { return fmterr.Errorf("error updating DCS Instance: %w", err) } @@ -594,7 +609,7 @@ func resourceDcsInstancesV1Update(ctx context.Context, d *schema.ResourceData, m updateConfigOpts.RedisConfigs = getInstanceRedisConfiguration(d) } if len(updateConfigOpts.RedisConfigs) > 0 { - if err := configs.Update(client, d.Id(), updateConfigOpts).ExtractErr(); err != nil { + if err := configs.Update(client, d.Id(), updateConfigOpts); err != nil { return fmterr.Errorf("error updating redis config of DCS instance: %w", err) } stateConf := &resource.StateChangeConf{ @@ -611,12 +626,12 @@ func resourceDcsInstancesV1Update(ctx context.Context, d *schema.ResourceData, m } if d.HasChange("enable_whitelist") || d.HasChange("whitelist") { - getResp, err := whitelists.Get(client, d.Id()).Extract() + getResp, err := whitelists.Get(client, d.Id()) if err != nil { return diag.FromErr(err) } whitelistOpts := getInstanceWhitelistOpts(d) - if err := whitelists.Put(client, d.Id(), whitelistOpts).ExtractErr(); err != nil { + if err := whitelists.Put(client, d.Id(), whitelistOpts); err != nil { return fmterr.Errorf("error updating redis whitelist of DCS instance: %w", err) } stateConf := &resource.StateChangeConf{ @@ -643,12 +658,12 @@ func resourceDcsInstancesV1Delete(ctx context.Context, d *schema.ResourceData, m return fmterr.Errorf(errCreationClient, err) } - _, err = instances.Get(client, d.Id()).Extract() + _, err = lifecycle.Get(client, d.Id()) if err != nil { return common.CheckDeletedDiag(d, err, "DCS instance") } - err = instances.Delete(client, d.Id()).ExtractErr() + err = lifecycle.Delete(client, d.Id()) if err != nil { return fmterr.Errorf("error deleting DCS instance: %w", err) } @@ -677,7 +692,7 @@ func resourceDcsInstancesV1Delete(ctx context.Context, d *schema.ResourceData, m func dcsInstancesV1StateRefreshFunc(client *golangsdk.ServiceClient, instanceID string) resource.StateRefreshFunc { return func() (interface{}, string, error) { - v, err := instances.Get(client, instanceID).Extract() + v, err := lifecycle.Get(client, instanceID) if err != nil { if _, ok := err.(golangsdk.ErrDefault404); ok { return v, "DELETED", nil @@ -691,7 +706,7 @@ func dcsInstancesV1StateRefreshFunc(client *golangsdk.ServiceClient, instanceID func dcsInstanceV1ConfigStateRefreshFunc(client *golangsdk.ServiceClient, instanceID string) resource.StateRefreshFunc { return func() (interface{}, string, error) { - v, err := configs.List(client, instanceID).Extract() + v, err := configs.List(client, instanceID) if err != nil { return nil, "", err } @@ -701,7 +716,7 @@ func dcsInstanceV1ConfigStateRefreshFunc(client *golangsdk.ServiceClient, instan func dcsInstanceV1WhitelistRefreshFunc(client *golangsdk.ServiceClient, instanceID string, getResp *whitelists.Whitelist) resource.StateRefreshFunc { return func() (interface{}, string, error) { - v, err := whitelists.Get(client, instanceID).Extract() + v, err := whitelists.Get(client, instanceID) if err != nil { return nil, "", err } @@ -741,7 +756,7 @@ func resourceDcsInstanceV1ImportState(ctx context.Context, d *schema.ResourceDat if diagRead := resourceDcsInstancesV1Read(ctx, d, meta); diagRead.HasError() { return nil, fmt.Errorf("error reading opentelekomcloud_dcs_instance_v1 %s: %s", d.Id(), diagRead[0].Summary) } - instance, err := instances.Get(client, d.Id()).Extract() + instance, err := lifecycle.Get(client, d.Id()) if err != nil { return nil, fmt.Errorf("unable to get instance %s: %s", d.Id(), err) } @@ -752,18 +767,18 @@ func resourceDcsInstanceV1ImportState(ctx context.Context, d *schema.ResourceDat return nil, fmt.Errorf("error setting used memory") } var backup []map[string]interface{} - backup_policy := make(map[string]interface{}) - backup_policy["backup_type"] = instance.InstanceBackupPolicy.BackupType - backup_policy["save_days"] = instance.InstanceBackupPolicy.SaveDays - backup_policy["begin_at"] = instance.InstanceBackupPolicy.PeriodicalBackupPlan.BeginAt - backup_policy["period_type"] = instance.InstanceBackupPolicy.PeriodicalBackupPlan.PeriodType + backupPolicy := make(map[string]interface{}) + backupPolicy["backup_type"] = instance.InstanceBackupPolicy.Policy.BackupType + backupPolicy["save_days"] = instance.InstanceBackupPolicy.Policy.SaveDays + backupPolicy["begin_at"] = instance.InstanceBackupPolicy.Policy.PeriodicalBackupPlan.BeginAt + backupPolicy["period_type"] = instance.InstanceBackupPolicy.Policy.PeriodicalBackupPlan.PeriodType var backupAts []int - for _, at := range instance.InstanceBackupPolicy.PeriodicalBackupPlan.BackupAt { + for _, at := range instance.InstanceBackupPolicy.Policy.PeriodicalBackupPlan.BackupAt { backupAts = append(backupAts, at) } - backup_policy["backup_at"] = backupAts + backupPolicy["backup_at"] = backupAts - backup = append(backup, backup_policy) + backup = append(backup, backupPolicy) if err := d.Set("backup_policy", backup); err != nil { return nil, fmt.Errorf("error setting backup policy") } From 0fc4998bb786008037c0f2221e070129240d44aa Mon Sep 17 00:00:00 2001 From: anton-sidelnikov Date: Fri, 25 Nov 2022 14:52:14 +0100 Subject: [PATCH 3/4] rn --- releasenotes/notes/dcs-import-ref-4de92f58f85d9580.yaml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 releasenotes/notes/dcs-import-ref-4de92f58f85d9580.yaml diff --git a/releasenotes/notes/dcs-import-ref-4de92f58f85d9580.yaml b/releasenotes/notes/dcs-import-ref-4de92f58f85d9580.yaml new file mode 100644 index 000000000..2fd83354b --- /dev/null +++ b/releasenotes/notes/dcs-import-ref-4de92f58f85d9580.yaml @@ -0,0 +1,7 @@ +--- +enhancements: + - | + **[DCS]** Refactoring in ``resource/opentelekomcloud_dcs*`` (`#2005 `_) +fixes: + - | + **[DCS]** Fix import in ``resource/opentelekomcloud_dcs_instance_v1`` (`#2005 `_) From fe658912a4a74a52337e4a2f54b12529462a27dc Mon Sep 17 00:00:00 2001 From: anton-sidelnikov Date: Fri, 25 Nov 2022 15:53:09 +0100 Subject: [PATCH 4/4] simplify --- .../services/dcs/resource_opentelekomcloud_dcs_instance_v1.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/opentelekomcloud/services/dcs/resource_opentelekomcloud_dcs_instance_v1.go b/opentelekomcloud/services/dcs/resource_opentelekomcloud_dcs_instance_v1.go index 868951a52..42a8353de 100644 --- a/opentelekomcloud/services/dcs/resource_opentelekomcloud_dcs_instance_v1.go +++ b/opentelekomcloud/services/dcs/resource_opentelekomcloud_dcs_instance_v1.go @@ -773,9 +773,7 @@ func resourceDcsInstanceV1ImportState(ctx context.Context, d *schema.ResourceDat backupPolicy["begin_at"] = instance.InstanceBackupPolicy.Policy.PeriodicalBackupPlan.BeginAt backupPolicy["period_type"] = instance.InstanceBackupPolicy.Policy.PeriodicalBackupPlan.PeriodType var backupAts []int - for _, at := range instance.InstanceBackupPolicy.Policy.PeriodicalBackupPlan.BackupAt { - backupAts = append(backupAts, at) - } + backupAts = append(backupAts, instance.InstanceBackupPolicy.Policy.PeriodicalBackupPlan.BackupAt...) backupPolicy["backup_at"] = backupAts backup = append(backup, backupPolicy)