Ansible playbook roles
1 概述
角色(roles):如果我们使用playbook写成一个文件,这个文件会很大,但是不方便组织,我们可以分组,把playbook根据功能,如handler,tasks等分门别类的放在在各自的子目录下,形成一个集合,就是角色,建议把角色放在固定的目录下,目录可以ansible的配置文件中的roles_path来定义。
目录结构清晰
可以重复使用
参考: http://www.ansible.com.cn/docs/playbooks_roles.html
https://blog.51cto.com/ghbsunny/2047084
2 配置介绍
以层级结构组织Playbook的核心元素,成为roles。
核心元素包括以下几点:
Hosts:主机
Tasks:任务列表
Variables:变量
Templates:包含了模板语法的文本文件;
Handlers:由特定条件触发的任务;
在roles目录下,分别创建不同的目录,每个目录就是不同的角色,roles目录下是角色的集合:
如roles/创建如下的目录
mysql/
httpd/
nginx/
memcached/
roles模块的路径可以在配置文件/etc/ansible/ansible.cfg里roles_path定义.
每个角色,以特定的层级目录结构进行组织,例子如下:
/roles/mysql/
- files/ :存放由copy或script模块等调用的文件;
- templates/:template模块查找所需要模板文件的目录;
- tasks/:至少应该包含一个名为main.yml的文件;其它的文件需要在此文件中通过include进行包含;
- handlers/:至少应该包含一个名为main.yml的文件;其它的文件需要在此文件中通过include进行包含;
- vars/:至少应该包含一个名为main.yml的文件;其它的文件需要在此文件中通过include进行包含;
- meta/:至少应该包含一个名为main.yml的文件,定义当前角色的特殊设定及其依赖关系;其它的文件需要在此文件中通过include进行包含;注意,角色和角色之间有依赖关系,如安装NT,先装nginx后装tomcat,一般不需定义,执行我们自己定义好安装顺序即可
- default/:设定默认变量时使用此目录中的main.yml文件;
nginx/
├── files 静态文件
├── tasks 任务列表
│ ├── copyfile.yml
│ ├── installnginx.yml
│ ├── main.yml 入口文件
│ └── start.yml
├── templates 模板文件
│ └── nginx.conf
└── vars 变量
└── handlers 被触发的动作
3 playbook调用角色
playbook调用角色有三个方法:
方法1:
- hosts: websrvs
remote_user: root
roles:
- mysql
- memcached
- nginx
方法2:传递变量给角色,调用角色时,注意依赖关系,可以自己先考虑好先后顺序
- hosts:
remote_user:
roles:
- { role: nginx, username: nginx } #键role用于指定角色名称;后续的k/v用于传递变量给角色;
方法3:基于条件测试实现角色调用;
roles:
- { role: nginx, when: "ansible_distribution_major_version == '7' " }
查找顺序
roles目录,对应的文件夹
tasks:先找tasks目录里面的main.yml文件,看到import_tasks来导入别的yml文件,这个是必须的
templates: 找这个目录里面的模板文件,在tasks里面是可以用相对路径来写
vars:先找main.yml文件,如果找到就找变量替换
hanlers:先找main.yml文件,如果找到,则在tasks里面通过notify来触发
files: 放的是静态文件
相互调用
通过import_tasks 来相互调用,roles/role/tasks/taskfile.yml
怎么使用
跟roles同级目录下,写nginx。yml文件
- hosts: web
roles:
- nginx
4 例子
创建roles文件夹
mkdir roles
创建nginx, mysql, redis, uwsgi 四个角色
进入一个角色 cd nginx,
创建目录 mkdir -v {tasks,files,templates,handlers,vars}
nginx/
├──files 静态文件
├──tasks 任务列表
│ ├──copyfile.yml
│ ├──installnginx.yml
│ ├──main.yml 入口文件
│ └──start.yml
├──templates模板文件
│ └──nginx.conf
└──vars 变量
└──handlers 被触发的动作
进入tasks cd tasks
1.创建安装nginx任务 vim installnginx.yaml
-name:installnginx
yum:name=nginx
2.创建拷贝文件任务 vim copyfile.yaml
-name:copyfile
template:src=nginx.confdest=/etc/nginx/nginx.conf
3.创建启动任务 vim startnginx.yaml
-name:starnginx
service:name=nginxstate=started
4.创建入口文件 vim main.yaml
-import_tasks:installnginx.yaml
-import_tasks:copyfile.yaml
-import_tasks:startnginx.yaml
5.创建触发handlers文件 (每次修改配置文件后触发 需要notify ) cd handler
创建入口文件 vim main.yaml
-name:restart
service:name=niginstate=restarted
5.1去tasks目录中的 拷贝文件任务中 添加notify cd nginx/tasks/ vim copyfile.yaml
-name:copyfile
template:src=nginx.confdest=/etc/nginx/nginx.conf
tags:copyfile
notify:restart
5.2把本机上的nginx配置文件copy到templates中
我的nginx在/opt/nginx1-12/conf/nginx.conf
cp/opt/nginx1-12/conf/nginx.confnginx.conf
6.配置nginx配置文件, (修改核心数,可选) vim nginx.conf
worker_processes{{ansible_processor_vcpus}};
7.跟roles同级的目录中创建 主role文件 vim nginx.yaml
-hosts:all
roles:
-nginx
8.检查一下
ansible-playbook--syntax-checknginx.yaml
9.运行
nginx +uwsgi配置方式
第一种
uwsgi配置文件里面是http= 0.0.0.0:8000
nginx配置文件是proxy_pass http://127.0.0.1:8000;
第二种方式
uwsgi配置文件里面是socket= 0.0.0.0:8000
nginx配置文件是
include /etc/nginx/uwsgi.conf
uwsgi_pass 127.0.0.1:8000;
第三种方式
uwsgi配置文件里面是socket=/data/mysite/mysite.socket
nginx配置文件是
include /etc/nginx/uwsgi.conf
uwsgi_pass unix:/data/mysite/mysite.socket;
Ansible playbook roles的更多相关文章
- Ansible Playbook Roles and Include Statements
介绍 虽然可以在一个非常大的文件中编写一个playbook(您可能会以这种方式开始学习playbook),但最终您将需要重新使用文件并开始组织事情. 在基本级别,饱含任务的文件允许您将配置策略分解成较 ...
- ansible playbook最佳实践
本篇主要是根据官方翻译而来,从而使简单的翻译,并没有相关的实验步骤,以后文章会补充为实验步骤,此篇主要是相关理论的说明,可以称之为中文手册之一,具体内容如下: Ansible playbooks最佳实 ...
- Ansible playbook 批量修改服务器密码 先普通后root用户
fsckzy Ansible playbook 批量修改服务器密码 客户的需求:修改所有服务器密码,密码规则为Rfv5%+主机名后3位 背景:服务器有CentOS6.7,SuSE9.10.11,r ...
- Ansible playbook基础组件介绍
本节内容: ansible playbook介绍 ansible playbook基础组件 playbook中使用变量 一.ansible playbook介绍 playbook是由一个或多个“pla ...
- ansible入门四(Ansible playbook基础组件介绍)
本节内容: ansible playbook介绍 ansible playbook基础组件 playbook中使用变量 一.ansible playbook介绍 playbook是由一个或多个“pla ...
- ansible playbook模式及语法
一.什么是playbook及其组成 什么是playbook playbook 翻译过来就是"剧本" playbook的组成 play:定义的是主机的角色 task:定义的是具体执行 ...
- ansible - playbook(剧组)
目录 ansible - playbook(剧组) 常用命令 五种传参方式 常用元素详解 tags handlers template when 循环 嵌套循环 ansible - playbook( ...
- Ansible的roles标准化与Jenkins持续集成(三)
Ansible的roles标准化与Jenkins持续集成(三) 链接:https://pan.baidu.com/s/1A3Iq3gGkGS27L_Gt37_I0g 提取码:ncy2 复制这段内容后打 ...
- Ansible:roles初始化系统
简介 本文介绍ansible的roles,通过roles来实现系统的初始化,其相当于将ansible的playbook拆分.本文通过Jenkins,传参,调用playbook来初始化系统. Githu ...
随机推荐
- [转]kaldi 神经网络
转自:http://blog.csdn.net/xmdxcsj/article/details/54695506 overview type author CPU/GPU feature nnet1 ...
- 前端开发JS白板编程题目若干
在前端开发参加面试的时候,无论是校招还是社招,往往都会碰到让我们直接在白纸或者白板上手撸代码的题目.由于是手撸代码,这些题目肯定不会过于复杂和冗长,否则面试那么一小会时间根本写不完.本文总结了几个我本 ...
- 隔壁小孩都要知道的Drupal配置
i春秋作家:Arizona 原文来自:隔壁小孩都要知道的Drupal配置 隔壁小孩都要知道的Drupal配置 Drupal是一个开源的PHP内容管理系统,具有相当复杂的架构.它还具有强大的安全模型.感 ...
- js 大厦之JavaScript事件
1.js事件简介 事件(Event) 是 JavaScript 应用跳动的心脏 ,进行交互,使网页动起来.也是把所有东西粘在一起的胶水.当我们与浏览器中 Web 页面进行某些类型的交互时,事件就发生了 ...
- 京东购物车的 Java 架构实现及原理!
今天来写一下关于购物车的东西, 这里首先抛出四个问题: 1)用户没登陆用户名和密码,添加商品, 关闭浏览器再打开后 不登录用户名和密码 问:购物车商品还在吗? 2)用户登陆了用户名密码,添加商品,关闭 ...
- 转载----开发者大杀器 —— 刨根问底,揪出 Android App 耗电的元凶代码
转载文章地址:http://www.jianshu.com/p/27ba2759b221
- 吴恩达机器学习笔记30-神经网络的反向传播算法(Backpropagation Algorithm)
之前我们在计算神经网络预测结果的时候我们采用了一种正向传播方法,我们从第一层开始正向一层一层进行计算,直到最后一层的ℎ
- 关于vue2.0+hbuilder打包移动端app之后空白页面的解决方案
楼主是使用vue-cli构建的页面,代码是vscode,然后使用hbuilder打包成移动端的安装包.首先确认在npm run build 之后没有问题(默认dist文件夹),可以使用anywhere ...
- VueJs(11)---vue-router(命名路由,命名视图,重定向别名,路由组件传参)
vue-router 上篇文章讲了第一篇vue-router相关文章,文章地址:VueJs(10)---vue-router(进阶1) 一.命名路由 有时候,通过一个名称来标识一个路由显得更方便一些, ...
- 全网最详细的一个超级好用的命令行工具【Cmder】的安装之后的一些配置(图文详解)
不多说,直接上干货! 1.修改命令提示符λ为$ 首先,我们看到 进入解压后的cmder的目录,进入vendor,打开init.bat文件. 修改第15行的代码 @prompt $E[;;40m$P$S ...