一、创建角色目录结构

1、角色创建流程

1️⃣:在Ansible中创建角色不需要特别的开发工具。创建和使用角色包含三个步骤:

  1. 创建角色目录结构
  2. 定义角色内容
  3. playbook中使用角色

2、角色目录创建说明

1️⃣:默认情况下AnsibleAnsible Playbook所在目录的roles子目录中查找角色。这样,用户可以利用playbook和其他支持文件存储角色

2️⃣:如果Ansible无法在该位置找到角色,它会按照顺序在Ansible配置设置roles_path所指定的目录中查找

  • 此变量包含要搜索的目录的冒号分隔列表。此变量的默认值为:

    ~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles
  • 例如:在/etc/ansible/ansible.cfg文件中添加roles_path(以冒号分隔)
    [root@localhost ~]# grep roles_path /etc/ansible/ansible.cfg
    roles_path = ~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles  

3️⃣:这允许用户将角色安装到由多个项目共享的系统上。

  • 例如,用户可能将自己的角色安装在自己的主目录下的~/.ansible/roles子目录中,而系统可能将所有用户的角色安装在/usr/share/ansible/roles目录中

3、角色各目录说明

1️⃣:README.md提供人类可读的基本角色描述、有关如何使用该角色的文档和示例,以及其发挥作用所需要满足的任何非Ansible要求

2️⃣:meta子目录包含一个main.yml文件,该文件指定有关模块的作者、许可证、兼容性和依赖项的信息

3️⃣:files子目录包含固定内容的文件,而templates子目录则包含使用时可由角色部署的模板

4️⃣:其他子目录中可以包含main.yml文件,它们定义默认的变量值、处理程序、任务、角色元数据或变量,具体取决于所处的子目录

5️⃣:注意

如果某一子目录存在但为空,如本例中的handlers,它将被忽略。如果某一角色不使用功能,则其子目录可以完全省略。例如,本例中的vars子目录已被省略

二、创建角色框架

1、角色框架构建

1️⃣:ansible-galaxy命令行工具可用于管理Ansible角色,包括新角色的创建。用户可以运行ansible-galaxy init来创建新角色的目录结构(init:初始化

2️⃣:指定角色的名称作为命令的参数,该命令在当前工作目录中为新角色创建子目录

  • 演示实例:创建一个httpd角色

    [root@localhost project]# ls
    playbook.yaml
    [root@localhost project]# ansible-galaxy init httpd
    - Role httpd was created successfully
    [root@localhost project]# ls
    httpd playbook.yaml
    [root@localhost project]# tree httpd/
    httpd/
    ├── defaults
    │   └── main.yml
    ├── files
    ├── handlers
    │   └── main.yml
    ├── meta
    │   └── main.yml
    ├── README.md
    ├── tasks
    │   └── main.yml
    ├── templates
    ├── tests
    │   ├── inventory
    │   └── test.yml
    └── vars
    └── main.yml 8 directories, 8 files
    //创建httpd目录后,会自动创建一些示例的文件

三、定义角色内容

1、创建角色内容

  • 演示实例:以上面创建的httpd角色目录结构

    • 1、在file目录中创建需要copy的文件

      [root@localhost project]# ls httpd/files/
      dvd.repo
    • 2、在templates目录中创建模板文件
      [root@localhost project]# cat httpd/templates/httpd.conf.j2
      <VirtualHost {{ anisble_facts['default_ipv4']['address'] }}:{{ port }}>
      DocumentRoot "/var/www/html/{{ dir_name }}"
      ErrorLog "/var/log/httpd/{{ dir_name }}-error_log"
      CustomLog "/var/log/httpd/{{ dir_name }}-access_log" common
      </VirtualHost>
    • 3、在vars目录下床架变量文件
      [root@localhost project]# cat httpd/vars/main.yml
      ---
      # vars file for httpd
      port: 8080
      dir_name: sharedir
    • 4、在tasks目录中床架执行文件
      [root@localhost project]# cat httpd/tasks/main.yml
      ---
      - name: copy dvd.repo
      copy:
      src: ../files/dvd.repo
      dest: /etc/yum.repos.d/dvd.repo - name: sent template
      template:
      src: ../templates/httpd.conf.j2
      dest: /etc/httpd/conf.d/httpd.conf

其他的我就不一一举例了,说白了就是在每个对应的目录下,写入每个YAML文件

四、角色内容开发推荐做法

1、模块化编写

1️⃣:角色允许以模块化方式编写playbook。为了最大限度地提高新开发角色的效率,请考虑在角色开发中采用以下推荐做法:

  1. 在角色自己的版本控制存储库中维护每个角色。Ansible很适合使用基于git的存储库
  2. 角色存储库中不应存储敏感信息,如密码或SSH密钥。敏感值应以变量的形式进行参数化,其默认值应不敏感。
  3. 使用角色的playbook负责通过Ansible Vault变量文件、环境变量或其他ansible-playbook选项定义敏感变量。
  4. 使用ansible-galaxy init启动角色,然后删除不需要的任何目录和文件
  5. 创建并维护README.mdmeta/main.yml文件,以记录用户的角色的用途、作者和用法
  6. 让角色侧重于特定的用途或功能。可以编写多个角色,而不是让一个角色承担许多任务
  7. 经常重用和重构角色。避免为边缘配置创建新的角色。如果现有角色能够完成大部分的所需配置,请重构现有角色以集成新的配置方案
  8. 使用集成和回归测试技术来确保角色提供所需的新功能,并且不对现有的playbook造成问题

五、定义角色依赖项

1、角色依赖

1️⃣:角色依赖项使得角色可以将其他角色作为依赖项包含在内

  • 演示实例:一个定义文档服务器的角色可能依赖于另一个安装和配置web服务器的角色。依赖关系在角色目录层次结构中的meta/main.yml文件内定义

    [root@localhost project]# cat httpd/meta/main.yml
    ---
    - name: dependen role
    dependencies:
    - role: apache
    port: 8080
    - role: postgres
    dbname: serverlist
    admin_user: felix

2️⃣:默认情况下,角色仅作为依赖项添加到playbook中一次。若有其他角色也将它作为依赖项列出,它不会再次运行

  • 此行为可以被覆盖,将meta/main.yml文件中的allow_duplicates变量设置为yes即可

六、在playbook中使用角色

1、在playbook中引用角色

1️⃣:要访问角色,可在playroles:部分引用它

[root@localhost project]# cat playbook.yaml
---
- hosts: all
roles:
- httpd

这里可以不用加roles,默认情况下,Ansible会在Playbook所在目录的roles子目录中查找角色

七、通过变量更改角色行为

1、角色中变量优先级

1️⃣:如果通过以下方式定义了相同的变量,则角色的defaults目录中定义的变量的值将被覆盖

  1. 在清单文件中定义,作为主机变量或组变量
  2. 在playbook项目的group_vars或host_vars目录下的YAML文件中定义
  3. 作为变量嵌套在play的vars关键字中定义
  4. 在play的roles关键字中包含该角色时作为变量定义

总结:在httpd/vars目录下定义的变量的优先级最高;/httpd/vars目录下的变量会覆盖/httpd/defaults目录下的定义的变量

2️⃣:重要:

  • 在play中使用角色变量时,变量的优先顺序可能会让人困惑
  • 几乎任何其他变量都会覆盖角色的默认变量,如清单变量、playvars变量,以及内嵌的角色参数等。
  • 较少的变量可以覆盖角色的vars目录中定义的变量。
  • 事实、通过include_vars加载的变量、
  • 清单变量和playvars无此能力。这非常重要,因为它有助于避免用户的play意外改变角色的内部功能。注册的变量和角色参数是其中一些具备这种能力的变量
  • 不过,正如上述示例中最后一个所示,作为角色参数内嵌声明的变量具有非常高的优先级,它们可以覆盖角色的vars目录中定义的变量。
  • 如果某一角色参数的名称与playvars或角色vars中设置的变量或者清单变量或playbook变量的名称相同,该角色参数将覆盖另一个变量

Ansible_创建角色_role的更多相关文章

  1. 在vCenter5.5中为用户创建角色,管理虚拟机

    在vSphere的使用中,如有只有vCenter+ESXi节点的两级配置,为了达到多租户管理及权限分配,可以在vCenter5.5中为用户创建角色,管理虚拟机 1.以管理员身份登陆vCenter 2. ...

  2. oracle数据库如何创建角色并对角色授予权限

    目标: 1.创建角色test1_role, 授予create session 权限 2.创建角色test2_role,授予create procedure, create sequence, crea ...

  3. Ansible_自动化运维《Ansible之初识-1》

    1.Ansible简介 1.1 Ansible介绍 Ansible 是一个简单的自动化运维管理工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fab ...

  4. MongoDB安全:创建角色(User-Defined Roles)

    MongoDB已经定义了一些内建角色,同时还提供了用户自定义角色的功能,以满足用户千差万别的需求. 官文User-Defined Roles中对其有简略介绍,但要熟悉怎么创建角色,还需要了解下面的这些 ...

  5. SQL Server 创建角色和账号

    /*--示例说明         示例在数据库pubs中创建一个拥有表jobs的所有权限.拥有表titles的SELECT权限的角色r_test     随后创建了一个登录l_test,然后在数据库p ...

  6. OpenVAS漏洞扫描基础教程之创建用户组与创建角色

    OpenVAS漏洞扫描基础教程之创建用户组与创建角色 OpenVAS创建用户组 用户组就是指许多个用户的组合.在网络中,各个访问网络的用户的权限可能各不相同.所以,可以通过将具体相同权限的用户划为一组 ...

  7. 第四章vs2107 代码实际运用-后台权限管理讲解 创建角色

    先看一下项目整体结构图: 实体类和数据操作都在前面用TT模板批量生产了.下面开始介绍权限代码这块的逻辑. 创建角色开始. 1. 角色的创建我们用到三张表 A.menuinfo(菜单表)  role(角 ...

  8. 【Oracle】创建角色

    任务:创建角色 1)创建角色sse_role,授予create session 权限 2)创建角色tblo_role,授予CREATE PROCEDURE, CREATE SEQUENCE, CREA ...

  9. 理解 Oracle 多租户体系中(12c,18c,19c)创建角色作用域范围

    本篇探讨以下几个问题:你可提前猜测下面6个场景语句中,哪几个可以成功创建角色? 1. 在CDB级别中创建公共角色,不带 container 子句的效果: 2. 在CDB级别中创建公共角色,带 cont ...

随机推荐

  1. Python函数参数和注解是什么

    四种参数 Python函数func定义如下: def func(first, *args, second="Hello World", **kwargs): print(first ...

  2. Spring Boot 轻量替代框架 Solon 1.3.20 发布

    Solon 是一个微型的Java开发框架.项目2018年启动,参考过大量前人作品:内核0.1m的身材,超高的跑分,以及良好的使用体验.支持:RPC.REST API.MVC.WebSocket.Soc ...

  3. Python基础(十三):for循环

    对于一个序列,比如说:列表.字符串,有时候我们需要获取其中的每一个元素,然后执行某个操作,此时就需要借助于for循环. for循环语法结构 for循环的语法结构如下,这里大家必须清楚一点,for循环后 ...

  4. Facebook资深工程师带你学Python核心技术

    人工智能时代下,Python毫无疑问是最热的编程语言.在推开Python的大门后却发现,Python入门容易但精通却不易. 想要精通这门语言,必须真正理解知识概念,比如适当从源码层面深化认知,然后熟悉 ...

  5. xctf - forgot

    xctf - forgot check一下,开启了NX 拉入ida中,能找到: __isoc99_scanf,能够无限输入, 循环中,读取32个scanf的字符并进行判断,最后根据结果调用存在栈上的函 ...

  6. OSPF 综合实验

    实验拓扑 实验需求 1.按照图示配置好 IP 地址,PC1 网关指向为 R8 2.OSPF 划分为 4 个区域,其中 192.168.0.0/24,192.168.1.0/24,192.168.2.0 ...

  7. 根据数据源自定义字段实现动态导出Excel

    前言 最近遇到了一个需求,需要导出各种订单数据,可能是因为懒吧,不想重新写查询然后导出数据:就有了下边的这些操作了. 具体实现方式 1),定义一个泛型类来接收我们要导出的数据源,(需要EPPlus包) ...

  8. hdu4454 三分 求点到圆,然后在到矩形的最短路

    题意:       求点到圆,然后在到矩形的最短路. 思路:       把圆切成两半,然后对于每一半这个答案都是凸性的,最后输出两半中小的那个就行了,其中有一点,就是求点到矩形的距离,点到矩形的距离 ...

  9. UVA11729突击战(汇报和执行任务)

    题意:       你是一个长官,有一些士兵要跟你先汇报任务后在去执行任务,每次只能接受一个人的汇报,但是每一时刻可以有多个士兵在执行任务,问所有任务执行完要的最小时间. 思路:        按执行 ...

  10. Windows PR提权

    目录 提权利用的漏洞 PR提权 提权利用的漏洞 Microsoft Windows RPCSS服务隔离本地权限提升漏洞 RPCSS服务没有正确地隔离 NetworkService 或 LocalSer ...