Ansible:如果远程主机上存在文件,则回显该文件的内容

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)

但在这种情况下,最后一个任务会跳过,因为它没有改变,它的状态是好的。我怎样才能完成最后一个任务?

Vla*_*tka 5

问:“如果文件存在,则回显该文件的内容。”

答:以下任务可以完成这项工作

    - 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 和调试步骤吗?”

答:不。slurpdebug都是模块。一项任务仅服务于一个模块。但是,您可以将任务加入到一个块中。例如,给定文件

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)