ansible标签高级用法

一、为一个play指定一组标签

当为一个play指定一组标签后,该play下的所有task都会自动继承该标签,各task也可以自定义自己的标签。

- name: configure webservers 
  hosts: all
  remote_user: ansible
  tags: 
    - httpd
  tasks:
    ...

在静态加载文件的指令上打标签,等价于为所加载文件中所有子任务打标签。

在动态加载文件的指令上打标签,不会为子任务打标签,而是为父任务自身打标签。

现在说结论:
(1).静态加载的指令有:roles、include、import_tasks、import_role(2).动态加载的指令只有include_xxx,包括include_tasks、include_roleimport_playbook和include_playbook因为本身就是play级别或高于play级别,所以不能为这两个指令打标签。# 5 ansible

二、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:表示所有任务都会被执行,在默认情况下,不指定任何标签,则使用的就是该标签
上一篇
下一篇
Copyright © 2022 Egon的技术星球 egonlin.com 版权所有 帮助IT小伙伴学到真正的技术