diff --git a/mmv1/api/resource.go b/mmv1/api/resource.go index e261cbb5a015..42f8dbf2f22c 100644 --- a/mmv1/api/resource.go +++ b/mmv1/api/resource.go @@ -2298,10 +2298,7 @@ func (r Resource) TGCTestIgnorePropertiesToStrings(e resource.Examples) []string } else if tp.IsMissingInCai { props = append(props, tp.MetadataLineage()) } else if tp.IgnoreRead { - if tp.Sensitive || tp.Name == "tags" { - // TODO: handle tags conversion, which are separate Cai assets with resources. - props = append(props, tp.MetadataLineage()) - } + props = append(props, tp.MetadataLineage()) } } props = append(props, e.TGCTestIgnoreExtra...) diff --git a/mmv1/products/secretmanager/Secret.yaml b/mmv1/products/secretmanager/Secret.yaml index 89ebfd0be728..b1df56161a3c 100644 --- a/mmv1/products/secretmanager/Secret.yaml +++ b/mmv1/products/secretmanager/Secret.yaml @@ -38,6 +38,7 @@ iam_policy: allowed_iam_role: 'roles/secretmanager.secretAccessor' parent_resource_attribute: 'secret_id' iam_conditions_request_type: 'QUERY_PARAM_NESTED' +include_in_tgc_next_DO_NOT_USE: true custom_code: constants: 'templates/terraform/constants/secret_manager_secret.go.tmpl' pre_update: 'templates/terraform/pre_update/secret_manager_secret.go.tmpl' diff --git a/mmv1/products/secretmanagerregional/RegionalSecret.yaml b/mmv1/products/secretmanagerregional/RegionalSecret.yaml index 09641d016359..63904520ac33 100644 --- a/mmv1/products/secretmanagerregional/RegionalSecret.yaml +++ b/mmv1/products/secretmanagerregional/RegionalSecret.yaml @@ -44,6 +44,7 @@ iam_policy: custom_code: pre_update: 'templates/terraform/pre_update/secret_manager_regional_secret.go.tmpl' pre_delete: 'templates/terraform/pre_delete/regional_secret.go.tmpl' +include_in_tgc_next_DO_NOT_USE: true examples: - name: 'regional_secret_config_basic' primary_resource_id: 'regional-secret-basic' diff --git a/mmv1/provider/terraform_tgc_next.go b/mmv1/provider/terraform_tgc_next.go index c414e9f01fc0..faa4a657d7e9 100644 --- a/mmv1/provider/terraform_tgc_next.go +++ b/mmv1/provider/terraform_tgc_next.go @@ -394,46 +394,78 @@ func FindIdentityParams(rids []ResourceIdentifier) []ResourceIdentifier { segmentsList[i] = cleanSegments } - if len(segmentsList[0]) == 0 { - return rids + segmentsList = removeSharedElements(segmentsList) + + for i, segments := range segmentsList { + if len(segments) == 0 { + rids[i].IdentityParam = "" + } else { + rids[i].IdentityParam = segments[0] + } } - expectedLength := len(segmentsList[0]) - for i := 1; i < len(segmentsList); i++ { - if len(segmentsList[i]) != expectedLength { - return rids + // Move the id with empty IdentityParam to the end of the list + for i, ids := range rids { + if ids.IdentityParam == "" { + temp := ids + lastIndex := len(rids) - 1 + if i != lastIndex { + rids[i] = rids[lastIndex] + rids[lastIndex] = temp + } + break } } - varyingIndex := -1 + return rids +} - for i := 0; i < expectedLength; i++ { - referenceSegment := segmentsList[0][i] - isVarying := false +// Finds elements common to ALL lists in a list of lists +// and returns a new list of lists with those common elements removed. +func removeSharedElements(list_of_lists [][]string) [][]string { + if len(list_of_lists) <= 1 { + return list_of_lists + } - for j := 1; j < len(segmentsList); j++ { - if segmentsList[j][i] != referenceSegment { - isVarying = true - break - } + sharedSet := make(map[string]bool) + for _, element := range list_of_lists[0] { + sharedSet[element] = true + } + + for i := 1; i < len(list_of_lists); i++ { + currentListSet := make(map[string]bool) + for _, element := range list_of_lists[i] { + currentListSet[element] = true } - if isVarying { - if varyingIndex != -1 { - return rids + newSharedSet := make(map[string]bool) + + for element := range sharedSet { + if currentListSet[element] { + newSharedSet[element] = true } - varyingIndex = i + } + + sharedSet = newSharedSet + + if len(sharedSet) == 0 { + break } } - if varyingIndex != -1 { - for i, segments := range segmentsList { - rids[i].IdentityParam = segments[varyingIndex] + var new_list_of_lists [][]string + + for _, sublist := range list_of_lists { + var newSublist []string + for _, element := range sublist { + if !sharedSet[element] { + newSublist = append(newSublist, element) + } } - return rids + new_list_of_lists = append(new_list_of_lists, newSublist) } - return rids + return new_list_of_lists } type TgcWithProducts struct { diff --git a/mmv1/templates/tgc_next/cai2hcl/convert_resource.go.tmpl b/mmv1/templates/tgc_next/cai2hcl/convert_resource.go.tmpl index 6dad5e8c6c90..981945977cd6 100644 --- a/mmv1/templates/tgc_next/cai2hcl/convert_resource.go.tmpl +++ b/mmv1/templates/tgc_next/cai2hcl/convert_resource.go.tmpl @@ -46,8 +46,10 @@ func ConvertResource(asset caiasset.Asset) ([]*models.TerraformResourceBlock, er {{- range $i, $object := $resources }} {{- if eq $i 0 }} if strings.Contains(asset.Name, "{{$object.IdentityParam}}") { - {{- else }} + {{- else if $object.IdentityParam }} } else if strings.Contains(asset.Name, "{{$object.IdentityParam}}") { + {{- else }} + } else { {{- end }} converter = ConverterMap[asset.Type]["{{ $object.AliasName }}"] {{- if eq $i (sub (len $resources) 1)}}