81 lines
1.7 KiB
Go
81 lines
1.7 KiB
Go
|
package tfexec
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"fmt"
|
||
|
"os/exec"
|
||
|
)
|
||
|
|
||
|
type upgrade012Config struct {
|
||
|
dir string
|
||
|
force bool
|
||
|
|
||
|
reattachInfo ReattachInfo
|
||
|
}
|
||
|
|
||
|
var defaultUpgrade012Options = upgrade012Config{
|
||
|
force: false,
|
||
|
}
|
||
|
|
||
|
// Upgrade012Option represents options used in the Destroy method.
|
||
|
type Upgrade012Option interface {
|
||
|
configureUpgrade012(*upgrade012Config)
|
||
|
}
|
||
|
|
||
|
func (opt *DirOption) configureUpgrade012(conf *upgrade012Config) {
|
||
|
conf.dir = opt.path
|
||
|
}
|
||
|
|
||
|
func (opt *ForceOption) configureUpgrade012(conf *upgrade012Config) {
|
||
|
conf.force = opt.force
|
||
|
}
|
||
|
|
||
|
func (opt *ReattachOption) configureUpgrade012(conf *upgrade012Config) {
|
||
|
conf.reattachInfo = opt.info
|
||
|
}
|
||
|
|
||
|
// Upgrade012 represents the terraform 0.12upgrade subcommand.
|
||
|
func (tf *Terraform) Upgrade012(ctx context.Context, opts ...Upgrade012Option) error {
|
||
|
cmd, err := tf.upgrade012Cmd(ctx, opts...)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
return tf.runTerraformCmd(ctx, cmd)
|
||
|
}
|
||
|
|
||
|
func (tf *Terraform) upgrade012Cmd(ctx context.Context, opts ...Upgrade012Option) (*exec.Cmd, error) {
|
||
|
err := tf.compatible(ctx, tf0_12_0, tf0_13_0)
|
||
|
if err != nil {
|
||
|
return nil, fmt.Errorf("terraform 0.12upgrade is only supported in 0.12 releases: %w", err)
|
||
|
}
|
||
|
|
||
|
c := defaultUpgrade012Options
|
||
|
|
||
|
for _, o := range opts {
|
||
|
o.configureUpgrade012(&c)
|
||
|
}
|
||
|
|
||
|
args := []string{"0.12upgrade", "-no-color", "-yes"}
|
||
|
|
||
|
// boolean opts: only pass if set
|
||
|
if c.force {
|
||
|
args = append(args, "-force")
|
||
|
}
|
||
|
|
||
|
// 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
|
||
|
}
|