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