ansible进阶(六)-tags-给任务打标签

概述

如果你有一个很大的剧本,那么只运行它的特定部分而不是运行整个剧本可能会很有用。您可以使用 Ansible 标签来做到这一点。使用标签执行或跳过选定的任务是一个两步过程:

  1. 将标签添加到您的任务中,可以单独添加,也可以使用从block、play、roles或import中继承的标签。
  2. 运行剧本时选择或跳过标签。

特殊标签:always、never

Ansible 为特殊行为保留了两个标签名称:always 和 never。

如果您将always标签分配给tasks或play,Ansible 将始终运行该tasks或play,除非执行时,显示地跳过: --skip-tags always

如果您将never标签分配给任务或播放,Ansible 将跳过该任务或播放,除非执行时,显示地执行:--tags never

使用tags添加标签

单个task添加tags

tasks:
- name: Install the servers
  ansible.builtin.yum:
    name:
    - httpd
    - memcached
    state: present
  tags:
  - packages
  - webservers

- name: Configure the service
  ansible.builtin.template:
    src: templates/src.j2
    dest: /etc/foo.conf
  tags:
  - configuration

标签继承-play、block、roles、import任务添加tags

给play、block、roles层级添加tags标签,层级下的所有tasks都会继承标签。

1.play添加标签

- hosts: all
  tags: ntp
  tasks:
  - name: Install ntp
    ansible.builtin.yum:
      name: ntp
      state: present

- hosts: fileservers
  tags: filesharing
  tasks:
  ...

2.block添加标签

- hosts: all
  tasks:
  - name: ntp tasks
    tags: ntp
    block:
    - name: Install ntp
      ansible.builtin.yum:
        name: ntp
        state: present

    - name: Enable and run ntpd
      ansible.builtin.service:
        name: ntpd
        state: started
        enabled: yes

3.roles添加标签

roles:
  - role: webserver
    vars:
      port: 5000
    tags: [ web, foo ]

4.import添加标签

静态导入 import_role、import_tasks设置tags,其中的所有tasks也会继承标签

---
- hosts: webservers
  tasks:
    - name: Import the foo role
      import_role:
        name: foo
      tags:
        - bar
        - baz

    - name: Import tasks from foo.yml
      import_tasks: foo.yml
      tags: [ web, foo ]

动态重用include设置标签

非继承方式

标签继承不适用于动态重用的include_role和include_tasks。默认情况下tags只应用于include_*本身。

---
# file: roles/common/tasks/main.yml

- name: Dynamic re-use of database tasks
  include_tasks: db.yml
  tags: db

继承方式-使用block或apply关键字

默认情况下,动态重用(include_*)的标签只应用于其本身,而不会集成到它包含的tasks上。

一般情况下,不建议playbook中既有include_*,又有import_*,这样会引起难以诊断的错误。如果既想使用include_*,也要实现标签的继承的话,有两种解决办法:1.使用block;2.使用apply关键字。

使用blcok

- block:
   - name: Include tasks from db.yml
     include_tasks: db.yml
  tags: db

使用apply关键字

- name: Apply the db tag to the include and to all tasks in db.yaml
  include_tasks:
    file: db.yml
    # adds 'db' tag to tasks within db.yml
    apply:
      tags: db
  # adds 'db' tag to this 'include_tasks' itself
  tags: db

选择性标记任务

如果include_*添加标签tags: mytag,其中的tasks也添加标签tags: mytag。那么执行ansible-playbook时指定运行mytag标签,则可以执行mytag标签相关的include_*中包含的有mytag标签的任务。

ansible-playbook -i hosts myplaybook.yml --tags "mytag"

执行ansible-playbook关于tags参数

指定或跳过标签

ansible-playbook提供了五个与标签相关的命令行选项:

  • --tags all                        运行所有任务,忽略标签(默认行为)
  • --tags [tag1, tag2]         只运行带有标签tag1或标签的任务tag2
  • --skip-tags [tag3, tag4]  运行除带有标签tag3或标签的任务之外的所有任务tag4
  • --tags tagged                 只运行至少有一个标签的任务
  • --tags untagged             只运行没有标签的任务
#要在很长的剧本中仅运行configuration和packages标记的任务块
ansible-playbook example.yml --tags "configuration,packages"

#要运行除packages标记的任务之外的所有任务
ansible-playbook example.yml --skip-tags "packages"

查看执行的tags或tags相关任务详情

  • --list-tags     生成可用标签列表
  • --list-tasks   与"--tags tagname"、"--skip-tags tagname"一起使用时,生成标记任务的预览
#查看playbook中有哪些tags
ansible-playbook example.yml --list-tags

#查看标记被执行的tags关联的任务列表
ansible-playbook example.yml --tags "configuration,packages" --list-tasks

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值