0
点赞
收藏
分享

微信扫一扫

role 的组织方式

其生 2022-03-26 阅读 27

文章目录

简介

role是task文件、变量文件、handlers文件的集合体,这个集合体的显著特点是:可移植性和可重复执行性。

实践中,通常我们以部署某个服务为单元作为一个role ,然后将这些服务单元(role)放在一个roles目录下。主playbook文件通过调用roles目录下的role,来实现各种灵活多变的部署需求。

创建roles

通常创建一个role的方法有两种:

  • 命令mkdir和touch行手动创建
  • 使用ansible-galaxy自动初始化一个role

当然我现在还是用现成的。

例如,我想使用「ansible-galaxy init」命令创建一个名字为role_A 的role,可以这样写:

ansible-galaxy init role_A

创建后的目录结构如下:

➜ tree role_A
role_A
├── defaults
│   └── main.yml
├── files
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── README.md
├── tasks
│   └── main.yml
├── templates
├── tests
│   ├── inventory
│   └── test.yml
└── vars
    └── main.yml  directories,  files

使用「ansible-galaxy」命令自动创建的role是最全的目录结构,根据需求,可以删除不用的目录文件。

我们以上面创建的「role_A」为例,介绍下各目录文件的作用:

  • tasks : 用于存放role_A的主要任务,也可以添加其他task文件,供main.yaml调用,从而实现更加复杂的部署功能。
  • handlers : 用于存放触发执行( hanlders )的任务。
  • defaults : 用于存放默认变量,优先级最低,变量优先级可参考《ansible基础-变量》。
  • vars : 用于存放变量文件,role_A中任务和模版里用到的变量可以在这里定义。
  • files :用于存放需要拷贝到目的主机的文件,例如,作为「copy」模块src参数的默认根目录。
  • template : 用于存放模版文件,格式为.j2,文件内容要符合Jinja2语法规则,通常使用「template」模块部署服务的配置文件。
  • meta : 用于存放role依赖列表,这个知识点后面会详细阐述。
  • tests : 用于存放测试role本身功能的playbook和主机定义文件,在开发测试阶段比较常用。

role中各个目录下的main.yaml文件很重要,这是ansible默认加载的YAML文件。


role的引用与执行

roles语句引用

比较常用的方法,我们可以使用「roles:」语句引用role :

---
- hosts: node1
  roles:
     - role_A

或者

---
- hosts: node1
  roles:
     - name: role_A
     - name: role_A

或者

---
- hosts: node1
  roles:
     - role: role_A
     - role: role_A

或者使用绝对路径:

---
# playbooks/test.yaml
- hosts: node1
  roles:
    - role: /root/lab-ansible/roles/role_A

引入的同时添加变量参数:

---
# playbooks/test.yaml
- hosts: node1
  roles:
    - role: role_A
      vars:
        name: Maurice
        age: 

引入的同时添加tag参数:

---
# playbooks/test.yaml
- hosts: node1
  roles:
    - role: role_B
      tags:
        - tag_one
        - tag_two
    # 等价于上面
    - { role: role_B, tags:['tag_one','tag_two'] }

根据需求,我们在playbook中引用不同的role,引用后的效果也很好理解:ansible会把role所包含的任务、变量、handlers、依赖等加载到playbook中,顺次执行。

检索路径

上面介绍了使用「roles」语句的引用方法,那么ansible去哪找这些role呢?

在不使用绝对路径的情况下,ansible检索role的默认路径有:

  • 执行ansible-playbook命令时所在的当前目录
  • playbook文件所在的目录及playbook文件所在目录的roles目录
  • 当前系统用户下的~/.ansible/roles目录
  • /usr/share/ansible/roles目录
  • ansible.cfg 中「roles_path」指定的目录,默认值为/etc/ansible/roles目录

注:上面的检索路径是在centos操作系统下测试出来的结果。

举报

相关推荐

0 条评论