自动化运维(十九)Ansible Playbook 的include 和role

       在 Ansible 中,"playbook" 是一种用于定义想要在一组机器上自动执行的操作的配置文件。这些操作可能包括安装软件、复制文件、执行命令等。Ansible 提供了几种方法来组织和重用代码,其中包括使用 include 语句和 roles(角色)。

一、 Include 引用

在 Ansible 中,include 语句允许我们将一个 playbook 分解成多个文件,使得维护更加方便。这种方式可以让我们根据需要动态地引入外部的 playbook 文件。从 Ansible 2.4 开始,include 语句被分为更具体的命令,比如 include_tasksinclude_roleimport_tasks 和 import_role

这些命令它们各有自己的特点和使用场景,具体如下:

1. include_tasks 和 import_tasks

include_tasks:

  • 动态引入:在执行时才决定是否加载和执行任务文件。
  • 支持条件执行:可以根据运行时的条件来决定是否执行。
  • 执行时评估:每次执行 playbook 时都重新评估和加载。

示例:使用 include_tasks 来根据不同的操作系统引入相应的配置任务。

- hosts: alltasks:- name: Install specific package for Debianinclude_tasks: debian.ymlwhen: ansible_os_family == "Debian"- name: Install specific package for RedHatinclude_tasks: redhat.ymlwhen: ansible_os_family == "RedHat"

import_tasks:

  • 静态引入:在 playbook 解析时就加载任务文件。
  • 不支持条件执行:必须在解析时确定是否引入。
  • 解析时评估:只在第一次读取 playbook 时加载。

示例:在 playbook 开始时就决定导入的任务。

- hosts: alltasks:- import_tasks: common.yml
2. include_role 和 import_role

include_role:

  • 动态引入:在执行时才加载角色。
  • 支持条件执行:可以根据运行时的条件来决定是否执行角色。
  • 适用于条件多变的环境:如根据主机的不同特征决定加载的角色。

示例:根据条件动态引入角色。

- hosts: alltasks:- name: Optionally include a roleinclude_role:name: my_optional_rolewhen: ansible_network_os == 'ios'

import_role:

  • 静态引入:在 playbook 解析时就加载角色。
  • 不支持条件执行:必须在解析时确定是否引入。
  • 解析时评估:只在第一次读取 playbook 时加载。

示例:在 playbook 中导入角色,这个角色对所有主机都适用,无需条件判断。

- hosts: allroles:- import_role:name: my_common_role
  • include_ 命令适用于需要根据条件动态决定执行的场景,每次执行 playbook 时都会重新评估是否引入。
  • import_ 命令则适用于那些总是需要执行的任务或角色,它们在解析 playbook 时就确定了,提高了执行效率但牺牲了灵活性。

二、Roles(角色)

Ansible roles 是一种封装特定功能和可重用性的方式,它们允许我们将 Ansible 任务、处理程序、文件、模板和变量组织成独立的结构。使用角色可以使我们的 Ansible playbook 更加整洁、模块化,并易于维护。

1、角色的基本结构

一个典型的角色目录结构如下:

role_name/├── defaults/│   └── main.yml      # 角色的默认变量├── files/            # 角色使用的文件├── handlers/│   └── main.yml      # 角色使用的处理程序├── meta/│   └── main.yml      # 角色的元数据,如角色依赖├── tasks/│   └── main.yml      # 角色的主任务列表├── templates/        # 角色使用的Jinja2模板文件└── vars/└── main.yml      # 角色的其他变量,优先级高于defaults目录中的变量

2、详细说明

  • defaults/main.yml:包含默认变量值,这些变量在角色内使用且可以在 playbook 中轻松重写。
  • vars/main.yml:包含角色使用的变量,这些变量的优先级高于 defaults 文件夹中的变量。
  • tasks/main.yml:包含执行的主任务列表,是角色执行的核心。
  • handlers/main.yml:包含处理程序,通常用于服务的启动、重启操作。当通过任务中的 notify 指令调用时触发。
  • files/:存储角色需要的静态文件,可以直接引用。
  • templates/:存放使用 Jinja2 模板语言编写的文件,通常用于配置文件,其中的变量在执行时由 Ansible 替换。
  • meta/main.yml:存储角色的元数据,如角色依赖关系等信息。

3、角色的使用举例

假设我们需要部署一个 Web 服务器,我们可以创建一个名为 nginx 的角色:

  • 创建角色结构
ansible-galaxy init nginx
  • 编辑 tasks/main.yml

    # tasks/main.yml
    - name: Install nginxapt:name: nginxstate: latest- name: Copy nginx config filetemplate:src: nginx.conf.j2dest: /etc/nginx/nginx.confnotify:- restart nginx
    
  • 编辑 handlers/main.yml

    # handlers/main.yml
    - name: restart nginxservice:name: nginxstate: restarted
    
  • 添加模板文件

    在 templates/ 目录下创建 nginx.conf.j2

  • 定义默认变量

    在 defaults/main.yml 中,你可以定义一些可配置的默认值。

    # defaults/main.yml
    http_port: 80
    max_clients: 200
    
  • 使用角色

    在你的主 playbook 文件中,你可以这样引用 nginx 角色:

    - hosts: web_serversroles:- role: nginxvars:http_port: 8080
    

这样我们就创建了一个 nginx 角色,它可以在任何指定的主机上安装并配置 nginx。通过更改 vars 中的变量,我们可以轻松调整角色行为以适应不同环境的需求。使用角色使我们的 Ansible 代码更加模块化和复用性强,同时也便于管理大型项目。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM性能调优——运行时参数

文章目录 1、JVM参数选项类型1.1、标准参数选项1.2、非标准参数选项1.3、非稳定参数选项 2、添加JVM参数的方式3、常用JVM参数选项4、通过Java代码获取JVM参数5、小结 熟悉JVM参数对于系统调优是非常重要的。比如一个高流量的延迟的电子交易平台,它要求的响应时间都…

头歌机器学习实验 第7次实验 局部加权线性回归

任务描述 本关任务:编写一个利用局部加权计算回归系数的小程序。 相关知识 为了完成本关任务,你需要掌握:1.局部加权算法的思想;2.局部加权的核心算法。 局部加权算法的思想 在局部加权算法中 ,我们给待预测点附近…

【mT5多语言翻译】之六——推理:多语言翻译与第三方接口设计

请参考本系列目录:【mT5多语言翻译】之一——实战项目总览 [1] 模型翻译推理 在分别使用全量参数微调和PEFT微调训练完模型之后,我们来测试模型的翻译效果。推理代码如下: # 导入模型 if conf.is_peft:model AutoModelForSeq2SeqLM.from_pr…

为什么需要SOCKS代理?

在数字化时代🌐,随着网络安全威胁的不断演进和增加,保护个人隐私和数据安全成为了互联网用户的一大挑战🛡️。在寻求增强在线安全和隐私的解决方案时,SOCKS代理成为了一个关键的技术工具🔑。本文旨在详细探…

python如何输入多行

Python中的Input()函数在输入时,遇到回车符,那么一次输入就结束了。这不能满足输入多行文本并且行数也不确定的情形,当然输入空行也是允许的。 方法1:利用异常处理机制实现 lines[] while True:try:lines.append(input())except:…

JSON三种数据解析方法

文章目录 一、什么是JSON数据?二、JSON解析方法2.1、原生解析2.2、Gson解析2.3、FastJson解析 四、总结 一、什么是JSON数据? 先看下面,这里有一段JSON数据,我们根据这段数进行讲解: {"paramz": {"fe…

springboot+vue全栈开发【1.准备工作篇】

目录 前言环境配置关于Maven 前言 为了坚持每天写博客所以开了这个系列~~ 环境配置 1.配置java环境,下载jdk,配置环境变量 这一步有很多教程,不赘述了 2.安装idea 关于Maven Maven是一个项目管理工具,可以对java项目进行自动化…

Harmony与Android项目结构对比

主要文件对应 Android文件HarmonyOS文件清单文件AndroidManifest.xmlmodule.json5Activity/Fragmententryability下的ts文件XML布局pages下的ets文件resresourcesModule下的build.gradleModule下的build-profile.json5gradlehvigor根目录下的build.gradle根目录下的build-profi…

Linux——fork复制进程

1)shell: 在计算机科学中,Shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(command interpreter,命令解析器)。它类似于DOS下的COMMAND.COM和后来的cmd.exe。它接收用户命令&…

【Locust分布式压力测试】

Locust分布式压力测试 https://docs.locust.io/en/stable/running-distributed.html Distributed load generation A single process running Locust can simulate a reasonably high throughput. For a simple test plan and small payloads it can make more than a thousan…

30岁《爱·回家》小花多次得罪高层,正式宣布离巢TVB。

30岁的苏韵姿(Andrea)16年选港姐入行,虽然无三甲名次,但靠着皇后大学戏剧学士学位背景,她很快已有机会入剧组,凭《爱回家之开心速递》熊心如(红衫鱼)一角成功入屋,不过去…

Mongodb入门--头歌实验MongoDB 数据库基本操作

一、数据库创建 任务描述 本关任务:创建数据库。 相关知识 本关评测是在 Linux 环境下进行的,MongoDB 的安装与配置测评系统均已默认完成。 为了完成本关任务,你需要掌握: 1.如何连接数据库; 2.如何创建数据库。 连接数…

flink入门代码

flink入门代码 package com.lyj.sx.flink.wordCount;import org.apache.flink.api.common.functions.FlatMapFunction; import org.apache.flink.api.java.functions.KeySelector; import org.apache.flink.api.java.tuple.Tuple2; import org.apache.flink.configuration.Con…

每天学习一个Linux命令之rpm2cpio

每天学习一个Linux命令之rpm2cpio 在Linux系统中,有许多强大的命令可以帮助我们更好地管理和操作文件。今天我们将学习一个非常有用的命令——rpm2cpio,它可以将RPM包转换为cpio格式,方便我们提取其中的文件。 1. rpm2cpio命令简介 rpm2cp…

双云及多云融合(混合云)

背景:客户对于业务的高可用需求,当发生故障时,业务还能正常使用,如某云机房整体宕机,或云管理服务整体宕掉,导致客户业务不可用,此时,需有业务能顺利切换到灾备云上。 需求&#xf…

[蓝桥杯 2018 国 C] 迷宫与陷阱

题目&#xff1a; 思路&#xff1a; 代码&#xff1a; #include <bits/stdc.h> using namespace std; const int N1e310; char g[N][N];//输入&#xff1a;图的数组 int vis[N][N]; /* 剪枝&#xff1a;记录magic的个数&#xff08;一个点经过两次&#xff0c;magic越大…

【讲解下如何从零基础学习Java】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

[管理者与领导者-157] :如何保持正向思考和积极性思维模式?

目录 一、正向思考 VS 负向思考 二、积极性思维模式 VS 消极思维模式 三、乐观思维 VS 悲观思维 一、正向思考 VS 负向思考 正向思考和负向思考是两种截然不同的思维方式&#xff0c;它们在处理问题、面对挑战和塑造人生态度方面有着显著的不同。 正向思考是一种乐观、积极…

设计模式学习笔记 - 设计模式与范式 -行为型:9.迭代器模式(上):相比直接遍历集合数据,使用迭代器模式有哪些优势?

概述 上篇文章&#xff0c;我们学习了状态模式。状态模式是状态机的一种实现方式。它通过将事件触发的状态转移和动作执行&#xff0c;拆分到不同的状态类中&#xff0c;以此来避免状态机类中的分支判断逻辑&#xff0c;应对状态机类代码的复杂性。 本章&#xff0c;学习另外…

Dude, where’s that IP? Circumventing measurement-based IP geolocation(2010年)

下载地址:https://www.usenix.org/legacy/event/sec10/tech/full_papers/Gill.pdf 被引次数:102 Gill P, Ganjali Y, Wong B. Dude, Wheres That {IP}? Circumventing Measurement-based {IP} Geolocation[C]//19th USENIX Security Symposium (USENIX Security 10). 2010.…