我想使用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
答案 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