我的角色中的大多数任务都应该在包含角色的任何时候运行,但是,有一些任务我只想在显式调用时运行。
例如,在我的roles/elastic/tasks/main.yml
文件中,我有很多任务确保目录存在configure logstash和elasticsearch。
现在我想创建一组初始化elasticsearch的新任务。即它删除现有数据并创建/重新创建模式。
我知道标签,但如果在运行角色时不包含标签,我不希望所有任务都被意外运行。
要运行剧本,我正在使用ansible-playbook logserver.yml
。
logserver.yml
看起来像这样:
- hosts: localhost
become: true
roles:
- common
- elastic
我尝试添加新的任务文件roles/elastic/tasks/init.yml
,但我很难确定如何运行该特定任务文件。
答案 0 :(得分:3)
如果我正确理解了这个问题,你可以对某些依赖于在命令行设置的变量的任务使用条件,其默认值将使条件检查失败。
在scratch.yml:
---
- hosts: localhost
vars:
my_var: "{{ MY_VAR|default('no') }}"
tasks:
- name: test
debug:
msg: "my_var: {{ my_var }}"
- name: test 2
debug:
msg: "in conditional"
when: my_var == 'yes'
命令行:
ansible-playbook scratch.yml
VS
ansible-playbook scratch.yml --extra-vars 'MY_VAR=yes'
答案 1 :(得分:0)
我正在使用"行动"方法,尽可能避免条件。 通常,您需要执行一系列任务,您可以通过名称等单字操作来调用它,例如" deploy","禁用"。 我正在做的是
disable.yml
,main.yml
- include: '{{action}}.yml'
when:
- (action in ["deploy", "disable"])
通常如下所示:
vars/main.yml
在action
中,我确保其中一个操作始终定义良好,即使角色没有通过变量action
。
Playbooks不应该通过- name: call role
hosts: hg
roles:
- role: user.role
action: disable
,依赖默认值或传递它:
{{1}}
这种方法: