02 . Ansible高级用法(运维开发篇) (5)

02 . Ansible高级用法(运维开发篇)

什么是roles

是一种利用在大型playbook中的剧本配置模式,在这自己特定结构

为什么需要用到roles

和面向对象开发思想相似
利用于大型的项目任务中,尽可能的将公共的任务,变量等内容独立

剧本结构和设计思路
ansible官方网站的建议playbook剧本结构如下:

production # 正式环境的inventory文件 staging #测试环境用得inventory文件 group_vars/ # 机器组的变量文件 group1 group2 host_vars/ #执行机器成员的变量 hostname1 hostname2 ================================================ site.yml # 主要的playbook剧本 webservers.yml # webserver类型服务所用的剧本 dbservers.yml # 数据库类型的服务所用的剧本 roles/ webservers/ #webservers这个角色相关任务和自定义变量 tasks/ main.yml handlers/ main.yml vars/ main.yml dbservers/ #dbservers这个角色相关任务和定义变量 ... common/ # 公共的 tasks/ main.yml handlers/ main.yml # handlers file. vars/ # 角色所用到的变量 main.yml # =============================================== templates/ # ntp.conf.j2 # 模版文件 files/ # 用于上传存放文件的目录 bar.txt foo.sh meta/ # 角色的依赖 main.yml 场景演练

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

02 . Ansible高级用法(运维开发篇)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpjydf.html