56 lines
1.1 KiB
Go
56 lines
1.1 KiB
Go
|
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...)
|
||
|
}
|