当我们检查hostvars时:
- name: Display all variables/facts known for a host
debug: var=hostvars[inventory_hostname]
我们得到:
ok: [default] => {
"hostvars[inventory_hostname]": {
"admin_email": "admin@surfer190.com",
"admin_user": "root",
"ansible_all_ipv4_addresses": [
"192.168.35.19",
"10.0.2.15"
],...
我如何指定"ansible_all_ipv4_addresses"
列表的第一个元素?
答案 0 :(得分:13)
使用点符号
"{{ ansible_all_ipv4_addresses.0 }}"
答案 1 :(得分:7)
这应该像在Python中一样工作。这意味着您可以使用引号访问键,使用整数访问索引。
- set_fact:
ip_address_1: "{{ hostvars[inventory_hostname]['ansible_all_ipv4_addresses'][0] }}"
ip_address_2: "{{ hostvars[inventory_hostname]['ansible_all_ipv4_addresses'][1] }}"
- name: Display 1st ipaddress
debug:
var: ip_address_1
- name: Display 2nd ipaddress
debug:
var: ip_address_2
答案 2 :(得分:0)
在 Ansible 中尝试解析命令的结果时,我遇到了同样的挑战。
结果是:
{
"changed": true,
"instance_ids": [
"i-0a243240353e84829"
],
"instances": [
{
"id": "i-0a243240353e84829",
"state": "running",
"hypervisor": "xen",
"tags": {
"Backup": "FES",
"Department": "Research"
},
"tenancy": "default"
}
],
"tagged_instances": [],
"_ansible_no_log": false
}
我想将 state
的值解析到 ansible playbook 中的 result
寄存器中。
我是这样做的:
由于结果是散列数组的散列,即 state
位于 0
数组的索引 (instances
) 散列中,因此我将剧本修改为这样:
---
- name: Manage AWS EC2 instance
hosts: localhost
connection: local
# gather_facts: false
tasks:
- name: AWS EC2 Instance Restart
ec2:
instance_ids: '{{ instance_id }}'
region: '{{ aws_region }}'
state: restarted
wait: True
register: result
- name: Show result of task
debug:
var: result.instances.0.state
我使用 register
将命令的值保存在名为 result
的变量中,然后使用以下命令在变量中获取 state
的值:
result.instances.0.state
这次运行命令的结果是:
TASK [Show result of task] *****************************************************
ok: [localhost] => {
"result.instances.0.state": "running"
}
仅此而已。
我希望这会有所帮助