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的更多相关文章

  1. Ansible Playbook Roles and Include Statements

    介绍 虽然可以在一个非常大的文件中编写一个playbook(您可能会以这种方式开始学习playbook),但最终您将需要重新使用文件并开始组织事情. 在基本级别,饱含任务的文件允许您将配置策略分解成较 ...

  2. ansible playbook最佳实践

    本篇主要是根据官方翻译而来,从而使简单的翻译,并没有相关的实验步骤,以后文章会补充为实验步骤,此篇主要是相关理论的说明,可以称之为中文手册之一,具体内容如下: Ansible playbooks最佳实 ...

  3. Ansible playbook 批量修改服务器密码 先普通后root用户

    fsckzy   Ansible playbook 批量修改服务器密码 客户的需求:修改所有服务器密码,密码规则为Rfv5%+主机名后3位 背景:服务器有CentOS6.7,SuSE9.10.11,r ...

  4. Ansible playbook基础组件介绍

    本节内容: ansible playbook介绍 ansible playbook基础组件 playbook中使用变量 一.ansible playbook介绍 playbook是由一个或多个“pla ...

  5. ansible入门四(Ansible playbook基础组件介绍)

    本节内容: ansible playbook介绍 ansible playbook基础组件 playbook中使用变量 一.ansible playbook介绍 playbook是由一个或多个“pla ...

  6. ansible playbook模式及语法

    一.什么是playbook及其组成 什么是playbook playbook 翻译过来就是"剧本" playbook的组成 play:定义的是主机的角色 task:定义的是具体执行 ...

  7. ansible - playbook(剧组)

    目录 ansible - playbook(剧组) 常用命令 五种传参方式 常用元素详解 tags handlers template when 循环 嵌套循环 ansible - playbook( ...

  8. Ansible的roles标准化与Jenkins持续集成(三)

    Ansible的roles标准化与Jenkins持续集成(三) 链接:https://pan.baidu.com/s/1A3Iq3gGkGS27L_Gt37_I0g 提取码:ncy2 复制这段内容后打 ...

  9. Ansible:roles初始化系统

    简介 本文介绍ansible的roles,通过roles来实现系统的初始化,其相当于将ansible的playbook拆分.本文通过Jenkins,传参,调用playbook来初始化系统. Githu ...

随机推荐

  1. 【洛谷3865】 【模板】ST表(猫树)

    传送门 洛谷 Solution 实测跑的比ST表快!!! 这个东西也是\(O(1)\)的,不会可以看我上一篇Blog 代码实现 代码戳这里

  2. Akka-Cluster(4)- DistributedData, 分布式数据类型

    在实际应用中,集群环境里共用一些数据是不可避免的.我的意思是有些数据可以在任何节点进行共享同步读写,困难的是如何解决更改冲突问题.本来可以通过分布式数据库来实现这样的功能,但使用和维护成本又过高,不值 ...

  3. IDEA环境下GIT操作浅析之二-idea下分支操作相关命令

    上次写到<idea下仓库初始化与文件提交涉及到的基本命令>,今天我们继续写IDEA环境下GIT操作之二--idea下分支操作相关命令以及分支创建与合并. 1.idea 下分支操作相关命令 ...

  4. 纯小白创建第一个Node程序失败-容易忽略的一个细节

    一直觉得自己基础还很差,所以自觉不敢去碰node.js,但又对其心怀好奇.恰巧最近有一点空闲时间,忍不住去试了一下水   这不,在创建第一个node程序时就吃了闭门羹,总是提示我没有定义,如下图, 这 ...

  5. 使用webmagic爬虫对百度百科进行简单的爬取

    分析要爬取的网页源码: 1.打开要分析的网页,查看源代码,找到要爬取的内容: (选择网页里的一部分右击审查元素也行) 2.导入jar包,这个就直接去网上下吧: 3.写爬虫: package com.g ...

  6. python学习笔记01-变量

    变量的作用: 1.保存信息  方便日后被调用 操作 2. 更改 代表描述性的意思 让人明白是什么意思 行业命名规则: 1.student_number 2.studentNumber 驼峰体 不要以大 ...

  7. PythonDay02——编程语言、python介绍以及安装解释器、运行程序的两种方式、变量

    一.编程语言 1.1 机器语言:直接用计算机能理解的二进制指令编写程序,直接控制硬件 1.2 汇编语言:用英文标签取代二进制指令去编写程序,本质也是直接控制硬件 1.3 高级语言:用人能理解的表达方式 ...

  8. Docker概念学习系列之详谈Docker 的核心组件与概念(5)

    不多说,直接上干货!   见[博主]撰写的https://mp.weixin.qq.com/s/0omuSAjF5afJBZBxhbKTqQ 想要了解Docker,就必须了解Docker的五大核心概念 ...

  9. Apache Flume 1.7.0 自定义输入输出

    自定义http source config a1.sources.r1.type=http a1.sources.r1.bind=localhost a1.sources.r1.port= a1.so ...

  10. salesforce零基础学习(九十三)Email To Case的简单实现

    Salesforce提供了标准的功能来实现通过Email 创建 Case.我们可以设置指定的路由的地址,指定条件的邮件会自动生成到目标salesforce系统的Case数据.Salesforce提供了 ...