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"

执行方式同第一种

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shark_西瓜甜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值