目录
参考
介绍
ansible
是一种自动化运维工具,基于Python
开发,可实现批量系统配置、批量程序部署、批量运行命令等功能。
环境信息
# hostnamectl
Static hostname: localhost.localdomain
Icon name: computer-vm
Chassis: vm
Machine ID: 752d91f949a840fa9f2ed0b2ca54d8ad
Boot ID: 81088a1ae25a46279b7746e8c9e0a091
Virtualization: vmware
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-957.el7.x86_64
Architecture: x86-64
安装
可直接通过yum
安装
[root@localhost ~]# yum search ansible
校验
[root@localhost ~]# ansible --version
ansible 2.9.15
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
常用工具
/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-doc
格式
ansible-doc [options] [module...]
-l, --list #列出可用模块
-s, --snippet #显示指定模块的playbook片段
例如查看ping
模块的简短文档
[root@localhost ~]# ansible-doc -s ping
- name: Try to connect to host, verify a usable python and return `pong' on success
ping:
data: # Data to return for the `ping' return value. If this parameter is set to `crash', the module will cause an exception.
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时的口令
注:若执行-k
,必须所有hosts中主机密码相同,否则可能会出现失败
示例
[root@localhost ~]# ssh-keygen
[root@localhost ~]# ssh-copy-id 10.91.156.209
[root@localhost ~]# ssh-copy-id 10.91.156.205
# 此时公钥已被添加到209 205两台机器中的root用户下
[root@localhost ~]# ansible all -m ping
10.91.156.209 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
10.91.156.205 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
查看所有hosts
[root@localhost ~]# ansible all --list-hosts
hosts (2):
10.91.156.205
10.91.156.209
[root@localhost ~]# ansible server --list-hosts
hosts (1):
10.91.156.209
[root@localhost ~]# ansible node --list-hosts
hosts (1):
10.91.156.205
[root@localhost ~]# cat /etc/ansible/hosts
[server]
10.91.156.209
[node]
10.91.156.205
ansible命令执行过程
- 加载自己的配置文件 默认
/etc/ansible/ansible.cfg
- 加载自己对应的模块文件,如:
command
- 通过
ansible
将模块或命令生成对应的临时py
文件,并将该文件传输至远程服务器的对应执行用户$HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY
文件 - 给文件
+x
权限执行 - 执行并返回结果
- 删除临时
py
文件,退出
具体过程可通过-vvv
参数来详细查看
[root@localhost ~]# ansible server -vvv -m ping > ansible.log
# 增加执行权限记录
[root@localhost ~]# grep -n chmod ansible.log
31:<10.91.156.209> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o ControlPath=/root/.ansible/cp/4f24120d2d 10.91.156.209 '/bin/sh -c '"'"'chmod u+x /root/.ansible/tmp/ansible-tmp-1608777830.06-12031-172335200139721/ /root/.ansible/tmp/ansible-tmp-1608777830.06-12031-172335200139721/AnsiballZ_ping.py && sleep 0'"'"''
#删除临时文件
[root@localhost ~]# grep -n chmod ansible.log
...
37:<10.91.156.209> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o ControlPath=/root/.ansible/cp/4f24120d2d 10.91.156.209 '/bin/sh -c '"'"'rm -f -r /root/.ansible/tmp/ansible-tmp-1608777830.06-12031-172335200139721/ > /dev/null 2>&1 && sleep 0'"'"''
查找ansible.cfg顺序
ANSIBLE_CONFIG
:首先,Ansible
命令会检查环境变量,及这个环境变量将指向的配置文件./ansible.cfg
:其次,将会检查当前目录下的ansible.cfg
配置文件~/.ansible.cfg
:再次,将会检查当前用户home目录下的.ansible.cfg
配置文件/etc/ansible/ansible.cfg
:最后,将会检查在用软件包管理工具安装Ansible
时自动产生的配置文件
ansible-galaxy
此工具会连接 https://galaxy.ansible.com 下载相应的roles
示例
#列出所有已安装的galaxy
ansible-galaxy list
#安装galaxy
ansible-galaxy install geerlingguy.mysql
ansible-galaxy install geerlingguy.redis
#删除galaxy
ansible-galaxy remove geerlingguy.redis
ansible-playbook
作用
此工具用于执行编写好的 playbook
任务
示例
[root@localhost ~]# cat hello.yml
- hosts: server
remote_user: root
tasks:
- name: hello world
command: /usr/bin/wall hello world
执行结果
ansible-vault
作用
此工具可以用于加密解密yml文件
示例
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
范例
[root@ansible ~]#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
其它
输出颜色代表含义
ansible
执行完任务后,会根据不同的颜色来说明执行的结果,默认颜色的含义如下(在/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
来源:oschina
链接:https://my.oschina.net/u/4280959/blog/4881009