24 ansible
Ansible 1.9.4.我尝试只为主机执行一些任务,当定义一些变量时,它工作正常,但不能使用with_items语句.
- debug: var=symlinks
when: symlinks is defined
- name: Create other symlinks
file: src={{ item.src }} dest={{ item.dest }} state=link
with_items: "{{ symlinks }}"
when: symlinks is defined
Run Code Online (Sandbox Code Playgroud)
但我得到:
TASK: [app/symlinks | debug var=symlinks] *********************
skipping: [another-host-yet]
TASK: [app/symlinks | Create other symlinks] ******************
fatal: [another-host-yet] => with_items expects a list or a set
Run Code Online (Sandbox Code Playgroud)
也许我做错了什么? 对不起我的英语不好
udo*_*dan 26
这种行为的原因是条件在循环内的工作方式不同.如果定义了循环,则在迭代项目的同时评估每个项目的条件.但循环本身需要一个有效的列表.
这也在文档中提到:
请注意,当与with_items组合时(请参阅循环),请注意为每个项目单独处理when语句.这是设计的:
Run Code Online (Sandbox Code Playgroud)tasks: - command: echo {{ item }} with_items: [ 0, 2, 4, 6, 8, 10 ] when: item > 5
我认为这是一个糟糕的设计选择,对于这个功能,他们应该更好地介绍一些类似的东西with_when.
正如您已经想到的那样,您可以默认为空列表.
with_items: "{{ symlinks | default([]) }}"
Run Code Online (Sandbox Code Playgroud)
最后,如果列表是从var动态加载的,比如说x,使用:
with_items: "{{ symlinks[x|default('')] | default([])}}"
Run Code Online (Sandbox Code Playgroud)
当'x'未定义时,这将默认为空列表
| 归档时间: |
|
| 查看次数: |
28552 次 |
| 最近记录: |