| // Copyright (c) HashiCorp, Inc. |
| // SPDX-License-Identifier: MPL-2.0 |
| |
| package tfexec |
| |
| import ( |
| "context" |
| "fmt" |
| "os/exec" |
| ) |
| |
| type upgrade013Config struct { |
| dir string |
| |
| reattachInfo ReattachInfo |
| } |
| |
| var defaultUpgrade013Options = upgrade013Config{} |
| |
| // Upgrade013Option represents options used in the Destroy method. |
| type Upgrade013Option interface { |
| configureUpgrade013(*upgrade013Config) |
| } |
| |
| func (opt *DirOption) configureUpgrade013(conf *upgrade013Config) { |
| conf.dir = opt.path |
| } |
| |
| func (opt *ReattachOption) configureUpgrade013(conf *upgrade013Config) { |
| conf.reattachInfo = opt.info |
| } |
| |
| // Upgrade013 represents the terraform 0.13upgrade subcommand. |
| func (tf *Terraform) Upgrade013(ctx context.Context, opts ...Upgrade013Option) error { |
| cmd, err := tf.upgrade013Cmd(ctx, opts...) |
| if err != nil { |
| return err |
| } |
| return tf.runTerraformCmd(ctx, cmd) |
| } |
| |
| func (tf *Terraform) upgrade013Cmd(ctx context.Context, opts ...Upgrade013Option) (*exec.Cmd, error) { |
| err := tf.compatible(ctx, tf0_13_0, tf0_14_0) |
| if err != nil { |
| return nil, fmt.Errorf("terraform 0.13upgrade is only supported in 0.13 releases: %w", err) |
| } |
| |
| c := defaultUpgrade013Options |
| |
| for _, o := range opts { |
| o.configureUpgrade013(&c) |
| } |
| |
| args := []string{"0.13upgrade", "-no-color", "-yes"} |
| |
| // optional positional argument |
| if c.dir != "" { |
| args = append(args, c.dir) |
| } |
| |
| mergeEnv := map[string]string{} |
| if c.reattachInfo != nil { |
| reattachStr, err := c.reattachInfo.marshalString() |
| if err != nil { |
| return nil, err |
| } |
| mergeEnv[reattachEnvVar] = reattachStr |
| } |
| |
| return tf.buildTerraformCmd(ctx, mergeEnv, args...), nil |
| } |