使用ansible批量执行下发命令并执行
ansible all -m shell -a "ls /root"
说明:all代表所有在inventory文件中所有的主机列表,-m 后面是ansible的模块名称,-a后面是参数。
ansible all -m command -a "ls /root"
ansible简介
Ansible是一种agentless(基于ssh),可实现批量配置、命令执行和控制,基于Python开发的自动化运维工具。
安装方式
- yum安装,配置epel源;
- pip安装
## e.g.
#first step: install python related
yum -y install python-pip python-devel
#next: install ansible via pip command
pip install ansible
ansible架构图
ansible核心模块介绍:
- core models: ansible自带的模块,file,shell,copy等
- custom models: ansible自带模块不足以满足工作需要时,用户添加扩展模块
- host inventory: 由ansible 管理的主机,包括主机名,ip,端口等
- playbook: yaml格式文件,多任务定义在一个yaml文件中,主要定义哪些功能由哪些模块完成,顺序执行
- connection plugins: ansible通过该插件连接到各个目标主机,内部默认使用paramiko模块ssh协议来完成
ansible特性
- 无侵入:被管理端无须安装agent,只要python版本满足条件和ssh服务即可。
- 无服务端:只需要按照ansible,配置完之后,命令行完成工作。
- 多语言:可以基于任何语言开发ansible新模块。
- 模块冥等性:定义的任务已经存在则不会做任何事情,意味着在同一台服务器上多次执行同一个playbook和执行一次,效果一样。
ansible重要文件
/usr/bin/ansible: 命令行工具
命令通用格式:ansible <host-pattern> [options] [-m module_name] [-a args]
/usr/bin/ansible-doc: 帮助文档
/usr/bin/ansible-playbook: 剧本执行工具
/etc/ansible/ansible.cfg:主配置文件
/etc/ansible/hosts: 管理主机清单
/etc/ansible/roles: 角色文件
# /etc/ansible/hosts
[test-hosts]
192.168.50.100
192.168.50.101
[db-hosts]
192.168.50.102
192.168.50.103
192.168.50.104
## 可以选择性的让部分主机执行命令
ansible test-hosts -m command -a "ls"
ansible工作流程
ansible命令执行——> 读取ansible.cfg配置文件——>通过规则过滤inventory中定义的主机列表——>加载task对应的模块文件——>通过ansible core将模块或命令打包成Python脚本文件——>对应执行用户的家目录:''.ansible/tmp/xxx/xxx.py"文件——>给文件加执行权限——>执行py文件并返回结果——>删除文件退出