package tfexec import ( "bytes" "context" "os/exec" ) type statePullConfig struct { reattachInfo ReattachInfo } var defaultStatePullConfig = statePullConfig{} type StatePullOption interface { configureShow(*statePullConfig) } func (opt *ReattachOption) configureStatePull(conf *statePullConfig) { conf.reattachInfo = opt.info } func (tf *Terraform) StatePull(ctx context.Context, opts ...StatePullOption) (string, error) { c := defaultStatePullConfig for _, o := range opts { o.configureShow(&c) } mergeEnv := map[string]string{} if c.reattachInfo != nil { reattachStr, err := c.reattachInfo.marshalString() if err != nil { return "", err } mergeEnv[reattachEnvVar] = reattachStr } cmd := tf.statePullCmd(ctx, mergeEnv) var ret bytes.Buffer cmd.Stdout = &ret err := tf.runTerraformCmd(ctx, cmd) if err != nil { return "", err } return ret.String(), nil } func (tf *Terraform) statePullCmd(ctx context.Context, mergeEnv map[string]string) *exec.Cmd { args := []string{"state", "pull"} return tf.buildTerraformCmd(ctx, mergeEnv, args...) }