什么是roles
是一种利用在大型playbook中的剧本配置模式,在这自己特定结构
为什么需要用到roles
和面向对象开发思想相似
利用于大型的项目任务中,尽可能的将公共的任务,变量等内容独立
剧本结构和设计思路
ansible官方网站的建议playbook剧本结构如下:
Nginx工程方式的编译安装
# 剧本分解 ansible.cfg - files # 存放上传文件 - index.html - nginx # 系统init中,控制nginx启动脚本 - nginx-1.12.2.tar.gz # nginx的安装包文件 production # 线上的主机配置文件 roles # roles角色执行 - apache - common tasks main.yml vars main.yml meta nginx - handlers 通过notify触发 main.yml - tasks - basic.yml - main.yml - nginx.yml - vars = main.yml tasks staging 线下测试环境使用的主机配置文件 - templates 模板(配置,html) - nginx1.conf nginx的自定义conf文件 webserver.yaml web服务相关主执行文件 Ansible的核心类介绍 核心类 用途 所在的模块路径DataLoader 用于读取yaml,json格式的文件 ansible.parsing.dataloader
Play 存储执行hosts的角色信息 ansible.playbook.play
TaskQueueManager ansible底层用到的任务队列 ansible.executor.task_queue_manager
PlaybookExecutor 核心累执行playbook剧本 ansible.executor.playbook_executor
CallbackBase 状态回调,各种成功失败的状态 ansible.plugins.callback
InventoryManager 用于导入inventory文件 ansible.inventory.manager
VariableManager 用于存储各类变量信息 ansible.vars.manager
Host,Group 用于操作单个主机或者主机组信息 ansible.inventory.host
InventoryManager
用来管理主机和主机组信息
from ansible.parsing.dataloader import DataLoader from ansible.inventory.manager import InventoryManager # InventoryManager类 loader = DataLoader() InventoryManager(loader=loader,sources=['youmen_hosts']) # 1. 添加主机到指定主机组 add_host() # 2. 查看主机组资源get_groups_dict() # 3. 获取指定的主机对象get_host() # VariableManager类 # loader: 实例对象 # inventory: 调用InventoryManager返回的实例对象. VariableManager(loader=loader,inventory=inventory) # 查看主机变量方法 get_vars() # 设置主机变量方法set_host_variable() # 添加扩展变量extra_vars ad-hoc模式调用场景ansible -m command -a "ls /tmp" testgroup -i /etc/ansible/hosts -f 5