func GenerateTfvars()

in cli/pkg/config/tfvars_generator.go [28:124]


func GenerateTfvars(conf *Config) {
	vars := make(map[string]interface{})

	// Set base config vars
	vars["RegionalClusters"] = conf.RegionalClusters
	vars["AuthenticatorSecurityGroup"] = conf.AuthenticatorSecurityGroup
	vars["ClustersProjectId"] = conf.ClustersProjectID
	vars["FleetProjectId"] = conf.FleetProjectID
	vars["PrivateEndpoint"] = conf.PrivateEndpoint
	vars["ReleaseChannel"] = conf.ReleaseChannel
	vars["InitialNodeCount"] = conf.InitialNodeCount
	vars["MinNodeCount"] = conf.MinNodeCount
	vars["MaxNodeCount"] = conf.MaxNodeCount
	vars["DefaultNodepoolOS"] = conf.DefaultNodepoolOS
	vars["TFModuleRepo"] = conf.TFModuleRepo
	vars["TFModuleBranch"] = conf.TFModuleBranch
	vars["ConfigSyncRepo"] = conf.ConfigSyncRepo
	vars["ConfigSyncRepoBranch"] = conf.ConfigSyncRepoBranch
	vars["ConfigSyncRepoDir"] = conf.ConfigSyncRepoDir

	// Set vpc config vars
	if conf.VpcConfig.VpcType == "standalone" {
		vars["VpcType"] = false
	} else {
		vars["VpcType"] = true
	}
	vars["VpcName"] = conf.VpcConfig.VpcName
	vars["VpcProjectId"] = conf.VpcConfig.VpcProjectID
	vars["VpcPodCidrName"] = conf.VpcConfig.VpcPodCIDRName
	vars["VpcSvcCidrName"] = conf.VpcConfig.VpcSvcCIDRName

	// First phase of templating tfvars (base and VPC configs)
	tmpl, err := template.ParseFiles("templates/terraform.tfvars.tmpl")
	if err != nil {
		log.Fatalf("error parsing tfvars template: %s", err)
	}
	file, err := os.Create("terraform.tfvars")
	if err != nil {
		log.Fatalf("error creating tfvars file: %s", err)
	}
	defer file.Close()
	err = tmpl.Execute(file, vars)
	if err != nil {
		log.Fatalf("error executing tffavs template merge: %s", err)
	}

	// Set Cluster config vars
	for cc := range conf.ClustersConfig {
		clusterVars := make(map[string]interface{})
		clusterVars["ClusterName"] = conf.ClustersConfig[cc].ClusterName
		clusterVars["Region"] = conf.ClustersConfig[cc].Region
		clusterVars["Zones"] = strings.Join(conf.ClustersConfig[cc].Zones, ",")
		clusterVars["SubnetName"] = conf.ClustersConfig[cc].SubnetName
		clusterVars["MachineType"] = conf.ClustersConfig[cc].MachineType
		tmpl, err := template.ParseFiles("templates/cluster_config.tmpl")
		if err != nil {
			log.Fatalf("error parsing cluster_config template: %s", err)
		}
		file, err := os.Create("clusters.tf")
		if err != nil {
			log.Fatalf("error creating clusters tf file: %s", err)
		}
		defer file.Close()
		err = tmpl.Execute(file, clusterVars)
		if err != nil {
			log.Fatalf("error executing clusters template merge: %s", err)
		}
		files := []string{"terraform.tfvars", "clusters.tf"}
		var buf bytes.Buffer
		for _, file := range files {
			b, err := os.ReadFile(file)
			if err != nil {
				log.Fatalf("error reading %s: %s", file, err)
			}
			buf.Write(b)
			err = os.WriteFile("terraform.tfvars", buf.Bytes(), 0644)
			if err != nil {
				log.Fatalf("error writing to %s: %s", file, err)
			}
		}
	}
	err = os.Remove("clusters.tf")
	if err != nil {
		log.Fatalf("error deleting clusters.tf file: %s", err)
	}
	f, err := os.OpenFile("terraform.tfvars",
		os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
	if err != nil {
		log.Fatalf("error opening tfvars file for final insert: %s", err)
	}
	defer f.Close()
	if _, err := f.WriteString("}\n"); err != nil {
		log.Fatalf("error appending } to the tfvars file: %s", err)
	}
	log.Info("✅ TFVars generated successfully.")

}