ansible - 检查*本地*机器上是否存在文件

问题描述 投票:0回答:2

我遇到一种情况,我需要检查本地计算机上文件的状态(我将调用

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

但这仅在文件远程存在时才有效。有没有办法仅当文件存在本地时有条件地执行任务(如复制)(让第一个任务中的

stat
在本地而不是远程执行),如果不存在则静默失败?我不确定ansible是否有这种功能,但它会很有用。

ansible
2个回答
47
投票

通过 delegate_to 语句将任务委托给本地主机应该可以满足您的要求:

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

9
投票

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

when: "lookup('ansible.builtin.fileglob', '/home/ubuntu/.blah/config') != []"

fileglob
始终在本地计算机上查找。

© www.soinside.com 2019 - 2024. All rights reserved.