我有一本相当大的剧本,其中包含安装和配置新应用程序的任务,以及一堆仅与初始安装和配置相关的任务,以及一堆仅与后续运行相关的任务。< / 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
标签。
答案 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