ansible剧本-roles(1)

ansible剧本-roles(1)

图片图片

教程每周二、四、六更新

图片roles用于层次性、结构化地组织playbook。roles能够根据层次型结构自动装载变量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令引入即可。简单来讲,roles就是通过分别将变量、文件、任务、模板及处理器放置于单独的目录中,并可以便捷的include它们的一种机制。roles一般用于基于主机构建服务的场景中,但也可以是用于构建守护进程等场景中。主要使用场景代码复用度较高的情况下。假如我们现在有3个被管理主机,第一个要配置成httpd,第二个要配置成haproxy服务器,第三个要配置成MySQL(mariadb)服务器。我们如何来定义playbook?第一个play用到第一个主机上,用来构建httpd,第二个play用到第二个主机上,用来构建haproxy。这些个play定义在playbook中比较麻烦,将来也不利于模块化调用,不利于多次调用。比如说后来又加进来一个主机,这第3个主机既是httpd服务器,又是haproxy服务器,我们只能写第3个play,上面写上安装httpd和haproxy。这样playbook中的代码就重复了。为了避免代码重复,roles能够实现代码重复被调用。定义一个角色叫httpd,第二个角色叫haproxy。那么调用时如下来调用:
- hosts: web01
  role:
    - httpd
- hosts:web02
  role:
    - haproxy
- hosts:web03
  role:
    - httpd
    - haproxy

多个role的时候也可以写成如下的样式:

- hosts: web03
  roles:
    - { role: httpd }
    - { role: haproxy }

我们来看一个项目的目录结构:

common.yml
httpd-install.yml
haproxy-install.yml
roles/
    common/
        tasks/
        handlers/
        library/
        files/
        templates/
        vars/
        defaults/
        meta/
    httpd/
        tasks/
        defaults/
        meta/
    haproxy/
        tasks/
        defaults/
        meta/
默认情况下,Ansible会在roles中的每个目录中查找main.yml文件,以便找到相关内容:- tasks/main.yml角色执行的主要任务列表- handlers/main.yml 处理程序,可以在此角色内部或外部使用。- library/my_module.py模块,可以在此角色中使用- files/main.yml角色需要用到的文件- templates/main.yml角色需要用到的模板文件,即template模块需要用到的jinjia2文件。- vars/main.yml一般变量- defaults/main.yml角色的默认变量。这些变量具有所有可用变量中最低的优先级,并且可以很容易地被任何其他变量覆盖。所以生产中我们一般不在这里定义变量- meta/main.yml用于定义此角色的元数据信息及其依赖关系上面的目录结构和目录名字是固定格式,对于目录名字不能修改,但是我们可以在某些目录中添加其他YAML文件。例如,可以将特定于平台的任务放在单独的文件中,并在tasks/main.yml文件中引用它们:
# roles/httpd/tasks/main.yml
- name: Install the correct web server for RHEL
  import_tasks: redhat.yml
  when: ansible_facts['os_family']|lower == 'redhat'

- name: Install the correct web server for Debian
  import_tasks: debian.yml
  when: ansible_facts['os_family']|lower == 'debian'

# roles/httpd/tasks/redhat.yml
- name: Install web server
  ansible.builtin.yum:
    name: "httpd"
    state: present

# roles/httpd/tasks/debian.yml
- name: Install web server
  ansible.builtin.apt:
    name: "apache2"
    state: present
common.yml、httpd-install.yml、haproxy-install.yml是调用role的playbook文件,这些文件名是可以更改的,并且在目录结构上和roles文件夹是平级的,使用的时候ansible会从roles文件夹下查找(优先)或者从配置文件指定的roles中查找。下一节我们通过一个实验来实践role的用法。

 

雷哥开通了抖音(云计算雷哥)和微信视频号,求关注!!!和大家一起学习 技术!

图片

推荐阅读

 

《一站式教程之集群架构》:

 

ansible剧本-变量的定义(2)

ansible - 模板template

ansible剧本-when

ansible剧本-循环

ansible剧本-template中的for循环和if的使用(1)

ansible剧本-template中的for循环和if的使用(2)

 

 

看完本文有收获?请分享给更多人

推荐关注「Cloud研习社」,带你从零开始掌握云计算技术!

Cloud研习社
为Linux云计算零基础同学服务,致力于打造一套完整的linux云计算教程。包括新手学习路线、linux、存储、集群架构以及Docker,K8S,DevOps等
188篇原创内容

图片


图片

 

Cloud研习社
收录于合集 #一站式教程
 233
上一篇ansible剧本-template中的for循环和if的使用(2)下一篇ansible剧本-roles(2)
阅读 67
 
posted @ 2023-05-11 15:50  往事已成昨天  阅读(18)  评论(0编辑  收藏  举报