如何在 Ansible 中验证不区分大小写的文件路径

How to verify case-insensitive filepath in Ansible

我的服务器有以下路径,其中主机名即 "myhost1" 文件夹可以是大写或小写,如下例所示。

/app/cell/myhost1_sales075/nodes/Node009/servers/server.xml

或者路径可以是大写的主机名,如下所示

/app/cell/MYHOST1_sales075/nodes/Node009/servers/server.xml

下面是我的剧本,它检查路径是否存在,否则它将失败。

注意:ansible_hostname 可以 return myhost1(小写)或 MYHOST1(大写)

- name: check if Path is valid
  shell: "ls -l /app/cell/{{ ansible_hostname }}*/nodes/*Node*/servers/server.xml"
  ignore_errors: yes
  register: shorewall

- fail:
    msg: Path or server name is invalid. Kindly enter correct PATH. Exiting Now...
  when: shorewall.rc != 0

我面临的问题是,当我希望支票不区分大小写时,我的支票区分大小写。因此,如果主机名是大写或小写以及通配符“*”

,我的剧本应该不会失败

能否请您告诉我需要在我的剧本中做哪些更改才能使路径检查不区分大小写?

注意:这只是回答你的直接问题。同时,您应该考虑检查当前脚本并使用 stat 模块检查文件是否存在,而不是忽略在 shell

中启动的 ls 上的错误

下面的解决方案将检查两个路径,然后提取您 results 注册变量中的所有 rc 字段 json_query 并检查是否至少有一个返回 0

Prereqpip install jmespath 在控制器机器上(json_query 过滤器需要)。

---
- name: Verify upper/lower path with ls in shell (bad)
  hosts: localhost
  gather_facts: false

  tasks:

    - name: Check my path
      shell: "ls -l /tmp/{{ item }}"
      register: my_path
      ignore_errors: yes
      loop:
        - "{{ inventory_hostname }}"
        - "{{ inventory_hostname | upper }}"

    - name: Fail if path does not exists
      fail:
        msg: path does not exists
      when: 0 not in (my_path | json_query('results[].rc[]'))