利用ansible传送文件方式
Ansible 作为一款配置管理和应用部署的软件,日常使用的场景很多,我自己也是重度用户。最近整理下 Ansible 传输文件的几种方式一、copy模块src #被复制到远程主机的本地文件。可以是绝对路径,也可以是相对路径。如果路径是一个目录,则会递归复制,用法类似于"rsync"content #用于替换"src",可以直接指定文件的值dest #必选项,将源文件复制到的远程主机
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
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)