根据此文档,我尝试检查该/etc/hosts文件是否存在。但 Ansible 给予
The error was: template error while templating string: unexpected '/'
错误信息
https://docs.ansible.com/ansible/latest/user_guide/playbooks_tests.html#testing-paths
- debug:
msg: "host file already exists"
when: /etc/hosts is exists
Run Code Online (Sandbox Code Playgroud)
使用此测试条件的正确方法是什么?
谢谢
您链接到的文档部分可能不是您想要的 - 这仅用于测试控制器上的路径(即运行 Ansible 的主机),而不是测试的目标主机你的戏。
如果这就是您想要的,您需要修复表达式的语法when
。您链接到的示例都是 形式
<variable> is <test>,因此您可以编写如下内容:
- debug:
msg: "host file already exists"
when: etchosts is exists
vars:
etchosts: "/etc/hosts"
Run Code Online (Sandbox Code Playgroud)
这里我们定义一个名为etchosts包含我们的路径的字符串变量。在上面的示例中,我们在任务级别定义了它,但这也可以在游戏级别定义,如 group_ 或 host_var、via
set_fact等。
要测试目标主机上的文件,请使用以下stat模块:
- name: check for /etc/hosts
stat:
path: /etc/hosts
register: etchosts
Run Code Online (Sandbox Code Playgroud)
我们将结果注册etchosts到一个名为的变量中,以便我们可以在后续任务中使用它。例如:
- debug:
msg: "/etc/hosts exists"
when: etchosts.stat.exists
- debug:
msg: "/etc/hosts does not exist"
when: not etchosts.stat.exists
Run Code Online (Sandbox Code Playgroud)