terraform-provider-gitea/vendor/github.com/hashicorp/terraform-exec/tfexec/init.go
dependabot[bot] 282cd097f9
Bump github.com/hashicorp/terraform-plugin-sdk/v2 from 2.20.0 to 2.24.1
Bumps [github.com/hashicorp/terraform-plugin-sdk/v2](https://github.com/hashicorp/terraform-plugin-sdk) from 2.20.0 to 2.24.1.
- [Release notes](https://github.com/hashicorp/terraform-plugin-sdk/releases)
- [Changelog](https://github.com/hashicorp/terraform-plugin-sdk/blob/main/CHANGELOG.md)
- [Commits](https://github.com/hashicorp/terraform-plugin-sdk/compare/v2.20.0...v2.24.1)

---
updated-dependencies:
- dependency-name: github.com/hashicorp/terraform-plugin-sdk/v2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-12-24 18:04:13 +01:00

188 lines
4.4 KiB
Go

package tfexec
import (
"context"
"fmt"
"os/exec"
)
type initConfig struct {
backend bool
backendConfig []string
dir string
forceCopy bool
fromModule string
get bool
getPlugins bool
lock bool
lockTimeout string
pluginDir []string
reattachInfo ReattachInfo
reconfigure bool
upgrade bool
verifyPlugins bool
}
var defaultInitOptions = initConfig{
backend: true,
forceCopy: false,
get: true,
getPlugins: true,
lock: true,
lockTimeout: "0s",
reconfigure: false,
upgrade: false,
verifyPlugins: true,
}
// InitOption represents options used in the Init method.
type InitOption interface {
configureInit(*initConfig)
}
func (opt *BackendOption) configureInit(conf *initConfig) {
conf.backend = opt.backend
}
func (opt *BackendConfigOption) configureInit(conf *initConfig) {
conf.backendConfig = append(conf.backendConfig, opt.path)
}
func (opt *DirOption) configureInit(conf *initConfig) {
conf.dir = opt.path
}
func (opt *ForceCopyOption) configureInit(conf *initConfig) {
conf.forceCopy = opt.forceCopy
}
func (opt *FromModuleOption) configureInit(conf *initConfig) {
conf.fromModule = opt.source
}
func (opt *GetOption) configureInit(conf *initConfig) {
conf.get = opt.get
}
func (opt *GetPluginsOption) configureInit(conf *initConfig) {
conf.getPlugins = opt.getPlugins
}
func (opt *LockOption) configureInit(conf *initConfig) {
conf.lock = opt.lock
}
func (opt *LockTimeoutOption) configureInit(conf *initConfig) {
conf.lockTimeout = opt.timeout
}
func (opt *PluginDirOption) configureInit(conf *initConfig) {
conf.pluginDir = append(conf.pluginDir, opt.pluginDir)
}
func (opt *ReattachOption) configureInit(conf *initConfig) {
conf.reattachInfo = opt.info
}
func (opt *ReconfigureOption) configureInit(conf *initConfig) {
conf.reconfigure = opt.reconfigure
}
func (opt *UpgradeOption) configureInit(conf *initConfig) {
conf.upgrade = opt.upgrade
}
func (opt *VerifyPluginsOption) configureInit(conf *initConfig) {
conf.verifyPlugins = opt.verifyPlugins
}
// Init represents the terraform init subcommand.
func (tf *Terraform) Init(ctx context.Context, opts ...InitOption) error {
cmd, err := tf.initCmd(ctx, opts...)
if err != nil {
return err
}
return tf.runTerraformCmd(ctx, cmd)
}
func (tf *Terraform) initCmd(ctx context.Context, opts ...InitOption) (*exec.Cmd, error) {
c := defaultInitOptions
for _, o := range opts {
switch o.(type) {
case *LockOption, *LockTimeoutOption, *VerifyPluginsOption, *GetPluginsOption:
err := tf.compatible(ctx, nil, tf0_15_0)
if err != nil {
return nil, fmt.Errorf("-lock, -lock-timeout, -verify-plugins, and -get-plugins options are no longer available as of Terraform 0.15: %w", err)
}
}
o.configureInit(&c)
}
args := []string{"init", "-no-color", "-input=false"}
// string opts: only pass if set
if c.fromModule != "" {
args = append(args, "-from-module="+c.fromModule)
}
// string opts removed in 0.15: pass if set and <0.15
err := tf.compatible(ctx, nil, tf0_15_0)
if err == nil {
if c.lockTimeout != "" {
args = append(args, "-lock-timeout="+c.lockTimeout)
}
}
// boolean opts: always pass
args = append(args, "-backend="+fmt.Sprint(c.backend))
args = append(args, "-get="+fmt.Sprint(c.get))
args = append(args, "-upgrade="+fmt.Sprint(c.upgrade))
// boolean opts removed in 0.15: pass if <0.15
err = tf.compatible(ctx, nil, tf0_15_0)
if err == nil {
args = append(args, "-lock="+fmt.Sprint(c.lock))
args = append(args, "-get-plugins="+fmt.Sprint(c.getPlugins))
args = append(args, "-verify-plugins="+fmt.Sprint(c.verifyPlugins))
}
if c.forceCopy {
args = append(args, "-force-copy")
}
// unary flags: pass if true
if c.reconfigure {
args = append(args, "-reconfigure")
}
// string slice opts: split into separate args
if c.backendConfig != nil {
for _, bc := range c.backendConfig {
args = append(args, "-backend-config="+bc)
}
}
if c.pluginDir != nil {
for _, pd := range c.pluginDir {
args = append(args, "-plugin-dir="+pd)
}
}
// optional positional argument
if c.dir != "" {
args = append(args, c.dir)
}
mergeEnv := map[string]string{}
if c.reattachInfo != nil {
reattachStr, err := c.reattachInfo.marshalString()
if err != nil {
return nil, err
}
mergeEnv[reattachEnvVar] = reattachStr
}
return tf.buildTerraformCmd(ctx, mergeEnv, args...), nil
}