Terraform Version
Terraform v0.11.2
+ provider.external v1.0.0
+ provider.null v1.0.0
Terraform Configuration Files
These are defined inside a module called consul.
module "A" {
source = "./region"
region = "RegionA"
environment = "${var.environment}"
project-name = "${var.project-name}"
number-of-servers = "${var.number-of-servers}"
}
module "T" {
source = "./region"
region = "RegionT"
environment = "${var.environment}"
project-name = "${var.project-name}"
number-of-servers = "${var.number-of-servers}"
}
locals {
both-regions-server-ips = "${concat(module.A.server-ips, module.T.server-ips)}"
both-regions-server-fqdns = "${concat(module.A.server-fqdns, module.T.server-fqdns)}"
}
resource "null_resource" "provision-both-clusters" {
count = "${var.number-of-servers * 2}" # * 2 Because we have RegionA and RegionT
connection {
host = "${element(local.both-regions-server-ips, count.index)}"
user = "${var.ssh-username}"
private_key = "${file(".${local.keypair}.pem")}"
}
provisioner "chef" {
# Omitted for clarity
}
}
data "external" "vault-tokens" {
depends_on = ["null_resource.provision-both-clusters"]
program = ["${path.module}/create-vault-tokens.sh"]
query = {
consulAddress = "https://${element(module.tagus.server-ips, 0)}:8500"
masterToken = "${var.master-token}"
}
}
output "vault-backend-token" {
value = "${data.external.vault-tokens.result.backend-token}"
sensitive = true
}
output "vault-consul-auth-backend-token" {
value = "${data.external.vault-tokens.result.consul-auth-backend-token}"
sensitive = true
}
Expected Behavior
The output variables values should only be computed after provision-both-clusters in ran.
Actual Behavior
Error: Error running plan: 2 error(s) occurred:
* module.consul.output.vault-consul-auth-backend-token: Resource 'data.external.vault-tokens' does not have attribute 'result.consul-auth-backend-token' for variable 'data.external.vault-tokens.result.consul-auth-backend-token'
* module.consul.output.vault-backend-token: Resource 'data.external.vault-tokens' does not have attribute 'result.backend-token' for variable 'data.external.vault-tokens.result.backend-token'
The same behavior happens even if I define vault-tokens to be:
data "external" "vault-tokens" {
program = ["${path.module}/create-vault-tokens.sh"]
query = {
consulAddress = "https://${element(module.tagus.server-ips, 0)}:8500"
masterToken = "${var.master-token}"
dummy = "${null_resource.provision-both-clusters.count}"
}
}
Like described in #10603
If I remove the output variables Terraform resolves the graph correctly and only runs the vault-tokens after the null_resource.
If I set a depends_on = ["null_resource.provision-both-clusters"] on both output variables I still get the error.
Steps to Reproduce
terraform init
terraform plan
Terraform Version
Terraform Configuration Files
These are defined inside a module called
consul.Expected Behavior
The output variables values should only be computed after
provision-both-clustersin ran.Actual Behavior
The same behavior happens even if I define
vault-tokensto be:Like described in #10603
If I remove the output variables Terraform resolves the graph correctly and only runs the
vault-tokensafter the null_resource.If I set a
depends_on = ["null_resource.provision-both-clusters"]on both output variables I still get the error.Steps to Reproduce
terraform initterraform plan