Ansible如何控制playbook的执行顺序

对 Ansible 剧本资源打标签

在处理大型或复杂的剧本时,如果只希望运行部分剧本或部分任务。可以将标签应用于可能要跳过或运行的特定资源。

通过标签来标记资源,在资源上使用tags关键字,然后是要应用的标记列表。在Ansible中tags标记可用于下列资源:

  • 每个任务,这是使用标签的最常见方式之一。
  • 整个剧本,在剧本级别使用标签指令。
  • 标记include_tasks任务。include_tasks加载的所有任务都与此标签关联。
  • 角色,角色中的所有任务都与此标签关联。
  • 任务块,块中的所有任务都与此标签关联。

看一个Demo,上面的标记依次来看体验下。在这之前,先准备一个角色,角色做一个echo的动作,

$ansible-galaxy  init tag_role --init-path=roles
- tag_role was created successfully
$ansible-galaxy  list | grep tag
- tag_role, (unknown version)
$cat roles/tag_role/tasks/main.yml
---
# tasks file for tag_role
- name: tags rolesshell: echo 'tasks  for tag_role'

编写一个剧本,在不同剧本资源执行块打上标签

---
- name: tags Demo 1hosts: servera# 标记整个剧本tags:- play-tag-1roles:- role: tag_role# 标记角色tags:- role-tagstasks:- name: task 1 tagshell: echo 'tags to task 1'# 标记每个任务tags:- task-tags-1- name: include or import a  tasks fileinclude_tasks:file: tasks_file# 标记include_tasks任务  tags:- include-import- block:- name: task 1 in blockshell: echo 'task 1 in block'- name: task 2 in blockshell: echo 'task 2 in block'#  标记任务块  tags:- block-tags
- name: tags Demo 2hosts: servera# 标记整个剧本tags:- play-tag-2tasks:- name: task 2 tagshell: echo 'tags to task 2'tags:- task-tag-2

执行上面编写剧本,默认情况下打了标签,如果没有显示的指令或者设置特殊的标签,剧本默认依旧按照没打标签的顺序执行

$ansible-playbook tags.yaml
PLAY [tags Demo 1] ************************************************************************************
TASK [Gathering Facts] ********************************************************************************
ok: [servera]
TASK [tag_role : tags roles] **************************************************************************
changed: [servera]
TASK [task 1 tag] *************************************************************************************
changed: [servera]
TASK [include or import a  tasks file] ****************************************************************
included: /home/student/DO447/labs/task-execution/tasks_file for servera
TASK [task 1] *****************************************************************************************
changed: [servera]
TASK [task 2] *****************************************************************************************
changed: [servera]
TASK [task 1 in block] ********************************************************************************
changed: [servera]
TASK [task 2 in block] ********************************************************************************
changed: [servera]
PLAY [tags Demo 2] ************************************************************************************
TASK [Gathering Facts] ********************************************************************************
ok: [servera]
TASK [task 2 tag] *************************************************************************************
changed: [servera]
PLAY RECAP ********************************************************************************************
servera                    : ok=10   changed=7    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
$

管理标记的资源

要列出 Playbook 中的所有标记,使用–list-tags选项

$ansible-playbook tags.yaml  --list-tagsplaybook: tags.yamlplay #1 (servera): tags Demo 1        TAGS: [play-tag-1]TASK TAGS: [block-tags, include-import, play-tag-1, role-tags, task-tags-1]play #2 (servera): tags Demo 2        TAGS: [play-tag-2]TASK TAGS: [play-tag-2, task-tag-2]
$

可以看到,上面的剧本的标签构成:

  • 剧本tags Demo 1 包含标签TASK TAGS: [block-tags,include-import, play-tag-1, role-tags, task-tags-1]
  • 剧本tags Demo 2 包含标签play-tag-2, task-tag-2

当希望运行特定的剧本资源时,给对应的资源标记打标签,然后使用ansible-playbook运行playbook时,添加–tags选项来筛选 playbook 仅运行带有特定标签的play 或任务。

$ansible-playbook tags.yaml  --tags=play-tag-2
PLAY [tags Demo 1] *************************************************************************************************
PLAY [tags Demo 2] *************************************************************************************************
TASK [Gathering Facts] *********************************************************************************************
ok: [servera]
TASK [task 2 tag] **************************************************************************************************
changed: [servera]
PLAY RECAP *********************************************************************************************************
servera                    : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  

运行指令里添加了 --tags=play-tag-2,即只运行剧本tags Demo 2,当需要运行多个标签时,之间逗号隔开

$ansible-playbook tags.yaml  --tags=block-tags,role-tags
PLAY [tags Demo 1] *************************************************************************************************
TASK [tag_role : tags roles] ***************************************************************************************
changed: [servera]
TASK [task 1 in block] *********************************************************************************************
changed: [servera]
TASK [task 2 in block] *********************************************************************************************
changed: [servera]
PLAY [tags Demo 2] *************************************************************************************************
PLAY RECAP *********************************************************************************************************
servera                    : ok=3    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
$

当希望运行大多数剧本资源,个别剧本资源不运行,可以在运行ansible-playbook命令时,使用–skip-tags选项跳过带有特定标签的任务。

$ansible-playbook tags.yaml  --list-tagsplaybook: tags.yamlplay #1 (servera): tags Demo 1        TAGS: [play-tag-1]TASK TAGS: [block-tags, include-import, play-tag-1, role-tags, task-tags-1]play #2 (servera): tags Demo 2        TAGS: [play-tag-2]TASK TAGS: [play-tag-2, task-tag-2]      
$ansible-playbook tags.yaml  --skip-tags play-tag-1
PLAY [tags Demo 1] *************************************************************************************************
PLAY [tags Demo 2] *************************************************************************************************
TASK [Gathering Facts] *********************************************************************************************
ok: [servera]
TASK [task 2 tag] **************************************************************************************************
changed: [servera]
PLAY RECAP *********************************************************************************************************
servera                    : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  
$

特殊的标签

如果有些剧本资源,你希望它始终运行,或是希望它始终不运行,即使在你使用tags、skip-tags指定标签的情况下,Ansible 这两种场景中提供了特殊标记:

  • always:带有 always 标记的资源始终都会运行,除非明确指定–skip-tags always选项。
  • never:带有 never 特殊标记的资源不会运行,除非明确指定–tags never选项。

看一个Demo

$cat tags-all.yaml
---
- name: tags Demo 1hosts: serveratags:- play-tag-1- neverroles:- role: tag_roletags:- role-tagstasks:- name: task 1 tagshell: echo 'tags to task 1'tags:- task-tags-1- name: include or import a  tasks fileinclude_tasks:file: tasks_filetags:- include-import- block:- name: task 1 in blockshell: echo 'task 1 in block'- name: task 2 in blockshell: echo 'task 2 in block'tags:- block-tags
- name: tags Demo 2hosts: serveratags:- alwaystasks:- name: task 2 tagshell: echo 'tags to task 2'

可以看到剧本1设置never标签,所以默认总不会执行,剧本2设置always,所以默认总会执行

$ansible-playbook  tags-all.yaml
PLAY [tags Demo 1] *************************************************************************************************
PLAY [tags Demo 2] *************************************************************************************************
TASK [Gathering Facts] *********************************************************************************************
ok: [servera]
TASK [task 2 tag] **************************************************************************************************
changed: [servera]
PLAY RECAP *********************************************************************************************************
servera                    : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
$

执行输出可以看到,剧本1没有执行,剧本2默认执行,这里,可能有小伙伴会说,如果我希望打标签的资源全部执行或者全部不执行,但是我的标签太多了,都写上很麻烦,况且我还有一些没有打标签的任务,我应该如何处理,Ansible在这些场景中提供了一些指令参数。

命令行指定标签时的特定参数:

  • tagged 标记将运行任何带有显式标记的资源
  • untagged 标记将运行不带有显式标记的资源
  • all 参数将包括 Play 中的所有任务,无论是否带有标记,这是默认行为。

在来看看Demo

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

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

相关文章

1-4.时间序列数据建模流程范例

文章最前: 我是Octopus,这个名字来源于我的中文名–章鱼;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github ;这博客是记录我学习的点点滴滴,如果您对 Python、Java、AI、算法有兴趣,可以关注我的…

信息学奥赛初赛天天练-41-CSP-J2021基础题-n个数取最大、树的边数、递归、递推、深度优先搜索应用

PDF文档公众号回复关键字:20240701 2021 CSP-J 选择题 单项选择题(共15题,每题2分,共计30分:每题有且仅有一个正确选项) 4.以比较作为基本运算,在N个数中找出最大数,最坏情况下所需要的最少比…

我在中东做MCN,月赚10万美金

图片|Photo by Ben Koorengevel on Unsplash ©自象限原创 作者丨程心 在迪拜购物中心和世界最高建筑哈利法塔旁的主街上,徐晋已经“蹲”了三个小时,每当遇到穿着时髦的年轻男女,他都会上前询问,有没有意愿成为…

【计算机网络】常见的网络通信协议

目录 1. TCP/IP协议 2. HTTP协议 3. FTP协议 4. SMTP协议 5. POP3协议 6. IMAP协议 7. DNS协议 8. DHCP协议 9. SSH协议 10. SSL/TLS协议 11. SNMP协议 12. NTP协议 13. VoIP协议 14. WebSocket协议 15. BGP协议 16. OSPF协议 17. RIP协议 18. ICMP协议 1…

网页自动化测试开发中记录pytest

1切换cmd文件目录C:\Users\14600>D: D:\>cd D:\worksoftware D:\worksoftware>2单个py文件打包成.exe文件1.pyinstaller -F -c (项目主文件)test_01shouye.py 该路径下存在文件名,主项目文件 test_01shouye.py 2.执行spec文件: pyinstaller -F …

C语言部分复习笔记

1. 指针和数组 数组指针 和 指针数组 int* p1[10]; // 指针数组int (*p2)[10]; // 数组指针 因为 [] 的优先级比 * 高,p先和 [] 结合说明p是一个数组,p先和*结合说明p是一个指针 括号保证p先和*结合,说明p是一个指针变量,然后指…

Web2Code :网页理解和代码生成能力的评估框架

多模态大型语言模型(MLLMs)在过去几年中取得了爆炸性的增长。利用大型语言模型(LLMs)中丰富的常识知识,MLLMs在处理和推理各种模态(如图像、视频和音频)方面表现出色,涵盖了识别、推…

系统中非功能性需求的思考

概要 设计系统时不仅要考虑功能性需求,还要考虑一些非功能性需求,比如: 扩展性可靠性和冗余安全和隐私服务依赖SLA要求 下面对这5项需要考虑的事项做个简单的说明 1. 可扩展性 数据量增长如何扩展? 流量增长如何扩展&#xf…

【LLM教程-llama】如何Fine Tuning大语言模型?

今天给大家带来了一篇超级详细的教程,手把手教你如何对大语言模型进行微调(Fine Tuning)!(代码和详细解释放在后文) 目录 大语言模型进行微调(Fine Tuning)需要哪些步骤? 大语言模型进行微调(Fine Tuning)训练过程及代码 大语言…

VuePress介绍

从本文开始,动手搭建自己的博客!希望读者能跟着一起动手,这样才能真正掌握。 ‍ VuePress 是什么 VuePress 是由 Vue 作者带领团队开发的,非常火,使用的人很多;Vue 框架官网也是用了 VuePress 搭建的。即…

000.二分查找算法题解目录

000.二分查找算法题解目录 69. x 的平方根(简单)

4PCS点云配准算法实现

4PCS点云配准算法的C实现如下&#xff1a; #include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> #include <pcl/common/common.h> #include <pcl/common/distances.h> #include <pcl/common/transforms.h> #in…

唯一ID:UUID 介绍与 google/uuid 库生成 UUID

UUID 即通用唯一识别码&#xff0c;是一种用于计算机系统中以确保全局唯一性的标识符。其标准定义于 RFC 4122 文档中。标准形式包含 32 个 16 进制数字&#xff0c;以连字符切割为五组&#xff0c;格式为 8-4-4-4-12&#xff0c;总共 36 个字符。&#xff08;形如, d169aa7f-4…

php 通过vendor文件 生成还原最新的composer.json

起因&#xff1a;因为历史原因&#xff0c;在本项目中composer.json基本算废了&#xff0c;没法直接使用composer管理扩展&#xff0c;今天尝试修复一下composer.json。 历史文件&#xff0c;可以看出来已经很久没有维护了&#xff0c;我们主要是恢复require的信息 {"na…

K8s节点维护流程

用途 用于下线异常节点、集群缩容等 操作步骤 1. 查看节点名称 先确认节点的名称 kubectl get node -o wide2. 设置节点不可调度 设置节点不可调度状态&#xff0c;禁止新的pod调度到该节点上 kubectl cordon ${node_name}3. 剔除节点上运行的pod&#xff08;生产环境慎…

Spring Boot中集成Redis实现缓存功能

Spring Boot中集成Redis实现缓存功能 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入探讨如何在Spring Boot应用程序中集成Redis&#xff0c;实现…

AP无法上线原因分析及排障

一、AP未分配到IP地址 如果遇到AP无法上线问题&#xff0c;可以检查下AP是否分配到IP地址。AP获取IP地址有两种方式&#xff1a;静态方式&#xff1a;登录到AP设备&#xff0c;手工配置IP地址&#xff0c;该方式操作起来比较麻烦&#xff0c;不推荐使用&#xff1b;DHCP方式&am…

基于CNN的股票预测方法【卷积神经网络】

基于机器学习方法的股票预测系列文章目录 一、基于强化学习DQN的股票预测【股票交易】 二、基于CNN的股票预测方法【卷积神经网络】 文章目录 基于机器学习方法的股票预测系列文章目录一、CNN建模原理二、模型搭建三、模型参数的选择&#xff08;1&#xff09;探究window_size…

下代iPhone或回归可拆卸电池,苹果这操作把我看傻了

刚度过一个愉快的周末&#xff0c;苹果又双叒叕摊上事儿了。 iPhone13 系列被曝扎堆电池鼓包了。 早在去年&#xff0c;就有 iPhone13 和 iPhone14 用户反馈过类似的问题&#xff0c;表示在手机仅仅使用了一年多的时间就出现了电池鼓包的情况&#xff0c;而且还把屏幕给撑起来了…

舞会无领导:一种树形动态规划的视角

没有上司的舞会 Ural 大学有 &#x1d441; 名职员&#xff0c;编号为1∼&#x1d441;。 他们的关系就像一棵以校长为根的树&#xff0c;父节点就是子节点的直接上司。 每个职员有一个快乐指数&#xff0c;用整数 &#x1d43b;&#x1d456; 给出&#xff0c;其中1≤&…