《Ansible Playbook扩展:roles角色依赖、角色应用及角色共享》

一、角色依赖

角色依赖关系允许您在使用角色时自动拉入其他角色。

角色依赖是先决条件,而不是真正的依赖。角色没有父/子关系。Ansible加载所有列出的角色,首先运行依赖项下列出的角色,然后运行列出它们的角色。play对象是所有角色的父对象,包括由依赖项列表调用的角色。

角色依赖项存储在meta/main.yml中,此文件应包含要在指定角色之前插入的角色和参数列表。 这个文件期望有一个顶级的数据hash, 使用dependencies键。

# roles/myapp/meta/main.yml
---
dependencies:
  - role: common
    vars:
      some_parameter: 3
  - role: apache
    vars:
      apache_port: 80
  - role: postgres
    vars:
      dbname: blarg
      other_parameter: 12

上述例子中,ansible会首先处理common角色(以及它可能表达的任何依赖),然后继续apache角色,再继续执行postgres角色,最后开始角色自己的任务。

一般情况下,依赖角色任务仅执行一次,且在第一个定义的角色中执行,那么,如何使两个不同的角色执行相同的依赖角色呢?

# 将依赖角色的meta/main.yml文件设置如下参数
allow_duplicates: true

如上例所示,我们将allow_duplicates属性设置为true,表示可以重复调用同一个角色。


1.1、在一个角色中多次依赖一个角色

Ansible只在一个play中执行每个角色一次,即使你多次定义它,除非角色上定义的参数对于每个定义是不同的。例如,Ansible在一个游戏中只运行一次角色foo,就像这样:

---
- hosts: webservers
  roles:
    - foo
    - bar
    - foo

有两个方法可以强制Ansible多次运行一个角色。

方法一、传递不同的参数

如果在每个角色定义中传递不同的参数,ansible会运行运行该角色不止一次。提供不同的变量值与传递不同的角色参数是不同的。对于这种行为,必须使用roles关键字,因为import_role和include_role不接受角色参数。

---
- hosts: webservers
  roles:
    - { role: foo, message: "first" }
    - { role: foo, message: "second" }

或者

---
- hosts: webservers
  roles:
    - role: foo
      message: "first"
    - role: foo
      message: "second"

方法二、使用allow_duplicates: true

在依赖的角色中meta/main.yml文件添加allow_duplicates: true即可。

# playbook.yml
---
- hosts: webservers
  roles:
    - foo
    - foo

# roles/foo/meta/main.yml
---
allow_duplicates: true

1.2、在多个不同角色中依赖一个角色

角色containerd依赖角色,如下所示:

# vim containerd/meta/main.ym
---
dependencies:
  - role: container-engine/containerd-common
  - role: container-engine/runc
  - role: container-engine/crictl
  - role: container-engine/nerdctl

角色docker依赖角色,如下所示:

# vim docker/meta/main.ym
---
dependencies:
  - role: container-engine/containerd-common
  - role: container-engine/docker-storage
    when: docker_container_storage_setup and ansible_os_family == "RedHat"

角色containerd和角色docker都依赖containerd-common角色,所以需要将containerd-common角色中的meta/main.yml文件设置如下内容:

# vim containerd-common/meta/main.yml
---
allow_duplicates: true

依赖文件如果它们在同一目录下存在,或者在默认配置的roles_path中存在,那么可以通过不带任何前缀的名字来引用,否则,需要提供可以定位角色的完整路径。

当表达依赖的时候,能够给依赖传递数据。数据可以是变量、标签、甚至是条件。


总结:整理不易,如果对你有帮助,可否点赞关注一下?

更多详细内容请参考:《Linux运维篇:Linux系统运维指南》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/901.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【计算机二级Python】综合题目

计算机二级python真题 文章目录计算机二级python真题一、简单应用——明星投票二、综合应用题《评奖学金 两问》一、简单应用——明星投票 描述使用字典和列表型变量完成最有人气的明星的投票数据分析。投票信息由附件里的文件vote.txt给出,一行只有一个明星姓名的投票才是有效…

【BLE 5.3无线MCU CH582】1、初识CH582开发板(开箱)

1、认识板子 优点: (1)引脚全部引出; (2)USB下载程序; (3)TYPE-C接口好评; (4)板载连个两个USB口,都可以供电;…

前端性能优化之HTTP缓存

前端缓存 前端缓存可分为两大类:HTTP 缓存和浏览器缓存。 我们今天重点是 HTTP 缓存,下面这张图是前端缓存的一个大致知识点: HTTP 缓存 首先解决困扰绕人们的老大难问题: 一、什么是HTTP缓存? HTTP 缓存会存储与请…

六个实用技巧让你轻松写出优雅的链表代码

文章目录📕前言:如何轻松写出正确的链表代码?📖技巧一:理解指针或引用的含义📖技巧二:警惕指针丢失和内存泄漏📖技巧三:利用哨兵简化实现难度📖技巧四&#x…

HTTP 协议

文章目录1. 前言2. HTTP 协议3. fiddler 的安装与认识4. HTTP 协议报文格式4.1 请求4.2 响应5. 构造 HTTP 请求5.1 基于 form 表单构造 HTTP 请求5.2 基于 ajax 构造 HTTP 请求6. postman7. HTTPS7.1 加密7.2 HTTPS 的工作过程1. 前言 前面几篇文章 , 说了关于 前端…

C++继承[万字详解]

目录 一.继承的介绍 1.1、继承的概念 1.2、继承的定义 1.2.1、定义格式 1.2.2、继承关系和访问限定符 1.2.3、继承基类成员后,在子类中成员访问方式的变化 二.基类和派生类对象赋值转化 三.继承中的作用域 四.派生类的默认成员函数 ★派生类的构造函数 派…

有关pytorch的一些总结

Tensor 含义 张量(Tensor):是一个多维数组,它是标量、向量、矩阵的高维拓展。 创建 非随机创建 1.用数组创建 将数组转化为tensor np.ones([a,b]) 全为1 #首先导入PyTorch import torch#数组创建 import numpy as np anp.arr…

4.类的基本概念

目录 4.1 类的概述 类是一种活动的数据结构 4.2 程序和类:一个快速实例 4.3 声明类 ​4.4 类成员 4.4.1 字段 1.显示和隐式字段初始化 2. 声明多个字段 4.4.2 方法 4.5 创建变量和类的实例 4.6 为数据分配内存 合并这两个步骤 4.7 实例成员 4.8 访问修饰…

2023年天津市逆向re3.exe解析(超详细)

2023年天津市逆向re3.exe解析 1.拖进IDA里进行分析2.动态调试(过程省略了)3.解密加密算法4.输入FLAG 回显成功!1.拖进IDA里进行分析 打开后是这么一个程序,直接找到main函数f5反编译即可,这里要注意程序第一次反编译出的代码会有点问题,需要点进引用的那些其他sub函数里面…

【面试题】闭包是什么?this 到底指向谁?

一通百通,其实函数执行上下文、作用域链、闭包、this、箭头函数是相互关联的,他们的特性并不是孤立的,而是相通的。因为内部函数可以访问外层函数的变量,所以才有了闭包的现象。箭头函数内没有 this 和 arguments,所以…

百度将?百度已!

仿佛一夜之间,创业公司OpenAI旗下的ChatGPT就火遍全球。这是一场十分罕见的科技盛宴。下到普通用户,上到各科技大厂都在讨论ChatGPT的前景,国外的微软、谷歌,国内的百度、腾讯、阿里等等都在布局相关业务。比尔盖茨更是称ChatGPT与…

OSPF*MGRE实验:

OSPF*MGRE 一:实验拓扑 实验目的: IP地址配置如拓扑所示; 路由器配置: ospf-10 [r1]ospf 10 [r1-ospf-10]area 0 [r1-ospf-10-area-0.0.0.0]network 192.168.1.1 0.0.0.0 [r2]ospf 10 [r2-ospf-10]area 10 [r2-ospf-10-area-0.0.…

十大经典排序算法(下)

🍓个人主页:bit.. 🍒系列专栏:Linux(Ubuntu)入门必看 C语言刷题 数据结构与算法 HTML和CSS3 目录 1.6 快速排序 1. 算法步骤 2. 动图演示 3.代码实现 1.7 堆排序 1. 算法步骤 2. 动图演示 3. 代码实现 1.8 计数排…

2023-03-17:使用Go语言和FFmpeg库实现音频重采样解码,并将其保存为PCM格式的文件。

2023-03-17:使用Go语言和FFmpeg库实现音频重采样解码,并将其保存为PCM格式的文件。 答案2023-03-17: 在音视频处理领域,常常需要对音频进行重采样和解码,以便于后续的处理和分析。本文将介绍如何使用Go语言及FFmpeg库…

【C++学习】类和对象(中)一招带你彻底了解六大默认成员函数

前言:在之前,我们对类和对象的上篇进行了讲解,今天我们我将给大家带来的是类和对象中篇的学习,继续深入探讨【C】中类和对象的相关知识!!! 目录 1. 类的6个默认成员函数 2. 构造函数 2.1概念介…

【黑马JVM(2)】垃圾回收

JVM垃圾回收如何判断对象可以回收引用计数法可达性分析算法四种引用垃圾回收算法标记-清除标记-整理标记-复制分代垃圾回收相关VM参数垃圾回收器串行吞吐量优先响应时间优先G1垃圾回收阶段Young CollectionYoung Collection跨代引用Young CollectionCMRemark-SATBMixed Collect…

第三代api自动化测试框架使用教程(pytest+allure+sql+yaml)

使用教程一、配置1、环境配置2、框架配置3、启动入口二、用例编写1、用例模板2、参数依赖写法2、函数(方法插件)写法3、接口上传文件和表单参数4、接口上传json参数5、接口无数据填写6、code断言7、body断言7、json断言8、sql断言9、完整断言写法&#x…

TCP UDP详解

文章目录TCP UDP协议1. 概述2. 端口号 复用 分用3. TCP3.1 TCP首部格式3.2 建立连接-三次握手3.3 释放连接-四次挥手3.4 TCP流量控制3.5 TCP拥塞控制3.6 TCP可靠传输的实现3.7 TCP超时重传4. UDP5.TCP与UDP的区别TCP UDP协议 1. 概述 TCP、UDP协议是TCP/IP体系结构传输层中的…

手把手的教你安装PyCharm --Pycharm安装详细教程(一)(非常详细,非常实用)

简介 Jetbrains家族和Pycharm版本划分: pycharm是Jetbrains家族中的一个明星产品,Jetbrains开发了许多好用的编辑器,包括Java编辑器(IntelliJ IDEA)、JavaScript编辑器(WebStorm)、PHP编辑器&…

C/C++考试必考题目(含答案*仅供参考)

今天继续来分享几个C经常考试的几道题目,大家快快拿去,赶紧做一下 目录 (小事一桩)约瑟夫问题 discreb input output 效果展示: 1、 猜价格游戏 2、 计算 N 以内的所有素数 3、 袋中取球 4、 乘法口诀表 …
最新文章