ansible:定义并运行简单任务,主要执行ad-hoc命令
ansible-config:查看、编辑、管理ansible配置
ansible-connection:
ansible-console:repl控制台执行ansible任务
ansible-doc:文档查看工具。控制台输入 ansible-doc -h 查看帮助各个参数说明,查看playbook片断使用 ansible-doc -s yum , 详细说明可使用 -v -vvv -vvvv 参数
ansible-galaxy:共享和下载roles的工具
ansible-inventory:查看inventory的信息,能够把hosts的ini格式转成想要的json或者yaml
ansible-playbook:执行playbookansible-pull:从仓库中拉去playbook
ansible-vault:文件加密工具重点掌握ansible和ansible-playbook命
ansible-pull: 默认使用的是push模式,pull模式相反;适用于数量巨大的机器配置;没有网络链接的机器运行python
格式:ansible
例子:ansible all -m shell -a 'date'
常见可选参数:
-m 模块名,默认不指定模式时,使用的是command模块。
-a 针对模块的具体命令,用单引号包含
-f 并行执行的设备数(默认5)
-o 简化输出(一行输出)
-i 指定 inventory 的路径(默认为 /etc/ansible/hosts)
-u 执行用户(默认root)
-P 后台执行(后跟数字表示隔多少秒轮询一次,为0表示静默执行)
-B 最大执行时长(单位秒)
-t 输出结果重定向
--syntax-check playbook语法检查,不执行sql
/etc/ansible/ansible.cfg 配置文件,如下是对默认文件修改shell
# 注意,ansible的执行用户为普通用户,由于每一个机器都作了sudo,因此ansible.cfg须要设置切换root操做,如下列出修改 [privilege_escalation] # become=True # 取消老是以root执行,须要时加参数切换 become_method=sudo become_user=root become_ask_pass=False
# 如下是修改以后的执行效果,注意看输出 ansible lzcx -m shell -a "whoami" ansible lzcx -m shell -a "whoami" -b
/etc/ansible/hosts 主机库(host inventory)
/etc/ansible/roles/ 公共角色,主要在自动化部署多台主机时应用
/usr/bin ansible执行命令存放目录,ansible,ansible-doc,ansible-playbook等等json
Inventory 文件遵循 ini 文件风格,[] 标记分组,方便对机器列表的管理
inventory 支持配置设置支持 ip,主机名,ip区域,ssh端口,链接类型(默认ssh)和链接用户,主机变量,添加关键字做为配置组变量
静态 Inventory 指的是在文件中指定的主机和组,动态 Inventory 指经过外部脚本获取主机列表,并按照 ansible 所要求的格式返回给 ansilbe 命令的。
设置组名时,尽可能选择有意义的名字
如下是hosts文件的几种配置方法,举例说明,不必定用在这个实验环境centos
# 未分组的主机,添加在最前面 192.168.1.1.212 # 添加一个分组,并指定ip区域 [centos6] 192.168.1.[216:217] # 指定链接类型和链接用户 [target1] localhost ansible_connection=local 192.168.1.213 ansible_connection=ssh ansible_ssh_user=operation # 配置主机变量 [target2] host1 http_port=80 host2 http_port=80 var2=xxx var3=xxx # 添加关键字var,配置组变量,对属于该组的全部主机都适用 [target2:var] var4=xxx var5=xxx # 添加关键字children,把组做为其余组的子成员 [target3:children] target1 target2
匹配规则主要有如下几种
逻辑匹配:全量 all/* 、逻辑或 | 、逻辑非 ! 、逻辑与 & 、切片 []
正则匹配:见下文详解网络
如下列举各类匹配类型
指定主机ip:直接指定ip运行,这里指定包括数字和字母指定ssh
# 例 ansible 192.168.1.216 -m shell -a 'date'
指定主机名:前提是先将ip和主机名添加到系统hosts文件才能识别,将主机名添加到ansible的hosts文件,执行命令检查是否成功工具
# 例 echo '192.168.1.214 yuhui' >> /etc/hosts echo 'yuhui' >> /etc/ansible/hosts # 指定主机名 ansible yuhui -m shell -a 'date'
指定组名:组名指的是ansible目录下hosts文件的组名ui
# 例 ansible centos6 -m shell -a 'date'
ansible中正则匹配详解
匹配全部的主机:all
ansible all -a 'hostname'
匹配规则性主机或主机名
# 匹配后缀是 yk 的主机组 ansible *yk -a 'uptime'
匹配多个组的主机,中间用 : 隔开(或操做),可匹配多个主机组,格式 group_name:group_name:group_name...
# 匹配 mysql 和 centos6 2个主机组 ansible mysql:centos6 -a 'uptime' # 匹配 mysql、centos六、gzyk 3个主机组 ansible mysql:centos6:gzyk -a 'uptime'
在某个组而不在其余组(非操做)
# 匹配在 my_vm 组但不在 centos6 组的主机,注意匹配范围是用 单引号'' 包含,双引号会报错 ansible 'my_vm:!centos6' -a 'hostname'
匹配两个组的交集(与操做)
# 匹配 my_vm 和 centos6 共有的主机 ansible 'my_vm:¢os6' -a 'hostname'
匹配一个组的特定主机
# 匹配 my_vm 组内的第二和第三个主机,应用了python的切片 ansible my_vm[1:2] -a 'date'
混合匹配
# 匹配 my_vm 和 yuhui组但不包含 centos6 组的主机 ansible 'my_vm:yuhui:!centos6' -a 'date'
匹配关键字开头:~
# 匹配 192.168.1.21 开头的主机 ansible '~192.168.1.21*' -a 'hostname'
指定执行 --limit 用法,ansible和ansible-playbook都支持
# 指定 my_vm 组里面的 192.168.1.216 执行 ansible my_vm -a 'hostname' --limit=192.168.1.216 # 用limit指定my_vm组里面的192.168.1.21前缀主机 ansible my_vm -a 'hostname' --limit=192.168.1.21* ansible my_vm -a 'hostname' --limit=~192.168.1.21*