diff --git a/builtin/providers/terraform/resource_state.go b/builtin/providers/terraform/data_source_state.go similarity index 72% rename from builtin/providers/terraform/resource_state.go rename to builtin/providers/terraform/data_source_state.go index fb0e85ee2c7e..1fa4ae8f9cfc 100644 --- a/builtin/providers/terraform/resource_state.go +++ b/builtin/providers/terraform/data_source_state.go @@ -8,23 +8,19 @@ import ( "github.com/hashicorp/terraform/state/remote" ) -func resourceRemoteState() *schema.Resource { +func dataSourceRemoteState() *schema.Resource { return &schema.Resource{ - Create: resourceRemoteStateCreate, - Read: resourceRemoteStateRead, - Delete: resourceRemoteStateDelete, + Read: dataSourceRemoteStateRead, Schema: map[string]*schema.Schema{ "backend": &schema.Schema{ Type: schema.TypeString, Required: true, - ForceNew: true, }, "config": &schema.Schema{ Type: schema.TypeMap, Optional: true, - ForceNew: true, }, "output": &schema.Schema{ @@ -35,11 +31,7 @@ func resourceRemoteState() *schema.Resource { } } -func resourceRemoteStateCreate(d *schema.ResourceData, meta interface{}) error { - return resourceRemoteStateRead(d, meta) -} - -func resourceRemoteStateRead(d *schema.ResourceData, meta interface{}) error { +func dataSourceRemoteStateRead(d *schema.ResourceData, meta interface{}) error { backend := d.Get("backend").(string) config := make(map[string]string) for k, v := range d.Get("config").(map[string]interface{}) { @@ -69,8 +61,3 @@ func resourceRemoteStateRead(d *schema.ResourceData, meta interface{}) error { d.Set("output", outputs) return nil } - -func resourceRemoteStateDelete(d *schema.ResourceData, meta interface{}) error { - d.SetId("") - return nil -} diff --git a/builtin/providers/terraform/resource_state_test.go b/builtin/providers/terraform/data_source_state_test.go similarity index 100% rename from builtin/providers/terraform/resource_state_test.go rename to builtin/providers/terraform/data_source_state_test.go diff --git a/builtin/providers/terraform/provider.go b/builtin/providers/terraform/provider.go index e71d5f40a39b..7e14f87d681d 100644 --- a/builtin/providers/terraform/provider.go +++ b/builtin/providers/terraform/provider.go @@ -9,7 +9,12 @@ import ( func Provider() terraform.ResourceProvider { return &schema.Provider{ ResourcesMap: map[string]*schema.Resource{ - "terraform_remote_state": resourceRemoteState(), + "terraform_remote_state": schema.DataSourceResourceShim( + dataSourceRemoteState(), + ), + }, + DataSourcesMap: map[string]*schema.Resource{ + "terraform_remote_state": dataSourceRemoteState(), }, } } diff --git a/website/source/docs/providers/terraform/r/remote_state.html.md b/website/source/docs/providers/terraform/d/remote_state.html.md similarity index 84% rename from website/source/docs/providers/terraform/r/remote_state.html.md rename to website/source/docs/providers/terraform/d/remote_state.html.md index dbe19fd31224..683ba264e3f7 100644 --- a/website/source/docs/providers/terraform/r/remote_state.html.md +++ b/website/source/docs/providers/terraform/d/remote_state.html.md @@ -1,7 +1,7 @@ --- layout: "terraform" page_title: "Terraform: terraform_remote_state" -sidebar_current: "docs-terraform-resource-remote-state" +sidebar_current: "docs-terraform-datasource-remote-state" description: |- Accesses state meta data from a remote backend. --- @@ -13,7 +13,7 @@ Retrieves state meta data from a remote backend ## Example Usage ``` -resource "terraform_remote_state" "vpc" { +data "terraform_remote_state" "vpc" { backend = "atlas" config { name = "hashicorp/vpc-prod" @@ -22,7 +22,7 @@ resource "terraform_remote_state" "vpc" { resource "aws_instance" "foo" { # ... - subnet_id = "${terraform_remote_state.vpc.output.subnet_id}" + subnet_id = "${data.terraform_remote_state.vpc.output.subnet_id}" } ``` diff --git a/website/source/docs/providers/terraform/index.html.markdown b/website/source/docs/providers/terraform/index.html.markdown index e5ccbff59e54..20a9dfee3cec 100644 --- a/website/source/docs/providers/terraform/index.html.markdown +++ b/website/source/docs/providers/terraform/index.html.markdown @@ -8,23 +8,16 @@ description: |- # Terraform Provider -The terraform provider exposes resources to access state meta data -for Terraform outputs from shared infrastructure. +The terraform provider provides access to outputs from the Terraform state +of shared infrastructure. -The terraform provider is what we call a _logical provider_. This has no -impact on how it behaves, but conceptually it is important to understand. -The terraform provider doesn't manage any _physical_ resources; it isn't -creating servers, writing files, etc. It is used to access the outputs -of other Terraform states to be used as inputs for resources. -Examples will explain this best. - -Use the navigation to the left to read about the available resources. +Use the navigation to the left to read about the available data sources. ## Example Usage ``` # Shared infrastructure state stored in Atlas -resource "terraform_remote_state" "vpc" { +data "terraform_remote_state" "vpc" { backend = "atlas" config { path = "hashicorp/vpc-prod" @@ -33,6 +26,6 @@ resource "terraform_remote_state" "vpc" { resource "aws_instance" "foo" { # ... - subnet_id = "${terraform_remote_state.vpc.output.subnet_id}" + subnet_id = "${data.terraform_remote_state.vpc.output.subnet_id}" } ``` diff --git a/website/source/layouts/terraform.erb b/website/source/layouts/terraform.erb index c3ff37f8ec35..48a9f34d0b6f 100644 --- a/website/source/layouts/terraform.erb +++ b/website/source/layouts/terraform.erb @@ -10,11 +10,11 @@ Terraform Provider - > - Resources + > + Data Sources