首页 > 解决方案 > 用 with_items 注册的 Ansible 变量,如何使用这个变量?

问题描述

我有这样一个场景,需要用到两个文件A.bin, B.bin,先在files目录下找,如果没找到,直接从服务器下载

- name: Send A.bin and B.bin
  copy: src={{item}}.bin dest=/opt/
  register: is_exist
  failed_when: False
  with_items:
    - A
    - B

- name: Download from a server A.bin, B.bin
  shell: wget -P /opt/{{item.item}} {{base_url}}{{item.item}}.bin
  when: item.item.exception is defined
  with_items:
    - is_exist.results

但这会报错:

The conditional check 'item.item.exception is defined' failed. The error was: error while evaluating conditional (item.item.exception is defined): 'ansible.utils.unsafe_proxy.AnsibleUnsafeText object' has no attribute 'item'

我应该怎么办?

标签: ansibleansible-2.x

解决方案


我建议直观地查看is_exist变量的结构。

- debug: msg="{{ is_exist }}"

然后,如果是预期的变量名,在测试它的键之前item.item.exception总是检查它item.item的定义以避免:has no attribute 'item'exception

when: item.item is defined and item.item.exception is defined

推荐阅读