如果目录存在,Ansible有条件地同步

时间:2017-08-24 18:41:08

标签: ansible ansible-2.x

我想使用Ansible的synchronize模块根据条件将文件传输到远程服务器。条件是目录及其内容存在于源服务器上。

例如:

首先播放,检查localhost上是否存在该目录:

hosts: localhost
stat:
  path: some/path/to/dir/
register: st

然后,在第二次播放时,在when语句中使用该变量来有条件地使用synchronize模块:

hosts: remote_hosts
synchronize:
  src: some/path/to/dir/
  dest: some/dest/path
when: st.stat.isdir is defined

我的问题是播放之间不能使用st变量,所以如果目录存在,我怎么才能运行synchronize任务。

我会把它们放在同一个游戏中,但是他们正在使用不同的主机。

我的Ansible版本是2.3.1.0

1 个答案:

答案 0 :(得分:2)

你有几个选择。您可以使用remote_users将localhost任务放在游戏中并使用delegate_to: localhost

stat:
  path: some/path/to/dir/
register: st
delegate_to: localhost

或者您可以保持localhost按原样播放并使用remote_hosts播放中的hostvars引用localhost的变量。

hosts: remote_hosts
synchronize:
  src: some/path/to/dir/
  dest: some/dest/path
when: hostvars['localhost']['st'].stat.isdir is defined