我有一个使用Openstack提供程序构建VM的terraform。提供程序的用户名和密码存储在Hashicorp Vault密钥中。我已经设置了启用vault
提供程序并使用我的特权令牌访问密钥的计划。这就是我的计划:
provider "vault" {
}
data "vault_generic_secret" "openstack" {
path = "secret/openstack"
}
provider "openstack" {
user_name = "${data.vault_generic_secret.openstack.data["username"]}"
password = "${data.vault_generic_secret.openstack.data["password"]}"
tenant_name = "${var.openstack_tenant_name}"
domain_id = "${var.openstack_domain_id}"
auth_url = "${var.openstack_auth_url}"
}
当我尝试运行此计划时,我收到以下错误:
* provider.openstack: You must provide a password to authenticate
到目前为止,我已经能够通过将我的机密值显示为输出变量来验证vault
提供程序和vault_generic_secret
数据项是否在另一个计划中工作。另外,我知道openstack提供程序计划有效,因为我能够使用正确的值对user_name和密码进行硬编码,并且计划正常。
在我看来,即使data.vault_generic_secret.openstack
顶点在我的provider.openstack
顶点之前行走(在TF_LOG TRACE输出中验证了这一点),数据值也没有完全加载或可用于这点。我之所以这样想是因为当我测试时将密码/用户名字段留空时我看到了同样的错误。但是,如果我将用户名和密码设置为无效凭据,我会得到一个完全不同的错误,即无法对实际的openstack auth url进行身份验证。
* provider.openstack: Authentication failed
是否每个人都使用过保险库来加载秘密来配置他们的VM提供商?人们可能提供的任何输入都将是一个巨大的帮助。
Terraform v0.9.2
更新1:
我发现了一些似乎与我所遇到的相关的地形问题: https://github.com/hashicorp/terraform/issues/11264 https://github.com/hashicorp/terraform/issues/12393
根据第一个问题,当我尝试运行terraform plan -input=false
时,它可以运行。