2016-05-17 16 views
0

私は、go.ymlのような初心者用のプレイブックを持っています。この中で、アクションを実行したい製品(たとえば、proxylbなど)をユーザーにプロンプ​​トしたいと考えています。ユーザー入力に基づいて、他のプレイブックを開始するにはどうすればよいですか?

ユーザーに入力を照会する方法はありますか?その入力に基づいて、プレイブックを開始しますか?基本的に、私は次のような何かをしたい:

- hosts: "prod" 
    sudo: yes 
    vars_prompt: 
    product: "What product do you want to deploy?" 
    if product == proxy: 
     - include proxy.yml 
    if product == lb: 
     - include lb.yml 
    ... 

私がプレイブックがどのように流れるかと非常に快適ではないよ、とそれらがどのようにタスク/ハンドラファイルから明らかに異なります。このようなことは可能ですか?私の目標は、ダースの異なるプレイブックファイルを選ぶことを避けることです。代わりに、いつも使うことができるデフォルトの初期タイプのプレイブックを持っています。

答えて

1

プレイブックには他のプレイブックを含めることができます。したがって、1つのエントリーポイントのプレイブックでトリガーされる複数のプレイブックを持つことができます。しかし、プレイブックレベルでは条件はありません。含まれるすべてのプレイブックが実行されます。

あなたの役割に関する条件は、理論的には機能します。

roles: 
    - role: proxy 
    when: product == "proxy" 
    - role: lb 
    when: product == "lb" 

しかし、これは再発明し、車輪のようなものです:正しい構文は次のようになります。実行されるロールを制限するために、通常tags(およびスキップタグ)を使用します。

roles: 
    - role: proxy 
    tags: proxy 
    - role: lb 
    tags: lb 

そして、例えば、あなたが--tags "proxy"で脚本を呼び出します。これは付属のプレイブックでも動作します。

vars_promptとロールの条件を使用することの欠点は、プレイブックの実行時に大量のスキップされたタスクが発生することです。タグでフィルタリングすると、一致しないロール/タスクはスキップされた状態では表示されません。