mirror of
https://github.com/opentofu/opentofu.git
synced 2024-12-28 01:41:48 -06:00
command/import: allow the -config flag to specify a config location
This commit is contained in:
parent
ec0ef95c6f
commit
f8ec7dad19
@ -16,6 +16,14 @@ type ImportCommand struct {
|
||||
}
|
||||
|
||||
func (c *ImportCommand) Run(args []string) int {
|
||||
// Get the pwd since its our default -config flag value
|
||||
pwd, err := os.Getwd()
|
||||
if err != nil {
|
||||
c.Ui.Error(fmt.Sprintf("Error getting pwd: %s", err))
|
||||
return 1
|
||||
}
|
||||
|
||||
var configPath string
|
||||
args = c.Meta.process(args, true)
|
||||
|
||||
cmdFlags := c.Meta.flagSet("import")
|
||||
@ -23,6 +31,7 @@ func (c *ImportCommand) Run(args []string) int {
|
||||
cmdFlags.StringVar(&c.Meta.statePath, "state", DefaultStateFilename, "path")
|
||||
cmdFlags.StringVar(&c.Meta.stateOutPath, "state-out", "", "path")
|
||||
cmdFlags.StringVar(&c.Meta.backupPath, "backup", "", "path")
|
||||
cmdFlags.StringVar(&configPath, "config", pwd, "path")
|
||||
cmdFlags.Usage = func() { c.Ui.Error(c.Help()) }
|
||||
if err := cmdFlags.Parse(args); err != nil {
|
||||
return 1
|
||||
@ -35,15 +44,9 @@ func (c *ImportCommand) Run(args []string) int {
|
||||
return 1
|
||||
}
|
||||
|
||||
pwd, err := os.Getwd()
|
||||
if err != nil {
|
||||
c.Ui.Error(fmt.Sprintf("Error getting pwd: %s", err))
|
||||
return 1
|
||||
}
|
||||
|
||||
// Build the context based on the arguments given
|
||||
ctx, _, err := c.Context(contextOpts{
|
||||
Path: pwd,
|
||||
Path: configPath,
|
||||
PathEmptyOk: true,
|
||||
StatePath: c.Meta.statePath,
|
||||
Parallelism: c.Meta.parallelism,
|
||||
@ -120,6 +123,11 @@ Options:
|
||||
modifying. Defaults to the "-state-out" path with
|
||||
".backup" extension. Set to "-" to disable backup.
|
||||
|
||||
-config=path Path to a directory of Terraform configuration files
|
||||
to use to configure the provider. Defaults to pwd.
|
||||
If no config files are present, they must be provided
|
||||
via the input prompts or env vars.
|
||||
|
||||
-input=true Ask for input for variables if not directly set.
|
||||
|
||||
-no-color If specified, output won't contain any color.
|
||||
|
@ -102,6 +102,63 @@ func TestImport_providerConfig(t *testing.T) {
|
||||
testStateOutput(t, statePath, testImportStr)
|
||||
}
|
||||
|
||||
func TestImport_providerConfigDisable(t *testing.T) {
|
||||
defer testChdir(t, testFixturePath("import-provider"))()
|
||||
|
||||
statePath := testTempFile(t)
|
||||
|
||||
p := testProvider()
|
||||
ui := new(cli.MockUi)
|
||||
c := &ImportCommand{
|
||||
Meta: Meta{
|
||||
ContextOpts: testCtxConfig(p),
|
||||
Ui: ui,
|
||||
},
|
||||
}
|
||||
|
||||
p.ImportStateFn = nil
|
||||
p.ImportStateReturn = []*terraform.InstanceState{
|
||||
&terraform.InstanceState{
|
||||
ID: "yay",
|
||||
Ephemeral: terraform.EphemeralState{
|
||||
Type: "test_instance",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
configured := false
|
||||
p.ConfigureFn = func(c *terraform.ResourceConfig) error {
|
||||
configured = true
|
||||
|
||||
if v, ok := c.Get("foo"); ok {
|
||||
return fmt.Errorf("bad value: %#v", v)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
args := []string{
|
||||
"-state", statePath,
|
||||
"-config", "",
|
||||
"test_instance.foo",
|
||||
"bar",
|
||||
}
|
||||
if code := c.Run(args); code != 0 {
|
||||
t.Fatalf("bad: %d\n\n%s", code, ui.ErrorWriter.String())
|
||||
}
|
||||
|
||||
// Verify that we were called
|
||||
if !configured {
|
||||
t.Fatal("Configure should be called")
|
||||
}
|
||||
|
||||
if !p.ImportStateCalled {
|
||||
t.Fatal("ImportState should be called")
|
||||
}
|
||||
|
||||
testStateOutput(t, statePath, testImportStr)
|
||||
}
|
||||
|
||||
/*
|
||||
func TestRefresh_badState(t *testing.T) {
|
||||
p := testProvider()
|
||||
|
@ -35,6 +35,11 @@ The command-line flags are all optional. The list of available flags are:
|
||||
the `-state-out` path with the ".backup" extension. Set to "-" to disable
|
||||
backups.
|
||||
|
||||
* `-config=path` - Path to directory of Terraform configuration files that
|
||||
configure the provider for import. This defaults to your working directory.
|
||||
If this directory contains no Terraform configuration files, the provider
|
||||
must be configured via manual input or environmental variables.
|
||||
|
||||
* `-input=true` - Whether to ask for input for provider configuration.
|
||||
|
||||
* `-state=path` - The path to read and save state files (unless state-out is
|
||||
@ -46,12 +51,35 @@ The command-line flags are all optional. The list of available flags are:
|
||||
|
||||
## Provider Configuration
|
||||
|
||||
To access the provider that the resource is being imported from, Terraform
|
||||
will ask you for access credentials. If you don't want to be asked for input,
|
||||
verify that all environment variables for your provider are set.
|
||||
Terraform will attempt to load configuration files that configure the
|
||||
provider being used for import. If no configuration files are present or
|
||||
no configuration for that specific provider is present, Terraform will
|
||||
prompt you for access credentials. You may also specify environmental variables
|
||||
to configure the provider.
|
||||
|
||||
The import command cannot read provider configuration from a Terraform
|
||||
configuration file.
|
||||
The only limitation Terraform has when reading the configuration files
|
||||
is that the import provider configurations must not depend on non-variable
|
||||
inputs. For example, a provider configuration cannot depend on a data
|
||||
source.
|
||||
|
||||
As a working example, if you're importing AWS resources and you have a
|
||||
configuration file with the contents below, then Terraform will configure
|
||||
the AWS provider with this file.
|
||||
|
||||
```
|
||||
variable "access_key" {}
|
||||
variable "secret_key" {}
|
||||
|
||||
provider "aws" {
|
||||
access_key = "${var.access_key}"
|
||||
secret_key = "${var.secret_key}"
|
||||
}
|
||||
```
|
||||
|
||||
You can force Terraform to explicitly not load your configuration by
|
||||
specifying `-config=""` (empty string). This is useful in situations where
|
||||
you want to manually configure the provider because your configuration
|
||||
may not be valid.
|
||||
|
||||
## Example: AWS Instance
|
||||
|
||||
|
@ -22,9 +22,6 @@ $ terraform import aws_instance.bar i-abcd1234
|
||||
...
|
||||
```
|
||||
|
||||
~> **Note:** In order to import resources, the provider should be configured with environment variables.
|
||||
We currently do not support passing credentials directly to the provider.
|
||||
|
||||
The above command imports an AWS instance with the given ID to the
|
||||
address `aws_instance.bar`. You can also import resources into modules.
|
||||
See the [resource addressing](/docs/internals/resource-addressing.html)
|
||||
|
Loading…
Reference in New Issue
Block a user