2017-07-07 4 views
1

私のロール内のタスクのほとんどは、ロールが含まれているときに実行する必要がありますが、明示的にのみ実行するタスクと呼ばれる。デフォルトでは実行しないタスクを含むロールを作成する方法

たとえば、私のroles/elastic/tasks/main.ymlファイルには、ディレクトリがlogstashとelasticsearchを構成することを保証する多くのタスクがあります。

ここで、elasticsearchを初期化する新しいタスクセットを作成したいと思います。すなわち、既存のデータを削除し、スキーマを作成/再作成する。

私はタグを認識していますが、ロールの実行時にタグが含まれていないと、すべてのタスクを誤って実行したくありません。

プレイブックを実行するには、ansible-playbook logserver.ymlを使用しています。

logserver.ymlは次のようになります。

- hosts: localhost 
    become: true 
    roles: 
    - common 
    - elastic 

私はroles/elastic/tasks/init.yml、新しいタスクのファイルを追加しようとしているが、私はその特定のタスクファイルを実行する方法を決定するに苦労しています。

答えて

2

私が質問を正しく理解している場合、条件付きチェックに失敗するデフォルト値を使用して、コマンドラインで変数セットに依存するいくつかのタスクで条件付きを使用することができます。 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 --extra-vars 'MY_VAR=yes' 
0

ansible-playbook scratch.yml 

私はできるだけ条件を避けるために、 "アクション" のアプローチを使用しています。 通常、実行したいタスクがあります。名前などの単一の単語アクションで呼び出すことができます。 "展開する"、 "無効にする"。 ような各「アクション」私はdeploy.ymlのように、同じ名前の個別のタスクリストを作成しています、disable.yml

  • main.ymlは、通常のように見えるために私がやっていることは

    1. です:

      - include: '{{action}}.yml' 
          when: 
          - (action in ["deploy", "disable"]) 
      
    2. vars/main.ymlでは、役割が変数actionを渡さなくても、常に1つのアクションが常に適切に定義されていることを確認しています。

    3. プレイブックデフォルトに頼って、actionを渡す、またはそれを渡すべきではありません、次のいずれか

      - name: call role 
          hosts: hg 
          roles: 
          - role: user.role 
          action: disable 
      

    このアプローチ:

    • "&征服を分ける" とよく合いますそれが意味を成すならば、他のものにいくつかの "行動"を含めることを依然として許容する。
    • はタスクリストを短く保ちます
    • はかなり読みやすいです。
  • 関連する問題