实验环境:centos7.6,2G内存,50G硬盘大小,虚拟机服务端ip:172.16.1.61 客户端ip:172.16.1.7,172.16.1.41,172.16.1.31
ansible批量管理服务介绍
意义:
1)提高工作效率
2)提高工作准确度
3)减少维护成本
4)减少重复性工作
功能:
1)可以实现批量系统操作配置
2)可以实现批量软件服务部署
3)可以实现批量文件数据分发
4)可以实现批量系统信息收集
ansible批量管理服务部署
第一步:ansible批量管理服务部署
yum -y install ansible
/etc/ansible/ansible.cfg ---ansible服务配置文件
/etc/ansible/hosts ---主机清单文件,比如添加可以管理主机的IP地址
/etc/ansible/roles ---角色目录
第二步:编写主机清单文件
vim /etc/ansible/hosts
直接在文件的下面添加要管理主机的ip
被管理的主机要关闭防火墙和selinux
第三步:测试是否可以连接多台主机
ansible all -a "hostname"
可以看到,每台主机的主机名全部都显示出来了
ansible的安装和测试都比较简单的,最重要的是ansible的模块和剧本编写功能
ansible软件模块应用
模块应用方式:ansible 主机名称/主机地址信息/all(代表所有主机) -m(指定应用的模块信息) 模块名称 -a(指定的动作,也就是执行的命令)
补充说明: ansible软件输出颜色说明:
01. 绿色信息: 查看主机信息/对主机未做改动
02. 黄色信息: 对主机数据信息做了修改
03. 红色信息: 命令执行出错了
04. 粉色信息: 忠告信息
05. 蓝色信息: 显示ansible命令执行的过程
命令模块:command(默认模块):
作用:在一个远程主机上执行一个命令,无法支持"<",">","|",";","&"等符号
用法:
ansible 172.16.1.41 -m command -a "hostaname"
扩展用法:
1.chdir:在执行命令之前,先切换目录
ansible 172.16.1.41 -m command -a "chdir=zsb touch zsb.txt"
2.creates:如果文件存在,不执行命令操作,文件存在是会显示绿色
ansible 172.16.1.41 -m command -a "creates=1.txt touch 1.txt"
3.free_from:使用command模块的时候,-a参数后面必须写上一个合法linux指令
4.removes:如果文件存在了,后面的命令将会执行
ansible 172.16.1.41 -m command -a "chdir=zsb removes=1.txt touch 2.txt"
可以看到zsb目录下没有1.txt,所以2.txt没有被创建出来,而zsb.txt是有的
所以2.txt被创建出来了
万能模块:shell
作用:在一个远程主机上执行一个命令,支持"<",">","|",";","&"等符号
用法:其他功能和command一样,是command的升级版
万能模块:script
作用:可以直接运行本地的脚本,来控制远端主机执行
用法:其他功能和command一样
测试:
1)编写一个脚本1.sh,在zsb目录下创建一个3.txt文件
2)使用script模块
3)对比前后可以看到3.txt是被创建出来了
文件模块:copy
作用:将数据信息进行批量分发
用法:
ansible 172.16.1.41 -m copy -a "src=~/1.sh dest=/zsb/"
PS:src要拷贝的目录,dest被拷贝到远程主机的目录
扩展用法:
1.owner,group,mode:在传输文件时修改文件的属主和属组信息以及权限信息
ansible 172.16.1.41 -m copy -a "src=~/1.sh dest=~/zsb/ owner=zhangsb group=zhangsb mode=1666"
1)传输前
2)传输成功之后
2.backup:当本地与远程主机之间存在名字相同的文件的时候,并且与ansible主机内容不同,当backup=yes,
就会对远程主机的文件进行备份,生成一个备份文件,再将内容复制过去,并且会覆盖.
ansible 172.16.1.41 -m copy -a "src=~/1.sh dest=/zsb/ backup=yes"
在两个1.txt文件追加不同的内容
因为这里的主机和远程主机的两个文件是不相同的,所以执行命令之后,会在远程主机生成一个备份文件
3.content:在远程主机创建一个文件并直接写入信息,与src必有其一,否则会报错
ansible 172.16.1.41 -m copy -a "content=123 dest=/zsb/3.txt"
4.force:当本地与主机之间存在名字相同的文件的时候,并且与ansible主机内容不同,当force=yes,会覆盖远程主机内容,为no时,不会执行覆盖拷贝操作远程主机的文件保持不变
PS: ansible软件copy模块复制目录信息
ansible 172.16.1.41 -m copy -a “src=/zsb dest=/zsb”
src后面目录没有/: 将目录本身以及目录下面的内容都进行远程传输复制
ansible 172.16.1.41 -m copy -a “src=/zsb/ dest=/zsb”
src后面目录有/: 只将目录下面的内容都进行远程传输复制
拉取模块:fetch
作用:将数据进行信息进行批量拉取
用法:
ansible all -m fetch -a "src=/etc/hosts dest=/test/"
将远程主机的hosts文件拉取到本地主机上
可以看到在test目录下,看到不同主机的文件
可以看到拉取成功
文件属性模块:file
作用:批量设置远程主机的文件属性
用法:
ansible 172.16.1.41 -m file -a "dest=~/zsb/3.txt owner=zsb group=zsb mode=666"
这里用dest和用path都可以
扩展用法:
1.state 参数
1)=absent — 缺席/删除数据信息
ansible 172.16.1.31 -m file -a "dest=~/zsb/2.txt state=absent"
2)=directory — 创建一个目录信息
ansible 172.16.1.41 -m file -a "dest=/zsb/ state=directory"
ansible 172.16.1.41 -m file -a "dest=/zsb/zsb1/zsb2 state=directory" --创建多级目录
=file — 检查创建的数据信息是否存在 绿色存在 红色不存在
=hard --创建一个硬链接文件
ansible 172.16.1.41 -m file -a "src=~/zsb/1.txt dest=~/zsb/1_hard.txt state=hard"
=link — 创建一个软链接文件
ansible 172.16.1.41 -m file -a "src=~/zsb/2.txt dest=~/zsb/2_link.txt state=link"
3)创建文件
ansible 172.16.1.31 -m file -a "dest=/zsb/zsb.txt state=touch"
4)recurse:递归地对目录内容设置指定的文件属性,仅当状态设置为“目录”时才适用
ansible 172.16.1.41 -m file -a "dest=/zsb/zsb01 state=directory owner=zhangsb group=zhangsb recurse=yes"
还有一些模块介绍在下一篇文章.