Ansible-08-角色

Posted shark_西瓜甜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ansible-08-角色相关的知识,希望对你有一定的参考价值。

一、介绍

role 角色就是把一个 playbook 中的代码按照一定的规则分解开。

模块化编程的思想组织 playbook 的代码。

二、role 的规则

先看一个示例:

webservers/
├── defaults
│   └── main.yml
├── files
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── tasks
│   └── main.yml
├── templates
└── vars
    └── main.yml

上面示例中 webservers 就成为一个 role, 这个 role 的主要功能是部署并配置 nginx

从表面上看,它就是一个目录。目录的名字也就是role的名字,示例中,role 的名字叫做 webservers
进到这个role名字的目录里,会发现好多子目录。

使用时,每个目录必须包含一个main.yml文件,这个文件应该包含如下目录名称对应的内容:

  • tasks -包含角色要执行的任务的主要列表。
  • handlers -包含处理程序,此角色甚至该角色之外的任何地方都可以使用这些处理程序。
  • defaults-角色的默认变量。
  • vars-角色的其他变量。
  • files -包含可以通过此角色部署的文件。
  • templates -包含可以通过此角色部署的模板。
  • meta-为此角色定义一些元数据。

角色必须至少包含这些目录中的其中之一,但是最好删除掉任何未使用的目录。

三、role 的制作过程

分解这个PlayBook,命名role 的名字为 webservers

webservers/
│
├── files
├── handlers
│   └── main.yml
├── tasks
│   └── main.yml
├── templates
└── vars
    └── main.yml

files 文件夹存放文件

存放 default.conf 配置文件

handlers 文件夹中的main.yml 文件

- name: reload nginx server
  service: name=nginx state=reloaded
  when: nginxsyntax.rc == 0

tasks 文件夹中的 main.yml 文件

    - name: 传输仓库文件
      copy:
        src: nginx.repo
        dest: /etc/yum.repos.d/nginx.repo
    - name: 安装 nginx
      yum: name=nginx state=present

    - name: 利用模板文件,设置主配置文件
      template:
        src: "{{ main_conf }}"
        dest: /etc/nginx/nginx.conf
      tags: update

      # 触发任务
      notify: reload nginx server

    - name: 子配置文件
      copy:
        src: "{{ sub_conf }}"
        dest: /etc/nginx/conf.d/
      tags: update
      notify: reload nginx server

    - name: check nginx syntax
      shell: /usr/sbin/nginx -t
      register: nginxsyntax
      tags: update

    - name: 启动 nginx 服务
      when: nginxsyntax.rc == 0
      systemd: name=nginx state=started

templates 文件夹存放模板

存放 nginx.conf.j2 模板

vars 文件夹中的 main.yml 文件

main_conf: nginx.conf.j2
sub_conf: default.conf

四、如何在PlayBook中使用 Role

1. 经典(原始)方式

编译一个 playbool,内容如下:

在 playbook 中给定 roes:属性

文件:deploy-nginx.yml

- name: use  role
  hosts: webservers
  roles:
    - webservers

保证 deploy-nginx.yml 文件的当前目录下有 webservers 角色

执行:

ansible-playbook  deploy-nginx.yml 

2. 新方式

在 playbook 中给定 import_role 属性
这种方式适用于 Ansible 2.4及以上

- name: use rose
  hosts: webservers
  tasks:
    - debug:
      msg: "before we run our role"
    - import_role:
        name: webservers
    - debug:
        msg: "after we ran our role"

执行方式同第一种

以上是关于Ansible-08-角色的主要内容,如果未能解决你的问题,请参考以下文章

《java精品毕设》基于javaweb宠物领养平台管理系统(源码+毕设论文+sql):主要实现:个人中心,信息修改,填写领养信息,交流论坛,新闻,寄养信息,公告,宠物领养信息,我的寄养信息等(代码片段

Unity编程Unity动画系统

Mecanim 动画系统(第二部分)

如何使用 SAML 2.0 响应进行特定 DNN 用户角色组身份验证和授权?

ASP.NET MVC4.0+EF+LINQ+bui+网站+角色权限管理系统

Oracle-常用数据库对象笔记(片段)