mmv1/provider/terraform_oics.go (85 lines of code) (raw):

// Copyright 2024 Google Inc. // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Code generator for a library converting terraform state to gcp objects. package provider import ( "fmt" "log" "os" "path" "time" "github.com/GoogleCloudPlatform/magic-modules/mmv1/api" "github.com/GoogleCloudPlatform/magic-modules/mmv1/api/product" ) type TerraformOiCS struct { TargetVersionName string Version product.Version Product *api.Product StartTime time.Time } func NewTerraformOiCS(product *api.Product, versionName string, startTime time.Time) TerraformOiCS { toics := TerraformOiCS{ Product: product, TargetVersionName: versionName, Version: *product.VersionObjOrClosest(versionName), StartTime: startTime, } toics.Product.SetPropertiesBasedOnVersion(&toics.Version) return toics } func (toics TerraformOiCS) Generate(outputFolder, productPath, resourceToGenerate string, generateCode, generateDocs bool) { toics.GenerateObjects(outputFolder, resourceToGenerate, generateCode, generateDocs) } func (toics TerraformOiCS) GenerateObjects(outputFolder, resourceToGenerate string, generateCode, generateDocs bool) { for _, object := range toics.Product.Objects { object.ExcludeIfNotInVersion(&toics.Version) if resourceToGenerate != "" && object.Name != resourceToGenerate { log.Printf("Excluding %s per user request", object.Name) continue } toics.GenerateObject(*object, outputFolder, toics.TargetVersionName, generateCode, generateDocs) } } func (toics TerraformOiCS) GenerateObject(object api.Resource, outputFolder, resourceToGenerate string, generateCode, generateDocs bool) { templateData := NewTemplateData(outputFolder, toics.TargetVersionName) if !object.IsExcluded() { log.Printf("Generating %s resource", object.Name) toics.GenerateResource(object, *templateData, outputFolder, generateCode, generateDocs) } } func (toics TerraformOiCS) GenerateResource(object api.Resource, templateData TemplateData, outputFolder string, generateCode, generateDocs bool) { if !generateDocs { return } for _, example := range object.TestExamples() { if len(example.TestEnvVars) > 0 { continue } example.SetOiCSHCLText() targetFolder := path.Join(outputFolder, example.Name) if err := os.MkdirAll(targetFolder, os.ModePerm); err != nil { log.Println(fmt.Errorf("error creating oics example directory %v: %v", targetFolder, err)) } oicsExampleTemplatePath := "templates/terraform/examples/base_configs/oics_example_file.tf.tmpl" oicsExampleTemplates := []string{ oicsExampleTemplatePath, } templateData.GenerateFile(path.Join(targetFolder, "main.tf"), oicsExampleTemplatePath, example, false, oicsExampleTemplates...) tutorialTemplatePath := "templates/terraform/examples/base_configs/tutorial.md.tmpl" tutorialTemplates := []string{ tutorialTemplatePath, } templateData.GenerateFile(path.Join(targetFolder, "tutorial.md"), tutorialTemplatePath, example, false, tutorialTemplates...) backingTemplatePath := "templates/terraform/examples/base_configs/example_backing_file.tf.tmpl" backingTemplates := []string{ backingTemplatePath, } templateData.GenerateFile(path.Join(targetFolder, "backing_file.tf"), backingTemplatePath, example, false, backingTemplates...) motdTemplatePath := "templates/terraform/examples/static/motd.tmpl" motdTemplates := []string{ motdTemplatePath, } templateData.GenerateFile(path.Join(targetFolder, "motd"), motdTemplatePath, example, false, motdTemplates...) } } func (toics TerraformOiCS) CompileCommonFiles(outputFolder string, products []*api.Product, overridePath string) { } func (toics TerraformOiCS) CopyCommonFiles(outputFolder string, generateCode, generateDocs bool) { }