alicloud/resource_alicloud_eflo_resource.go (367 lines of code) (raw):

// Package alicloud. This file is generated automatically. Please do not modify it manually, thank you! package alicloud import ( "encoding/json" "fmt" "github.com/PaesslerAG/jsonpath" "github.com/aliyun/terraform-provider-alicloud/alicloud/connectivity" "github.com/hashicorp/terraform-plugin-sdk/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/helper/schema" "log" "time" ) func resourceAliCloudEfloResource() *schema.Resource { return &schema.Resource{ Create: resourceAliCloudEfloResourceCreate, Read: resourceAliCloudEfloResourceRead, Update: resourceAliCloudEfloResourceUpdate, Delete: resourceAliCloudEfloResourceDelete, Importer: &schema.ResourceImporter{ State: schema.ImportStatePassthrough, }, Timeouts: &schema.ResourceTimeout{ Create: schema.DefaultTimeout(5 * time.Minute), Update: schema.DefaultTimeout(5 * time.Minute), }, Schema: map[string]*schema.Schema{ "cluster_desc": { Type: schema.TypeString, Optional: true, ForceNew: true, }, "cluster_id": { Type: schema.TypeString, Required: true, ForceNew: true, }, "cluster_name": { Type: schema.TypeString, Required: true, ForceNew: true, }, "resource_id": { Type: schema.TypeString, Computed: true, }, "machine_types": { Type: schema.TypeList, Required: true, ForceNew: true, MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "memory_info": { Type: schema.TypeString, Optional: true, ForceNew: true, }, "type": { Type: schema.TypeString, Optional: true, ForceNew: true, }, "bond_num": { Type: schema.TypeInt, Optional: true, ForceNew: true, }, "node_count": { Type: schema.TypeInt, Optional: true, ForceNew: true, }, "cpu_info": { Type: schema.TypeString, Required: true, ForceNew: true, }, "network_info": { Type: schema.TypeString, Optional: true, ForceNew: true, }, "gpu_info": { Type: schema.TypeString, Required: true, ForceNew: true, }, "disk_info": { Type: schema.TypeString, Optional: true, ForceNew: true, }, "network_mode": { Type: schema.TypeString, Optional: true, ForceNew: true, }, "name": { Type: schema.TypeString, Optional: true, ForceNew: true, }, }, }, }, "user_access_param": { Type: schema.TypeList, Required: true, MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "endpoint": { Type: schema.TypeString, Required: true, }, "access_id": { Type: schema.TypeString, Required: true, Sensitive: true, }, "workspace_id": { Type: schema.TypeString, Required: true, }, "access_key": { Type: schema.TypeString, Required: true, Sensitive: true, DiffSuppressFunc: func(k, old, new string, d *schema.ResourceData) bool { if old != "" && new != "" && old != new { return true } return false }, }, }, }, }, }, } } func resourceAliCloudEfloResourceCreate(d *schema.ResourceData, meta interface{}) error { client := meta.(*connectivity.AliyunClient) action := "CreateResource" var request map[string]interface{} var response map[string]interface{} query := make(map[string]interface{}) var err error request = make(map[string]interface{}) if v, ok := d.GetOk("cluster_id"); ok { request["ClusterId"] = v } request["RegionId"] = client.RegionId objectDataLocalMap := make(map[string]interface{}) if v := d.Get("machine_types"); v != nil { name1, _ := jsonpath.Get("$[0].name", v) if name1 != nil && name1 != "" { objectDataLocalMap["Name"] = name1 } networkInfo1, _ := jsonpath.Get("$[0].network_info", v) if networkInfo1 != nil && networkInfo1 != "" { objectDataLocalMap["NetworkInfo"] = networkInfo1 } gpuInfo1, _ := jsonpath.Get("$[0].gpu_info", v) if gpuInfo1 != nil && gpuInfo1 != "" { objectDataLocalMap["GpuInfo"] = gpuInfo1 } diskInfo1, _ := jsonpath.Get("$[0].disk_info", v) if diskInfo1 != nil && diskInfo1 != "" { objectDataLocalMap["DiskInfo"] = diskInfo1 } nodeCount1, _ := jsonpath.Get("$[0].node_count", v) if nodeCount1 != nil && nodeCount1 != "" { objectDataLocalMap["NodeCount"] = nodeCount1 } type1, _ := jsonpath.Get("$[0].type", v) if type1 != nil && type1 != "" { objectDataLocalMap["Type"] = type1 } networkMode1, _ := jsonpath.Get("$[0].network_mode", v) if networkMode1 != nil && networkMode1 != "" { objectDataLocalMap["NetworkMode"] = networkMode1 } cpuInfo1, _ := jsonpath.Get("$[0].cpu_info", v) if cpuInfo1 != nil && cpuInfo1 != "" { objectDataLocalMap["CpuInfo"] = cpuInfo1 } bondNum1, _ := jsonpath.Get("$[0].bond_num", v) if bondNum1 != nil && bondNum1 != "" { objectDataLocalMap["BondNum"] = bondNum1 } memoryInfo1, _ := jsonpath.Get("$[0].memory_info", v) if memoryInfo1 != nil && memoryInfo1 != "" { objectDataLocalMap["MemoryInfo"] = memoryInfo1 } objectDataLocalMapJson, err := json.Marshal(objectDataLocalMap) if err != nil { return WrapError(err) } request["MachineTypes"] = string(objectDataLocalMapJson) } objectDataLocalMap1 := make(map[string]interface{}) if v := d.Get("user_access_param"); v != nil { accessId1, _ := jsonpath.Get("$[0].access_id", v) if accessId1 != nil && accessId1 != "" { objectDataLocalMap1["AccessId"] = accessId1 } workspaceId1, _ := jsonpath.Get("$[0].workspace_id", v) if workspaceId1 != nil && workspaceId1 != "" { objectDataLocalMap1["WorkspaceId"] = workspaceId1 } accessKey1, _ := jsonpath.Get("$[0].access_key", v) if accessKey1 != nil && accessKey1 != "" { objectDataLocalMap1["AccessKey"] = accessKey1 } endpoint1, _ := jsonpath.Get("$[0].endpoint", v) if endpoint1 != nil && endpoint1 != "" { objectDataLocalMap1["Endpoint"] = endpoint1 } objectDataLocalMap1Json, err := json.Marshal(objectDataLocalMap1) if err != nil { return WrapError(err) } request["UserAccessParam"] = string(objectDataLocalMap1Json) } request["ClusterName"] = d.Get("cluster_name") if v, ok := d.GetOk("cluster_desc"); ok { request["ClusterDesc"] = v } wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(d.Timeout(schema.TimeoutCreate), func() *resource.RetryError { response, err = client.RpcPost("eflo-cnp", "2023-08-28", action, query, request, true) if err != nil { if NeedRetry(err) { wait() return resource.RetryableError(err) } return resource.NonRetryableError(err) } return nil }) addDebug(action, response, request) if err != nil { return WrapErrorf(err, DefaultErrorMsg, "alicloud_eflo_resource", action, AlibabaCloudSdkGoERROR) } d.SetId(fmt.Sprint(request["ClusterId"])) return resourceAliCloudEfloResourceRead(d, meta) } func resourceAliCloudEfloResourceRead(d *schema.ResourceData, meta interface{}) error { client := meta.(*connectivity.AliyunClient) efloServiceV2 := EfloServiceV2{client} objectRaw, err := efloServiceV2.DescribeEfloResource(d.Id()) if err != nil { if !d.IsNewResource() && NotFoundError(err) { log.Printf("[DEBUG] Resource alicloud_eflo_resource DescribeEfloResource Failed!!! %s", err) d.SetId("") return nil } return WrapError(err) } d.Set("cluster_desc", objectRaw["ClusterDesc"]) d.Set("cluster_name", objectRaw["ClusterName"]) d.Set("cluster_id", objectRaw["ClusterId"]) d.Set("resource_id", objectRaw["ResourceId"]) machineTypesMaps := make([]map[string]interface{}, 0) machineTypesMap := make(map[string]interface{}) machineTypeRaw := make(map[string]interface{}) if objectRaw["MachineType"] != nil { machineTypeRaw = objectRaw["MachineType"].(map[string]interface{}) } if len(machineTypeRaw) > 0 { machineTypesMap["bond_num"] = machineTypeRaw["BondNum"] machineTypesMap["cpu_info"] = machineTypeRaw["CpuInfo"] machineTypesMap["disk_info"] = machineTypeRaw["DiskInfo"] machineTypesMap["gpu_info"] = machineTypeRaw["GpuInfo"] machineTypesMap["memory_info"] = machineTypeRaw["MemoryInfo"] machineTypesMap["name"] = machineTypeRaw["Name"] machineTypesMap["network_info"] = machineTypeRaw["NetworkInfo"] machineTypesMap["network_mode"] = machineTypeRaw["NetworkMode"] machineTypesMap["node_count"] = machineTypeRaw["NodeCount"] machineTypesMap["type"] = machineTypeRaw["Type"] machineTypesMaps = append(machineTypesMaps, machineTypesMap) } if err := d.Set("machine_types", machineTypesMaps); err != nil { return err } userAccessParamMaps := make([]map[string]interface{}, 0) userAccessParamMap := make(map[string]interface{}) userAccessParamRaw := make(map[string]interface{}) if objectRaw["UserAccessParam"] != nil { userAccessParamRaw = objectRaw["UserAccessParam"].(map[string]interface{}) } if len(userAccessParamRaw) > 0 { userAccessParamMap["access_id"] = userAccessParamRaw["AccessId"] userAccessParamMap["access_key"] = userAccessParamRaw["AccessKey"] userAccessParamMap["endpoint"] = userAccessParamRaw["Endpoint"] userAccessParamMap["workspace_id"] = userAccessParamRaw["WorkspaceId"] userAccessParamMaps = append(userAccessParamMaps, userAccessParamMap) } if err := d.Set("user_access_param", userAccessParamMaps); err != nil { return err } d.Set("cluster_id", d.Id()) return nil } func resourceAliCloudEfloResourceUpdate(d *schema.ResourceData, meta interface{}) error { client := meta.(*connectivity.AliyunClient) var request map[string]interface{} var response map[string]interface{} var query map[string]interface{} update := false var err error action := "ValidateResource" request = make(map[string]interface{}) query = make(map[string]interface{}) request["ClusterId"] = d.Id() request["RegionId"] = client.RegionId if d.HasChange("user_access_param") { update = true } objectDataLocalMap := make(map[string]interface{}) if v := d.Get("user_access_param"); v != nil { accessId1, _ := jsonpath.Get("$[0].access_id", v) if accessId1 != nil && (d.HasChange("user_access_param.0.access_id") || accessId1 != "") { objectDataLocalMap["AccessId"] = accessId1 } accessKey1, _ := jsonpath.Get("$[0].access_key", v) if accessKey1 != nil && (d.HasChange("user_access_param.0.access_key") || accessKey1 != "") { objectDataLocalMap["AccessKey"] = accessKey1 } workspaceId1, _ := jsonpath.Get("$[0].workspace_id", v) if workspaceId1 != nil && (d.HasChange("user_access_param.0.workspace_id") || workspaceId1 != "") { objectDataLocalMap["WorkspaceId"] = workspaceId1 } endpoint1, _ := jsonpath.Get("$[0].endpoint", v) if endpoint1 != nil && (d.HasChange("user_access_param.0.endpoint") || endpoint1 != "") { objectDataLocalMap["Endpoint"] = endpoint1 } objectDataLocalMapJson, err := json.Marshal(objectDataLocalMap) if err != nil { return WrapError(err) } request["UserAccessParam"] = string(objectDataLocalMapJson) } if update { wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError { response, err = client.RpcPost("eflo-cnp", "2023-08-28", action, query, request, true) if err != nil { if NeedRetry(err) { wait() return resource.RetryableError(err) } return resource.NonRetryableError(err) } return nil }) addDebug(action, response, request) if err != nil { return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR) } } return resourceAliCloudEfloResourceRead(d, meta) } func resourceAliCloudEfloResourceDelete(d *schema.ResourceData, meta interface{}) error { log.Printf("[WARN] Cannot destroy resource AliCloud Resource Resource. Terraform will remove this resource from the state file, however resources may remain.") return nil }