in cmd/import.go [251:359]
func printService(provider terraformutils.ProviderGenerator, serviceName string, options ImportOptions, resources []terraformutils.Resource, importedResource map[string][]terraformutils.Resource) error {
log.Println(provider.GetName() + " save " + serviceName)
// Print HCL files for Resources
path := Path(options.PathPattern, provider.GetName(), serviceName, options.PathOutput)
err := terraformoutput.OutputHclFiles(resources, provider, path, serviceName, options.Compact, options.Output, !options.NoSort)
if err != nil {
return err
}
tfStateFile, err := terraformutils.PrintTfState(resources)
if err != nil {
return err
}
// print or upload State file
if options.State == "bucket" {
log.Println(provider.GetName() + " upload tfstate to bucket " + options.Bucket)
bucket := terraformoutput.BucketState{
Name: options.Bucket,
}
if err := bucket.BucketUpload(path, tfStateFile); err != nil {
return err
}
// create Bucket file
if bucketStateDataFile, err := terraformutils.Print(bucket.BucketGetTfData(path), map[string]struct{}{}, options.Output, !options.NoSort); err == nil {
terraformoutput.PrintFile(path+"/bucket.tf", bucketStateDataFile)
}
} else {
if serviceName == "" {
log.Println(provider.GetName() + " save tfstate")
} else {
log.Println(provider.GetName() + " save tfstate for " + serviceName)
}
if err := os.WriteFile(path+"/terraform.tfstate", tfStateFile, os.ModePerm); err != nil {
return err
}
}
// Print hcl variables.tf
if serviceName != "" {
if options.Connect && len(provider.GetResourceConnections()[serviceName]) > 0 {
variables := map[string]map[string]map[string]interface{}{}
variables["data"] = map[string]map[string]interface{}{}
variables["data"]["terraform_remote_state"] = map[string]interface{}{}
if options.State == "bucket" {
bucket := terraformoutput.BucketState{
Name: options.Bucket,
}
for k := range provider.GetResourceConnections()[serviceName] {
if _, exist := importedResource[k]; !exist {
continue
}
variables["data"]["terraform_remote_state"][k] = map[string]interface{}{
"backend": "gcs",
"config": bucket.BucketGetTfData(strings.ReplaceAll(path, serviceName, k)),
}
}
} else {
for k := range provider.GetResourceConnections()[serviceName] {
if _, exist := importedResource[k]; !exist {
continue
}
variables["data"]["terraform_remote_state"][k] = map[string]interface{}{
"backend": "local",
"config": map[string]interface{}{
"path": strings.Repeat("../", strings.Count(path, "/")) + strings.ReplaceAll(path, serviceName, k) + "terraform.tfstate",
},
}
}
}
// create variables file
if len(provider.GetResourceConnections()[serviceName]) > 0 && options.Connect && len(variables["data"]["terraform_remote_state"]) > 0 {
variablesFile, err := terraformutils.Print(variables, map[string]struct{}{"config": {}}, options.Output, !options.NoSort)
if err != nil {
return err
}
terraformoutput.PrintFile(path+"/variables."+terraformoutput.GetFileExtension(options.Output), variablesFile)
}
}
} else {
if options.Connect {
variables := map[string]map[string]map[string]interface{}{}
variables["data"] = map[string]map[string]interface{}{}
variables["data"]["terraform_remote_state"] = map[string]interface{}{}
if options.State == "bucket" {
bucket := terraformoutput.BucketState{
Name: options.Bucket,
}
variables["data"]["terraform_remote_state"]["local"] = map[string]interface{}{
"backend": "gcs",
"config": bucket.BucketGetTfData(path),
}
} else {
variables["data"]["terraform_remote_state"]["local"] = map[string]interface{}{
"backend": "local",
"config": map[string]interface{}{
"path": "terraform.tfstate",
},
}
}
// create variables file
if options.Connect {
variablesFile, err := terraformutils.Print(variables, map[string]struct{}{"config": {}}, options.Output, !options.NoSort)
if err != nil {
return err
}
terraformoutput.PrintFile(path+"/variables."+terraformoutput.GetFileExtension(options.Output), variablesFile)
}
}
}
return nil
}