当 Ansible 中不存在文件时,如何执行操作?

当 Ansible 中不存在文件时,如何执行操作?

我想列出没有特定文件的服务器列表。

我制作了以下 Ansible 剧本:

 - name: "If file not in /apps"
   hosts: all
   tasks:

    - name: Find apps
      find:
        paths: /apps/
        patterns: "*"
        file_type: directory
      register: apps

    - name: Show file paths
      with_items: "{{ apps.files }}"
      debug:
        msg: "{{ item.path }}"

这将返回一条包含应用程序目录的消息。我想检查某个文件是否存在于子文件夹中,以及该文件是否不是现在,我想运行一个脚本。

我想要的伪代码示例:

for folder in "/apps/*":    
    if file not in folder:
        print(item.path)

我该怎么做?我什么也找不到,而且我已经尝试了好几个小时了。

目标服务器

答案1

关于你的问题

我想检查某个文件是否存在于子文件夹中,如果该文件不存在

您可以使用以下方法。

---
- hosts: test
  become: false
  gather_facts: false

  vars:

    SEARCH_PATH: "/home/user"
    SEARCH_FILE: "test.txt"

  tasks:

  - name: Check if file exists
    stat:
      path: "{{ SEARCH_PATH }}/{{ SEARCH_FILE }}"
    register: result

  - name: Show result
    debug:
      msg: "The file does not exist!"
    when: not result.stat.exists

  - name: Show result
    debug:
      msg: "The file does exist!"
    when: result.stat.exists

输出结果为

TASK [Show result] ************
ok: [test.example.com] =>
  msg: The file does not exist!

或者

TASK [Show result] ********
ok: [test.example.com] =>
  msg: The file does exist!

取决于文件/home/user或路径是否存在。

感谢进一步的问答

文档

相关内容