Ansible17:Playbook之tags
简介
在大型项目当中,通常一个playbook会有非常多的task。而我们每次执行这个playbook时,都会将所有task运行一遍。而事实上,在实际使用过程中,我们可能只是想要执行其中的一部分任务而已,并不想把整个playbook完整跑一遍。这个时候就需要用到tags。
通过tags,我们可以给playbook中的某一些任务打上“标签”,而在执行playbook的时候,我们可以通过选定标签的方式指定只执行哪一些任务或者不执行哪一些任务。
为task打tag
下面是一个安装httpd的简单示例:
# cat /etc/ansible/playbook/install_web.yml
- name: configure webservers
hosts: all
remote_user: ansible
tasks:
- name: Install httpd
yum:
name: httpd
state: present
tags: install_httpd
- name: Cofiguration httpd
copy:
src: /root/httpd.conf
dest: /etc/httpd/conf/httpd.conf
tags: conf_httpd
notify:
- restart httpd
- name: Start httpd
service:
name: httpd
state: started
enabled: no
tags: start_httpd
handlers:
- name: restart httpd
service: name=httpd state=restart
在上面的示例中,我们为两个task定义了三个tags:install_httpd
、conf_httpd
以及start_httpd
。
使用tag
执行指定tag的task
有了tags之后,我们就可以只运行playbook中指定标签的task了:
# ansible-playbook --tags="start_httpd" install_web.yml
PLAY [configure webservers] *************************************************************************************************************************************************
TASK [Gathering Facts] ******************************************************************************************************************************************************
ok: [10.1.61.187]
TASK [Start httpd] **********************************************************************************************************************************************************
changed: [10.1.61.187]
PLAY RECAP ******************************************************************************************************************************************************************
10.1.61.187 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
也可以一次指定多个tag执行:
# ansible-playbook --tags="conf_httpd,start_httpd" install_web.yml
PLAY [configure webservers] *************************************************************************************************************************************************
TASK [Gathering Facts] ******************************************************************************************************************************************************
ok: [10.1.61.187]
TASK [Cofiguration httpd] ***************************************************************************************************************************************************
ok: [10.1.61.187]
TASK [Start httpd] **********************************************************************************************************************************************************
ok: [10.1.61.187]
PLAY RECAP ******************************************************************************************************************************************************************
10.1.61.187 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
排除指定tag的task
通过下面的方式可以排除指定了tag的task,即除了指定tag的task不执行,其他task都执行:
# ansible-playbook --skip-tags="install_httpd" install_web.yml
PLAY [configure webservers] *************************************************************************************************************************************************
TASK [Gathering Facts] ******************************************************************************************************************************************************
ok: [10.1.61.187]
TASK [Cofiguration httpd] ***************************************************************************************************************************************************
ok: [10.1.61.187]
TASK [Start httpd] **********************************************************************************************************************************************************
ok: [10.1.61.187]
PLAY RECAP ******************************************************************************************************************************************************************
10.1.61.187 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
执行效果跟上面一样。
查看playbook中的所有tag
可以通过--list-tags
参数列出指定的playbook中所有的tag
# ansible-playbook --list-tags install_web.yml
playbook: install_web.yml
play #1 (all): configure webservers TAGS: []
TASK TAGS: [conf_httpd, install_httpd, start_httpd]
打tag的几种方式
- 为一个任务指定一个标签
这种方式就是上面示例中的方法:
tags: conf_httpd
- 为一个任务指定多个标签
可以通过列表的方式为一个任务指定多个标签:
tags:
- install_httpd
- install_web
tags: ['install_httpd','install_web']
tags: install_httpd,install_web
- 为一个play指定一组标签
当为一个play指定一组标签后,该play下的所有task都会自动继承该标签,各task也可以自定义自己的标签。
- name: configure webservers
hosts: all
remote_user: ansible
tags:
- httpd
tasks:
...
ansible内置tag
除了用户自定义tag,ansible也内置了几个tag,这些tag都包含特殊含义:
always:一旦某个task被打上了always的tag,则无论是playbook的完整执行,还是指定tag执行,不管你指定的tag是啥,该任务总是会被执行。除非明确指定"--skip-tags=always"选项,才不会执行该task。
never:该标签与always正好相反,总是不会执行,除非明确指定"--tags=never"选项。
tagged:在调用时使用
# 所有打了tag的任务都会被执行,包含never tag的除外,没有标签的不会被执行
ansible-playbook --tags tagged install_web.yaml # 所有打了tag的任务都不会被执行,包括always tag也不会被执行
ansible-playbook --skip-tags tagged install_web.yaml
untagged:在调用时使用
# 所有未打tag的任务都会被执行,打了always tag的也会被执行
ansibl-playbook --tags untagged install_web.yaml # 所有未打tag的任务都不会被执行
ansibl-playbook --skip-tags untagged install_web.yaml
all:表示所有任务都会被执行,在默认情况下,不指定任何标签,则使用的就是该标签
Ansible17:Playbook之tags的更多相关文章
- Ansible之Playbook详解、案例
什么是playbook playbooks是一个不同于使用Ansible命令行执行方式的模式,其功能更强大灵活.简单来说,playbook是一个非常简单的配置管理和多主机部署系统,不同于任何已经存在的 ...
- ansible playbook模式及语法
一.什么是playbook及其组成 什么是playbook playbook 翻译过来就是"剧本" playbook的组成 play:定义的是主机的角色 task:定义的是具体执行 ...
- 巨蟒python全栈开发-第11阶段 ansible3_3入门playbook剧本
1.playbook剧本 2.playbook传参 3.setup模块介绍 4.playbook的tags 5.playbook的handlers&&templates模块 6.条件和 ...
- ansible笔记(11):tags的用法
你写了一个很长的playbook,其中有很多的任务,这并没有什么问题,不过在实际使用这个剧本时,你可能只是想要执行其中的一部分任务而已,或者,你只想要执行其中一类任务而已,而并非想要执行整个剧本中的全 ...
- ansible常用命令
一.ansible常用命令 一.ansible命令的常用参数 ansible 默认提供了很多模块来供我们使用.在 Linux 中,我们可以通过 ansible-doc -l 命令查看到当前 ansib ...
- 安全运维中基线检查的自动化之ansible工具巧用
i春秋作家:yanzm 原文来自:安全运维中基线检查的自动化之ansible工具巧用 前几周斗哥分享了基线检查获取数据的脚本,但是在面对上百台的服务器,每台服务器上都跑一遍脚本那工作量可想而知,而且都 ...
- devops工具-Ansible基础
一.Ansible介绍 简介 Ansible使用Python语言开发,是一个配置管理型工具,与之类似的工具还有Puppet.SaltStack.chef等,默认通过SSH协议进行远程命令执行或 ...
- ansible-playbook && Roles && include
先看一个yml文件示例 --- - hosts: webservers #主机组 vars: ##变量设置 http_port: 80 max_clients: 200 remote_user: ro ...
- 运维自动化工具ansible
企业级自动化运维工具应用实战ansible 公司计划在年底做一次大型市场促销活动,全面冲刺下交易额,为明年的上市做准备.公司要求各业务组对年底大促做准备,运维部要求所有业务容量进行三倍的扩容,并搭建出 ...
随机推荐
- 工作笔记--Python自动切换host
修改host代码: #coding:utf-8import os,time pwd = os.path.dirname(__file__) #获取当前文件夹的绝对路径pull_host_cmd = ' ...
- 【转】Python学习---超详细字符串用法大全,好文推荐!
来自:Python编程与实战(微信号:pthon1024),作者:Jerryning 没有办法转,整个复制下来了 本文要点 字符串拼接 拆分含有多种分隔符的字符串 判读字符串a是否以字符串b开头或结尾 ...
- Spring Cloud Eureka详细说明
之前学习了如何配置Eureka注册中心.消费者等,关于更详细的一些常用的配置在这里说明. 1.注册中心的自我保护模式 在我们调试Eureka的注册中心时,访问注册中心页面,常常会看见以下提示. 该提示 ...
- 9.InfluxDB-InfluxQL基础语法教程--LIMIT and SLIMIT 子句
本文翻译自官网,官网地址:(https://docs.influxdata.com/influxdb/v1.7/query_language/data_exploration/) LIMIT和SLIM ...
- nrm : 无法加载文件 C:\Users\TANG\AppData\Roaming\npm\nrm.ps1,因为在此系统上禁止运行脚本。
1.win+s 搜索powershell 以管理身份运行 2.使用set-ExecutionPolicy RemoteSigned命令将计算机上的执行策略更改为 RemoteSigned,输入Y确定 ...
- 初识.netCore以及如何vs2019创建项目和发布
一:什么是.netCore 从图上得知,.NetCore是同.NetFramework一样也是一种框架,并且都是基于.Net Standard Library,前面我们有用过.netFramwork来 ...
- 使用redis实现程序或者服务的高可用
使用redis实现程序或者服务的高可用,就是将某一程序或服务部署在不同服务器上,或者是跨机房部署,当运行服务的服务器挂了之后,其他服务器上的该服务能立马顶上,这里我简单的使用redis实现这一目的. ...
- VUE 直接通过JS 修改html对象的值导致没有更新到数据中去
业务场景 我们在使用vue 编写 代码时,我们有一个 多行文本框控件,希望在页面点击一个按钮 在 文本框焦点位置插入一个 {pk}的数据. 发现插入 这个数据后,这个数据并没有同步到 数据中,但是直接 ...
- vsftpd服务
vsftpd服务 文件传输协议(file transfer protocol,FTP),基于该协议FTP客户端与服务端可以实现共享文件,上传文件,下载文件.ftp基于TCP协议生成一个虚拟的连接,主要 ...
- 其他综合-CentOS7 安装 Jumpserver 跳板机
CentOS7 安装 Jumpserver 跳板机 1.实验描述 搭建 jumpserver 平台,实现有效的运维安全审计.完美做到事先防范,事中控制和事后溯源 2.实验环境 物理机系统:Window ...