• 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;

     
     
  • 相关阅读:
    EF+MVC+Bootstrap 项目实践 Day7
    JS---数组
    OS---华硕笔记本从U盘启动安装系统
    PHP--分页类
    PHP--数据库操作类
    OS---net start mysql 发生系统错误5
    MYSQL---远程连接mysql数据库提示:ERROR 1130的解决办法
    CSS-小谈LV,HA!
    MYSQL---设置存储引擎
    MYSQL---存储引擎
  • 原文地址:https://www.cnblogs.com/niuli1987/p/10572051.html
Copyright © 2020-2023  润新知