Ansible:如何使用 yaml 指定数组或列表元素事实?
Ansible: How to specify an array or list element fact with yaml?
当我们检查主机变量时:
- 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"
列表的第一个元素?
这应该像在 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
使用点符号
"{{ ansible_all_ipv4_addresses.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 剧本中的 result
寄存器中。
我是这样做的:
由于结果是哈希数组的哈希,即 state
在 instances
数组的索引 (0
) 哈希中,我修改了剧本以查看这样:
---
- 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"
}
就这些了。
希望对您有所帮助
当我们检查主机变量时:
- 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"
列表的第一个元素?
这应该像在 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
使用点符号
"{{ ansible_all_ipv4_addresses.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 剧本中的 result
寄存器中。
我是这样做的:
由于结果是哈希数组的哈希,即 state
在 instances
数组的索引 (0
) 哈希中,我修改了剧本以查看这样:
---
- 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"
}
就这些了。
希望对您有所帮助