|  | // 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 | 
|  | } |