Merge pull request #29987 from hashicorp/chrisarcand/backend-flag-with-tfc
command/init: Add -cloud alias to -backend, adjust `init` help output
This commit is contained in:
commit
b5af7b6c92
|
@ -84,3 +84,14 @@ type FlagNameValue struct {
|
||||||
func (f FlagNameValue) String() string {
|
func (f FlagNameValue) String() string {
|
||||||
return fmt.Sprintf("%s=%q", f.Name, f.Value)
|
return fmt.Sprintf("%s=%q", f.Name, f.Value)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FlagIsSet returns whether a flag is explicitly set in a set of flags
|
||||||
|
func FlagIsSet(flags *flag.FlagSet, name string) bool {
|
||||||
|
isSet := false
|
||||||
|
flags.Visit(func(f *flag.Flag) {
|
||||||
|
if f.Name == name {
|
||||||
|
isSet = true
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return isSet
|
||||||
|
}
|
||||||
|
|
|
@ -16,6 +16,7 @@ import (
|
||||||
"github.com/hashicorp/terraform/internal/backend"
|
"github.com/hashicorp/terraform/internal/backend"
|
||||||
backendInit "github.com/hashicorp/terraform/internal/backend/init"
|
backendInit "github.com/hashicorp/terraform/internal/backend/init"
|
||||||
"github.com/hashicorp/terraform/internal/cloud"
|
"github.com/hashicorp/terraform/internal/cloud"
|
||||||
|
"github.com/hashicorp/terraform/internal/command/arguments"
|
||||||
"github.com/hashicorp/terraform/internal/configs"
|
"github.com/hashicorp/terraform/internal/configs"
|
||||||
"github.com/hashicorp/terraform/internal/configs/configschema"
|
"github.com/hashicorp/terraform/internal/configs/configschema"
|
||||||
"github.com/hashicorp/terraform/internal/getproviders"
|
"github.com/hashicorp/terraform/internal/getproviders"
|
||||||
|
@ -34,13 +35,14 @@ type InitCommand struct {
|
||||||
|
|
||||||
func (c *InitCommand) Run(args []string) int {
|
func (c *InitCommand) Run(args []string) int {
|
||||||
var flagFromModule, flagLockfile string
|
var flagFromModule, flagLockfile string
|
||||||
var flagBackend, flagGet, flagUpgrade bool
|
var flagBackend, flagCloud, flagGet, flagUpgrade bool
|
||||||
var flagPluginPath FlagStringSlice
|
var flagPluginPath FlagStringSlice
|
||||||
flagConfigExtra := newRawFlags("-backend-config")
|
flagConfigExtra := newRawFlags("-backend-config")
|
||||||
|
|
||||||
args = c.Meta.process(args)
|
args = c.Meta.process(args)
|
||||||
cmdFlags := c.Meta.extendedFlagSet("init")
|
cmdFlags := c.Meta.extendedFlagSet("init")
|
||||||
cmdFlags.BoolVar(&flagBackend, "backend", true, "")
|
cmdFlags.BoolVar(&flagBackend, "backend", true, "")
|
||||||
|
cmdFlags.BoolVar(&flagCloud, "cloud", true, "")
|
||||||
cmdFlags.Var(flagConfigExtra, "backend-config", "")
|
cmdFlags.Var(flagConfigExtra, "backend-config", "")
|
||||||
cmdFlags.StringVar(&flagFromModule, "from-module", "", "copy the source of the given module into the directory before init")
|
cmdFlags.StringVar(&flagFromModule, "from-module", "", "copy the source of the given module into the directory before init")
|
||||||
cmdFlags.BoolVar(&flagGet, "get", true, "")
|
cmdFlags.BoolVar(&flagGet, "get", true, "")
|
||||||
|
@ -58,6 +60,19 @@ func (c *InitCommand) Run(args []string) int {
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
backendFlagSet := arguments.FlagIsSet(cmdFlags, "backend")
|
||||||
|
cloudFlagSet := arguments.FlagIsSet(cmdFlags, "cloud")
|
||||||
|
|
||||||
|
switch {
|
||||||
|
case backendFlagSet && cloudFlagSet:
|
||||||
|
c.Ui.Error("The -backend and -cloud options are aliases of one another and mutually-exclusive in their use")
|
||||||
|
return 1
|
||||||
|
case backendFlagSet:
|
||||||
|
flagCloud = flagBackend
|
||||||
|
case cloudFlagSet:
|
||||||
|
flagBackend = flagCloud
|
||||||
|
}
|
||||||
|
|
||||||
if c.migrateState && c.reconfigure {
|
if c.migrateState && c.reconfigure {
|
||||||
c.Ui.Error("The -migrate-state and -reconfigure options are mutually-exclusive")
|
c.Ui.Error("The -migrate-state and -reconfigure options are mutually-exclusive")
|
||||||
return 1
|
return 1
|
||||||
|
@ -212,7 +227,7 @@ func (c *InitCommand) Run(args []string) int {
|
||||||
var back backend.Backend
|
var back backend.Backend
|
||||||
|
|
||||||
switch {
|
switch {
|
||||||
case config.Module.CloudConfig != nil:
|
case flagCloud && config.Module.CloudConfig != nil:
|
||||||
be, backendOutput, backendDiags := c.initCloud(config.Module, flagConfigExtra)
|
be, backendOutput, backendDiags := c.initCloud(config.Module, flagConfigExtra)
|
||||||
diags = diags.Append(backendDiags)
|
diags = diags.Append(backendDiags)
|
||||||
if backendDiags.HasErrors() {
|
if backendDiags.HasErrors() {
|
||||||
|
@ -992,6 +1007,7 @@ func (c *InitCommand) AutocompleteArgs() complete.Predictor {
|
||||||
func (c *InitCommand) AutocompleteFlags() complete.Flags {
|
func (c *InitCommand) AutocompleteFlags() complete.Flags {
|
||||||
return complete.Flags{
|
return complete.Flags{
|
||||||
"-backend": completePredictBoolean,
|
"-backend": completePredictBoolean,
|
||||||
|
"-cloud": completePredictBoolean,
|
||||||
"-backend-config": complete.PredictFiles("*.tfvars"), // can also be key=value, but we can't "predict" that
|
"-backend-config": complete.PredictFiles("*.tfvars"), // can also be key=value, but we can't "predict" that
|
||||||
"-force-copy": complete.PredictNothing,
|
"-force-copy": complete.PredictNothing,
|
||||||
"-from-module": completePredictModuleSource,
|
"-from-module": completePredictModuleSource,
|
||||||
|
@ -1026,17 +1042,22 @@ Usage: terraform [global options] init [options]
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
|
|
||||||
-backend=false Disable backend initialization for this configuration
|
-backend=false Disable backend or Terraform Cloud initialization for
|
||||||
and use the previously initialized backend instead.
|
this configuration and use what what was previously
|
||||||
|
initialized instead.
|
||||||
|
|
||||||
-backend-config=path This can be either a path to an HCL file with key/value
|
aliases: -cloud=false
|
||||||
|
|
||||||
|
-backend-config=path Configuration to be merged with what is in the
|
||||||
|
configuration file's 'backend' block. This can be
|
||||||
|
either a path to an HCL file with key/value
|
||||||
assignments (same format as terraform.tfvars) or a
|
assignments (same format as terraform.tfvars) or a
|
||||||
'key=value' format. This is merged with what is in the
|
'key=value' format, and can be specified multiple
|
||||||
configuration file. This can be specified multiple
|
|
||||||
times. The backend type must be in the configuration
|
times. The backend type must be in the configuration
|
||||||
itself.
|
itself.
|
||||||
|
|
||||||
-force-copy Suppress prompts about copying state data. This is
|
-force-copy Suppress prompts about copying state data when
|
||||||
|
initializating a new state backend. This is
|
||||||
equivalent to providing a "yes" to all confirmation
|
equivalent to providing a "yes" to all confirmation
|
||||||
prompts.
|
prompts.
|
||||||
|
|
||||||
|
@ -1045,9 +1066,9 @@ Options:
|
||||||
|
|
||||||
-get=false Disable downloading modules for this configuration.
|
-get=false Disable downloading modules for this configuration.
|
||||||
|
|
||||||
-input=false Disable prompting for missing backend configuration
|
-input=false Disable interactive prompts. Note that some actions may
|
||||||
values. This will result in an error if the backend
|
require interactive prompts and will error if input is
|
||||||
configuration is not fully specified.
|
disabled.
|
||||||
|
|
||||||
-lock=false Don't hold a state lock during backend migration.
|
-lock=false Don't hold a state lock during backend migration.
|
||||||
This is dangerous if others might concurrently run
|
This is dangerous if others might concurrently run
|
||||||
|
@ -1062,10 +1083,10 @@ Options:
|
||||||
automatic installation of plugins. This flag can be used
|
automatic installation of plugins. This flag can be used
|
||||||
multiple times.
|
multiple times.
|
||||||
|
|
||||||
-reconfigure Reconfigure the backend, ignoring any saved
|
-reconfigure Reconfigure a backend, ignoring any saved
|
||||||
configuration.
|
configuration.
|
||||||
|
|
||||||
-migrate-state Reconfigure the backend, and attempt to migrate any
|
-migrate-state Reconfigure a backend, and attempt to migrate any
|
||||||
existing state.
|
existing state.
|
||||||
|
|
||||||
-upgrade Install the latest module and provider versions
|
-upgrade Install the latest module and provider versions
|
||||||
|
@ -1076,8 +1097,12 @@ Options:
|
||||||
-lockfile=MODE Set a dependency lockfile mode.
|
-lockfile=MODE Set a dependency lockfile mode.
|
||||||
Currently only "readonly" is valid.
|
Currently only "readonly" is valid.
|
||||||
|
|
||||||
-ignore-remote-version A rare option used for the remote backend only. See
|
-ignore-remote-version A rare option used for Terraform Cloud and the remote backend
|
||||||
the remote backend documentation for more information.
|
only. Set this to ignore checking that the local and remote
|
||||||
|
Terraform versions use compatible state representations, making
|
||||||
|
an operation proceed even when there is a potential mismatch.
|
||||||
|
See the documentation on configuring Terraform with
|
||||||
|
Terraform Cloud for more information.
|
||||||
|
|
||||||
`
|
`
|
||||||
return strings.TrimSpace(helpText)
|
return strings.TrimSpace(helpText)
|
||||||
|
|
Loading…
Reference in New Issue