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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...