Ansible 循环不适用于条件数据类型测试

问题描述 投票:0回答:1

当我使用此命令和额外变量执行 ansible playbook 时

ansible-playbook controller_config/windows_domain_names.yml -e "target_win_host=testserver.testdomain.com"

其中包含一项任务

      - name: Find if the variable target_win_host is a list
        debug:
          msg: "{{ item }} is list data type"
        loop: "{{ target_win_host}}"
        when: target_win_host | type_debug == 'list'

我得到的错误是

“传递到“循环”的数据无效,它需要一个列表,改为:testserver.testdomain.com。提示:如果您传递了仅包含一个元素的列表/字典,请尝试将wantlist=True添加到您的查找调用中或使用q/查询而不是查找。”

我希望应该跳过上面的块,因为这不满足变量是列表并且它是标量的条件。(字符串)

我尝试了以下不同的条件

      - name: Find if the variable target_win_host is a list
        debug:
          msg: "{{ item }} is list data type"
        loop: "{{ target_win_host}}"
        when: target_win_host is not string and target_win_host is iterable and target_win_host is sequence

但与上面相同的错误

ansible
1个回答
0
投票

对于

type_debug
,为了将结果与字符串进行比较,您需要额外的括号
()

一个最小的示例手册

---
- hosts: localhost
  become: false
  gather_facts: false

  vars:

    targets:
      - test.example.com

  tasks:

    - debug:
        msg: "{{ targets | type_debug }}"

    - debug:
        msg: "is list"
      when: (targets | type_debug) == 'list'

将导致预期的行为。

TASK [debug] *****
ok: [localhost] =>
  msg: list

TASK [debug] *****
ok: [localhost] =>
  msg: is list
© www.soinside.com 2019 - 2024. All rights reserved.