Ansible 测试检查文件是否存在

sfg*_*ups 0 ansible

根据此文档,我尝试检查该/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)

使用此测试条件的正确方法是什么?

谢谢

lar*_*sks 6

您链接到的文档部分可能不是您想要的 - 这仅用于测试控制器上的路径(即运行 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)