provider/terraform: "workspace" argument instead of "environment"

We are moving away from using the term "environment" to describe separate
named states for a single config, using "workspace" instead. The old
attribute name remains supported for backward compatibility, but is
marked as deprecated.
This commit is contained in:
Martin Atkins 2017-05-30 16:34:21 -07:00
parent 3be1d3148b
commit 33a266d61c
4 changed files with 76 additions and 5 deletions

View File

@ -40,6 +40,14 @@ func dataSourceRemoteState() *schema.Resource {
"environment": { "environment": {
Type: schema.TypeString, Type: schema.TypeString,
Optional: true, Optional: true,
ConflictsWith: []string{"workspace"},
Deprecated: "use the \"workspace\" argument instead, with the same value",
},
"workspace": {
Type: schema.TypeString,
Optional: true,
Default: backend.DefaultStateName, Default: backend.DefaultStateName,
}, },
@ -80,8 +88,12 @@ func dataSourceRemoteStateRead(d *schema.ResourceData, meta interface{}) error {
} }
// Get the state // Get the state
env := d.Get("environment").(string) workspace := d.Get("environment").(string)
state, err := b.State(env) if workspace == "" {
// This is actually the main path, since "environment" is deprecated.
workspace = d.Get("workspace").(string)
}
state, err := b.State(workspace)
if err != nil { if err != nil {
return fmt.Errorf("error loading the remote state: %s", err) return fmt.Errorf("error loading the remote state: %s", err)
} }

View File

@ -63,6 +63,38 @@ func TestState_complexOutputs(t *testing.T) {
}) })
} }
func TestState_workspace(t *testing.T) {
resource.UnitTest(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
Steps: []resource.TestStep{
{
Config: testAccState_workspace,
Check: resource.ComposeTestCheckFunc(
testAccCheckStateValue(
"data.terraform_remote_state.foo", "foo", "bar"),
),
},
},
})
}
func TestState_legacyEnvironment(t *testing.T) {
resource.UnitTest(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
Steps: []resource.TestStep{
{
Config: testAccState_legacyEnvironment,
Check: resource.ComposeTestCheckFunc(
testAccCheckStateValue(
"data.terraform_remote_state.foo", "foo", "bar"),
),
},
},
})
}
func testAccCheckStateValue(id, name, value string) resource.TestCheckFunc { func testAccCheckStateValue(id, name, value string) resource.TestCheckFunc {
return func(s *terraform.State) error { return func(s *terraform.State) error {
rs, ok := s.RootModule().Resources[id] rs, ok := s.RootModule().Resources[id]
@ -109,3 +141,23 @@ resource "terraform_remote_state" "foo" {
path = "./test-fixtures/complex_outputs.tfstate" path = "./test-fixtures/complex_outputs.tfstate"
} }
}` }`
const testAccState_workspace = `
data "terraform_remote_state" "foo" {
backend = "local"
workspace = "test"
config {
workspace_dir = "./test-fixtures/workspaces"
}
}`
const testAccState_legacyEnvironment = `
data "terraform_remote_state" "foo" {
backend = "local"
environment = "test" # old, deprecated name for "workspace"
config {
workspace_dir = "./test-fixtures/workspaces"
}
}`

View File

@ -0,0 +1,7 @@
{
"version": 1,
"modules": [{
"path": ["root"],
"outputs": { "foo": "bar" }
}]
}

View File

@ -31,9 +31,9 @@ resource "aws_instance" "foo" {
The following arguments are supported: The following arguments are supported:
* `backend` - (Required) The remote backend to use. * `backend` - (Required) The remote backend to use.
* `environment` - (Optional) The Terraform environment to use. * `workspace` - (Optional) The Terraform workspace whose state will be requested. Defaults to "default".
* `config` - (Optional) The configuration of the remote backend. * `config` - (Optional) The configuration of the remote backend. For more information,
* Remote state config docs can be found [here](/docs/backends/types/terraform-enterprise.html) see [the Backend Types documentation](/docs/backends/types/).
## Attributes Reference ## Attributes Reference