Ansible 相关工具
- /usr/bin/ansible:主程序,临时命令执行工具
- /usr/bin/ansible-doc:查看配置文档,模块功能查看工具
- /usr/bin/ansible-galaxy:下载/上传优秀代码或 Roles 模块的官网平台
- /usr/bin/ansible-playbook:定制自动化任务,编排剧本工具
- /usr/bin/ansible-pull:远程执行命令的工具
- /usr/bin/ansible-vault:文件加密工具
- /usr/bin/ansible-console:基于 Console 界面与用户交互的执行工具
利用 Ansible 实现管理的主要方式:
- Ad-Hoc:即利用 ansible 命令,主要用于临时命令使用场景
- Ansible-playbook:主要用于长期规划好的,大型项目的场景,需要有前期的规划过程
ansible-doc
此工具用来显示模块帮助
格式:
ansible-doc [options] [module...]
-l, --list # 列出可用模块
-s, --snippet # 显示指定模块的playbook片段
范例:
# 列出所有模块
$ ansible-doc -l
# 查看指定模块帮助用法
$ ansible-doc ping
# 查看指定模块帮助用法
$ ansible-doc -s ping
ansible
此工具通过 ssh 协议,实现对远程主机的配置管理、应用部署、任务执行等功能
建议:使用此工具前,先配置 ansible 主控端能基于密钥认证的方式联系各个被管理节点
范例:利用 sshpass 批量实现基于 key 验证
#!/bin/bash
ssh-keygen -f /root/.ssh/id_rsa -P ''
NET=192.168.100
export SSHPASS=magedu
for IP in {1..200};do
sshpass -e ssh-copy-id $NET.$IP
done
Ansible 命令格式
ansible <host-pattern> [-m module_name] [-a args]
选项说明:
--version # 显示版本
-m module # 指定模块,默认为 command
-v # 详细过程–vv, -vvv 更详细
--list-hosts # 显示主机列表,可简写 --list
-k, --ask-pass # 提示输入 ssh 连接密码,默认 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 host-pattern
用于匹配被控制的主机的列表
下表列出了针对清单主机和组的常见模式
描述 | Pattern(s)(模式) | 目标 |
---|---|---|
所有主机 | all (或 * ) |
|
一台主机 | host1 | |
多台主机 | host1:host2 (或 host1,host2) | |
一组 | websrvs | |
多组 | websrvs:dbsrvs | websrvs 组中的所有主机加上 dbsrvs 组中的所有主机 |
排除组 | websrvs:!atlanta | 在 websrvs 组但不在 atlanta 组中的所有主机 |
组的交集 | websrvs:&staging | 在 websrvs 组并且在 staging 组中的所有主机 |
all
表示所有 Inventory 中的所有主机
$ ansible all –m ping
*
通配符
$ ansible "*" -m ping
$ ansible 192.168.1.* -m ping
$ ansible "svc" -m ping
:
或关系
$ ansible "websrvs:appsrvs" -m ping
$ ansible "192.168.1.10:192.168.1.20" -m ping
:&
逻辑与
# 在 websrvs 组并且在 dbsrvs 组中的主机
$ ansible "websrvs:&dbsrvs" –m ping
:!
逻辑非
# 在 websrvs 组,但不在 dbsrvs 组中的主机
# 注意:此处为单引号
$ ansible 'websrvs:!dbsrvs' –m ping
综合逻辑
# 在 websrvs 组或 dbsrvs 组,并且在 appsrvs 组,而且不在 ftpsvc 组
$ ansible 'websrvs:dbsrvs:&appsrvs:!ftpsvc' –m ping
正则表达式
$ ansible "websrvs:&dbsrvs" –m ping
$ ansible "~(web|db).*\.magedu\.com" –m ping
Ansible 命令执行过程
-
加载自己的配置文件,默认
/etc/ansible/ansible.cfg
-
加载自己对应的模块文件,如:
command
-
通过 ansible 将模块或命令生成对应的临时
.py
文件,并将该文件传输至远程服务器的对应执行用户的家目录,默认位置:$HOME/.ansible/tmp/ansible-tmp-数字/xxx.py
-
给文件执行权限
+x
-
执行并返回结果
-
删除临时
.py
文件,退出
Ansible 的执行状态
$ grep -A 14 '\[colors\]' /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
-
绿色
:执行成功并且不需要做改变的操作
-
黄色
:执行成功并且对目标主机做变更
-
红色
:执行失败
Ansible 使用范例
# 以 wang 用户执行 ping 存活检测
$ ansible all -m ping -u wang -k
# 以 wang 用户 sudo 至 root 用户执行 ping 存活检测(默认 sudo 至 root 用户)
$ ansible all -m ping -u wang -k -b
# 以 wang 用户 sudo 至 mage 用户执行 ping 存活检测
$ ansible all -m ping -u wang -k -b --become-user=mage
# 以 wang 用户 sudo 至 root 用户执行 ls 命令
$ ansible all -m command -u wang -a 'ls /root' -b --become-user=root -k -K
ansible-galaxy
此工具会连接 Ansible Galaxy 下载相应的 roles
范例:
# 列出所有已安装的 galaxy
$ ansible-galaxy list
# 安装 galaxy
$ ansible-galaxy install geerlingguy.mysql
$ ansible-galaxy install geerlingguy.redis
# 删除 galaxy
$ ansible-galaxy remove geerlingguy.redis
ansible-pull
此工具会推送 ansible 的命令至远程,效率无限提升,对运维要求较高
ansible-playbook
此工具用于执行编写好的 playbook 任务
范例:
$ ansible-playbook hello.yml
$ cat hello.yml
---
#hello world yml file
- hosts: websrvs
remote_user: root
tasks:
- name: hello world
command: /usr/bin/wall hello world
ansible-vault
此工具可以用于加解密 yml 文件
格式:
ansible-vault [create|decrypt|edit|encrypt|rekey|view]
范例:
$ ansible-vault encrypt hello.yml # 加密
$ ansible-vault decrypt hello.yml # 解密
$ ansible-vault view hello.yml # 查看
$ ansible-vault edit hello.yml # 编辑加密文件
$ ansible-vault rekey hello.yml # 修改口令
$ ansible-vault create new.yml # 创建新文件
ansible-console
此工具可交互执行命令,支持 tab,ansible 2.0+ 新增
提示符格式:
执行用户@当前操作的主机组 (当前组的主机数量)[f:并发数]$
常用子命令:
- 设置并发数:
forks n
例如: forks 10 - 切换组:
cd 主机组
例如: cd web - 列出当前组主机列表:
list
- 列出所有的内置命令:
?
或help
范例:
$ ansible-console
Welcome to the ansible console.
Type help or ? to list commands.
root@all (3)[f:5]$ list
10.0.0.8
10.0.0.7
10.0.0.6
root@all (3)[f:5]$ cd websrvs
root@websrvs (2)[f:5]$ list
10.0.0.7
10.0.0.8
root@websrvs (2)[f:5]$ forks 10
root@websrvs (2)[f:10]$ cd appsrvs
root@appsrvs (2)[f:5]$ yum name=httpd state=present
root@appsrvs (2)[f:5]$ service name=httpd state=started
###