tags - Ansible-默认/显式标签

标签 tags ansible ansible-playbook

我有一本包含和标记各种角色的剧本:

- name:  base
  hosts: "{{ host | default('localhost') }}"

roles: 

  - { role: apt,              tags: [ 'base', 'apt', 'ubuntu']}
  - { role: homebrew,         tags: [ 'base', 'homebrew', osx' ]}
  - { role: base16,           tags: [ 'base', 'base16', 'osx' ]}
  - { role: nodejs,           tags: [ 'base', 'nodejs' ]}
  - { role: tmux,             tags: [ 'base', 'tmux' ]}
  - { role: vim,              tags: [ 'base', 'vim' ]}
  - { role: virtualenv,       tags: [ 'base',  virtualenv', 'python' ]}
  - { role: homebrew_cask,    tags: [ 'desktop', 'homebrew_cask', osx' ]}
  - { role: gnome_terminator, tags: [ 'desktop', 'gnome_terminator', ubuntu' ]}

大多数任务都使用when子句来确定它们应在哪个OS上运行,例如:
- name: install base packages
  when: ansible_distribution == 'MacOSX'
  sudo: no
  homebrew:
    name: "{{ item.name }}"
    state: latest
    install_options: "{{ item.install_options|default() }}"
  with_items: homebrew_packages

如果我在不指定任何标签的情况下运行ansible-playbook base.yml,则所有任务都将运行。如果指定标签,例如ansible-playbook base.yml --tags='base',则仅使用base run标记的角色。

默认情况下(如果未指定标签),我只想运行标有'base'的角色,而不是标有'desktop'的角色。

最好在当前操作系统的基础上设置默认的'os'标签,以避免在OSX上运行剧本时包含ubuntu的所有任务(反之亦然)。

有什么想法,如果可能的话,我该怎么做?

最佳答案

不幸的是,没有这样的功能。当前,Ansible中的标签处理非常有限。默认情况下,您不能设置默认标签,也不能排除标签。

Google用户组上有一些线程,而github上有一些功能请求。但是还没有结果。到目前为止,常见的答案是,您应该创建一个shell脚本并将其放在您的剧本前面。然后,该脚本可以根据需要设置--tags--skip-tags。非常不愉快,但据我所知,这是目前唯一的选择。

关于tags - Ansible-默认/显式标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28789912/

相关文章:

android - 区分NTAG213和MF0ICU2

java - java中读取xml文件时出错

ansible - 使用组中的第一台主机

ansible - 有条件地连接 jinja2 列表

logging - 如何在 Ansible 中为每个剧本登录一个单独的文件

tags - CKEditor 去掉 <i> 标签

css - 无点CSS : How to change variables value from importer dotlesscss stylesheet

ansible - 使用列表变量通过 apt 安装软件列表

ansible - 将变量传递给包含的剧本?

amazon-ec2 - ansible 获取已经存在的 aws ebs 卷 ID