Skip to content

Commit 82edd43

Browse files
authored
tgc-revival: fix cai asset name format (#15414)
1 parent 24424ca commit 82edd43

File tree

31 files changed

+78
-27
lines changed

31 files changed

+78
-27
lines changed

docs/content/reference/metadata.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ The version of the API used for this resource e.g., "v2".
3131

3232
The API "resource type kind" used for this resource e.g., "Function".
3333

34+
### `cai_asset_name_format`
35+
36+
The custom CAI asset name format for this resource is typically specified (e.g., //cloudsql.googleapis.com/projects/{{project}}/instances/{{name}}). If this format is not provided, the Terraform resource ID format is used instead.
37+
3438
### `api_variant_patterns`
3539

3640
The API URL patterns used by this resource that represent variants e.g., "folders/{folder}/feeds/{feed}". Each pattern must match the value defined in the API exactly. The use of `api_variant_patterns` is only meaningful when the resource type has multiple parent types available.

mmv1/api/product.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@ type Product struct {
6565
// base URL. Specific to defining the resource as a CAI asset.
6666
CaiBaseUrl string
6767

68+
// The service name from CAI asset name, e.g. bigtable.googleapis.com.
69+
CaiAssetService string `yaml:"cai_asset_service,omitempty"`
70+
6871
// CaiResourceType of resources that already have an AssetType constant defined in the product.
6972
ResourcesWithCaiAssetType map[string]struct{}
7073

mmv1/api/resource.go

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,9 @@ type TGCResource struct {
397397
// Tests for TGC, will automatically be filled with resource's examples
398398
// and handwritten tests. Can be specified in order to skip specific tests.
399399
TGCTests []resource.TGCTest `yaml:"tgc_tests,omitempty"`
400+
401+
// [Optional] It overrides the default Cai asset name format, which is the resource id format
402+
CaiAssetNameFormat string `yaml:"cai_asset_name_format,omitempty"`
400403
}
401404

402405
func (r *Resource) UnmarshalYAML(unmarshal func(any) error) error {
@@ -1949,12 +1952,7 @@ func (r Resource) StateUpgradersCount() []int {
19491952
}
19501953

19511954
func (r Resource) CaiProductBaseUrl() string {
1952-
version := r.ProductMetadata.VersionObjOrClosest(r.TargetVersionName)
1953-
baseUrl := version.CaiBaseUrl
1954-
if baseUrl == "" {
1955-
baseUrl = version.BaseUrl
1956-
}
1957-
return baseUrl
1955+
return r.ProductMetadata.ServiceBaseUrl()
19581956
}
19591957

19601958
// Gets the CAI product legacy base url.
@@ -2074,16 +2072,31 @@ func (r Resource) getCandidateCaiId(url string) string {
20742072
return ""
20752073
}
20762074

2077-
// Gets the Cai asset name template, which doesn't include version
2078-
// For example: //monitoring.googleapis.com/projects/{{project}}/services/{{service_id}}
2079-
func (r Resource) CaiAssetNameTemplate(productBackendName string) string {
2080-
template := r.rawCaiAssetNameTemplate(productBackendName)
2081-
versionRegex, err := regexp.Compile(`\/(v\d[^\/]*)\/`)
2082-
if err != nil {
2083-
log.Fatalf("Cannot compile the regular expression: %v", err)
2075+
// Gets a format string that is used to override the default format from resource id format
2076+
func (r Resource) CAIFormatOverride() string {
2077+
caiAssetService := strings.Trim(r.ProductMetadata.CaiAssetService, "/")
2078+
if r.CaiAssetNameFormat != "" || caiAssetService != "" {
2079+
if caiAssetService == "" {
2080+
caiAssetService = r.ProductMetadata.ServiceName()
2081+
}
2082+
2083+
caiAssetName := r.CaiAssetNameFormat
2084+
if caiAssetName == "" {
2085+
caiAssetName = r.IdFormat
2086+
}
2087+
return fmt.Sprintf("//%s/%s", caiAssetService, caiAssetName)
2088+
}
2089+
return ""
2090+
}
2091+
2092+
// Gets a format string for CAI asset name
2093+
func (r Resource) GetCaiAssetNameTemplate() string {
2094+
caiAssetNameFormat := r.CAIFormatOverride()
2095+
if caiAssetNameFormat != "" {
2096+
return caiAssetNameFormat
20842097
}
20852098

2086-
return versionRegex.ReplaceAllString(template, "/")
2099+
return fmt.Sprintf("//%s.googleapis.com/%s", r.CaiProductBackendName(r.CaiProductBaseUrl()), r.IdFormat)
20872100
}
20882101

20892102
// Gets the Cai API version

mmv1/products/accesscontextmanager/AccessPolicy.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ docs:
3333
id_format: '{{name}}'
3434
base_url: 'accessPolicies'
3535
self_link: 'accessPolicies/{{name}}'
36+
cai_asset_name_format: 'accessPolicies/{{name}}'
3637
update_verb: 'PATCH'
3738
update_mask: true
3839
import_format:

mmv1/products/bigtable/product.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,4 @@ versions:
1919
base_url: 'https://bigtableadmin.googleapis.com/v2/'
2020
scopes:
2121
- 'https://www.googleapis.com/auth/bigtable'
22+
cai_asset_service: 'bigtable.googleapis.com'

mmv1/products/billing/ProjectInfo.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ references:
2323
docs:
2424
id_format: 'projects/{{project}}'
2525
base_url: 'projects/{{project}}/billingInfo'
26+
cai_asset_name_format: 'projects/{{project}}/billingInfo'
2627
create_verb: 'PUT'
2728
delete_verb: 'PUT'
2829
import_format:

mmv1/products/binaryauthorization/Policy.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ docs:
2323
id_format: 'projects/{{project}}'
2424
base_url: 'projects/{{project}}/policy'
2525
self_link: 'projects/{{project}}/policy'
26+
cai_asset_name_format: 'projects/{{project}}/policy'
2627
create_verb: 'PUT'
2728
delete_verb: 'PUT'
2829
import_format:

mmv1/products/cloudasset/FolderFeed.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ custom_code:
4242
supports_indirect_user_project_override: true
4343
include_in_tgc_next_DO_NOT_USE: true
4444
cai_base_url: 'folders/{{folder}}/feeds'
45+
cai_asset_name_format: 'folders/{{folder}}/feeds/{{feed_id}}'
4546
tgc_ignore_terraform_encoder: true
4647
examples:
4748
- name: 'cloud_asset_folder_feed'

mmv1/products/cloudasset/OrganizationFeed.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ custom_code:
4242
supports_indirect_user_project_override: true
4343
include_in_tgc_next_DO_NOT_USE: true
4444
cai_base_url: 'organizations/{{org_id}}/feeds'
45+
cai_asset_name_format: 'organizations/{{org_id}}/feeds/{{feed_id}}'
4546
tgc_ignore_terraform_encoder: true
4647
examples:
4748
- name: 'cloud_asset_organization_feed'

mmv1/products/cloudasset/ProjectFeed.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ custom_code:
4040
custom_import: 'templates/terraform/custom_import/cloud_asset_feed.go.tmpl'
4141
include_in_tgc_next_DO_NOT_USE: true
4242
cai_base_url: 'projects/{{project}}/feeds'
43+
cai_asset_name_format: 'projects/{{project}}/feeds/{{feed_id}}'
4344
tgc_ignore_terraform_encoder: true
4445
examples:
4546
- name: 'cloud_asset_project_feed'

0 commit comments

Comments
 (0)