仅在使用特定标签时如何运行ansible任务?

时间:2020-08-03 15:50:00

标签: ansible

我有一本相当大的剧本,其中包含安装和配置新应用程序的任务,以及一堆仅与初始安装和配置相关的任务,以及一堆仅与后续运行相关的任务。< / p>

我想做的是有条件地包括用于初始安装和配置的任务,并仅在传递initial-install标记时运行这些任务。

例如:

# main.yml 
- include: initial_install.yml
  when: tag 'initial-install' specified

- include: initial_configuration.yml
  when: tag 'initial-install' specified

- include: configure.yml

这是一个简化的示例,但是如果我能弄清楚这一点,我应该能够将我的任务列表组织为一种格式,该格式不会运行不必要的任务,除非正在为初始安装运行该剧本,并且initial-install标签。

1 个答案:

答案 0 :(得分:1)

在Ansible中确实已经为您构建了full tagging mechanism

  • 您只能运行带有一个或多个标签的任务:

    ansible-playbook play.yml --tags "some,tags,here"
    

    其中指定的标记是您要运行的所有标记的逗号分隔列表。

  • 或指定要跳过的标签

    ansible-playbook play.yml --skip-tags "some,tags,here"
    

您只需在需要的任何任务上将标签指定为列表:

- include: initial_install.yml
  tags: initial-install

- include: initial_configuration.yml
  tags: initial-install

- include: configure.yml
  tags:
    - setup
    - reconfiguration
    - else

请注意

添加标签:在播放或静态导入的任务和角色中,将这些标签添加到所有包含的任务中。

来源:https://docs.ansible.com/ansible/latest/user_guide/playbooks_tags.html#tag-inheritance

还有一组special tags

    除非通过always 专门跳过,否则
  • --skip-tags always始终运行。
  • never永远不会运行,除非明确要求该任务的另一个标签

以及一组特殊关键字

  • tagged,如果您要定位--tags--skip-tags
  • 中的所有已标记任务
  • untagged,如果您要定位--tags--skip-tags
  • 中所有未标记的任务
  • all,如果您要定位--tags--skip-tags中的所有任务

可以在您的情况下使用这些

- include: initial_install.yml
  tags:
    - initial-install
    - never

- include: initial_configuration.yml
  tags: 
    - initial-install
    - never

- include: configure.yml
  tags:
    - setup
    - reconfiguration
    - else
  • 通过普通格式运行此示例
    ansible-playbook play.yml
    
    不会运行前两个任务,但会运行最后一个。
  • 运行
    ansible-playbook play.yml --tags "initial-install,all"
    
    将运行所有三个任务。

给出剧本:

- hosts: all
  gather_facts: no  
        
  tasks:
    - debug: 
        msg: initial_install.yml
      tags:
        - initial-install
        - never

    - debug: 
        msg: initial_configuration.yml
      tags: 
        - initial-install
        - never

    - debug: 
        msg: configure.yml
      tags:
        - setup
        - reconfiguration
        - else

这给出了这些输出:

  • $ ansible-playbook play.yml 
    
    PLAY [all] **********************************************************************************************************************
    
    TASK [debug] ********************************************************************************************************************
    ok: [localhost] => {
        "msg": "configure.yml"
    }
    
    PLAY RECAP **********************************************************************************************************************
    localhost                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
    
  • $ ansible-playbook play.yml --tags "initial-install,all"
    
    PLAY [all] **********************************************************************************************************************
    
    TASK [debug] ********************************************************************************************************************
    ok: [localhost] => {
        "msg": "initial_install.yml"
    }
    
    TASK [debug] ********************************************************************************************************************
    ok: [localhost] => {
        "msg": "initial_configuration.yml"
    }
    
    TASK [debug] ********************************************************************************************************************
    ok: [localhost] => {
        "msg": "configure.yml"
    }
    
    PLAY RECAP **********************************************************************************************************************
    localhost                  : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0