ansible批量管理服务
- ansible批量管理服务概述
- 是基于python语言开发的自动化软件工具
- 是基于ssh远程管理服务实现主机批量管理
- ansible批量管理服务意义
1、 提高工作的效率
2、 提高工作的准确度
3、 减少维护的成本
4、 减少重复性工作
- ansible批量管理服务功能
1、 可以实现批量系统操作配置
2、 可以实现批量软件服务部署
3、 可以实现批量文件数据分发
4、 可以实现批量系统信息收集
ansible批量管理服务部署
- ansible批量管理软件的epel源
vim /etc/yum.repos.d/ansible.repo
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/$basearch
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
[epel-debuginfo]
name=Extra Packages for Enterprise Linux 7 - $basearch - Debug
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/$basearch/debug
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-7&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=0
[epel-source]
name=Extra Packages for Enterprise Linux 7 - $basearch - Source
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/SRPMS
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-7&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=0
- 配置文件
/etc/ansible/ansible.cfg ansible服务配置文件
/etc/ansible/hosts 主机清单文件
/etc/ansible/roles/ 角色目录
1. 安装ansible软件
vim /etc/yum.repos.d/ansible.repo
yum clean all
yum makecache
2. 需要编写主机清单文件
vim /etc/ansible/hosts
# 定义可以管理的主机信息(分发过公钥的主机)
172.16.1.31
172.16.1.41
3. 测试是否可以管理多台主机
脚本 hostname
ansible all -a "hostname"
# 172.16.1.41 | CHANGED | rc=0 >>
# backup
# 172.16.1.31 | CHANGED | rc=0 >>
# nfs
ansible服务架构信息
ansible软件模块应用
-
ansible官方网站: https://docs.ansible.com/ansible/latest/index.html
-
模块的应用语法模式
ansible 主机名称/主机组名称/主机地址信息/all -m(指定应用的模块信息) 模块名称 -a(指定动作信息) "执行什么动作"
- ansible软件输出颜色说明
绿色信息:查看主机信息/对主机未作改动
黄色信息:对主机数据做了修改
红色信息:命令执行出错了
粉色信息:警告信息
蓝色信息:显示ansible命令执行的过程
命令类型模块
- 第一个模块:command(默认模块)
command 在一个远程主机上执行一个命令
基本用法:
ansible 172.16.1.31 -m command -a "hostname"
# 172.16.1.31 | CHANGED | rc=0 >>
# nfs
扩展应用:
chadir 在执行命令之前对目录进行切换
ansible 172.16.1.31 -m command -a "chdir=/opt touch a.txt"
- 判断
creates 如果一个文件存在,不执行命令操作
ansible 172.16.1.31 -m command -a "creates=/abc chdir=/opt touch c.txt"
# /abc不存在,切换到opt目录下,创建c.txt
removes 如果一个文件存在,执行命令操作
ansible 172.16.1.31 -m command -a "removes=/opt chdir=/opt touch b.txt"
# /opt存在,切换到opr目录下,创建b.txt
- 可输入任意命令
free_form(required) 使用command模块的时候,-a参数后面必须写上一个合法的linux命令信息
# ansible命令后面必须要加上一个合法的命令行
注意事项:
有些符号信息无法识别: < > | ; and &
- 如果需要使用无法识别的符号,那么需要切换shell模块来进行操作
ansible 172.16.1.31 -m shell -a "cd /root;pwd"
# 172.16.1.31 | CHANGED | rc=0 >>
# /root
- 第二个模块:shell(万能模块)
shell 在一个节点上执行一个命令
基本用法:
ansible 172.16.1.31 -m shell -a "hostname"
# 172.16.1.31 | CHANGED | rc=0 >>
# nfs
扩展应用:
chadir 在执行命令之前对目录进行切换
ansible 172.16.1.31 -m shell -a "chdir=/opt touch a.txt"
- 判断
creates 如果一个文件存在,不执行命令操作
ansible 172.16.1.31 -m shell -a "creates=/abc chdir=/opt touch c.txt"
# /abc不存在,切换到opt目录下,创建c.txt
removes 如果一个文件存在,执行命令操作
ansible 172.16.1.31 -m shell -a "removes=/opt chdir=/opt touch b.txt"
# /opt存在,切换到opt目录下,创建b.txt
- 可输入任意命令
free_form(required) 使用shell模块的时候,-a参数后面必须写上一个合法的linux命令信息
# ansible命令后面必须要加上一个合法的命令行
- 第三个模块:script(脚本文件运行模块)
script 在一个远程主机上执行一个脚本文件
- 编写一个脚本
vim /root/a.sh
echo 666 > /opt/a.txt
基本用法:
ansible 172.16.1.31 -m script -a "/root/a.sh"
# 172.16.1.31 | CHANGED | rc=0 >>
扩展应用:
chadir 在执行命令之前对目录进行切换
ansible 172.16.1.31 -m script -a "chdir=/opt /root/a.sh"
- 判断
creates 如果一个文件存在,不执行命令操作
ansible 172.16.1.31 -m script -a "creates=/opt /root/a.sh"
# /opt存在,不运行a.sh脚本文件
removes 如果一个文件存在,执行命令操作
ansible 172.16.1.31 -m script -a "removes=/opt /root/a.sh"
# /opt存在,运行a.sh脚本文件
- 可输入任意命令
free_form(required) 使用模块的时候,-a参数后面必须写上一个合法的脚本文件路径
# ansible命令后面必须要加上一个合法的脚本文件路径
使用script命令和shell命令运行脚本文件的差别
- script脚本运行命令
1. 编写一个脚本
vim /root/a.sh
echo 666 > /opt/a.txt
2. 运行ansible命令执行脚本
ansible 172.16.1.31 -m script -a "/root/a.sh"
- shell脚本运行命令
1. 编写一个脚本
vim /root/a.sh
echo 666 > /opt/a.txt
2. 将脚本发送到远程主机
scp -r yum.sh root@172.16.1.31:/opt
3. 运行ansible命令执行脚本(如果不用bash命令执行还需要修改文件权限)
ansible 172.16.1.31 -m shell -a "bash /opt/a.sh"
文件类型模块
- 语法输出信息
ansible 172.16.1.31 -m copy -a "src=/root/a.txt dest=/opt/a.txt"
172.16.1.31 | CHANGED => { 对哪台主机进行操作
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true, 是否对主机信息进行改变
"checksum": "8cd34810f040326ac69088bb1dabe8fc6797b8ce", 生成一个文件效验码==MD5数值
"dest": "/opt/a.txt", 显示目标路径信息
"gid": 0, 显示复制后文件的gid信息
"group": "root", 显示复制后文件的属主信息
"md5sum": "971658bc2f5bdee5660844a83b5bf0a2", 生成一个文件效验码==MD5数值
"mode": "0644", 显示复制后文件权限信息
"owner": "root", 显示复制后文件属主信息
"size": 4, 显示文件的大小信息
"src": "/root/.ansible/tmp/ansible-tmp-1619345289.14-18747-94224893036914/source",
"state": "file", 显示文件的类型信息
"uid": 0 显示复制后文件的uid信息
}
- 第一个模块:copy(将数据信息进行批量分发)
基本用法:
ansible 172.16.1.31 -m copy -a "src=/root/a.txt dest=/opt/a.txt_bak"
# 将本机的/root/a.txt发送给172.16.1.31主机,并且改名成/opt/a.txt_bak
# 如果/opt目录下已经存在了a.txt_bak,那么新发过去的文件将覆盖原文件
扩展用法:
owner group 在传输文件时修改文件的属主和属组信息
ansible 172.16.1.31 -m copy -a "src=/etc/ansible/file/rsync/rsync.passwd dest=/etc/ owner=www group=www"
# 将src=/etc/ansible/file/rsync/rsync.passwd文件传输给/etc/目录下,并且将传输过去的文件属组和属主修改成www
mode 在传输文件时修改文件的权限信息
ansible 172.16.1.31 -m copy -a "src=/etc/ansible/file/rsync/rsync.passwd dest=/etc mode=666"
backup 在传输数据文件信息时对远程主机源文件进行备份
ansible 172.16.1.31 -m copy -a "src=/etc/ansible/file/rsync/rsync.passwd dest=/opt backup=yes"
# 远程主机/opt的原文件备份格式 : rsync.passwd(新文件) rsync.passwd.6177.2021-04-25@20:33:24~(源文件)
content 在远程主机上创建一个文件并直接编辑文件信息(本地主机并不会创建)
ansible 172.16.1.31 -m copy -a "content='lala' dest=/etc/rsync.passwd"
remote_src (默认为no)
- no : src参数指定文件信息,会在本地管理端服务进行查找
ansible 172.16.1.31 -m copy -a "src=/a/ dest=/opt"
- yes : src参数指定文件信息,会从远程主机上进行查找
ansible 172.16.1.31 -m copy -a "src=/a/ dest=/opt remote_src=yes"
ansible 软件copy模块复制目录信息
- src后面的目录有/:只将目录下面的内容都进行远程传输复制
ansible 172.16.1.31 -m copy -a "src=/a/ dest=/A"
- src后面的目录没有/:将目录本身以及目录下面的内容都进行远程传输复制
ansible 172.16.1.31 -m copy -a "src=/a dest=/A"
- 第二个模块:file (设置文件属性信息)
基本用法:
ansible 172.16.1.31 -m file -a "dest=/etc/hosts owner=oldboy group=oldboy mode=666"
扩展用法:
1. 可以利用模块创建数据信息(文件 目录 链接文件)
state=directory 创建目录信息
ansible 172.16.1.31 -m file -a "dest=/abc state=directory" 创建单个目录
ansible 172.16.1.31 -m file -a "dest=/abc/a/b/c state=directory" 创建多层级目录/a/b/c/
state=touch 创建文件信息
ansible 172.16.1.31 -m file -a "dest=/abc/nana.txt state=touch"
- 创建链接文件信息
state=hard 创建硬链接
ansible 172.16.1.31 -m file -a "src=/abc/nana.txt dest=/abc/nana_hard.txt state=hard"
state=link 创建软链接
ansible 172.16.1.31 -m file -a "src=/abc/nana.txt dest=/abc/nana_link.txt state=link"
2. 可以利用模块删除数据信息
state=absent 删除信息
ansible 172.16.1.31 -m file -a "dest=/abc/nana_link.txt state=absent" 删除文件信息
ansible 172.16.1.31 -m file -a "dest=/abc/a state=absent" 删除目录信息