state/remote: Officially Support local backend
This is a rework of pull request #6213 submitted by @joshuaspence, adjusted to work with the remote state data source. We also add a deprecation warning for people using the unsupported API, and retain the ability to refer to "_local" as well as "local" for users in a mixed version environment.
This commit is contained in:
parent
d772389518
commit
8d0a68e1d4
|
@ -16,6 +16,16 @@ func dataSourceRemoteState() *schema.Resource {
|
||||||
"backend": {
|
"backend": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Required: true,
|
Required: true,
|
||||||
|
ValidateFunc: func(v interface{}, k string) (ws []string, errors []error) {
|
||||||
|
if vStr, ok := v.(string); ok && vStr == "_local" {
|
||||||
|
ws = append(ws, "Use of the %q backend is now officially "+
|
||||||
|
"supported as %q. Please update your configuration to ensure "+
|
||||||
|
"compatibility with future versions of Terraform.",
|
||||||
|
"_local", "local")
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
"config": {
|
"config": {
|
||||||
|
@ -38,6 +48,12 @@ func dataSourceRemoteStateRead(d *schema.ResourceData, meta interface{}) error {
|
||||||
config[k] = v.(string)
|
config[k] = v.(string)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Don't break people using the old _local syntax - but note warning above
|
||||||
|
if backend == "_local" {
|
||||||
|
log.Println(`[INFO] Switching old (unsupported) backend "_local" to "local"`)
|
||||||
|
backend = "local"
|
||||||
|
}
|
||||||
|
|
||||||
// Create the client to access our remote state
|
// Create the client to access our remote state
|
||||||
log.Printf("[DEBUG] Initializing remote state client: %s", backend)
|
log.Printf("[DEBUG] Initializing remote state client: %s", backend)
|
||||||
client, err := remote.NewClient(backend, config)
|
client, err := remote.NewClient(backend, config)
|
||||||
|
|
|
@ -32,7 +32,7 @@ func TestState_complexOutputs(t *testing.T) {
|
||||||
{
|
{
|
||||||
Config: testAccState_complexOutputs,
|
Config: testAccState_complexOutputs,
|
||||||
Check: resource.ComposeTestCheckFunc(
|
Check: resource.ComposeTestCheckFunc(
|
||||||
testAccCheckStateValue("terraform_remote_state.foo", "backend", "_local"),
|
testAccCheckStateValue("terraform_remote_state.foo", "backend", "local"),
|
||||||
testAccCheckStateValue("terraform_remote_state.foo", "config.path", "./test-fixtures/complex_outputs.tfstate"),
|
testAccCheckStateValue("terraform_remote_state.foo", "config.path", "./test-fixtures/complex_outputs.tfstate"),
|
||||||
testAccCheckStateValue("terraform_remote_state.foo", "computed_set.#", "2"),
|
testAccCheckStateValue("terraform_remote_state.foo", "computed_set.#", "2"),
|
||||||
testAccCheckStateValue("terraform_remote_state.foo", `map.%`, "2"),
|
testAccCheckStateValue("terraform_remote_state.foo", `map.%`, "2"),
|
||||||
|
@ -65,7 +65,7 @@ func testAccCheckStateValue(id, name, value string) resource.TestCheckFunc {
|
||||||
|
|
||||||
const testAccState_basic = `
|
const testAccState_basic = `
|
||||||
data "terraform_remote_state" "foo" {
|
data "terraform_remote_state" "foo" {
|
||||||
backend = "_local"
|
backend = "local"
|
||||||
|
|
||||||
config {
|
config {
|
||||||
path = "./test-fixtures/basic.tfstate"
|
path = "./test-fixtures/basic.tfstate"
|
||||||
|
@ -74,7 +74,7 @@ data "terraform_remote_state" "foo" {
|
||||||
|
|
||||||
const testAccState_complexOutputs = `
|
const testAccState_complexOutputs = `
|
||||||
resource "terraform_remote_state" "foo" {
|
resource "terraform_remote_state" "foo" {
|
||||||
backend = "_local"
|
backend = "local"
|
||||||
|
|
||||||
config {
|
config {
|
||||||
path = "./test-fixtures/complex_outputs.tfstate"
|
path = "./test-fixtures/complex_outputs.tfstate"
|
||||||
|
|
|
@ -36,16 +36,14 @@ func NewClient(t string, conf map[string]string) (Client, error) {
|
||||||
// BuiltinClients is the list of built-in clients that can be used with
|
// BuiltinClients is the list of built-in clients that can be used with
|
||||||
// NewClient.
|
// NewClient.
|
||||||
var BuiltinClients = map[string]Factory{
|
var BuiltinClients = map[string]Factory{
|
||||||
|
"artifactory": artifactoryFactory,
|
||||||
"atlas": atlasFactory,
|
"atlas": atlasFactory,
|
||||||
"azure": azureFactory,
|
"azure": azureFactory,
|
||||||
"consul": consulFactory,
|
"consul": consulFactory,
|
||||||
"etcd": etcdFactory,
|
"etcd": etcdFactory,
|
||||||
"gcs": gcsFactory,
|
"gcs": gcsFactory,
|
||||||
"http": httpFactory,
|
"http": httpFactory,
|
||||||
|
"local": fileFactory,
|
||||||
"s3": s3Factory,
|
"s3": s3Factory,
|
||||||
"swift": swiftFactory,
|
"swift": swiftFactory,
|
||||||
"artifactory": artifactoryFactory,
|
|
||||||
|
|
||||||
// This is used for development purposes only.
|
|
||||||
"_local": fileFactory,
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
---
|
||||||
|
layout: "remotestate"
|
||||||
|
page_title: "Remote State Backend: local"
|
||||||
|
sidebar_current: "docs-state-remote-local"
|
||||||
|
description: |-
|
||||||
|
Remote state stored using the local file system.
|
||||||
|
---
|
||||||
|
|
||||||
|
# local
|
||||||
|
|
||||||
|
Remote state backend that uses the local file system.
|
||||||
|
|
||||||
|
## Example Usage
|
||||||
|
|
||||||
|
```
|
||||||
|
terraform remote config \
|
||||||
|
-backend=local \
|
||||||
|
-backend-config="path=/path/to/terraform.tfstate"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Example Reference
|
||||||
|
|
||||||
|
```
|
||||||
|
data "terraform_remote_state" "foo" {
|
||||||
|
backend = "local"
|
||||||
|
config {
|
||||||
|
path = "${path.module}/../../terraform.tfstate"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Configuration variables
|
||||||
|
|
||||||
|
The following configuration options are supported:
|
||||||
|
|
||||||
|
* `path` - (Required) The path to the `tfstate` file.
|
|
@ -34,6 +34,9 @@
|
||||||
<li<%= sidebar_current("docs-state-remote-http") %>>
|
<li<%= sidebar_current("docs-state-remote-http") %>>
|
||||||
<a href="/docs/state/remote/http.html">http</a>
|
<a href="/docs/state/remote/http.html">http</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li<%= sidebar_current("docs-state-remote-local") %>>
|
||||||
|
<a href="/docs/state/remote/local.html">local</a>
|
||||||
|
</li>
|
||||||
<li<%= sidebar_current("docs-state-remote-s3") %>>
|
<li<%= sidebar_current("docs-state-remote-s3") %>>
|
||||||
<a href="/docs/state/remote/s3.html">s3</a>
|
<a href="/docs/state/remote/s3.html">s3</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
Loading…
Reference in New Issue