尝试在剧本中注册输出时未定义变量

时间:2019-03-25 13:34:56

标签: ansible ansible-facts

我正在尝试将输出中的变量注册到F5池的查询中,并且出现此错误:

"<type 'list'>": "VARIABLE IS NOT DEFINED!", 

我做错了什么? 任何帮助表示赞赏。 谢谢!

---
- name: GRAB F5 FACTS
  hosts: f5
  connection: local
  gather_facts: no
  tasks:
    - name: Collect BIG-IP facts
      bigip_device_facts:
        gather_subset: ltm-pools
        provider: "{{ prov }}"
      register: bigip_device_facts

    - name: FACTS OUTPUT
      debug:
        var: "{{ item.members | rejectattr('state', 'match', '^present$') | map(attribute='name') | list }}"
      register: jkout
      with_items: "{{ bigip_device_facts.ltm_pools }}" 
      when: item.full_path  == "/Common/mypool"

    - name: Set a variable
      debug:
        msg: "jkvar={{ jkout }}"

3 个答案:

答案 0 :(得分:1)

您正在使用带有选项debug:的{​​{1}}模块,这需要一个变量,而不是jinja2模板。

因此将其更改为:

var:

debug:
  var: item.members

答案 1 :(得分:0)

就像@dgw所说的那样,问题出在var模块的debug选项上。

https://docs.ansible.com/ansible/latest/modules/debug_module.html#parameters

这本剧本有效:

  - name: test rejectattr
    hosts: localhost
    gather_facts: no

    vars:
      members:
        - { name: "one", state: "present" }
        - { name: "two", state: "absent" }
        - { name: "three", state: "present" }

    tasks:

      - name: FACTS OUTPUT
        debug:
          msg: "{{ members | rejectattr('state', 'match', '^present$') | map(attribute='name') | list }}"

答案 2 :(得分:0)

感谢您的回复。我会进一步调查。 除此之外,我认为我已经能够用另一种方式解决它。

    - name: FACTS OUTPUT
  set_fact:
    listado: "{{ item.members | rejectattr('state', 'match', '^present$') | map(attribute='name') | list }}"
  with_items: "{{ bigip_device_facts.ltm_pools }}"
  when: item.full_path  == "/Common/mypool"
- debug: msg={{ listado }}
  register: jkout

- name: Set a variable
  debug:
    msg: "jkvar={{ jkout }}"

这是正确的方法吗? 谢谢!