【发布时间】:2020-04-07 18:05:05
【问题描述】:
我正在编写一个自动化部署的剧本。在命令行中,我传递了一些需要强制验证的参数。我正在使用角色/标签来运行我的剧本。以下是我的命令-
ansible-playbook -i my-inventory my-main.yml --tags=copy,deploy -e my_release_version=1.0.0 -e target_env=prod
在 my-main.yml 中,我首先验证参数,然后执行角色。现在,如果我在命令中传递标签,它不会进行任何验证并直接执行标签,我猜这是 ansible 的工作方式。
有没有办法在执行标签之前预先执行 my-main.yml 中提到的步骤?
my-main.yml 如下所示 -
- hosts: localhost
connection: local
gather_facts: no
vars:
_allowed_envs:
- dev
- preprod
- prod
pre_tasks:
- name: Checking if the Target Environment is ok
fail:
msg: >-
Environment "{{ target_env }}" is not allowed.
Please choose a target environment from "{{ _allowed_envs | join(', ') }}"
when: not target_env in _allowed_envs
run_once: true
roles:
- role: copy
tags:
- copy
- role: deploy
tags:
- deploy
注意:我的剧本将包含角色/标签,例如复制、部署以及 stoptomcat、starttomcat。所以当用户只提到像 stoptomcat 和 starttomcat 这样的标签时,我只想验证一个输入参数 target_env 因为在这种情况下我不想要 my_release_version。
感谢任何帮助。
【问题讨论】:
-
您也可以在任务、pre_tasks 和 post_tasks 上添加标签。
-
有一个special tag called 'always'。您可以用它标记您的验证任务,无论您是否指定标记,它们都会一直播放。
-
@Zeitounator 你是明星伙伴。这就像一个魅力。我现在感觉很愚蠢,因为我无法用谷歌搜索这个简单的东西。 :P
-
@Zeitounator 你能帮我吗?我坚持这一点,并在谷歌上尝试了一切,但无法弄清楚。让我知道您是否可以提供帮助。 stackoverflow.com/questions/61008965/…