| // Copyright (c) HashiCorp, Inc. |
| // SPDX-License-Identifier: MPL-2.0 |
| |
| 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 |
| } |