alicloud/data_source_alicloud_alikafka_sasl_acls.go (123 lines of code) (raw):
package alicloud
import (
"fmt"
"github.com/aliyun/alibaba-cloud-sdk-go/services/alikafka"
"github.com/aliyun/terraform-provider-alicloud/alicloud/connectivity"
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
"github.com/hashicorp/terraform-plugin-sdk/helper/validation"
)
func dataSourceAlicloudAlikafkaSaslAcls() *schema.Resource {
return &schema.Resource{
Read: dataSourceAlicloudAlikafkaSaslAclsRead,
Schema: map[string]*schema.Schema{
"instance_id": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
},
"username": {
Type: schema.TypeString,
Required: true,
ValidateFunc: validation.ValidateRegexp,
ForceNew: true,
},
"acl_resource_type": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
ValidateFunc: validation.StringInSlice([]string{"Group", "Topic"}, false),
},
"acl_resource_name": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
ValidateFunc: validation.ValidateRegexp,
},
"output_file": {
Type: schema.TypeString,
Optional: true,
ForceNew: true,
},
"acls": {
Type: schema.TypeList,
Computed: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"username": {
Type: schema.TypeString,
Computed: true,
},
"acl_resource_type": {
Type: schema.TypeString,
Computed: true,
},
"acl_resource_name": {
Type: schema.TypeString,
Computed: true,
},
"acl_resource_pattern_type": {
Type: schema.TypeString,
Computed: true,
},
"host": {
Type: schema.TypeString,
Computed: true,
},
"acl_operation_type": {
Type: schema.TypeString,
Computed: true,
},
},
},
},
},
}
}
func dataSourceAlicloudAlikafkaSaslAclsRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AliyunClient)
alikafkaService := AlikafkaService{client}
request := alikafka.CreateDescribeAclsRequest()
request.InstanceId = d.Get("instance_id").(string)
request.RegionId = client.RegionId
request.Username = d.Get("username").(string)
request.AclResourceType = d.Get("acl_resource_type").(string)
request.AclResourceName = d.Get("acl_resource_name").(string)
raw, err := alikafkaService.client.WithAlikafkaClient(func(alikafkaClient *alikafka.Client) (interface{}, error) {
return alikafkaClient.DescribeAcls(request)
})
if err != nil {
if IsExpectedErrors(err, []string{"BIZ_SUBSCRIPTION_NOT_FOUND", "BIZ_TOPIC_NOT_FOUND"}) {
var emptyValue []alikafka.KafkaAclVO
return alikafkaSaslAclsDecriptionAttributes(d, emptyValue, meta)
}
return WrapErrorf(err, DataDefaultErrorMsg, "alicloud_alikafka_sasl_acls", request.GetActionName(), AlibabaCloudSdkGoERROR)
}
addDebug(request.GetActionName(), raw, request.RpcRequest, request)
response, _ := raw.(*alikafka.DescribeAclsResponse)
return alikafkaSaslAclsDecriptionAttributes(d, response.KafkaAclList.KafkaAclVO, meta)
}
func alikafkaSaslAclsDecriptionAttributes(d *schema.ResourceData, kafkaAclsInfo []alikafka.KafkaAclVO, meta interface{}) error {
var names []string
var s []map[string]interface{}
for _, item := range kafkaAclsInfo {
mapping := map[string]interface{}{
"username": item.Username,
"acl_resource_type": item.AclResourceType,
"acl_resource_name": item.AclResourceName,
"acl_resource_pattern_type": item.AclResourcePatternType,
"host": item.Host,
"acl_operation_type": item.AclOperationType,
}
name := fmt.Sprintf("%s:%s:%s:%s:%s", item.Username, item.AclResourceType, item.AclResourceName, item.AclResourcePatternType, item.AclOperationType)
names = append(names, name)
s = append(s, mapping)
}
d.SetId(dataResourceIdHash(names))
if err := d.Set("acls", s); err != nil {
return WrapError(err)
}
// create a json file in current directory and write data source to it
if output, ok := d.GetOk("output_file"); ok && output.(string) != "" {
writeToFile(output.(string), s)
}
return nil
}