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

use*_*963 1 ansible

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

我想做的是有条件地包含初始安装和配置的任务,并仅在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
Run Code Online (Sandbox Code Playgroud)

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

β.ε*_*.βε 7

Ansible 中确实已经为您构建了完整的标记机制

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

ansible-playbook play.yml --tags "some,tags,here"
Run Code Online (Sandbox Code Playgroud)

对于你的情况,请注意

添加标签:向戏剧或静态导入的任务和角色添加这些标签到所有包含的任务中。

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

还有一组特殊标签

  • always,总是运行,除非通过专门跳过--skip-tags always
  • never,永远不会运行,除非特别请求该任务的另一个标签

以及一组特殊的关键字

  • tagged,如果您想将所有标记的任务定位为--tags--skip-tags
  • untagged,如果您想将所有未标记的任务定位为--tags--skip-tags
  • all,如果您想将所有任务定位在--tags--skip-tags

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

ansible-playbook play.yml --skip-tags "some,tags,here"
Run Code Online (Sandbox Code Playgroud)

鉴于剧本:

- include: initial_install.yml
  tags: initial-install

- include: initial_configuration.yml
  tags: initial-install

- include: configure.yml
  tags:
    - setup
    - reconfiguration
    - else
Run Code Online (Sandbox Code Playgroud)

这给出了这些输出:

  • $ ansible-playbook play.yml 
    
    PLAY [all] ******************************************************
    
    TASK [debug] ****************************************************
    ok: [localhost] =>
      msg: configure.yml
    
    PLAY RECAP ******************************************************
    localhost                  : ok=1    changed=0    unreachable=0  
    
    Run Code Online (Sandbox Code Playgroud)
  • $ 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
    
    Run Code Online (Sandbox Code Playgroud)