如何解决Ansible:从playbook json输出中提取字符串并注册为变量
使用Ansible 2.9.10
运行一本手册,将vmware_guest_disk_info存储到名为disk_info的变量中。
vmware_guest_disk_info:
hostname: "{{ vcenter_hostname }}"
username: "{{ vcenter_username }}"
password: "{{ vcenter_password }}"
validate_certs: no
datacenter: "{{ dc }}"
name: "{{ vm_name }}"
register: disk_info
delegate_to: localhost
我正在尝试从密钥backing_datastore中提取值EEE-EEE-EEEE-033。我需要将值注册为变量,以便在剧本中进一步用作变量。
{
"hosts": {
"localhost": {
"_ansible_delegated_vars": {},"_ansible_no_log": false,"action": "vmware_guest_disk_info","changed": false,"guest_disk_info": {
"0": {
"backing_datastore": "EEE-EEE-EEEE-033","backing_eagerlyscrub": true,"backing_filename": "[EEE-EEE-EEEE-033]
serverhostname/serverhostname.vmdk","label": "Hard disk 1","summary": "62,914,560 KB","unit_number": 0
}
},
我尝试使用循环,json_query,查找,子元素,但是我对这些还不太熟悉。
- name: get datastore
loop: "{{ hosts | json_query('localhost.guest_disk_info[*].backing_datastore') }}"
register: ds_result
delegate_to: localhost
- name: get backing_datastore value from the variable'disk_info'
debug: msg="{{ lookup('vars','disk_info')}}"
vars:
disk_info: "{{ disk_info }}"
debug: msg="{{ disk_info.json | json_query(jmesquery)}}"
vars:
jmesquery: "[*].backing_datastore"
更新的代码:
- name: extract backing_datastore value from variable "disk_info"
debug: var=disk_info.hosts.localhost.guest_disk_info.0.backing_datastore
register: ds
delegate_to: localhost
- name: show me variable ds contents
debug: var= ds
收到错误:
"disk_info.hosts.localhost.guest_disk_info.0.backing_datastore": "VARIABLE IS NOT DEFINED!: 'dict object' has no attribute 'hosts'"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。