diff --git a/mmv1/third_party/terraform/tests/resource_cloudbuild_worker_pool_test.go.erb b/mmv1/third_party/terraform/tests/resource_cloudbuild_worker_pool_test.go.erb index 100a723a98eb..b5b2f4aa0a8e 100644 --- a/mmv1/third_party/terraform/tests/resource_cloudbuild_worker_pool_test.go.erb +++ b/mmv1/third_party/terraform/tests/resource_cloudbuild_worker_pool_test.go.erb @@ -1,7 +1,6 @@ <% autogen_exception -%> package google -<% unless version == 'ga' -%> import ( "fmt" "strings" @@ -190,4 +189,3 @@ func funcAccTestCloudbuildWorkerPoolCheckDestroy(t *testing.T) func(s *terraform return nil } } -<% end -%> diff --git a/mmv1/third_party/terraform/utils/config.go.erb b/mmv1/third_party/terraform/utils/config.go.erb index c837874a8040..3cddf6895a87 100644 --- a/mmv1/third_party/terraform/utils/config.go.erb +++ b/mmv1/third_party/terraform/utils/config.go.erb @@ -134,7 +134,6 @@ type Config struct { <% unless version == 'ga' -%> // CloudBuild WorkerPool uses a different endpoint (v1beta1) than any other CloudBuild resources CloudBuildWorkerPoolBasePath string - <% end -%> } <% products.each do |product| -%> diff --git a/mmv1/third_party/terraform/utils/provider.go.erb b/mmv1/third_party/terraform/utils/provider.go.erb index a012c93c9bcc..87bfc8a53cef 100644 --- a/mmv1/third_party/terraform/utils/provider.go.erb +++ b/mmv1/third_party/terraform/utils/provider.go.erb @@ -189,9 +189,7 @@ func Provider() *schema.Provider { VmwareEndpointEntryKey: VmwareEndpointEntry, <% end -%> - <% unless version == "ga" -%> CloudBuildWorkerPoolEndpointEntryKey: CloudBuildWorkerPoolEndpointEntry, - <% end -%> }, ProviderMetaSchema: map[string]*schema.Schema{ @@ -456,9 +454,7 @@ end # products.each do // resources implemented within tpgtools map[string]*schema.Resource{ "google_assured_workloads_workload": resourceAssuredWorkloadsWorkload(), - <% unless version == 'ga' -%> "google_cloudbuild_worker_pool": resourceCloudbuildWorkerPool(), - <% end -%> "google_compute_firewall_policy_association": resourceComputeFirewallPolicyAssociation(), "google_compute_firewall_policy": resourceComputeFirewallPolicy(), "google_compute_firewall_policy_rule": resourceComputeFirewallPolicyRule(), @@ -655,9 +651,7 @@ func providerConfigure(ctx context.Context, d *schema.ResourceData, p *schema.Pr config.GkeHubBasePath = d.Get(GkeHubFeatureCustomEndpointEntryKey).(string) config.OrgPolicyBasePath = d.Get(OrgPolicyEndpointEntryKey).(string) config.PrivatecaBasePath = d.Get(PrivatecaCertificateTemplateEndpointEntryKey).(string) - <% unless version == "ga" -%> config.CloudBuildWorkerPoolBasePath = d.Get(CloudBuildWorkerPoolEndpointEntryKey).(string) - <% end -%> stopCtx, ok := schema.StopContext(ctx) if !ok { diff --git a/tpgtools/overrides/cloudbuild/tpgtools_product.yaml b/tpgtools/overrides/cloudbuild/tpgtools_product.yaml new file mode 100644 index 000000000000..c14db0746cb2 --- /dev/null +++ b/tpgtools/overrides/cloudbuild/tpgtools_product.yaml @@ -0,0 +1,6 @@ +- type: PRODUCT_BASE_PATH + details: + basepathidentifier: cloud_build_worker_pool +- type: PRODUCT_TITLE # used to align with mmv1 product + details: + title: "cloudbuild" diff --git a/tpgtools/overrides/cloudbuild/worker_pool.yaml b/tpgtools/overrides/cloudbuild/worker_pool.yaml new file mode 100644 index 000000000000..cd0c1f24a8fe --- /dev/null +++ b/tpgtools/overrides/cloudbuild/worker_pool.yaml @@ -0,0 +1,4 @@ +- type: DIFF_SUPPRESS_FUNC + field: network_config.peered_network + details: + diffsuppressfunc: compareResourceNames \ No newline at end of file diff --git a/tpgtools/serialization.go b/tpgtools/serialization.go index 1d18850c54fd..e6635d5cf7a0 100644 --- a/tpgtools/serialization.go +++ b/tpgtools/serialization.go @@ -23,6 +23,7 @@ import ( assuredworkloads "github.com/GoogleCloudPlatform/declarative-resource-client-library/services/google/assuredworkloads" assuredworkloadsBeta "github.com/GoogleCloudPlatform/declarative-resource-client-library/services/google/assuredworkloads/beta" + cloudbuild "github.com/GoogleCloudPlatform/declarative-resource-client-library/services/google/cloudbuild" cloudbuildBeta "github.com/GoogleCloudPlatform/declarative-resource-client-library/services/google/cloudbuild/beta" cloudresourcemanager "github.com/GoogleCloudPlatform/declarative-resource-client-library/services/google/cloudresourcemanager" cloudresourcemanagerBeta "github.com/GoogleCloudPlatform/declarative-resource-client-library/services/google/cloudresourcemanager/beta" @@ -88,6 +89,8 @@ func DCLToTerraformReference(resourceType, version string) (string, error) { switch resourceType { case "AssuredWorkloadsWorkload": return "google_assured_workloads_workload", nil + case "CloudbuildWorkerPool": + return "google_cloudbuild_worker_pool", nil case "CloudResourceManagerFolder": return "google_folder", nil case "CloudResourceManagerProject": @@ -123,6 +126,8 @@ func DCLToTerraformSampleName(service, resource string) (string, string, error) switch service + resource { case "assuredworkloadsworkload": return "AssuredWorkloads", "Workload", nil + case "cloudbuildworkerpool": + return "cloudbuild", "WorkerPool", nil case "cloudresourcemanagerfolder": return "CloudResourceManager", "Folder", nil case "cloudresourcemanagerproject": @@ -263,6 +268,12 @@ func ConvertSampleJSONToHCL(resourceType string, version string, hasGAEquivalent return "", err } return AssuredWorkloadsWorkloadAsHCL(*r, hasGAEquivalent) + case "CloudbuildWorkerPool": + r := &cloudbuild.WorkerPool{} + if err := json.Unmarshal(b, r); err != nil { + return "", err + } + return CloudbuildWorkerPoolAsHCL(*r, hasGAEquivalent) case "CloudResourceManagerFolder": r := &cloudresourcemanager.Folder{} if err := json.Unmarshal(b, r); err != nil { @@ -2708,6 +2719,71 @@ func convertAssuredWorkloadsWorkloadResourcesToHCL(r *assuredworkloads.WorkloadR return outputConfig + "}" } +// CloudbuildWorkerPoolAsHCL returns a string representation of the specified resource in HCL. +// The generated HCL will include every settable field as a literal - that is, no +// variables, no references. This may not be the best possible representation, but +// the crucial point is that `terraform import; terraform apply` will not produce +// any changes. We do not validate that the resource specified will pass terraform +// validation unless is an object returned from the API after an Apply. +func CloudbuildWorkerPoolAsHCL(r cloudbuild.WorkerPool, hasGAEquivalent bool) (string, error) { + outputConfig := "resource \"google_cloudbuild_worker_pool\" \"output\" {\n" + if r.Location != nil { + outputConfig += fmt.Sprintf("\tlocation = %#v\n", *r.Location) + } + if r.Name != nil { + outputConfig += fmt.Sprintf("\tname = %#v\n", *r.Name) + } + if r.DisplayName != nil { + outputConfig += fmt.Sprintf("\tdisplay_name = %#v\n", *r.DisplayName) + } + if v := convertCloudbuildWorkerPoolNetworkConfigToHCL(r.NetworkConfig); v != "" { + outputConfig += fmt.Sprintf("\tnetwork_config %s\n", v) + } + if r.Project != nil { + outputConfig += fmt.Sprintf("\tproject = %#v\n", *r.Project) + } + if v := convertCloudbuildWorkerPoolWorkerConfigToHCL(r.WorkerConfig); v != "" { + outputConfig += fmt.Sprintf("\tworker_config %s\n", v) + } + formatted, err := formatHCL(outputConfig + "}") + if err != nil { + return "", err + } + if !hasGAEquivalent { + // The formatter will not accept the google-beta symbol because it is injected during testing. + return withProviderLine(formatted), nil + } + return formatted, nil +} + +func convertCloudbuildWorkerPoolNetworkConfigToHCL(r *cloudbuild.WorkerPoolNetworkConfig) string { + if r == nil { + return "" + } + outputConfig := "{\n" + if r.PeeredNetwork != nil { + outputConfig += fmt.Sprintf("\tpeered_network = %#v\n", *r.PeeredNetwork) + } + return outputConfig + "}" +} + +func convertCloudbuildWorkerPoolWorkerConfigToHCL(r *cloudbuild.WorkerPoolWorkerConfig) string { + if r == nil { + return "" + } + outputConfig := "{\n" + if r.DiskSizeGb != nil { + outputConfig += fmt.Sprintf("\tdisk_size_gb = %#v\n", *r.DiskSizeGb) + } + if r.MachineType != nil { + outputConfig += fmt.Sprintf("\tmachine_type = %#v\n", *r.MachineType) + } + if r.NoExternalIP != nil { + outputConfig += fmt.Sprintf("\tno_external_ip = %#v\n", *r.NoExternalIP) + } + return outputConfig + "}" +} + // CloudResourceManagerFolderAsHCL returns a string representation of the specified resource in HCL. // The generated HCL will include every settable field as a literal - that is, no // variables, no references. This may not be the best possible representation, but @@ -6692,6 +6768,50 @@ func convertAssuredWorkloadsWorkloadResourcesList(i interface{}) (out []map[stri return out } +func convertCloudbuildWorkerPoolNetworkConfig(i interface{}) map[string]interface{} { + if i == nil { + return nil + } + in := i.(map[string]interface{}) + return map[string]interface{}{ + "peeredNetwork": in["peered_network"], + } +} + +func convertCloudbuildWorkerPoolNetworkConfigList(i interface{}) (out []map[string]interface{}) { + if i == nil { + return nil + } + + for _, v := range i.([]interface{}) { + out = append(out, convertCloudbuildWorkerPoolNetworkConfig(v)) + } + return out +} + +func convertCloudbuildWorkerPoolWorkerConfig(i interface{}) map[string]interface{} { + if i == nil { + return nil + } + in := i.(map[string]interface{}) + return map[string]interface{}{ + "diskSizeGb": in["disk_size_gb"], + "machineType": in["machine_type"], + "noExternalIP": in["no_external_ip"], + } +} + +func convertCloudbuildWorkerPoolWorkerConfigList(i interface{}) (out []map[string]interface{}) { + if i == nil { + return nil + } + + for _, v := range i.([]interface{}) { + out = append(out, convertCloudbuildWorkerPoolWorkerConfig(v)) + } + return out +} + func convertComputeFirewallPolicyRuleMatch(i interface{}) map[string]interface{} { if i == nil { return nil