2.1、Ansible安装
2.1.1:EPEL源的rpm包安装
yum install epel*
yum clean all
yum makecache
yum info ansible #查看当前Epel中ansible的版本
yum install ansible
2.1.2:编译安装
yum-y install python-jinja2 PyYAML python-paramiko python-babel python-crypto
tar xf ansible-1.5.4.tar.gz
cd ansible-1.5.4
python setup.py build
python setup.py install
mkdir /etc/ansible
cp -r examples/* /etc/ansible
2.1.3:Git方式
git clone git://github.com/ansible/ansible.git--recursive
cd ./ansible
source ./hacking/env-setup
2.1.4:pip安装
yum install python-pip python-devel
yum install gcc glibc-devel zibl-devel rpm-bulid openss1-devel
pip instal1--upgrade pip
pip install ansible--upgrade
2.1.5:确认安装
ansible --version
2.2、Ansible相关文件
2.2.1:配置文件
/etc/ansible/ansible.cfg
主配置文件,配置ansible工作特性/etc/ansible/hosts
主机清单文件,管理的目标主机地址清单/etc/ansible/roles/
存放角色的目录
2.2.2:ansible主配置文件
[defaults]
#inventory = /etc/ansible/hosts #主机列表配置文件
#library =/usr/share/my_modules/ #库文件存放目录
#remote_tmp = $HOME/.ansible/tmp #临时py命令文件存放在远程主机目录
#local_tmp = $HoME/.ansible/tmp #本机的临时命令执行目录
#forks = 5 #默认并发数
#sudo_user = root #默认sudo用户
#ask_sudo_pass = True #每次执行ansible命令是否询间ssh密码
#ask_pass = True
#remote_port = 22
host_key_checking = False #检查对应服务器的host_key,建议取消注释
log_path=/var/1og/ansible.log #日志文件,建议启用
#module_name = command #默认模块,可以修改为shell模块
2.2.3:inventory主机清单
- ansible的主要功用在于批量主机操作,为了便捷地使用其中的部分主机,可以在inventory file中将其分组命名默认的inventory file为/etc/ansible/hosts
- inventoryfile可以有多个,且也可以通过Dynamic Inventory来动态生成
- inventory文件遵循IN文件风格,中括号中的字符为组名。可以将同一个主机同时归并到多个不同的组中此外,当如若目标主机使用了非默认的SSH端口,还可以在主机名称之后使用冒号加端口号来标明如果主机名称遵循相似的命名模式,还可以使用列表的方式标识各主机
范例:
ntp.dqzboy.com
[webservers]
www1.dqzboy.com:2222
www2.dqzboy.com
[dbservers]
db1.dqzboy.com
db2.dqzboy.com
db3.dqzboy.com
[websrvs]
www[1:100].example.com
[dbsrvs]
db-[a:f].example.com
[appsrvs]
192.168.66.[1:100]
实践:
[root@ansible-server ~]# vim /etc/ansible/hosts
[webservers]
192.168.66.[151:153]
[dbservers]
192.168.66.151
[appservers]
192.168.66.[152:153]
2.3、Ansible相关工具
/usr/bin/ansible
主提序,临时命令执行工具/usr/bin/ansible-doc
查看配置文档,模块功能查看工具/us/bin/ansible-galaxy
下载/上传优秀代码或Roles模块的自网平台/usr/bin/ansible-playbook
定制自动化任务,编排剧本工具/usr/bin/ansible-pull
远程执行命令的工具/usr/bin/ansible-vault
文件加密工具/usr/bin/ansible-console
基于Console界面与用户交互的执行工具
- Ad-Hoc即利用ansible命令,主要用于临时命令使用场景
- Ansible-playbook 主要用于长期规划好的,大型项目的场景,需要有前期的规划过程
2.3.1:ansible-doc
格式:
ansible-doc [options][module...]
-l,--list #列出可用模块
-s,--snippet #显示指定模块的playbook片段
注:按q键退出
范例:
#列出所有模块
ansible-doc -l
#查看指定模块帮助用法
ansible-doc ping
#查看指定模块帮助用法[简化版的帮助]
ansible-doc -s ping
2.3.2:调用ansible
此工具通过ssh协议,实现对远程主机的配置管理、应用部署、任务执行等功能建议:使用此工具前,先配置ansible主控端能基于密钥认证的方式联系各个被管理节点
格式:
ansible <host-pattern> [-m module_name] [-a args]
范例:
[root@ansible-server ~]# vim auto_ssh.sh
ssh-keygen -f /root/.ssh/id_rsa -P ''
#定义网络端
NET=192.168.66
#主机root用户密码
export SSHPASS=dqz123456
for IP in {151..153};do sshpass -e ssh-copy-id $NET.$IP;done
[root@ansible-server ~]# chmod +x auto_ssh.sh
选项说明:
--version
#显示版本-m modul
#指定模块,默认为command文章来源(Source):浅时光博客 e-V
#详细过程-vv -vvv更详细--list-hosts
#显示主机列表,可简写–list-k,--ask-pass
#提示输入ssh文章来源(Source):浅时光博客 连接密码,默认key验证-C,--check
#检查,并不执行-T,--timeout=TIMEOUT
#执行命令的超时时间,默认10s-u,--user=REMOTE_USER
#执行远程执行的用户-b,--become
#代替旧版的sudo切换--become-user=USERNAME
#指定sudo的runas用户,默认为root-K,--ask-become-pass
#提示输入sudo时的口令
ansible "*"-m ping
ansible 192.168.1.* -m ping
ansible "srvs" -m ping
[root@ansible-server ~]# ansible "*" --list-hosts
hosts (3):
192.168.66.151
192.168.66.152
192.168.66.153
ansible "websrvs:appsrvs" -m ping
ansible "192.168.66.151:192.168.66.152" -m ping
#在websrvs组并且在dbsrvs组中的主机
ansible "webservers:&dbservers" -m ping
192.168.66.151 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
#在websrvs组,但不在dbsrvs组中的主机
#注意:此处为单引号
ansible 'webservers:!dbservers' -m ping

ansible "webservers:&dbservers" -m ping
ansible "~(web|db)servers" -m ping

- 加载自己的配置文件默认
/etc/ansible/ansible.cfg
- 加载自己对应的模块文件,如:
command
- 通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的对应执行用户
$HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY
文件 - 给文件+x执行
- 执行并返回结果
- 删除临时py文件,退出
- 可以通过加参数
-v
列出详细的执行过程

[root@ansible-server ~]# ansible "~(web|db)servers" -vvv -m ping > ansible.log
[root@ansible-server ~]# grep "chmod" ansible.log

- 绿色:表示成功
- 黄色:修改了远程文件后并执行成功
- 红色:表示执行失败
注意:ansible配置文件中可以定义颜色
[root@ansible-server ~]# vim /etc/ansible/ansible.cfg
[colors]
#highlight = white
#verbose = blue
#warn = bright purple
#error = red
#debug = dark gray
#deprecate = purple
#skip = cyan
#unreachable = red
#ok = green
#changed = yellow
#diff_add = green
#diff_remove = red
#diff_lines = cyan
2.3.3:ansible-galaxy
范例:
#列出所有已安装的galaxy
ansible-galaxy list
#安装galaxy
ansible-galaxy install geerlingguy.redis
#删除galaxy
ansible-galaxy remove aeerlinqauy.redis
#下载互联上别人写好的roles
[root@ansible-server ~]# ansible-galaxy collection install ericsysmin.kubernetes
2.3.4:ansible-pull
2.3.5:ansible-playbook
范例:
[root@ansible-server ~]# vim hello.yml
---
#hello worlld yml file
- hosts: webservers
remote_user: root
tasks:
- name: hello world
command: /usr/bin/wall hello world
[root@ansible-server ~]# ansible-playbook hello.yml

- 可以在
webserver
节点的服务器上查看执行情况

2.3.6:ansible-vault
格式:
ansible-vault [create|decrypt|edit|encrypt|rekey|view]
范例:
ansible-vault encrypt hello.yml #加密
ansible-vault view hello.yml #查看
ansible-vault decrypt hello.yml #解密
ansible-vault edit hello.yml #编辑加密文件
ansible-vault create new.yml #创建新文件
2.3.7:ansible-console
提示符格式:
常用子命令:
- 设置并发数:
forks n
例如:forks 10 - 切换组:
cd 主机组
例如:cd web - 列出当前组主机列表:
list
范例:
[root@ansible-server ~]# ansible-console
Welcome to the ansible console.
Type help or ? to list commands.
root@all (3)[f:5]$
root@all (3)[f:5]$ list
192.168.66.151
192.168.66.152
192.168.66.153
root@all (3)[f:5]$ ls / | wc -l
192.168.66.151 | CHANGED | rc=0 >>
19
192.168.66.153 | CHANGED | rc=0 >>
19
192.168.66.152 | CHANGED | rc=0 >>
19
root@all (3)[f:5]$ ip a|grep ens33|grep inet|awk '{print $2}'
192.168.66.153 | CHANGED | rc=0 >>
192.168.66.153/24
192.168.66.151 | CHANGED | rc=0 >>
192.168.66.151/24
192.168.66.152 | CHANGED | rc=0 >>
192.168.66.152/24