diff --git a/pkg/cai2hcl/converters/resource_converters.go b/pkg/cai2hcl/converters/resource_converters.go index 5e40da7233..cd7b2f734e 100644 --- a/pkg/cai2hcl/converters/resource_converters.go +++ b/pkg/cai2hcl/converters/resource_converters.go @@ -101,6 +101,9 @@ var ConverterMap = map[string]map[string]models.Cai2hclConverter{ "Default": container.NewContainerClusterCai2hclConverter(provider), }, // ####### END handwritten resources ########### + "aiplatform.googleapis.com/NotebookExecutionJob": { + "Default": colab.NewColabNotebookExecutionCai2hclConverter(provider), + }, "aiplatform.googleapis.com/NotebookRuntime": { "Default": colab.NewColabRuntimeCai2hclConverter(provider), }, diff --git a/pkg/services/colab/colab_notebook_execution.go b/pkg/services/colab/colab_notebook_execution.go new file mode 100644 index 0000000000..8cd0dea023 --- /dev/null +++ b/pkg/services/colab/colab_notebook_execution.go @@ -0,0 +1,303 @@ +// ---------------------------------------------------------------------------- +// +// *** AUTO GENERATED CODE *** Type: MMv1 *** +// +// ---------------------------------------------------------------------------- +// +// This code is generated by Magic Modules using the following: +// +// Configuration: https://github.com/GoogleCloudPlatform/magic-modules/tree/main/mmv1/products/colab/NotebookExecution.yaml +// Template: https://github.com/GoogleCloudPlatform/magic-modules/tree/main/mmv1/templates/tgc_next/services/resource.go.tmpl +// +// DO NOT EDIT this file directly. Any changes made to this file will be +// overwritten during the next generation cycle. +// +// ---------------------------------------------------------------------------- + +package colab + +import ( + "bytes" + "context" + "encoding/json" + "fmt" + "log" + "reflect" + "regexp" + "sort" + "strconv" + "strings" + "time" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/structure" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" + + "github.com/GoogleCloudPlatform/terraform-google-conversion/v7/pkg/registry" + "github.com/GoogleCloudPlatform/terraform-google-conversion/v7/pkg/tgcresource" + "github.com/GoogleCloudPlatform/terraform-google-conversion/v7/pkg/tpgresource" + transport_tpg "github.com/GoogleCloudPlatform/terraform-google-conversion/v7/pkg/transport" + "github.com/GoogleCloudPlatform/terraform-google-conversion/v7/pkg/verify" +) + +var ( + _ = bytes.Clone + _ = context.WithCancel + _ = fmt.Sprintf + _ = json.Unmarshal + _ = log.Print + _ = reflect.ValueOf + _ = regexp.Match + _ = sort.IntSlice{} + _ = strconv.Atoi + _ = strings.Trim + _ = time.Now + _ = schema.Noop + _ = structure.NormalizeJsonString + _ = validation.All + _ = tgcresource.RemoveTerraformAttributionLabel + _ = tpgresource.GetRegion + _ = transport_tpg.Config{} + _ = verify.ProjectRegex +) + +func init() { + registry.Schema{ + Name: "google_colab_notebook_execution", + ProductName: "colab", + Type: registry.SchemaTypeResource, + Schema: ResourceColabNotebookExecution(), + }.Register() +} + +const ColabNotebookExecutionJobAssetType string = "aiplatform.googleapis.com/NotebookExecutionJob" + +const ColabNotebookExecutionSchemaName string = "google_colab_notebook_execution" + +func ResourceColabNotebookExecution() *schema.Resource { + return &schema.Resource{ + Schema: map[string]*schema.Schema{ + "display_name": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: `Required. The display name of the Notebook Execution.`, + }, + "gcs_output_uri": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: `The Cloud Storage location to upload the result to. Format:'gs://bucket-name'`, + }, + "location": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: `The location for the resource: https://cloud.google.com/colab/docs/locations`, + }, + "custom_environment_spec": { + Type: schema.TypeList, + Optional: true, + ForceNew: true, + Description: `Compute configuration to use for an execution job`, + MaxItems: 1, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "machine_spec": { + Type: schema.TypeList, + Optional: true, + ForceNew: true, + Description: `'The machine configuration of the runtime.'`, + MaxItems: 1, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "accelerator_count": { + Type: schema.TypeInt, + Optional: true, + ForceNew: true, + Description: `The number of accelerators used by the runtime.`, + }, + "accelerator_type": { + Type: schema.TypeString, + Optional: true, + ForceNew: true, + Description: `The type of hardware accelerator used by the runtime. If specified, acceleratorCount must also be specified.`, + }, + "machine_type": { + Type: schema.TypeString, + Optional: true, + ForceNew: true, + Description: `The Compute Engine machine type selected for the runtime.`, + }, + }, + }, + }, + "network_spec": { + Type: schema.TypeList, + Optional: true, + ForceNew: true, + Description: `The network configuration for the runtime.`, + MaxItems: 1, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "enable_internet_access": { + Type: schema.TypeBool, + Optional: true, + ForceNew: true, + Description: `Enable public internet access for the runtime.`, + }, + "network": { + Type: schema.TypeString, + Optional: true, + ForceNew: true, + DiffSuppressFunc: tpgresource.CompareSelfLinkRelativePaths, + Description: `The name of the VPC that this runtime is in.`, + }, + "subnetwork": { + Type: schema.TypeString, + Optional: true, + ForceNew: true, + DiffSuppressFunc: tpgresource.CompareSelfLinkRelativePaths, + Description: `The name of the subnetwork that this runtime is in.`, + }, + }, + }, + }, + "persistent_disk_spec": { + Type: schema.TypeList, + Optional: true, + ForceNew: true, + Description: `The configuration for the data disk of the runtime.`, + MaxItems: 1, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "disk_size_gb": { + Type: schema.TypeString, + Optional: true, + ForceNew: true, + Description: `The disk size of the runtime in GB. If specified, the diskType must also be specified. The minimum size is 10GB and the maximum is 65536GB.`, + }, + "disk_type": { + Type: schema.TypeString, + Optional: true, + ForceNew: true, + Description: `The type of the persistent disk.`, + }, + }, + }, + }, + }, + }, + ExactlyOneOf: []string{"custom_environment_spec", "notebook_runtime_template_resource_name"}, + }, + "dataform_repository_source": { + Type: schema.TypeList, + Optional: true, + ForceNew: true, + Description: `The Dataform Repository containing the input notebook.`, + MaxItems: 1, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "dataform_repository_resource_name": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + DiffSuppressFunc: tpgresource.CompareSelfLinkRelativePaths, + Description: `The resource name of the Dataform Repository.`, + }, + "commit_sha": { + Type: schema.TypeString, + Optional: true, + ForceNew: true, + Description: `The commit SHA to read repository with. If unset, the file will be read at HEAD.`, + }, + }, + }, + ExactlyOneOf: []string{"dataform_repository_source", "direct_notebook_source", "gcs_notebook_source"}, + }, + "direct_notebook_source": { + Type: schema.TypeList, + Optional: true, + ForceNew: true, + Description: `The content of the input notebook in ipynb format.`, + MaxItems: 1, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "content": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: `The base64-encoded contents of the input notebook file.`, + }, + }, + }, + ExactlyOneOf: []string{"dataform_repository_source", "direct_notebook_source", "gcs_notebook_source"}, + }, + "execution_timeout": { + Type: schema.TypeString, + Optional: true, + ForceNew: true, + Description: `Max running time of the execution job in seconds (default 86400s / 24 hrs).`, + }, + "execution_user": { + Type: schema.TypeString, + Optional: true, + ForceNew: true, + Description: `The user email to run the execution as.`, + ExactlyOneOf: []string{"execution_user", "service_account"}, + }, + "gcs_notebook_source": { + Type: schema.TypeList, + Optional: true, + ForceNew: true, + Description: `The Cloud Storage uri for the input notebook.`, + MaxItems: 1, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "uri": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: `The Cloud Storage uri pointing to the ipynb file.`, + }, + "generation": { + Type: schema.TypeString, + Optional: true, + ForceNew: true, + Description: `The version of the Cloud Storage object to read. If unset, the current version of the object is read. See https://cloud.google.com/storage/docs/metadata#generation-number.`, + }, + }, + }, + ExactlyOneOf: []string{"dataform_repository_source", "direct_notebook_source", "gcs_notebook_source"}, + }, + "notebook_execution_job_id": { + Type: schema.TypeString, + Computed: true, + Optional: true, + ForceNew: true, + Description: `User specified ID for the Notebook Execution Job`, + }, + "notebook_runtime_template_resource_name": { + Type: schema.TypeString, + Optional: true, + ForceNew: true, + Description: `The NotebookRuntimeTemplate to source compute configuration from.`, + ExactlyOneOf: []string{"custom_environment_spec", "notebook_runtime_template_resource_name"}, + }, + "service_account": { + Type: schema.TypeString, + Optional: true, + ForceNew: true, + Description: `The service account to run the execution as.`, + ExactlyOneOf: []string{"execution_user", "service_account"}, + }, + "project": { + Type: schema.TypeString, + Optional: true, + Computed: true, + ForceNew: true, + }, + }, + UseJSONNumber: true, + } +} diff --git a/pkg/services/colab/colab_notebook_execution_cai2hcl.go b/pkg/services/colab/colab_notebook_execution_cai2hcl.go new file mode 100644 index 0000000000..54fd73fc69 --- /dev/null +++ b/pkg/services/colab/colab_notebook_execution_cai2hcl.go @@ -0,0 +1,461 @@ +// ---------------------------------------------------------------------------- +// +// *** AUTO GENERATED CODE *** Type: MMv1 *** +// +// ---------------------------------------------------------------------------- +// +// This code is generated by Magic Modules using the following: +// +// Configuration: https://github.com/GoogleCloudPlatform/magic-modules/tree/main/mmv1/products/colab/NotebookExecution.yaml +// Template: https://github.com/GoogleCloudPlatform/magic-modules/tree/main/mmv1/templates/tgc_next/cai2hcl/resource_converter.go.tmpl +// +// DO NOT EDIT this file directly. Any changes made to this file will be +// overwritten during the next generation cycle. +// +// ---------------------------------------------------------------------------- + +package colab + +import ( + "crypto/sha256" + "encoding/hex" + "encoding/json" + "fmt" + "log" + "reflect" + "regexp" + "strings" + + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/id" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/logging" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/structure" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + + "github.com/GoogleCloudPlatform/terraform-google-conversion/v7/pkg/cai2hcl/converters/utils" + "github.com/GoogleCloudPlatform/terraform-google-conversion/v7/pkg/cai2hcl/models" + "github.com/GoogleCloudPlatform/terraform-google-conversion/v7/pkg/caiasset" + "github.com/GoogleCloudPlatform/terraform-google-conversion/v7/pkg/tgcresource" + "github.com/GoogleCloudPlatform/terraform-google-conversion/v7/pkg/tpgresource" + "github.com/GoogleCloudPlatform/terraform-google-conversion/v7/pkg/transport" + transport_tpg "github.com/GoogleCloudPlatform/terraform-google-conversion/v7/pkg/transport" + "github.com/GoogleCloudPlatform/terraform-google-conversion/v7/pkg/verify" + + "google.golang.org/api/googleapi" +) + +var ( + _ = fmt.Sprintf + _ = reflect.ValueOf + _ = strings.Trim + _ = diag.Diagnostic{} + _ = customdiff.All + _ = id.UniqueId + _ = logging.LogLevel + _ = log.Printf + _ = retry.Retry + _ = schema.Noop + _ = structure.ExpandJsonFromString + _ = validation.All + _ = terraform.State{} + _ = tgcresource.RemoveTerraformAttributionLabel + _ = tpgresource.GetRegion + _ = transport_tpg.Config{} + _ = verify.ProjectRegex + _ = googleapi.Error{} + _ = json.Unmarshal +) + +type ColabNotebookExecutionCai2hclConverter struct { + name string + schema map[string]*schema.Schema +} + +func NewColabNotebookExecutionCai2hclConverter(provider *schema.Provider) models.Cai2hclConverter { + schema := provider.ResourcesMap[ColabNotebookExecutionSchemaName].Schema + + return &ColabNotebookExecutionCai2hclConverter{ + name: ColabNotebookExecutionSchemaName, + schema: schema, + } +} + +// Convert converts asset to HCL resource blocks. +func (c *ColabNotebookExecutionCai2hclConverter) Convert(asset caiasset.Asset) ([]*models.TerraformResourceBlock, error) { + var blocks []*models.TerraformResourceBlock + block, err := c.convertResourceData(asset) + if err != nil { + return nil, err + } + blocks = append(blocks, block) + return blocks, nil +} + +func (c *ColabNotebookExecutionCai2hclConverter) convertResourceData(asset caiasset.Asset) (*models.TerraformResourceBlock, error) { + if asset.Resource == nil || asset.Resource.Data == nil { + return nil, fmt.Errorf("asset resource data is nil") + } + + var err error + res := asset.Resource.Data + config := transport.NewConfig() + + // This is a fake resource used to get fake d + // d.Get will return empty map, instead of nil + fakeResource := &schema.Resource{ + Schema: c.schema, + } + d := fakeResource.TestResourceData() + + assetNameParts := strings.Split(asset.Name, "/") + + hclBlockName := assetNameParts[len(assetNameParts)-1] + digitRegex := regexp.MustCompile(`^\d+$`) + nameValidator := regexp.MustCompile("^[a-zA-Z_][a-zA-Z0-9_-]*$") + if digitRegex.MatchString(hclBlockName) || !nameValidator.MatchString(hclBlockName) { + hasher := sha256.New() + hasher.Write([]byte(hclBlockName)) + fullHash := hex.EncodeToString(hasher.Sum(nil)) + hclBlockName = fmt.Sprintf("resource%s", fullHash[:8]) + } + hclData := make(map[string]interface{}) + + outputFields := map[string]struct{}{} + utils.ParseUrlParamValuesFromAssetName(asset.Name, "//aiplatform.googleapis.com/projects/{{project}}/locations/{{location}}/notebookExecutionJobs/{{notebook_execution_job_id}}", outputFields, hclData) + + hclData["display_name"] = flattenColabNotebookExecutionDisplayName(res["displayName"], d, config) + hclData["dataform_repository_source"] = flattenColabNotebookExecutionDataformRepositorySource(res["dataformRepositorySource"], d, config) + hclData["gcs_notebook_source"] = flattenColabNotebookExecutionGcsNotebookSource(res["gcsNotebookSource"], d, config) + hclData["direct_notebook_source"] = flattenColabNotebookExecutionDirectNotebookSource(res["directNotebookSource"], d, config) + hclData["execution_timeout"] = flattenColabNotebookExecutionExecutionTimeout(res["executionTimeout"], d, config) + hclData["notebook_runtime_template_resource_name"] = flattenColabNotebookExecutionNotebookRuntimeTemplateResourceName(res["notebookRuntimeTemplateResourceName"], d, config) + hclData["custom_environment_spec"] = flattenColabNotebookExecutionCustomEnvironmentSpec(res["customEnvironmentSpec"], d, config) + hclData["gcs_output_uri"] = flattenColabNotebookExecutionGcsOutputUri(res["gcsOutputUri"], d, config) + hclData["execution_user"] = flattenColabNotebookExecutionExecutionUser(res["executionUser"], d, config) + hclData["service_account"] = flattenColabNotebookExecutionServiceAccount(res["serviceAccount"], d, config) + + ctyVal, err := utils.MapToCtyValWithSchema(hclData, c.schema) + if err != nil { + return nil, err + } + return &models.TerraformResourceBlock{ + Labels: []string{c.name, hclBlockName}, + Value: ctyVal, + }, nil +} + +func flattenColabNotebookExecutionDisplayName(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { + if v == nil { + return "unknown" + } + transformed := v.(string) + if transformed == "" { + return "unknown" + } + return v +} + +func flattenColabNotebookExecutionDataformRepositorySource(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { + if v == nil { + return nil + } + original := v.(map[string]interface{}) + transformed := make(map[string]interface{}) + transformed["dataform_repository_resource_name"] = + flattenColabNotebookExecutionDataformRepositorySourceDataformRepositoryResourceName(original["dataformRepositoryResourceName"], d, config) + transformed["commit_sha"] = + flattenColabNotebookExecutionDataformRepositorySourceCommitSha(original["commitSha"], d, config) + if tgcresource.AllValuesAreNil(transformed) { + return nil + } + return []interface{}{transformed} +} + +func flattenColabNotebookExecutionDataformRepositorySourceDataformRepositoryResourceName(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { + if v == nil { + return "unknown" + } + transformed := v.(string) + if transformed == "" { + return "unknown" + } + return v +} + +func flattenColabNotebookExecutionDataformRepositorySourceCommitSha(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { + if v == nil { + return nil + } + if strVal, ok := v.(string); ok && strVal == "" { + return nil + } + return v +} + +func flattenColabNotebookExecutionGcsNotebookSource(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { + if v == nil { + return nil + } + original := v.(map[string]interface{}) + transformed := make(map[string]interface{}) + transformed["uri"] = + flattenColabNotebookExecutionGcsNotebookSourceUri(original["uri"], d, config) + transformed["generation"] = + flattenColabNotebookExecutionGcsNotebookSourceGeneration(original["generation"], d, config) + if tgcresource.AllValuesAreNil(transformed) { + return nil + } + return []interface{}{transformed} +} + +func flattenColabNotebookExecutionGcsNotebookSourceUri(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { + if v == nil { + return "unknown" + } + transformed := v.(string) + if transformed == "" { + return "unknown" + } + return v +} + +func flattenColabNotebookExecutionGcsNotebookSourceGeneration(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { + if v == nil { + return nil + } + if strVal, ok := v.(string); ok && strVal == "" { + return nil + } + return v +} + +func flattenColabNotebookExecutionDirectNotebookSource(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { + if v == nil { + return nil + } + original := v.(map[string]interface{}) + transformed := make(map[string]interface{}) + transformed["content"] = + flattenColabNotebookExecutionDirectNotebookSourceContent(original["content"], d, config) + if tgcresource.AllValuesAreNil(transformed) { + return nil + } + return []interface{}{transformed} +} + +func flattenColabNotebookExecutionDirectNotebookSourceContent(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { + if v == nil { + return "unknown" + } + transformed := v.(string) + if transformed == "" { + return "unknown" + } + return v +} + +func flattenColabNotebookExecutionExecutionTimeout(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { + if v == nil { + return nil + } + if strVal, ok := v.(string); ok && strVal == "" { + return nil + } + return v +} + +func flattenColabNotebookExecutionNotebookRuntimeTemplateResourceName(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { + if v == nil { + return nil + } + if strVal, ok := v.(string); ok && strVal == "" { + return nil + } + return v +} + +func flattenColabNotebookExecutionCustomEnvironmentSpec(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { + if v == nil { + return nil + } + original := v.(map[string]interface{}) + transformed := make(map[string]interface{}) + transformed["machine_spec"] = + flattenColabNotebookExecutionCustomEnvironmentSpecMachineSpec(original["machineSpec"], d, config) + transformed["persistent_disk_spec"] = + flattenColabNotebookExecutionCustomEnvironmentSpecPersistentDiskSpec(original["persistentDiskSpec"], d, config) + transformed["network_spec"] = + flattenColabNotebookExecutionCustomEnvironmentSpecNetworkSpec(original["networkSpec"], d, config) + if tgcresource.AllValuesAreNil(transformed) { + return nil + } + return []interface{}{transformed} +} + +func flattenColabNotebookExecutionCustomEnvironmentSpecMachineSpec(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { + if v == nil { + return nil + } + original := v.(map[string]interface{}) + transformed := make(map[string]interface{}) + transformed["machine_type"] = + flattenColabNotebookExecutionCustomEnvironmentSpecMachineSpecMachineType(original["machineType"], d, config) + transformed["accelerator_type"] = + flattenColabNotebookExecutionCustomEnvironmentSpecMachineSpecAcceleratorType(original["acceleratorType"], d, config) + transformed["accelerator_count"] = + flattenColabNotebookExecutionCustomEnvironmentSpecMachineSpecAcceleratorCount(original["acceleratorCount"], d, config) + if tgcresource.AllValuesAreNil(transformed) { + return nil + } + return []interface{}{transformed} +} + +func flattenColabNotebookExecutionCustomEnvironmentSpecMachineSpecMachineType(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { + if v == nil { + return nil + } + if strVal, ok := v.(string); ok && strVal == "" { + return nil + } + return v +} + +func flattenColabNotebookExecutionCustomEnvironmentSpecMachineSpecAcceleratorType(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { + if v == nil { + return nil + } + if strVal, ok := v.(string); ok && strVal == "" { + return nil + } + return v +} + +func flattenColabNotebookExecutionCustomEnvironmentSpecMachineSpecAcceleratorCount(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { + // Handles the string fixed64 format + if strVal, ok := v.(string); ok { + if intVal, err := tpgresource.StringToFixed64(strVal); err == nil { + return intVal + } + } + + // number values are represented as float64 + if floatVal, ok := v.(float64); ok { + intVal := int(floatVal) + return intVal + } + + return v // let terraform core handle it otherwise +} + +func flattenColabNotebookExecutionCustomEnvironmentSpecPersistentDiskSpec(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { + if v == nil { + return nil + } + original := v.(map[string]interface{}) + transformed := make(map[string]interface{}) + transformed["disk_type"] = + flattenColabNotebookExecutionCustomEnvironmentSpecPersistentDiskSpecDiskType(original["diskType"], d, config) + transformed["disk_size_gb"] = + flattenColabNotebookExecutionCustomEnvironmentSpecPersistentDiskSpecDiskSizeGb(original["diskSizeGb"], d, config) + if tgcresource.AllValuesAreNil(transformed) { + return nil + } + return []interface{}{transformed} +} + +func flattenColabNotebookExecutionCustomEnvironmentSpecPersistentDiskSpecDiskType(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { + if v == nil { + return nil + } + if strVal, ok := v.(string); ok && strVal == "" { + return nil + } + return v +} + +func flattenColabNotebookExecutionCustomEnvironmentSpecPersistentDiskSpecDiskSizeGb(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { + if v == nil { + return nil + } + if strVal, ok := v.(string); ok && strVal == "" { + return nil + } + return v +} + +func flattenColabNotebookExecutionCustomEnvironmentSpecNetworkSpec(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { + if v == nil { + return nil + } + original := v.(map[string]interface{}) + transformed := make(map[string]interface{}) + transformed["enable_internet_access"] = + flattenColabNotebookExecutionCustomEnvironmentSpecNetworkSpecEnableInternetAccess(original["enableInternetAccess"], d, config) + transformed["network"] = + flattenColabNotebookExecutionCustomEnvironmentSpecNetworkSpecNetwork(original["network"], d, config) + transformed["subnetwork"] = + flattenColabNotebookExecutionCustomEnvironmentSpecNetworkSpecSubnetwork(original["subnetwork"], d, config) + if tgcresource.AllValuesAreNil(transformed) { + return nil + } + return []interface{}{transformed} +} + +func flattenColabNotebookExecutionCustomEnvironmentSpecNetworkSpecEnableInternetAccess(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { + return v +} + +func flattenColabNotebookExecutionCustomEnvironmentSpecNetworkSpecNetwork(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { + if v == nil { + return nil + } + if strVal, ok := v.(string); ok && strVal == "" { + return nil + } + return v +} + +func flattenColabNotebookExecutionCustomEnvironmentSpecNetworkSpecSubnetwork(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { + if v == nil { + return nil + } + if strVal, ok := v.(string); ok && strVal == "" { + return nil + } + return v +} + +func flattenColabNotebookExecutionGcsOutputUri(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { + if v == nil { + return "unknown" + } + transformed := v.(string) + if transformed == "" { + return "unknown" + } + return v +} + +func flattenColabNotebookExecutionExecutionUser(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { + if v == nil { + return nil + } + if strVal, ok := v.(string); ok && strVal == "" { + return nil + } + return v +} + +func flattenColabNotebookExecutionServiceAccount(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { + if v == nil { + return nil + } + if strVal, ok := v.(string); ok && strVal == "" { + return nil + } + return v +} diff --git a/pkg/services/colab/colab_notebook_execution_tfplan2cai.go b/pkg/services/colab/colab_notebook_execution_tfplan2cai.go new file mode 100644 index 0000000000..27c38f6ca1 --- /dev/null +++ b/pkg/services/colab/colab_notebook_execution_tfplan2cai.go @@ -0,0 +1,473 @@ +// ---------------------------------------------------------------------------- +// +// *** AUTO GENERATED CODE *** Type: MMv1 *** +// +// ---------------------------------------------------------------------------- +// +// This code is generated by Magic Modules using the following: +// +// Configuration: https://github.com/GoogleCloudPlatform/magic-modules/tree/main/mmv1/products/colab/NotebookExecution.yaml +// Template: https://github.com/GoogleCloudPlatform/magic-modules/tree/main/mmv1/templates/tgc_next/tfplan2cai/resource_converter.go.tmpl +// +// DO NOT EDIT this file directly. Any changes made to this file will be +// overwritten during the next generation cycle. +// +// ---------------------------------------------------------------------------- + +package colab + +import ( + "encoding/base64" + "encoding/json" + "fmt" + "log" + "reflect" + "regexp" + "strconv" + "strings" + "time" + + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/id" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/logging" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/structure" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + + "github.com/GoogleCloudPlatform/terraform-google-conversion/v7/pkg/caiasset" + "github.com/GoogleCloudPlatform/terraform-google-conversion/v7/pkg/tfplan2cai/converters/cai" + "github.com/GoogleCloudPlatform/terraform-google-conversion/v7/pkg/tgcresource" + "github.com/GoogleCloudPlatform/terraform-google-conversion/v7/pkg/tpgresource" + transport_tpg "github.com/GoogleCloudPlatform/terraform-google-conversion/v7/pkg/transport" + "github.com/GoogleCloudPlatform/terraform-google-conversion/v7/pkg/verify" + + "google.golang.org/api/googleapi" +) + +var ( + _ = base64.StdEncoding + _ = fmt.Sprintf + _ = log.Print + _ = reflect.ValueOf + _ = regexp.Match + _ = strconv.Atoi + _ = strings.Trim + _ = diag.Diagnostic{} + _ = customdiff.All + _ = id.UniqueId + _ = logging.LogLevel + _ = retry.Retry + _ = schema.Noop + _ = structure.ExpandJsonFromString + _ = time.Now + _ = validation.All + _ = terraform.State{} + _ = tgcresource.RemoveTerraformAttributionLabel + _ = tpgresource.GetRegion + _ = transport_tpg.Config{} + _ = verify.ProjectRegex + _ = googleapi.Error{} + _ = json.Unmarshal +) + +func ColabNotebookExecutionTfplan2caiConverter() cai.Tfplan2caiConverter { + return cai.Tfplan2caiConverter{ + Convert: GetColabNotebookExecutionCaiAssets, + } +} + +func GetColabNotebookExecutionCaiAssets(d tpgresource.TerraformResourceData, config *transport_tpg.Config) ([]caiasset.Asset, error) { + name, err := cai.AssetName(d, config, "//aiplatform.googleapis.com/projects/{{project}}/locations/{{location}}/notebookExecutionJobs/{{notebook_execution_job_id}}") + if err != nil { + return []caiasset.Asset{}, err + } + if obj, err := GetColabNotebookExecutionCaiObject(d, config); err == nil { + location, _ := tpgresource.GetLocation(d, config) + if location == "" { + location = "global" + } + // Store the ID now + id, err := tpgresource.ReplaceVars(d, config, "projects/{{project}}/locations/{{location}}/notebookExecutionJobs/{{notebook_execution_job_id}}") + if err != nil { + return nil, fmt.Errorf("Error constructing id: %s", err) + } + d.SetId(id) + return []caiasset.Asset{ + { + Name: name, + Type: ColabNotebookExecutionJobAssetType, + Resource: &caiasset.AssetResource{ + Version: "v1", + DiscoveryDocumentURI: "https://www.googleapis.com/discovery/v1/apis/aiplatform/v1/rest", + DiscoveryName: "NotebookExecutionJob", + Data: obj, + Location: location, + }, + }, + }, nil + } else { + return []caiasset.Asset{}, err + } +} + +func GetColabNotebookExecutionCaiObject(d tpgresource.TerraformResourceData, config *transport_tpg.Config) (map[string]interface{}, error) { + obj := make(map[string]interface{}) + displayNameProp, err := expandColabNotebookExecutionDisplayName(d.Get("display_name"), d, config) + if err != nil { + return nil, err + } else if v, ok := d.GetOkExists("display_name"); !tpgresource.IsEmptyValue(reflect.ValueOf(displayNameProp)) && (ok || !reflect.DeepEqual(v, displayNameProp)) { + obj["displayName"] = displayNameProp + } + dataformRepositorySourceProp, err := expandColabNotebookExecutionDataformRepositorySource(d.Get("dataform_repository_source"), d, config) + if err != nil { + return nil, err + } else if v, ok := d.GetOkExists("dataform_repository_source"); !tpgresource.IsEmptyValue(reflect.ValueOf(dataformRepositorySourceProp)) && (ok || !reflect.DeepEqual(v, dataformRepositorySourceProp)) { + obj["dataformRepositorySource"] = dataformRepositorySourceProp + } + gcsNotebookSourceProp, err := expandColabNotebookExecutionGcsNotebookSource(d.Get("gcs_notebook_source"), d, config) + if err != nil { + return nil, err + } else if v, ok := d.GetOkExists("gcs_notebook_source"); !tpgresource.IsEmptyValue(reflect.ValueOf(gcsNotebookSourceProp)) && (ok || !reflect.DeepEqual(v, gcsNotebookSourceProp)) { + obj["gcsNotebookSource"] = gcsNotebookSourceProp + } + directNotebookSourceProp, err := expandColabNotebookExecutionDirectNotebookSource(d.Get("direct_notebook_source"), d, config) + if err != nil { + return nil, err + } else if v, ok := d.GetOkExists("direct_notebook_source"); !tpgresource.IsEmptyValue(reflect.ValueOf(directNotebookSourceProp)) && (ok || !reflect.DeepEqual(v, directNotebookSourceProp)) { + obj["directNotebookSource"] = directNotebookSourceProp + } + executionTimeoutProp, err := expandColabNotebookExecutionExecutionTimeout(d.Get("execution_timeout"), d, config) + if err != nil { + return nil, err + } else if v, ok := d.GetOkExists("execution_timeout"); !tpgresource.IsEmptyValue(reflect.ValueOf(executionTimeoutProp)) && (ok || !reflect.DeepEqual(v, executionTimeoutProp)) { + obj["executionTimeout"] = executionTimeoutProp + } + notebookRuntimeTemplateResourceNameProp, err := expandColabNotebookExecutionNotebookRuntimeTemplateResourceName(d.Get("notebook_runtime_template_resource_name"), d, config) + if err != nil { + return nil, err + } else if v, ok := d.GetOkExists("notebook_runtime_template_resource_name"); !tpgresource.IsEmptyValue(reflect.ValueOf(notebookRuntimeTemplateResourceNameProp)) && (ok || !reflect.DeepEqual(v, notebookRuntimeTemplateResourceNameProp)) { + obj["notebookRuntimeTemplateResourceName"] = notebookRuntimeTemplateResourceNameProp + } + customEnvironmentSpecProp, err := expandColabNotebookExecutionCustomEnvironmentSpec(d.Get("custom_environment_spec"), d, config) + if err != nil { + return nil, err + } else if v, ok := d.GetOkExists("custom_environment_spec"); !tpgresource.IsEmptyValue(reflect.ValueOf(customEnvironmentSpecProp)) && (ok || !reflect.DeepEqual(v, customEnvironmentSpecProp)) { + obj["customEnvironmentSpec"] = customEnvironmentSpecProp + } + gcsOutputUriProp, err := expandColabNotebookExecutionGcsOutputUri(d.Get("gcs_output_uri"), d, config) + if err != nil { + return nil, err + } else if v, ok := d.GetOkExists("gcs_output_uri"); !tpgresource.IsEmptyValue(reflect.ValueOf(gcsOutputUriProp)) && (ok || !reflect.DeepEqual(v, gcsOutputUriProp)) { + obj["gcsOutputUri"] = gcsOutputUriProp + } + executionUserProp, err := expandColabNotebookExecutionExecutionUser(d.Get("execution_user"), d, config) + if err != nil { + return nil, err + } else if v, ok := d.GetOkExists("execution_user"); !tpgresource.IsEmptyValue(reflect.ValueOf(executionUserProp)) && (ok || !reflect.DeepEqual(v, executionUserProp)) { + obj["executionUser"] = executionUserProp + } + serviceAccountProp, err := expandColabNotebookExecutionServiceAccount(d.Get("service_account"), d, config) + if err != nil { + return nil, err + } else if v, ok := d.GetOkExists("service_account"); !tpgresource.IsEmptyValue(reflect.ValueOf(serviceAccountProp)) && (ok || !reflect.DeepEqual(v, serviceAccountProp)) { + obj["serviceAccount"] = serviceAccountProp + } + + return obj, nil +} + +func expandColabNotebookExecutionDisplayName(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { + return v, nil +} + +func expandColabNotebookExecutionDataformRepositorySource(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { + if v == nil { + return nil, nil + } + l := v.([]interface{}) + if len(l) == 0 || l[0] == nil { + return nil, nil + } + raw := l[0] + original := raw.(map[string]interface{}) + transformed := make(map[string]interface{}) + + transformedDataformRepositoryResourceName, err := expandColabNotebookExecutionDataformRepositorySourceDataformRepositoryResourceName(original["dataform_repository_resource_name"], d, config) + if err != nil { + return nil, err + } else if val := reflect.ValueOf(transformedDataformRepositoryResourceName); val.IsValid() && !tpgresource.IsEmptyValue(val) { + transformed["dataformRepositoryResourceName"] = transformedDataformRepositoryResourceName + } + + transformedCommitSha, err := expandColabNotebookExecutionDataformRepositorySourceCommitSha(original["commit_sha"], d, config) + if err != nil { + return nil, err + } else if val := reflect.ValueOf(transformedCommitSha); val.IsValid() && !tpgresource.IsEmptyValue(val) { + transformed["commitSha"] = transformedCommitSha + } + + return transformed, nil +} + +func expandColabNotebookExecutionDataformRepositorySourceDataformRepositoryResourceName(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { + return v, nil +} + +func expandColabNotebookExecutionDataformRepositorySourceCommitSha(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { + return v, nil +} + +func expandColabNotebookExecutionGcsNotebookSource(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { + if v == nil { + return nil, nil + } + l := v.([]interface{}) + if len(l) == 0 || l[0] == nil { + return nil, nil + } + raw := l[0] + original := raw.(map[string]interface{}) + transformed := make(map[string]interface{}) + + transformedUri, err := expandColabNotebookExecutionGcsNotebookSourceUri(original["uri"], d, config) + if err != nil { + return nil, err + } else if val := reflect.ValueOf(transformedUri); val.IsValid() && !tpgresource.IsEmptyValue(val) { + transformed["uri"] = transformedUri + } + + transformedGeneration, err := expandColabNotebookExecutionGcsNotebookSourceGeneration(original["generation"], d, config) + if err != nil { + return nil, err + } else if val := reflect.ValueOf(transformedGeneration); val.IsValid() && !tpgresource.IsEmptyValue(val) { + transformed["generation"] = transformedGeneration + } + + return transformed, nil +} + +func expandColabNotebookExecutionGcsNotebookSourceUri(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { + return v, nil +} + +func expandColabNotebookExecutionGcsNotebookSourceGeneration(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { + return v, nil +} + +func expandColabNotebookExecutionDirectNotebookSource(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { + if v == nil { + return nil, nil + } + l := v.([]interface{}) + if len(l) == 0 || l[0] == nil { + return nil, nil + } + raw := l[0] + original := raw.(map[string]interface{}) + transformed := make(map[string]interface{}) + + transformedContent, err := expandColabNotebookExecutionDirectNotebookSourceContent(original["content"], d, config) + if err != nil { + return nil, err + } else if val := reflect.ValueOf(transformedContent); val.IsValid() && !tpgresource.IsEmptyValue(val) { + transformed["content"] = transformedContent + } + + return transformed, nil +} + +func expandColabNotebookExecutionDirectNotebookSourceContent(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { + return v, nil +} + +func expandColabNotebookExecutionExecutionTimeout(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { + return v, nil +} + +func expandColabNotebookExecutionNotebookRuntimeTemplateResourceName(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { + return v, nil +} + +func expandColabNotebookExecutionCustomEnvironmentSpec(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { + if v == nil { + return nil, nil + } + l := v.([]interface{}) + if len(l) == 0 || l[0] == nil { + return nil, nil + } + raw := l[0] + original := raw.(map[string]interface{}) + transformed := make(map[string]interface{}) + + transformedMachineSpec, err := expandColabNotebookExecutionCustomEnvironmentSpecMachineSpec(original["machine_spec"], d, config) + if err != nil { + return nil, err + } else if val := reflect.ValueOf(transformedMachineSpec); val.IsValid() && !tpgresource.IsEmptyValue(val) { + transformed["machineSpec"] = transformedMachineSpec + } + + transformedPersistentDiskSpec, err := expandColabNotebookExecutionCustomEnvironmentSpecPersistentDiskSpec(original["persistent_disk_spec"], d, config) + if err != nil { + return nil, err + } else if val := reflect.ValueOf(transformedPersistentDiskSpec); val.IsValid() && !tpgresource.IsEmptyValue(val) { + transformed["persistentDiskSpec"] = transformedPersistentDiskSpec + } + + transformedNetworkSpec, err := expandColabNotebookExecutionCustomEnvironmentSpecNetworkSpec(original["network_spec"], d, config) + if err != nil { + return nil, err + } else if val := reflect.ValueOf(transformedNetworkSpec); val.IsValid() && !tpgresource.IsEmptyValue(val) { + transformed["networkSpec"] = transformedNetworkSpec + } + + return transformed, nil +} + +func expandColabNotebookExecutionCustomEnvironmentSpecMachineSpec(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { + if v == nil { + return nil, nil + } + l := v.([]interface{}) + if len(l) == 0 || l[0] == nil { + return nil, nil + } + raw := l[0] + original := raw.(map[string]interface{}) + transformed := make(map[string]interface{}) + + transformedMachineType, err := expandColabNotebookExecutionCustomEnvironmentSpecMachineSpecMachineType(original["machine_type"], d, config) + if err != nil { + return nil, err + } else if val := reflect.ValueOf(transformedMachineType); val.IsValid() && !tpgresource.IsEmptyValue(val) { + transformed["machineType"] = transformedMachineType + } + + transformedAcceleratorType, err := expandColabNotebookExecutionCustomEnvironmentSpecMachineSpecAcceleratorType(original["accelerator_type"], d, config) + if err != nil { + return nil, err + } else if val := reflect.ValueOf(transformedAcceleratorType); val.IsValid() && !tpgresource.IsEmptyValue(val) { + transformed["acceleratorType"] = transformedAcceleratorType + } + + transformedAcceleratorCount, err := expandColabNotebookExecutionCustomEnvironmentSpecMachineSpecAcceleratorCount(original["accelerator_count"], d, config) + if err != nil { + return nil, err + } else if val := reflect.ValueOf(transformedAcceleratorCount); val.IsValid() && !tpgresource.IsEmptyValue(val) { + transformed["acceleratorCount"] = transformedAcceleratorCount + } + + return transformed, nil +} + +func expandColabNotebookExecutionCustomEnvironmentSpecMachineSpecMachineType(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { + return v, nil +} + +func expandColabNotebookExecutionCustomEnvironmentSpecMachineSpecAcceleratorType(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { + return v, nil +} + +func expandColabNotebookExecutionCustomEnvironmentSpecMachineSpecAcceleratorCount(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { + return v, nil +} + +func expandColabNotebookExecutionCustomEnvironmentSpecPersistentDiskSpec(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { + if v == nil { + return nil, nil + } + l := v.([]interface{}) + if len(l) == 0 || l[0] == nil { + return nil, nil + } + raw := l[0] + original := raw.(map[string]interface{}) + transformed := make(map[string]interface{}) + + transformedDiskType, err := expandColabNotebookExecutionCustomEnvironmentSpecPersistentDiskSpecDiskType(original["disk_type"], d, config) + if err != nil { + return nil, err + } else if val := reflect.ValueOf(transformedDiskType); val.IsValid() && !tpgresource.IsEmptyValue(val) { + transformed["diskType"] = transformedDiskType + } + + transformedDiskSizeGb, err := expandColabNotebookExecutionCustomEnvironmentSpecPersistentDiskSpecDiskSizeGb(original["disk_size_gb"], d, config) + if err != nil { + return nil, err + } else if val := reflect.ValueOf(transformedDiskSizeGb); val.IsValid() && !tpgresource.IsEmptyValue(val) { + transformed["diskSizeGb"] = transformedDiskSizeGb + } + + return transformed, nil +} + +func expandColabNotebookExecutionCustomEnvironmentSpecPersistentDiskSpecDiskType(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { + return v, nil +} + +func expandColabNotebookExecutionCustomEnvironmentSpecPersistentDiskSpecDiskSizeGb(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { + return v, nil +} + +func expandColabNotebookExecutionCustomEnvironmentSpecNetworkSpec(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { + if v == nil { + return nil, nil + } + l := v.([]interface{}) + if len(l) == 0 || l[0] == nil { + return nil, nil + } + raw := l[0] + original := raw.(map[string]interface{}) + transformed := make(map[string]interface{}) + + transformedEnableInternetAccess, err := expandColabNotebookExecutionCustomEnvironmentSpecNetworkSpecEnableInternetAccess(original["enable_internet_access"], d, config) + if err != nil { + return nil, err + } else if val := reflect.ValueOf(transformedEnableInternetAccess); val.IsValid() && !tpgresource.IsEmptyValue(val) { + transformed["enableInternetAccess"] = transformedEnableInternetAccess + } + + transformedNetwork, err := expandColabNotebookExecutionCustomEnvironmentSpecNetworkSpecNetwork(original["network"], d, config) + if err != nil { + return nil, err + } else if val := reflect.ValueOf(transformedNetwork); val.IsValid() && !tpgresource.IsEmptyValue(val) { + transformed["network"] = transformedNetwork + } + + transformedSubnetwork, err := expandColabNotebookExecutionCustomEnvironmentSpecNetworkSpecSubnetwork(original["subnetwork"], d, config) + if err != nil { + return nil, err + } else if val := reflect.ValueOf(transformedSubnetwork); val.IsValid() && !tpgresource.IsEmptyValue(val) { + transformed["subnetwork"] = transformedSubnetwork + } + + return transformed, nil +} + +func expandColabNotebookExecutionCustomEnvironmentSpecNetworkSpecEnableInternetAccess(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { + return v, nil +} + +func expandColabNotebookExecutionCustomEnvironmentSpecNetworkSpecNetwork(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { + return v, nil +} + +func expandColabNotebookExecutionCustomEnvironmentSpecNetworkSpecSubnetwork(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { + return v, nil +} + +func expandColabNotebookExecutionGcsOutputUri(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { + return v, nil +} + +func expandColabNotebookExecutionExecutionUser(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { + return v, nil +} + +func expandColabNotebookExecutionServiceAccount(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { + return v, nil +} diff --git a/pkg/tfplan2cai/converters/resource_converters.go b/pkg/tfplan2cai/converters/resource_converters.go index ab6718918e..00be5d8cfd 100644 --- a/pkg/tfplan2cai/converters/resource_converters.go +++ b/pkg/tfplan2cai/converters/resource_converters.go @@ -122,6 +122,7 @@ var ConverterMap = map[string]cai.Tfplan2caiConverter{ "google_cloudfunctions2_function": cloudfunctions2.Cloudfunctions2functionTfplan2caiConverter(), "google_cloud_quotas_quota_preference": cloudquotas.CloudQuotasQuotaPreferenceTfplan2caiConverter(), "google_cloud_tasks_queue": cloudtasks.CloudTasksQueueTfplan2caiConverter(), + "google_colab_notebook_execution": colab.ColabNotebookExecutionTfplan2caiConverter(), "google_colab_runtime": colab.ColabRuntimeTfplan2caiConverter(), "google_colab_runtime_template": colab.ColabRuntimeTemplateTfplan2caiConverter(), "google_compute_address": compute.ComputeAddressTfplan2caiConverter(), diff --git a/test/services/colab/colab_notebook_execution_generated_test.go b/test/services/colab/colab_notebook_execution_generated_test.go new file mode 100644 index 0000000000..a9b4248bde --- /dev/null +++ b/test/services/colab/colab_notebook_execution_generated_test.go @@ -0,0 +1,65 @@ +// ---------------------------------------------------------------------------- +// +// *** AUTO GENERATED CODE *** Type: MMv1 *** +// +// ---------------------------------------------------------------------------- +// +// This file is automatically generated by Magic Modules and manual +// changes will be clobbered when the file is regenerated. +// +// Please read more about how to change this file in +// .github/CONTRIBUTING.md. +// +// ---------------------------------------------------------------------------- + +package colab_test + +import ( + "testing" + + "github.com/GoogleCloudPlatform/terraform-google-conversion/v7/test" +) + +func TestAccColabNotebookExecution(t *testing.T) { + t.Parallel() + + tests := []test.TestCase{ + { + Name: "TestAccColabNotebookExecution_colabNotebookExecutionBasicExample", + }, + { + Name: "TestAccColabNotebookExecution_colabNotebookExecutionCustomEnvExample", + }, + } + + for _, tt := range tests { + tt := tt + + t.Run(tt.Name, func(t *testing.T) { + t.Parallel() + + if tt.Skip != "" { + t.Skipf("Skipping %s test case: This case is currently disabled due to Issue.", tt.Name) + } + + test.BidirectionalConversion( + t, + []string{ + "count", + "deletion_protection", + "depends_on", + "direct_notebook_source", + "direct_notebook_source.content", + "dynamic", + "for_each", + "lifecycle", + "location", + "notebook_execution_job_id", + "provider", + "timeouts", + }, + "google_colab_notebook_execution", + ) + }) + } +}