Azure Ansible字符串变量到地形列表(字符串)
我将Ansible和Terraform一起用于MS Azure中的不同部署。现在我想创建一个带有子网的Vnet,子网模块为Azure Ansible字符串变量到地形列表(字符串),azure,variables,ansible,terraform,Azure,Variables,Ansible,Terraform,我将Ansible和Terraform一起用于MS Azure中的不同部署。现在我想创建一个带有子网的Vnet,子网模块为“azurerm\u虚拟网络和azurerm\u子网”,但我遇到的问题是“地址空间”和“地址前缀”在terraform中定义为“列表(字符串)”,这是在Ansible by“字符串”中完成的 我的问题是如何以正确的形式将此变量从Ansible转换为Terraform,而不获得以下消息: “默认值=\u001b[4m”{{subnet1\u cidr}}”\u001b[0m\n
“azurerm\u虚拟网络和azurerm\u子网”
,但我遇到的问题是“地址空间”和“地址前缀”
在terraform中定义为“列表(字符串)”
,这是在Ansible by“字符串”
中完成的
我的问题是如何以正确的形式将此变量从Ansible转换为Terraform,而不获得以下消息:
“默认值=\u001b[4m”{{subnet1\u cidr}}”\u001b[0m\n\u001b[0m\n”
默认值与变量的类型约束不兼容:
列表\n字符串“
我使用一个ansible角色获取ansible变量“group\u vars”
,该角色将名为“terraform.tfvars.j2”
的文件复制到“{{playbook\u 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 Terraform.tfvars.j2/Terraform.tfvars
# Networking
vnet_cidr = "{{ GV_Virtual_Network_Cidr }}"
subnet1_cidr = "{{ GV_Subnet_Cidr1 }}"
subnet2_cidr = "{{ GV_Subnet_Cidr2 }}"
如果您只需要将字符串转换为包含一个项的列表,则可以使用Ansible筛选器。 以下是一个例子:
{{ [example_variable] | list | to_json }}
但是,在您的情况下,将有一点不同的配置
在variables.tf文件中,您可以尝试删除默认值,因为在Ansible VAR中似乎没有变量vnet_cidr、subnet1_cidr和subnet2_cidr
variables.tf文件如下所示:
variable "vnet_cidr" {
type = list(string)
default = []
}
variable "subnet1_cidr" {
type = list(string)
default = []
}
variable "subnet2_cidr" {
type = list(string)
default = []
}
# Networking
vnet_cidr = [ "{{ GV_Virtual_Network_Cidr }}" ]
subnet1_cidr = [ "{{ GV_Subnet_Cidr1 }}" ]
subnet2_cidr = [ "{{ GV_Subnet_Cidr2 }}" ]
然后文件terraform.tfvars.j2/terraform.tfvars将如下所示:
variable "vnet_cidr" {
type = list(string)
default = []
}
variable "subnet1_cidr" {
type = list(string)
default = []
}
variable "subnet2_cidr" {
type = list(string)
default = []
}
# Networking
vnet_cidr = [ "{{ GV_Virtual_Network_Cidr }}" ]
subnet1_cidr = [ "{{ GV_Subnet_Cidr1 }}" ]
subnet2_cidr = [ "{{ GV_Subnet_Cidr2 }}" ]
初始化阶段运行正常,但现在应用程序出现错误,出现以下错误消息:terraform.tfvars第22行的输入变量值无效:\n 22:vnet\u cidr=\“10.0.0.0/16\”\n\n给定值对变量“vnet\u cidr”无效\":请举例说明vnet_cidr、subnet1_cidr和subnet2_cidr的可转换变量值?可转换组变量:“GV_虚拟网络cidr:10.0.0.0/16”是vnet_cidr您在Ansible中定义了vnet_cidr变量还是在Ansible中使用变量GV_虚拟网络cidr?GV_虚拟网络cidr是可转换变量。vnet_cidr是地形变量