Ansible 如何创建包含默认情况下不应运行的任务的角色
我角色中的大多数任务应该在包含该角色的任何时候运行,但是,有几个任务我只希望在显式调用时运行 例如,在我的Ansible 如何创建包含默认情况下不应运行的任务的角色,ansible,Ansible,我角色中的大多数任务应该在包含该角色的任何时候运行,但是,有几个任务我只希望在显式调用时运行 例如,在我的roles/elastic/tasks/main.yml文件中,我有许多任务确保目录存在,包括配置logstash和elasticsearch 现在我想创建一组新的任务来初始化elasticsearch。i、 e.它删除现有数据并创建/重新创建模式 我知道标记,但如果在运行角色时未包含标记,我不希望所有任务都意外运行 要运行playbook,我使用的是ansible playbook log
roles/elastic/tasks/main.yml
文件中,我有许多任务确保目录存在,包括配置logstash和elasticsearch
现在我想创建一组新的任务来初始化elasticsearch。i、 e.它删除现有数据并创建/重新创建模式
我知道标记,但如果在运行角色时未包含标记,我不希望所有任务都意外运行
要运行playbook,我使用的是ansible playbook logserver.yml
logserver.yml
如下所示:
- hosts: localhost
become: true
roles:
- common
- elastic
我已经尝试添加一个新的任务文件,
roles/elastic/tasks/init.yml
,但我很难确定如何运行该特定的任务文件。如果我正确理解了这个问题,您可以对一些依赖于命令行中的变量集的任务使用条件,默认值将使条件检查失败
在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
我用“行动”的方法,尽可能地避免条件。
通常有一组任务是你想做的,你可以用像name这样的单字操作来调用它,例如“deploy”、“disable”。
我现在做的是
deploy.yml
,disable.yml
main.yml
通常看起来像:
- include: '{{action}}.yml'
when:
- (action in ["deploy", "disable"])
vars/main.yml
中,我要确保其中一个操作始终定义良好,即使角色没有获得变量action
传递操作
,也不应通过:
- name: call role
hosts: hg
roles:
- role: user.role
action: disable
- 与“分而治之”很相配
- 如果有意义的话,仍然允许在其他文件中包含一些“操作”
- 保持任务列表简短
- 它很容易阅读
- name: call role
hosts: hg
roles:
- role: user.role
action: disable