我有三种资源。我想添加的VM类型。对于每个资源,我希望运行一个远程执行程序,并使用相应的提供程序放置一些文件。由于我不希望在每个资源中重复提供程序,所以我考虑编写一个(resp )。(另一)模块。我创建了一个模块,如下所示:
variable "cicd-user" {
default = [
"useradd cicd-user",
"echo cicd-user: | /usr/sbin/chpasswd",
"su - cicd-user -c \"mkdir /home/cicd-user/.ssh/\"",
"su - cicd-user -c \"touch /home/cicd-user/.ssh/authorized_keys\"",
"su - cicd-user -c \"chmod 700 /home/cicd-user/.ssh/\"",
"su - cicd-user -c \"chmod 600 /home/cicd-user/.ssh/authorized_keys\"",
]
}
variable "sudoers_content" {
default = "cicd-user ALL=(ALL) NOPASSWD: ALL"
}
variable "sudoers_destination" {
default = "/etc/sudoers.d/cicd"
}main.tf有以下几个方面:
module "provisioner_info" {
source = "./provisioner_info"
}
...
resource "vsphere_virtual_machine" "web" {
...
provisioner "remote-exec" {
inline = module.provisioner_info.cicd-user
}
provisioner "file" {
content = module.provisioner_info.sudoers_content
destination = module.provisioner_info.sudoers_destination
}
...这不像我预期的那样起作用,我得到了以下错误:
terraform plan
Error: Unsupported attribute
on main.tf line 81, in resource "vsphere_virtual_machine" "web":
81: inline = module.provisioner_info.cicd-user
This object does not have an attribute named "cicd-user".有人能告诉我我做错了什么吗?我是否误用了模块功能?
发布于 2020-11-17 12:01:46
您需要为provisioner_info模块提供一个输出:
output "cicd-user" {
value = var.cicd-user
description = "The cicd-user."
}然后,就像您在上面所做的那样,将模块声明为名称空间中的provisioner_info的配置可以访问它。
https://stackoverflow.com/questions/64872772
复制相似问题