alicloud/data_source_alicloud_threat_detection_assets.go (231 lines of code) (raw):

package alicloud import ( "fmt" "time" "github.com/hashicorp/terraform-plugin-sdk/helper/validation" "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" ) func dataSourceAlicloudThreatDetectionAssets() *schema.Resource { return &schema.Resource{ Read: dataSourceAlicloudThreatDetectionAssetsRead, Schema: map[string]*schema.Schema{ "criteria": { Optional: true, ForceNew: true, Type: schema.TypeString, }, "importance": { Optional: true, ForceNew: true, Type: schema.TypeInt, ValidateFunc: validation.IntInSlice([]int{0, 1, 2}), }, "logical_exp": { Optional: true, ForceNew: true, Type: schema.TypeString, ValidateFunc: validation.StringInSlice([]string{"OR", "AND"}, false), }, "machine_types": { Optional: true, ForceNew: true, Type: schema.TypeString, ValidateFunc: validation.StringInSlice([]string{"ecs", "cloud_product"}, false), }, "no_group_trace": { Optional: true, ForceNew: true, Type: schema.TypeBool, }, "ids": { Optional: true, Computed: true, Type: schema.TypeList, Elem: &schema.Schema{ Type: schema.TypeString, }, }, "output_file": { Optional: true, Type: schema.TypeString, }, "page_number": { Optional: true, Type: schema.TypeInt, }, "page_size": { Optional: true, Type: schema.TypeInt, Default: 20, }, "assets": { Computed: true, Type: schema.TypeList, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "id": { Computed: true, Type: schema.TypeString, }, "create_time": { Computed: true, Type: schema.TypeString, }, "uuid": { Computed: true, Type: schema.TypeString, }, "instance_id": { Computed: true, Type: schema.TypeString, }, "instance_name": { Computed: true, Type: schema.TypeString, }, "cluster_id": { Computed: true, Type: schema.TypeString, }, "cluster_name": { Computed: true, Type: schema.TypeString, }, "vpc_instance_id": { Computed: true, Type: schema.TypeString, }, "internet_ip": { Computed: true, Type: schema.TypeString, }, "intranet_ip": { Computed: true, Type: schema.TypeString, }, "status": { Computed: true, Type: schema.TypeString, }, }, }, }, }, } } func dataSourceAlicloudThreatDetectionAssetsRead(d *schema.ResourceData, meta interface{}) error { client := meta.(*connectivity.AliyunClient) request := map[string]interface{}{ "RegionId": client.RegionId, } if v, ok := d.GetOk("criteria"); ok { request["Criteria"] = v } if v, ok := d.GetOk("importance"); ok { request["Importance"] = v } if v, ok := d.GetOk("logical_exp"); ok { request["LogicalExp"] = v } if v, ok := d.GetOk("machine_types"); ok { request["MachineTypes"] = v } if v, ok := d.GetOkExists("no_group_trace"); ok { request["NoGroupTrace"] = v } if v, ok := d.GetOk("page_number"); ok && v.(int) > 0 { request["CurrentPage"] = v.(int) } else { request["CurrentPage"] = 1 } if v, ok := d.GetOk("page_size"); ok && v.(int) > 0 { request["PageSize"] = v.(int) } else { request["PageSize"] = PageSizeLarge } idsMap := make(map[string]string) if v, ok := d.GetOk("ids"); ok { for _, vv := range v.([]interface{}) { if vv == nil { continue } idsMap[vv.(string)] = vv.(string) } } var err error var objects []interface{} var response map[string]interface{} for { action := "DescribeCloudCenterInstances" wait := incrementalWait(3*time.Second, 3*time.Second) err = resource.Retry(5*time.Minute, func() *resource.RetryError { resp, err := client.RpcPost("Sas", "2018-12-03", action, nil, request, true) if err != nil { if NeedRetry(err) { wait() return resource.RetryableError(err) } return resource.NonRetryableError(err) } response = resp addDebug(action, response, request) return nil }) if err != nil { return WrapErrorf(err, DataDefaultErrorMsg, "alicloud_threat_detection_assets", action, AlibabaCloudSdkGoERROR) } resp, err := jsonpath.Get("$.Instances", response) if err != nil { return WrapErrorf(err, FailedGetAttributeMsg, action, "$.Instances", response) } result, _ := resp.([]interface{}) if isPagingRequest(d) { objects = result break } for _, v := range result { item := v.(map[string]interface{}) if len(idsMap) > 0 { if _, ok := idsMap[fmt.Sprint(item["Uuid"])]; !ok { continue } } objects = append(objects, item) } if len(result) < request["PageSize"].(int) { break } request["CurrentPage"] = request["CurrentPage"].(int) + 1 } ids := make([]string, 0) s := make([]map[string]interface{}, 0) for _, v := range objects { object := v.(map[string]interface{}) mapping := map[string]interface{}{ "id": fmt.Sprint(object["Uuid"]), "create_time": object["CreatedTime"], "uuid": object["Uuid"], "instance_id": object["InstanceId"], "instance_name": object["InstanceName"], "cluster_id": object["ClusterId"], "cluster_name": object["ClusterName"], "vpc_instance_id": object["VpcInstanceId"], "internet_ip": object["InternetIp"], "intranet_ip": object["IntranetIp"], "status": object["Status"], } ids = append(ids, fmt.Sprint(object["Uuid"])) s = append(s, mapping) } d.SetId(dataResourceIdHash(ids)) if err := d.Set("ids", ids); err != nil { return WrapError(err) } if err := d.Set("assets", s); err != nil { return WrapError(err) } return nil }