cmd/transform.go (105 lines of code) (raw):

package cmd import ( "context" "fmt" "github.com/Azure/golden" "github.com/Azure/mapotf/pkg" "github.com/Azure/mapotf/pkg/backup" "github.com/spf13/cobra" "os" ) func NewTransformCmd() *cobra.Command { recursive := false transformCmd := &cobra.Command{ Use: "transform", Short: "Apply the transforms, mapotf transform [-r] --tf-dir [] --mptf-dir [path to config files], support mutilple mptf dirs", FParseErrWhitelist: cobra.FParseErrWhitelist{ UnknownFlags: true, }, RunE: func(cmd *cobra.Command, args []string) error { _, err := transform(recursive, cmd.Context()) return err }, } transformCmd.Flags().BoolVarP(&recursive, "recursive", "r", false, "Apply transforms to all modules or not, default to the root module only.") return transformCmd } func transform(recursive bool, ctx context.Context) ([]func(), error) { var restore []func() varFlags, err := varFlags(os.Args) if err != nil { return nil, err } rootMod, err := pkg.NewTerraformRootModuleRef(cf.tfDir) if err != nil { return nil, err } moduleRefs := []*pkg.TerraformModuleRef{ rootMod, } if recursive { modulePaths, err := pkg.ModuleRefs(cf.tfDir) if err != nil { return nil, err } moduleRefs = modulePaths } for _, moduleRef := range moduleRefs { d := moduleRef err = backup.BackupFolder(d.AbsDir) restore = append(restore, func() { _ = backup.Reset(d.AbsDir) }) if err != nil { return restore, err } } var mptfDirs []string for _, dir := range cf.mptfDirs { localizedDir, dispose, err := localizeConfigFolder(dir, ctx) if err != nil { return restore, err } if dispose != nil { defer dispose() } mptfDirs = append(mptfDirs, localizedDir) } for _, mptfDir := range mptfDirs { for _, tfDir := range moduleRefs { hclBlocks, err := pkg.LoadMPTFHclBlocks(false, mptfDir) if err != nil { return nil, err } err = applyTransform(tfDir, hclBlocks, varFlags, ctx) if err != nil { return nil, err } } } fmt.Println("Transforms applied successfully.") return restore, nil } func applyTransform(m *pkg.TerraformModuleRef, hclBlocks []*golden.HclBlock, varFlags []golden.CliFlagAssignedVariables, ctx context.Context) error { cfg, err := pkg.NewMetaProgrammingTFConfig(m, &cf.tfDir, hclBlocks, varFlags, ctx) if err != nil { return err } plan, err := pkg.RunMetaProgrammingTFPlan(cfg) if err != nil { return err } if len(plan.Transforms) == 0 { fmt.Println("No transforms to apply.") return nil } fmt.Println(plan.String()) err = plan.Apply() if err != nil { return fmt.Errorf("error applying plan: %s", err.Error()) } return nil } func init() { rootCmd.AddCommand(NewTransformCmd()) }