我正在使用Ansiblebuild立一个完整的环境。 出于某种原因,Ansible没有selectvariables值。
我正在使用Ansible 2.1.1.0。
下面是我想要做的一个例子:
我已经注册了我的vpc register: ec2_vpc
。
syntax-1 # This doesn't work - name: Add to host vars add_host: name: "vpc subnets" groups: vpc_vars vpc_subnet_id: "{{ ec2_vpc.subnets[0].id }}" vpcid: "{{ ec2_vpc.vpc_id }}" - debug: var=vpc_subnet_id - debug: var=vpcid syntax-2 # These works - name: Record vpc id debug: var=ec2_vpc.vpc_id - name: Record subnet id debug: var=ec2_vpc.subnets[0].id
以上带的结果:
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" }
为什么我的第一个语法没有select值,而是返回VARIABLE IS NOT DEFINED!
更新 :这里我的第二个语法描述我正确地从注册的variables的JSON结果中sorting的值。 但是我希望它适用于我的第一个语法,这意味着我想将主机variables添加到dynamic库存。 所以我可以在另一场戏中重复使用它
add_host
模块在主机的dynamic列表中创build一个主机。 然后,您可以对这组主机运行另一个游戏(在同一个游戏手册中),在该游戏中您将能够访问您设置的variables。
例如,使用以下语法:
- hosts: all # ... tasks: - name: Add to host vars add_host: name: host_1 groups: dynamic_hosts vpc_subnet_id: "{{ ec2_vpc.subnets[0].id }}" vpcid: "{{ ec2_vpc.vpc_id }}" - hosts: dynamic_hosts # ... tasks: - debug: var=vpc_subnet_id - debug: var=vpcid
上例中的add_host
用以下内容创build一个内存中文件清单文件:
[dynamic_hosts] host_1 vpc_subnet_id="{{ ec2_vpc.subnets[0].id }}" vpcid="{{ ec2_vpc.vpc_id }}"