第1章 Ansible基本概述
1.1 ansible是一个配置管理系统configuration management system,
你只需要可以使用ssh访问你的服务器或设备就行。
1.安装软件
2.配置服务
1.2 ansible能做什么
ansible可以帮助我们完成一些批量任务,或者完成一些需要经常重复的工作。
比如:同时在100台服务器上安装nfs服务,并在安装后启动服务。
比如:将某个文件一次性拷贝到100台服务器上。
比如:每当有新服务器加入工作环境时,你都要为新服务器部署某个服务,也就是说你需要经常重复的完成相同的工作。
这些场景中我们都可以使用到ansible。
1.3 ansible软件特点
1.ansible不需要单独安装客户端,SSH相当于ansible客户端。
2.ansible不需要启动任何服务,仅需安装对应工具即可。
3.ansible依赖大量的Python模块来实现批量管理。
4.ansible配置文件/etc/ansible/ansible.cfg
实现从管理机m01到其他机器的密钥认证
第2章 Ansible安装配置
2.1 ansible借助公钥批量管理
创建及利用非交换式工具实现批量分发公钥与批量管理服务器
[root@m01 ~]# ssh-keygen -t rsa
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.31
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.41
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.7
2.2 安装ansible
[root@m01 ~]# yum install ansible -y
2.3 配置ansible
[root@m01 ~]# vim /etc/ansible/hosts
[zeq]
172.16.1.31
172.16.1.41
2.4 验证ansible
2.4.1 ansible是通过ssh端口探测通信
[root@m01 ~]# ansible zeq -m ping
172.16.1.7 | SUCCESS => {
"changed": false,
"ping": "pong"
}
172.16.1.31 | SUCCESS => {
"changed": false,
"ping": "pong"
}
172.16.1.41 | SUCCESS => {
"changed": false,
"ping": "pong"
}
2.4.2 批量执行命令
[root@m01 ~]# ansible zeq -m command -a "df -h"
2.4.3 如果没有给对应的主机下发公钥,可以使用密码的方式进行添加
172.16.1.41 ansible_ssh_user='root' ansible_ssh_pass='1' ansible_ssh_port='22'
2.5 定义主机清单
[root@m01 ~]# vim /etc/ansible/hosts
[web]
172.16.1.7
[nfs]
172.16.1.31
[backup]
172.16.1.41
[zeq:children]
web
nfs
backup
2.5.1 测试
[root@m01 ~]# ansible web --list-hosts #web
hosts (1):
172.16.1.7
[root@m01 ~]# ansible nfs --list-hosts #nfs
hosts (1):
172.16.1.31
[root@m01 ~]# ansible backup --list-hosts #rsync
hosts (1):
172.16.1.41
[root@m01 ~]# ansible zeq --list-hosts #集中所有的小组,用于执行一些基础的配置
hosts (3):
172.16.1.31
172.16.1.41
172.16.1.7
第3章 ansible命令语法格式及模块
1.command 执行命令
2.shell 执行命令
3.yum 安装软件模块
4.copy 配置模块
5.service 启动服务模块
6.user 用户管理
7.file 创建目录,创建文件,往文件写内容
8.cron 定时任务
9.mount 挂载
3.1 command命令模块
默认模块, 执行命令
[root@m01 ~]# ansible zeq -a "hostname"
3.2 如果需要一些管道操作,则使用shell
[root@m01 ~]# ansible zeq -m shell -a "ifconfig|grep eth0" -f 50
-f =forks /etc/ansible/ansible.cfg #结果返回的数量
3.3 yum安装模块
参数
说明
name
指定要安装的软件包名称
state
指定使用yum的方法
installed,present
安装软件包
removed,absent
移除软件包
latest
安装最新软件包
3.3.1 推送脚本文件至远程,远程执行脚本文件
[root@m01 ~]# ansible zeq -m yum -a "name=httpd state=installed"
3.4 copy模块
参数
说明
src
推送数据的源文件信息
dest
推送数据的目标路径
backup
对推送传输过去的文件,进行备份
content
直接批量在被管理端文件中添加内容
group
将本地文件推送到远端,指定文件属组信息
owner
将本地文件推送到远端,指定文件属主信息
mode
将本地文件推送到远端,指定文件权限信息
3.4.1 推送文件模块
[root@m01 ~]# ansible zeq -m copy -a "src=/etc/hosts dest=/tmp/test.txt owner=www group=www mode=0600"
3.4.2 在推送覆盖远程端文件前,对远端已有文件进行备份,按照时间信息备份
[root@m01 ~]# ansible zeq -m copy -a "src=/etc/hosts dest=/tmp/test.txt backup=yes"
3.4.3 直接向远端文件内写入数据信息,并且会覆盖远端文件内原有数据信息
[root@m01 ~]# ansible zeq -m copy -a "content='bgx' dest=/tmp/zeq"
3.5 service服务模块
参数
说明
name
定义要启动服务的名称
state
指定服务状态是停止或是运行
started
启动
stopped
停止
restarted
重启
reloaded
重载
enabled
是否让服务开启自启动
[root@m01 ~]# ansible zeq -m service -a "name=crond state=stopped enabled=yes"
3.6 user模块
[root@m01 ~]# echo "bgx"| openssl passwd -1 -stdin
$1$1KmeCnsK$HGnBE86F/XkXufL.n6sEb.
[root@m01 ~]# ansible zeq -m user -a 'name=xlw password="$1$1KmeCnsK$HGnBE86F/XkXufL.n6sEb."'
3.7 file配置模块
参数
说明
path
指定远程主机目录或文件信息
recurse
递归授权
directory
在远端创建目录
touch
在远端创建文件
link
link或hard表示创建链接文件
absent
表示删除文件或目录
mode
设置文件或目录权限
owner
设置文件或目录属主信息
group
设置文件或目录属组信息