SS-*_*th0 2 conditional-statements ansible
我有一个 ansible 剧本,其中一个任务取决于文件是否存在,如果存在,我想触发下一个任务并回显文件的内容。
这是代码块:
---
- name: If Pass File Exists
stat:
path: /var/lib/File
register: result
- name: Read Password
when: result.changed
shell: cat /var/lib/File
changed_when: false
register: adm_pass
- name: Echo Password
when: adm_pass.changed
debug:
var: adm_pass.stdout
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,最后一个任务会跳过,因为它没有改变,它的状态是好的。我怎样才能完成最后一个任务?
问:“如果文件存在,则回显该文件的内容。”
答:以下任务可以完成这项工作
- stat:
path: /var/lib/File
register: result
- slurp:
src: /var/lib/File
register: result
when: result.stat.exists
- debug:
msg: "{{ result.content|b64decode }}"
Run Code Online (Sandbox Code Playgroud)
问:“我们可以在同一任务中合并 slurp 和调试步骤吗?”
答:不。slurp和debug都是模块。一项任务仅服务于一个模块。但是,您可以将任务加入到一个块中。例如,给定文件
shell> ssh admin@test_11 cat /var/lib/File
test
Run Code Online (Sandbox Code Playgroud)
下面的剧本
shell> ssh admin@test_11 cat /var/lib/File
test
Run Code Online (Sandbox Code Playgroud)
给出
shell> cat pb.yml
- hosts: test_11
tasks:
- stat:
path: "{{ my_file }}"
register: result
- block:
- slurp:
src: "{{ my_file }}"
register: file
- debug:
msg: "{{ file.content|b64decode }}"
when: result.stat.exists
Run Code Online (Sandbox Code Playgroud)
如果文件不存在,块中的任务将被跳过
shell> ansible-playbook pb.yml -e my_file=/var/lib/File
PLAY [test_11] **************************************************
TASK [stat] *****************************************************
ok: [test_11]
TASK [slurp] ****************************************************
ok: [test_11]
TASK [debug] ****************************************************
ok: [test_11] =>
msg: |-
test
PLAY RECAP ******************************************************
test_11: ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Run Code Online (Sandbox Code Playgroud)