1、需求:
需要在多台主机上,发送文件、执行命令,进行快速部署
2、ansible 远程复制文件
例子:在当前节点(20.88.14.7) 上向其他指定的节点发送文件
(1)创建host---基于密码连接其他节点
vim host
[ip_list]
20.88.14.8 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="root"
20.88.14.9 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="root"
(2)创建测试文件
vim test_ansible.sh
(3)远程复制文件到各个节点
ansible ip_list -i ./host -m copy -a "src=./test_ansible.sh dest=/root/"
解释:
-i :指定hosts文件路径, 默认default=/etc/ansible/hosts
-m :要执行的模块,默认为command(这里使用的是copy模块,更多模块见 后文,4(3)ansible常用模块)
-a:指定模块的参数 (可增加权限参数:owner=root mode=777)
如:
将本地的/etc/fatab文件复制到目标主机的/tmp/fatab.ansbile,属主为root权限为640
ansible test_name -m copy -a 'src=/etc/fstab dest=/tmp/tatab.ansible owner=root mode=640'
copy模块:
[root@node1 ~]# ansible-doc -s copy - name: 将文件复制到被管理主机 action: copy backup # 创建一个备份文件包括时间戳信息,如果以某种方式重创错了,还可以拿回原始文件 content # 取代src=,表示直接用此处指定的信息生成为目标文件内容; dest= # 远程节点存放文件的路径,必须是绝对路径 directory_mode # 递归复制设置目录权限,默认为系统默认权限 force # 如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果设置为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes group # 复制到远程主机后,指定文件或目录的属 mode # 复制到远程主机后,指定文件或目录权限,类似与 'chmod' 指明如 0644 owner # 复制到远程主机后,指定文件或目录属主 src # 要复制到远程主机的文件在本地的地址,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。 在这种情况下,如果路径使用"/"来结尾,则只复制目录里的内容,如果没有使用"/"来结尾,则包含目录在内的整个内容全部复制,类似于rsync。
(4)执行结果:
当前节点执行成功的结果:
其他节点:
3、ansible 远程执行命令,修改 test_ansible.sh 的名字为 test_ansible_new.sh
(1)创建host---基于密码连接其他节点
同前
(2)远程执行命令,改名
ansible ip_list -i ./host -m command -a "mv /root/test_ansible.sh /root/test_ansible_new.sh"
解释:
command模块(命令模块,默认模块,用于在远程主机执行命令,缺点:运行的命令中无法使用变量,管道。如果需要使用管道、变量,请使用raw模块,或者shell模块)
[root@node1 ~]# ansible-doc -s command
chdir # 在执行命令之前,先切换到该目录
creates # 一个文件名,当这个文件存在,则该命令不执行,可以用来做判断
executable # 切换shell来执行命令,需要使用命令的绝对路径
free_form= #要执行的Linux指令,一般使用Ansible的-a参数代替。
removes #一个文件名,这个文件不存在,则该命令不执行,与creates相反的判断
(3)执行结果
本节点(20.88.14.7):
其他节点:
4、参考:
(1)ansible的安装和连接
https://www.cnblogs.com/yanjieli/p/10969089.html
(2)ansible常用参数
https://www.cnblogs.com/tyk3201/p/12383081.html
(3)ansible常用模块
https://www.cnblogs.com/ccorz/p/ansible-chang-yong-mo-kuai.html