如何在 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
Prereq:pip 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[]'))
我的服务器有以下路径,其中主机名即 "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
Prereq:pip 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[]'))