如何创建包含默认情况下不应运行的任务的角色

时间:2017-07-07 14:20:53

标签: ansible

我的角色中的大多数任务都应该在包含角色的任何时候运行,但是,有一些任务我只想在显式调用时运行。

例如,在我的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,但我很难确定如何运行该特定任务文件。

2 个答案:

答案 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","禁用"。 我正在做的是

  1. 对于每个这样的"行动"我正在创建一个名称相同的不同任务列表,例如disable.ymlmain.yml
  2. - include: '{{action}}.yml' when: - (action in ["deploy", "disable"]) 通常如下所示:

    vars/main.yml
  3. action中,我确保其中一个操作始终定义良好,即使角色没有通过变量action

    < / LI>
  4. Playbooks不应该通过- name: call role hosts: hg roles: - role: user.role action: disable ,依赖默认值或传递它:

    {{1}}
  5. 这种方法:

    • 适用于&#34; divide&amp;征服&#34;
    • 仍允许包含一些&#34;动作&#34;如果有意义,在其他人中
    • 简化任务列表
    • 非常容易阅读