ansible模块之synchronize

在之前的ansible应用里,一直没有注意这个模块,这次迁移文件使用了一次,发觉非常好用,详细学习一下。

使用synchronize模块可以在ansible主控机和被控机之间进行文件的同步,既可以由host=>slave,也可以由slave=>host,即push/pull两种模式。这两种模式的控制是靠mode实现的,mode=push就是host=>slave,这是默认模式;mode=pull则是反过来,由slave=>host。

push

ansible HOSTNAME -m synchronize -a "src=/original/path dest=/destination/path"

pull

ansible HOSTNAME -m synchronize -a "mode=pull src=/original/path dest=/destination/path"

rsync

这个模块依赖的是系统中的rsync包,所以使用这个模块的话必须要保证机器上安装好了rsync。一般都是预装的,如果没有yum安装之即可。

delegate_to

这个选项是个很强大的选项,字面意思就是授权给,就相当于把另外一台机器当成是ansible主机。

假设ansible-host是a机器,文件源在b机器,我们想要把文件放到c机器上,这时就需要delegate_to b,这样就可以把b上的源文件直接放到c上。
但在使用这个选项时需要注意,需要确保b可以免密登录c,因为这个时候是b直接向c上传文件。
如果需要在一台机器的不同位置上同步文件,也可以使用这个选项,这时就相当于说b和c是一台机器。

other options

官方模块文档
上面的链接里列出了sync模块的所有选项,非常详尽。这简单记录一下。

src:源文件路径。两个必填选项之一。
dest:目标文件路径。两个必填选项之一。
archive: 是否归档模式。默认为yes。该选项会把源文件的属性同时复制到目标文件,比如说权限、是否link等。
checksum:是否校验。默认为no。
compress:是否压缩。默认为yes。若无特殊情况不建议关闭。
copy_links:是否拷贝link指向的文件。默认为no。如果设置为yes,则会直接拷贝link指向的文件or文件夹,而不是以link形式拷贝。
recursive:是否递归。

发表评论

您的电子邮箱地址不会被公开。