【发布时间】:2021-04-21 20:46:56
【问题描述】:
我将 Ansible 和 Terraform 一起用于 MS Azure 中的不同部署。现在我想使用模块“azurerm_virtual_network and azurerm_subnet”. 创建一个带有子网的Vnet,只是我遇到了“Address_space” and “address_prefixes” 在terraform 中定义为“list (string)” 的问题,这是由“string” 在Ansible 中完成的。
我的问题是如何以正确的形式将该变量从 Ansible 获取到 Terraform,而不会收到以下消息:
“默认 = \u001b[4m”{{subnet1_cidr}}“\u001b[0m\n\u001b[0m\n这 默认值与变量的类型约束不兼容: 列出\n个字符串”
我使用 ansible 角色获取 ansible vars “group_vars”,该角色将名为 “terraform.tfvars.j2” 的文件复制到 “{{playbook_dir}} / terraform / terraform.tfvars "。在“variables.tf” 中,变量加载如下
variable "vnet_cidr" {
type = list(string)
default = "{{ [vnet_cidr] | list | to_json }}"
}
variable "subnet1_cidr" {
type = list(string)
default = "{{ [subnet1_cidr] | list | to_json }}"
}
variable "subnet2_cidr" {
type = list(string)
default = "{{ [subnet2_cidr] | list | to_json }}"
}
Ansible Group_Vars,
VNET_Name: AZ-Venet
GV_Virtual_Network_Cidr: 10.0.0.0/16
SNET1_Name: AZ-FrontEnd
GV_Subnet_Cidr1: 10.0.1.0/24
Survey_SNET2_Name: Az-Backend
GV_Subnet_Cidr2: 10.0.2.0/24
地形 terraform.tfvars.j2 /terraform.tfvars
# Networking
vnet_cidr = "{{ GV_Virtual_Network_Cidr }}"
subnet1_cidr = "{{ GV_Subnet_Cidr1 }}"
subnet2_cidr = "{{ GV_Subnet_Cidr2 }}"
【问题讨论】:
标签: azure variables ansible terraform