一:什么是Ansible
Ansible是python中的一套模板,系统中的一套自动化工具,只需要使用 ssh 协议连接及可用来系统管理、自动化执行命令等任务
二:Ansible安装部署
[root@m01 ~]# yum install ansible -y
三:Ansible主机清单
3.1 配置主机组相关配置
定义要管理的主机
[root@m01-61 etc]# vim /etc/ansible/hosts
[web]
172.16.1.8
172.16.1.9
172.16.1.7
因为是使用ssh协议去连接的,如果之前没有分发公钥,需要输入用户名和密码,就可以直接在主机组里面定义
[web]
172.16.1.8
172.16.1.9
也可以使用变量,这个变量对整个web主机组生效
[web:var]
ansible_ssh_pass='123456'
四:Ansilbe常用模块
4.1 模块语法
参照ansible官网学校
https://docs.ansible.com/
ansilble 主机名称/主机组名称/主机地址/ -m 模块名称 -a "执行什么动作"
4.2 ping模板
[root@m01-61 etc]# ansible web -m ping
172.16.1.7 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
172.16.1.8 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
172.16.1.9 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
4.3 command模块
类似于shell,但是只能执行简单的命令,复杂的命令和有些符号不能识别,用的比较少
查看hostname
[root@m01-61 etc]# ansible web -m command -a "hostname"
172.16.1.9 | CHANGED | rc=0 >>
web03-9
172.16.1.7 | CHANGED | rc=0 >>
web01-7
172.16.1.8 | CHANGED | rc=0 >>
web02-8
4.4 shell 模板
使用命令查看ip
[root@m01-61 etc]# ansible web -m shell -a "ifconfig | grep eth0"
172.16.1.7 | CHANGED | rc=0 >>
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
172.16.1.9 | CHANGED | rc=0 >>
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
172.16.1.8 | CHANGED | rc=0 >>
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
执行shell脚本
执行shell脚本在待执行的shell脚本的主机上创建sh脚本
[root@web03-9 opt]# vim hello.sh
#!/bin/sh
echo "`hostname`"
使用ansible执行shell脚本
[root@m01-61 etc]# ansible web -m shell -a "sh /opt/hello.sh"
172.16.1.9 | CHANGED | rc=0 >>
web03-9
4.5 copy拷贝文件
拷贝m01的hosts文件到其他主机的/opt目录下
[root@m01-61 opt]# ansible 172.16.1.8 -m copy -a "src=/etc/hosts dest=/opt"
172.16.1.8 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"checksum": "7c9d1d53a8b6f35918595fabccf5dc760155731e",
"dest": "/opt/hosts",
"gid": 0,
"group": "root",
"mode": "0644",
"owner": "root",
"path": "/opt/hosts",
"size": 511,
"state": "file",
"uid": 0
}
在传输文件时,修改文件的属主和属组信息
[root@m01-61 /]# ansible 172.16.1.7 -m copy -a "src=/opt/cxy.txt dest=/opt owner=cxy group=cxy"
172.16.1.7 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"checksum": "fa5a578a265ba393f3ed20fc77700ac68309977a",
"dest": "/opt/cxy.txt",
"gid": 1000,
"group": "cxy",
"md5sum": "abdf0785796b5eeb963cf17acdb05419",
"mode": "0644",
"owner": "cxy",
"size": 32,
"src": "/root/.ansible/tmp/ansible-tmp-1614320580.28-2951-255737454473188/source",
"state": "file",
"uid": 1000
}
在传输文件时,修改文件的权限
[root@m01-61 opt]# ansible 172.16.1.7 -m copy -a "src=/opt/cxy.txt dest=/opt mode=600"
创建文件并直接写入内容
[root@m01-61 opt]# ansible 172.16.1.7 -m copy -a "content='cxy123456' dest=/etc/rsync.password mode=600"
172.16.1.7 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"checksum": "e8c29180b366ab284b861ea669fdd5f902936e7b",
"dest": "/etc/rsync.password",
"gid": 0,
"group": "root",
"md5sum": "b865483fef2ecaf9e348abf03c349240",
"mode": "0600",
"owner": "root",
"size": 9,
"src": "/root/.ansible/tmp/ansible-tmp-1614321219.9-3054-172166927256398/source",
"state": "file",
"uid": 0
}
复制目录
当src=/data的时候,等于是将data这个目录和data目录下面的文件全部传输过去了
[root@m01-61 /]# ansible 172.16.1.7 -m copy -a "src=/data dest=/data"
172.16.1.7 | CHANGED => {
"changed": true,
"dest": "/data/",
"src": "/data"
}
当src=/data/,是将data目录下的文件传输过去了,不包含/data/这个目录
[root@m01-61 /]# ansible 172.16.1.7 -m copy -a "src=/data/ dest=/data"
参数说明:
src #推送数据的源文件信息
dest #推送数据的目标路径
backup #对推送传输过去的文件,进行备份
content #直接批量在被管理端文件中添加内容
group #将本地文件推送到远端,指定文件属组信息
owner #将本地文件推送到远端,指定文件属主信息
mode #将本地文件推送到远端,指定文件权限信息
4.6 file创建文件并设置文件属性
创建目录
[root@m01-61 /]# ansible 172.16.1.7 -m file -a "path=/data/cxy/ state=directory"
创建文件并更改属性
[root@m01-61 /]# ansible 172.16.1.7 -m file -a "path=/data/cxy/110.txt state=touch mode=755 owner=cxy group=cxy"
创建软链接
[root@m01-61 /]# ansible 172.16.1.7 -m file -a "src=/data/cxy/ dest=/data/cxy_link state=link"
参数说明
path #指定远程主机目录或文件信息
recurse #递归授权
state:
directory #在远端创建目录
touch #在远端创建文件
link #link 或 hard 表示创建链接文件
absent #表示删除文件或目录
mode #设置文件或目录权限
owner #设置文件或目录属主信息
group #设置文件或目录属组信息
4.7 script模块
编写脚本
[root@m01-61 cxy_shell]# vim hello.sh
#!/bin/sh
mkdir /data
echo "Hello wrold" > /data/cxy.txt
使用script模块执行脚本,不需要将脚本文件推送到目标主机执行,在本地运行模板,等同于在远程执行
[root@m01-61 cxy_shell]# ansible web -m script -a "/cxy_shell/hello.sh"
4.8 yum模块
[root@m01-61 cxy_shell]# ansible web -m yum -a "name=httpd state=installed"
参数说明:
name #指定要安装的软件包名称
state #指定使用 yum 的方法
installed, present #安装软件包
removed, absent #移除软件包
latest #安装最新软件包
4.9 service模板
[root@m01-61 cxy_shell]# ansible web -m service -a "name=nginx state=stopped enabled=yes"
参数说明:
name # 定义要启动服务的名称
state # 指定服务状态
started #启动服务
stopped #停止服务
restarted #重启服务
reloaded #重载服务
enabled #开机自启
4.10 mount模块
ansible web -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs opts=defaults
state=present"
ansible web -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs opts=defaults
state=mounted"
web -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs opts=defaults
state=unmounted"
web -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs opts=defaults
state=absent"
状态解释:
present # 开机挂载,仅将挂载配置写入/etc/fstab
mounted # 挂载设备,并将配置写入/etc/fstab
unmounted # 卸载设备,不会清除/etc/fstab 写入的配置
absent # 卸载设备,会清理/etc/fstab 写入的配置
4.11 user模块
创建用户指定uid,gid,不创建家目录也不允许登陆
ansible web -m user -a "name=cxy uid=888 group=888 shell=/sbin/nologin
create_home=no"`
参数说明:
uid #指定用户的 uid
group #指定用户组名称
groups #指定附加组名称
password #给用户添加密码
shell #指定用户登录 shell
create_home #是否创建家目录
4.12 group模块
创建用户组
ansible oldboy -m group -a "name=cxy gid=888 state=present"
参数说明:
name #指定创建的组名
gid #指定组的 gid
state
absent #移除远端主机的组
present #创建远端主机的组(默认)
4.13 mount模块
ansible backup -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs opts=defaults
state=present"
ansible backup -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs opts=defaults
state=mounted"
ansible backup -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs opts=defaults
state=unmounted"
ansible backup -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs opts=defaults
state=absent"
参数说明:
present # 开机挂载,仅将挂载配置写入/etc/fstab
mounted # 挂载设备,并将配置写入/etc/fstab
unmounted # 卸载设备,不会清除/etc/fstab 写入的配置
absent # 卸载设备,会清理/etc/fstab 写入的配置
4.14 unarchive模块
解压远程服务器的压缩包到指定目录,压缩文件是在远程服务器上
ansible 172.16.1.31 -m unarchive -a "src=/opt/sys.tar.gz dest=/opt/ remote_src=yes"
解压本地文件到指定机器的指定目录
ansible 172.16.1.31 -m unarchive -a "src=/opt/log.tar.gz dest=/opt/"
4.15 archive模块
压缩单个文件
ansible 172.16.1.31 -m archive -a "path=/var/log/message dest=/tmp/log.tar.gz format=gz force_archive=true"
五:Ansible输出信息颜色
01. 绿色信息: 查看主机信息/对主机未做改动
02. 黄色信息: 对主机数据信息做了修改
03. 红色信息: 命令执行出错了
04. 粉色信息: 忠告信息
05. 蓝色信息: 显示ansible命令执行的过程