package tfexec import ( "context" "fmt" "os/exec" ) type getCmdConfig struct { dir string update bool } // GetCmdOption represents options used in the Get method. type GetCmdOption interface { configureGet(*getCmdConfig) } func (opt *DirOption) configureGet(conf *getCmdConfig) { conf.dir = opt.path } func (opt *UpdateOption) configureGet(conf *getCmdConfig) { conf.update = opt.update } // Get represents the terraform get subcommand. func (tf *Terraform) Get(ctx context.Context, opts ...GetCmdOption) error { cmd, err := tf.getCmd(ctx, opts...) if err != nil { return err } return tf.runTerraformCmd(ctx, cmd) } func (tf *Terraform) getCmd(ctx context.Context, opts ...GetCmdOption) (*exec.Cmd, error) { c := getCmdConfig{} for _, o := range opts { o.configureGet(&c) } args := []string{"get", "-no-color"} args = append(args, "-update="+fmt.Sprint(c.update)) if c.dir != "" { args = append(args, c.dir) } return tf.buildTerraformCmd(ctx, nil, args...), nil }