diff --git a/README.md b/README.md index 3419d06..9107dc5 100644 --- a/README.md +++ b/README.md @@ -417,6 +417,27 @@ which is equivalent to the following input for `vals`: ``` $ echo 'foo: ref+tfstateazurerm://my_rg/my_storage_account/terraform-backend/unique.terraform.tfstate/output.virtual_network.name' | vals eval -f - ``` + +### Terraform in Terraform Cloud / Terraform Enterprise (tfstateremote) + +- `ref+tfstateremote://app.terraform.io/{org}/{myworkspace}/RESOURCE_NAME` + +Examples: + +- `ref+tfstateremote://app.terraform.io/myorg/myworkspace/output.virtual_network.name` + +It allows to use Terraform state stored in Terraform Cloud / Terraform Enterprise given the resource group, the organization and the workspace. You can try to read the state with command (with exported variable `TFE_TOKEN`): + +``` +$ tfstate-lookup -s remote://app.terraform.io/myorg/myworkspace output.virtual_network.name +``` + +which is equivalent to the following input for `vals`: + +``` +$ echo 'foo: ref+tfstateremote://app.terraform.io/myorg/myworkspace/output.virtual_network.name' | vals eval -f - +``` + ### SOPS - The whole content of a SOPS-encrypted file: `ref+sops://base64_data_or_path_to_file?key_type=[filepath|base64]&format=[binary|dotenv|yaml]` diff --git a/go.mod b/go.mod index 33e8ee6..f07c9e5 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/Azure/go-autorest/autorest v0.11.19 github.com/Azure/go-autorest/autorest/azure/auth v0.5.8 github.com/aws/aws-sdk-go v1.40.28 - github.com/fujiwara/tfstate-lookup v0.4.0 + github.com/fujiwara/tfstate-lookup v0.4.2 github.com/google/go-cmp v0.5.5 github.com/hashicorp/golang-lru v0.5.4 github.com/hashicorp/vault/api v1.0.4 @@ -22,4 +22,4 @@ require ( gopkg.in/ini.v1 v1.51.0 // indirect gopkg.in/yaml.v2 v2.3.0 // indirect gopkg.in/yaml.v3 v3.0.0-20210107172259-749611fa9fcc -) \ No newline at end of file +) diff --git a/go.sum b/go.sum index 029ebd1..d2fa5fd 100644 --- a/go.sum +++ b/go.sum @@ -170,6 +170,8 @@ github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoD github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fujiwara/tfstate-lookup v0.4.0 h1:AaubXvolethCndWpZ+c/Sibm6J4SCIlSxcxvn6cYon4= github.com/fujiwara/tfstate-lookup v0.4.0/go.mod h1:F56Bz3W497ZJA0ijFLVgcYeAVuhtbzvV6/hMtu6f2Ek= +github.com/fujiwara/tfstate-lookup v0.4.2 h1:RmhlHIMLVqNWHxaBasap+L5LO7pKorAbpIVQrktYCzY= +github.com/fujiwara/tfstate-lookup v0.4.2/go.mod h1:F56Bz3W497ZJA0ijFLVgcYeAVuhtbzvV6/hMtu6f2Ek= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-asn1-ber/asn1-ber v1.3.1/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= diff --git a/pkg/stringprovider/stringprovider.go b/pkg/stringprovider/stringprovider.go index a2008bf..cc771ba 100644 --- a/pkg/stringprovider/stringprovider.go +++ b/pkg/stringprovider/stringprovider.go @@ -41,6 +41,8 @@ func New(provider api.StaticConfig) (api.LazyLoadedStringProvider, error) { return tfstate.New(provider, "s3"), nil case "tfstateazurerm": return tfstate.New(provider, "azurerm"), nil + case "tfstateremote": + return tfstate.New(provider, "remote"), nil case "azurekeyvault": return azurekeyvault.New(provider), nil } diff --git a/vals.go b/vals.go index 2b4a0cf..06f8325 100644 --- a/vals.go +++ b/vals.go @@ -66,6 +66,7 @@ const ( ProviderTFStateGS = "tfstategs" ProviderTFStateS3 = "tfstates3" ProviderTFStateAzureRM = "tfstateazurerm" + ProviderTFStateRemote = "tfstateremote" ProviderAzureKeyVault = "azurekeyvault" ) @@ -180,6 +181,9 @@ func (r *Runtime) Eval(template map[string]interface{}) (map[string]interface{}, case ProviderTFStateAzureRM: p := tfstate.New(conf, "azurerm") return p, nil + case ProviderTFStateRemote: + p := tfstate.New(conf, "remote") + return p, nil case ProviderAzureKeyVault: p := azurekeyvault.New(conf) return p, nil