Ansible 作为一款配置管理和应用部署的软件,日常使用的场景很多,我自己也是重度用户。最近整理下 Ansible 传输文件的几种方式

一、copy模块

src参数 :用于指定需要copy的源文件或目录。
dest参数 :用于指定文件将被拷贝到远程主机的哪个目录中
content参数 :当不使用src指定拷贝的文件时,可以使用content直接指定文件内容,src与content两个参数必有其一,否则会报错。
force参数 : 当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否强制覆盖,可选值有yes和no,默认值为yes,表示覆盖,如果设置为no,则不会执行覆盖拷贝操作,远程主机中的文件保持不变。
backup参数 : 当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否对远程主机的文件进行备份,可选值有yes和no,当设置为yes时,会先备份远程主机中的文件,然后再将ansible主机中的文件拷贝到远程主机。
owner参数 : 指定文件拷贝到远程主机后的属主,但是远程主机上必须有对应的用户,否则会报错。
group参数 : 指定文件拷贝到远程主机后的属组,但是远程主机上必须有对应的组,否则会报错。
mode参数      #设置被复制到远程主机文件的权限

以下实例最常用,用户日常备份操作

[root@master ~]# ansible 192.168.2.251 -m copy -a "src=/root/quick_start.sh dest=/root/copy backup=yes mode=744"

二、fetch 模块

  该模块用于从远程某主机获取(复制)文件到本地。

dest:用来存放文件的目录
src:在远程拉取的文件,并且必须是一个file,不能是目录

[root@master ~]# ansible 192.168.2.251 -m fetch -a "src=/root/copy/fetch.txt dest=/root/"

把目标主机251上的fetch.txt文件拉到ansible主机上

三、数据同步模块synchronize

用来进行被控端与控制端之间的文件同步传输,直接看例子理解即可
使用该模块首先要在控制端和被控端安装有rsync,yum install rsycn -y

compress:开启压缩,默认为开启
archive:是否采用归档模式同步,保证源文件和目标文件属性一致
checksum:是否效验
dirs:以非递归的方式传送目录
links:同步链接文件
recursive:是否递归yes/no
rsync_opts:使用rsync的参数
copy_links:同步的时候是否复制链接
delete:删除源中没有但目标存在的文件,使两边内容一样,以推送方为主
src:源目录及文件
dest:目标文件及目录
dest_port:目标接收的端口
rsync_path:服务的路径,指定rsync在远程服务器上执行
rsync_remote_user:设置远程用户名
–exclude=.log:忽略同步以.log结尾的文件,这个可以自定义忽略什么格式的文件,或者.txt等等都可以,但是由于这个是rsync命令的参数,所以必须和rsync_opts一起使用,比如rsync_opts=--exclude=.txt这种模式
mode:同步的模式,rsync同步的方式push、pull,默认是推送push,从本机推送给远程主机,pull表示从远程主机上拿文件

192.168.2.252  ansible,主机A

192.168.2.251   主机B

192.168.2.253    主机C

1、控制端传输被控端

ansible 192.168.2.251 -m synchronize -a "src=syncA-B.txt dest=/root/copy"

或者

vim syncA-B.yml  然后执行ansible-playbook syncA-B.yml 

- hosts: 192.168.2.252 # 远端主机B
  remote_user: root # 远端主机的操作用户 
  tasks:
    - name: 主控端文件到被控端A--B
      synchronize:
        src: /root/rsy/syncA-B.txt # 控制端路径A
        dest: /root/copy # 远端主机路径B
        mode: push # 默认为push可不写

2、控制端拉取被控端

ansible 192.168.2.251 -m synchronize -a "src=/root/

或者
vim syncB-A.yml  然后执行ansible-playbook syncB-A.yml 

- hosts: 192.168.2.251 # 远端主机B
  remote_user: root # 远端主机的操作用户
  tasks:
    - name: #控制端文件传到主控端B--A 
      synchronize:
        src: /root/copy/syncB-A.txt # 远端主机路径B
        dest: /root/rsy # 控制端路径A
        mode: pull # 往主控端的为pull,往被控端为push

3、控制端控制多远端之间同步

方法1、在控制段A,把主机B的文件传输到主机C上

- hosts: 192.168.2.251 #远端主机B
  remote_user: root #远端主机的操作用户
  tasks:
    - name: B-C
      synchronize:
        src: /root/copy/syncB-C.txt #远端主机B路径
        dest: /root  # 远端主机C路径
        mode: pull
      delegate_to: 192.168.2.253 #远端主机C

方法2、在控制段A,把主机B的文件传输到主机C上

- hosts: 192.168.2.251 #远端主机B
  remote_user: root #远端主机的操作用户
  tasks:
    - name: C-B
      synchronize:
        src: /root/copy/syncC-B.txt #远端主机C路径
        dest: /root  # 远端主机B路径
        mode: push
      delegate_to: 192.168.2.253 #远端主机C

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐