func()

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)
	}
}