ansible:从寄存器变量中提取值以在同一剧本中的其他剧本中使用它
ansible: Extract value from the register variables to use it in other plays within same playbook
我正在使用 ansible 设置完整的环境。出于某种原因,ansible 没有获取变量值。
我正在使用 ansible 2.1.1.0
这是我正在尝试做的事情的简单示例:
我已经在 register: ec2_vpc
注册了我的 vpc。
1. #This didn't works
- name: Add to host vars
add_host:
name: vpc_vars
groups: vpc_subnets
vpc_subnet_id: "{{ ec2_vpc.subnets[0].id }}"
vpcid: "{{ ec2_vpc.vpc_id }}"
- debug: var=vpc_subnet_id
- debug: var=vpcid
2. These works
- name: Record vpc id
debug: var=ec2_vpc.vpc_id
- name: Record subnet id
debug: var=ec2_vpc.subnets[0].id
我的上述条带的结果 json:
TASK [debug] *******************************************************************
ok: [localhost] => {
"vpc_subnet_id": "VARIABLE IS NOT DEFINED!"
}
TASK [debug] *******************************************************************
ok: [localhost] => {
"vpcid": "VARIABLE IS NOT DEFINED!"
}
TASK [Record vpc id] ***********************************************************
ok: [localhost] => {
"ec2_vpc.vpc_id": "vpc-4sdh3832f"
}
TASK [Record subnet id] ********************************************************
ok: [localhost] => {
"ec2_vpc.subnets[0].id": "subnet-edfjdh3482"
}
为什么我的第一个语法不是选择值而是给出 VARIABLE IS NOT DEFINED!
更新: 这里我的第二个语法描述了我正确地从注册变量的 JSON 结果中整理出值。但我希望它适用于我的第一种语法,这意味着我想将主机变量添加到动态清单中。以便我可以在另一个游戏中重复使用它
add_host
将主机动态添加到您的清单。
我猜你只需要 set_fact
:
- name: Add to host vars
set_fact:
vpc_subnet_id: "{{ ec2_vpc.subnets[0].id }}"
vpcid: "{{ ec2_vpc.vpc_id }}"
- debug: var=vpc_subnet_id
- debug: var=vpcid
正如您所说,您已经在 ec2_vpc
中注册了您的 return value/result,那么如何获得它 vpc_subnet_id
或 vpcid
。你想通过这个得到它,那么你必须这样做:
- set_fact:
vpc_subnet_id: "{{ ec2_vpc.subnets[0].id }}"
vpcid: "{{ ec2_vpc.vpc_id }}"
希望对你有所帮助。
我正在使用 ansible 设置完整的环境。出于某种原因,ansible 没有获取变量值。
我正在使用 ansible 2.1.1.0
这是我正在尝试做的事情的简单示例:
我已经在 register: ec2_vpc
注册了我的 vpc。
1. #This didn't works
- name: Add to host vars
add_host:
name: vpc_vars
groups: vpc_subnets
vpc_subnet_id: "{{ ec2_vpc.subnets[0].id }}"
vpcid: "{{ ec2_vpc.vpc_id }}"
- debug: var=vpc_subnet_id
- debug: var=vpcid
2. These works
- name: Record vpc id
debug: var=ec2_vpc.vpc_id
- name: Record subnet id
debug: var=ec2_vpc.subnets[0].id
我的上述条带的结果 json:
TASK [debug] *******************************************************************
ok: [localhost] => {
"vpc_subnet_id": "VARIABLE IS NOT DEFINED!"
}
TASK [debug] *******************************************************************
ok: [localhost] => {
"vpcid": "VARIABLE IS NOT DEFINED!"
}
TASK [Record vpc id] ***********************************************************
ok: [localhost] => {
"ec2_vpc.vpc_id": "vpc-4sdh3832f"
}
TASK [Record subnet id] ********************************************************
ok: [localhost] => {
"ec2_vpc.subnets[0].id": "subnet-edfjdh3482"
}
为什么我的第一个语法不是选择值而是给出 VARIABLE IS NOT DEFINED!
更新: 这里我的第二个语法描述了我正确地从注册变量的 JSON 结果中整理出值。但我希望它适用于我的第一种语法,这意味着我想将主机变量添加到动态清单中。以便我可以在另一个游戏中重复使用它
add_host
将主机动态添加到您的清单。
我猜你只需要 set_fact
:
- name: Add to host vars
set_fact:
vpc_subnet_id: "{{ ec2_vpc.subnets[0].id }}"
vpcid: "{{ ec2_vpc.vpc_id }}"
- debug: var=vpc_subnet_id
- debug: var=vpcid
正如您所说,您已经在 ec2_vpc
中注册了您的 return value/result,那么如何获得它 vpc_subnet_id
或 vpcid
。你想通过这个得到它,那么你必须这样做:
- set_fact:
vpc_subnet_id: "{{ ec2_vpc.subnets[0].id }}"
vpcid: "{{ ec2_vpc.vpc_id }}"
希望对你有所帮助。