ansible - 检查*local*machine上是否存在文件

Fru*_*ner 25 ansible ansible-playbook

我有一种情况需要检查本地机器上的文件状态(我将调用的文件ansible-playbook ...).

如果存在由用户创建的文件,则需要将其复制到远程主机.如果它不存在,则没有远程主机需要它.

我知道我做过的事情:

- name: Check for ~/.blah/config
  stat: path=/home/ubuntu/.blah/config
  register: stat_blah_config

- name: Do something with blah config
  shell: ~/do_something_with_config.sh
  when: stat_aws_config.stat.exists == true
Run Code Online (Sandbox Code Playgroud)

但这只有在远程存在文件时才有效.有没有办法有条件地执行任务(如副本)只有当文件存在于本地时(stat第一个任务在本地而不是远程执行),如果没有,则无声地失败?我不确定ansible是否具有这种功能,但它会很有用.

Bru*_*e P 30

通过local_action语句将任务委派给localhost 应该可以满足您的需求:

- name: Check for ~/.blah/config
  local_action: stat path=/home/ubuntu/.blah/config
  register: stat_blah_config
Run Code Online (Sandbox Code Playgroud)

  • 是否需要设置任何特殊权限设置才能使用“local_action”?我不断收到“权限被拒绝”错误:`TASK: [blah_stuff | 检查 ~/.blah/config] **************************************** 失败:[ i-34b724e0 -> 127.0.0.1] => {"failed": true, "parsed": false} BECOME-SUCCESS-tqbkvkywytucgnfrjbmokwelpwddzevz /bin/sh: 1: /tmp/.ansible/tmp/ansible-tmp-15-71 230781782204943/stat:权限被拒绝`我确实尝试使用`sudo:true`,但这似乎没有帮助 (3认同)

Rus*_*art 6

这也有效,并且可以节省执行任务的时间:

when: "{{ lookup('ansible.builtin.fileglob', '/home/ubuntu/.blah/config') != [] }}"
Run Code Online (Sandbox Code Playgroud)

fileglob总是在本地机器上查找。