in lib/aws/warehouse.go [481:562]
func (wh *AccountWarehouse) determineResourceSpecs(params *ResourceParams) ([]*resourceSpec, error) {
switch params.ServiceTemplate.ServiceName {
case S3ItemFormat:
bucket, ok := params.Vars["bucket"]
if !ok {
return nil, fmt.Errorf("no bucket specified")
}
paths, ok := params.Vars["paths"]
if !ok || paths == "" || paths == "*" || paths == "/*" {
return []*resourceSpec{
{
arn: fmt.Sprintf("arn:aws:s3:::%s/*", bucket),
rType: bucketType,
},
{
arn: fmt.Sprintf("arn:aws:s3:::%s", bucket),
rType: bucketType,
},
}, nil
}
uniquePaths := stringset.New(strings.Split(paths, ";")...)
var resourceSpecs []*resourceSpec
for _, v := range uniquePaths.Elements() {
resourceSpecs = append(resourceSpecs, &resourceSpec{
arn: fmt.Sprintf("arn:aws:s3:::%s%s", bucket, v),
rType: bucketType,
})
}
return resourceSpecs, nil
case RedshiftItemFormat:
clusterARN, ok := params.Vars["cluster"]
if !ok {
return nil, fmt.Errorf("no cluster specified")
}
clusterSpec := &resourceSpec{
rType: otherRType,
arn: clusterARN,
}
dbUser := convertDamUserIDtoAwsName(params.UserID, wh.svcUserName)
dbUserARN, err := calculateDBuserARN(clusterARN, dbUser)
if err != nil {
return nil, err
}
userSpec := &resourceSpec{
rType: clusterUserType,
arn: dbUserARN,
}
group, ok := params.Vars["group"]
if ok {
return []*resourceSpec{
clusterSpec,
userSpec,
{
rType: otherRType,
arn: group,
},
}, nil
}
return []*resourceSpec{clusterSpec, userSpec}, nil
case RedshiftConsoleItemFormat:
packedResources, ok := params.Vars["resources"]
var resources []string
if ok {
resources = strings.Split(packedResources, ";")
} else {
resources = []string{"*"}
}
var specs []*resourceSpec
for _, res := range resources {
specs = append(specs, &resourceSpec{
rType: otherRType,
arn: res,
})
}
return specs, nil
default:
return nil, fmt.Errorf("unrecognized item format [%s] for AWS target adapter", params.ServiceTemplate.ServiceName)
}
}