in providers/gcp/gcp_compute_code_generator/main.go [153:234]
func main() {
computeAPIData, err := os.ReadFile(os.Getenv("GOPATH") + "/src/google.golang.org/api/compute/v1/compute-api.json") // TODO delete this hack
if err != nil {
log.Fatal(err)
}
computeAPI := map[string]interface{}{}
err = json.Unmarshal(computeAPIData, &computeAPI)
if err != nil {
log.Fatal(err)
}
funcMap := template.FuncMap{
"title": strings.Title,
"toLower": strings.ToLower,
"join": strings.Join,
}
for resource, v := range computeAPI["resources"].(map[string]interface{}) {
if _, exist := terraformResources[resource]; !exist {
continue
}
if value, exist := v.(map[string]interface{})["methods"].(map[string]interface{})["list"]; exist {
parameters := []string{}
for _, param := range value.(map[string]interface{})["parameterOrder"].([]interface{}) {
switch param.(string) {
case "region":
parameters = append(parameters, `g.GetArgs()["region"].(compute.Region).Name`)
case "project":
parameters = append(parameters, `g.GetArgs()["project"].(string)`)
case "zone":
parameters = append(parameters, `g.GetArgs()["zone"].(string)`)
}
}
parameterOrder := strings.Join(parameters, ", ")
var tpl bytes.Buffer
t := template.Must(template.New("resource.go").Funcs(funcMap).Parse(serviceTemplate))
err := t.Execute(&tpl, map[string]interface{}{
"titleResourceName": strings.Title(resource),
"resource": resource,
"responseName": value.(map[string]interface{})["response"].(map[string]interface{})["$ref"].(string),
"terraformName": terraformResources[resource].getTerraformName(),
"additionalFields": terraformResources[resource].getAdditionalFields(),
"additionalFieldsForRefresh": terraformResources[resource].getAdditionalFieldsForRefresh(),
"allowEmptyValues": terraformResources[resource].getAllowEmptyValues(),
"needRegion": terraformResources[resource].ifNeedRegion(),
"resourcePackageName": resource,
"parameterOrder": parameterOrder,
"byZone": terraformResources[resource].ifNeedZone(strings.Contains(parameterOrder, "zone")),
"idWithZone": terraformResources[resource].ifIDWithZone(strings.Contains(parameterOrder, "zone")),
})
if err != nil {
log.Print(resource, err)
continue
}
rootPath, _ := os.Getwd()
currentPath := rootPath + pathForGenerateFiles
err = os.MkdirAll(currentPath, os.ModePerm)
if err != nil {
log.Print(resource, err)
continue
}
err = os.WriteFile(currentPath+"/"+resource+"_gen.go", codeFormat(tpl.Bytes()), os.ModePerm)
if err != nil {
log.Print(resource, err)
continue
}
} else {
log.Println(resource)
}
}
var tpl bytes.Buffer
t := template.Must(template.New("compute.go").Funcs(funcMap).Parse(computeTemplate))
err = t.Execute(&tpl, map[string]interface{}{
"services": terraformResources,
})
if err != nil {
log.Print(err)
}
rootPath, _ := os.Getwd()
err = os.WriteFile(rootPath+pathForGenerateFiles+"compute.go", codeFormat(tpl.Bytes()), os.ModePerm)
if err != nil {
log.Println(err)
}
}