2016-08-11 5 views
0

私は、AWBタグに一致するインスタンスを動的に探し出し、ELBを作成してインスタンスをインスタンスに追加するために、プレイブックを作成しようとしています。今まで私は一度に1セットのタグと1つのELBに対してこれらを作成することに成功しました。不可能なレジスタインスタンスとELBの作成

これは、変数functionreleaseを先頭にすることなく、任意の数のタグに対して実行する最良の方法を解明しようとしています。

例えば、変数functionreleaseは、このような変数ファイルで定義されます。

function: 
    - api 
    - webapp 
    - mysql 
release: 
    - prod 
    - stage 
    - dev 

私のプレイブックはこのように見えます。私は変数リストを使ってプレイブック全体をループする方法を見つけるのに苦労しています。 with_itemsを最初のタスクに追加すると、そのタスク全体がループして次のタスクに移動します。

- ec2_remote_facts: 
    filters: 
     instance-state-name: running 
     "tag:Function": "{{ function }}" 
     "tag:Release": "{{ release }}" 
    region: us-east-1 
    register: ec2instance 

- local_action: 
    module: ec2_elb_lb 
    name: "{{ function }}-{{ release }}" 
    state: present 
    instance_ids: "{{ item.id }}" 
    purge_instance_ids: true 
    region: us-east-1 
    subnets: 
     - subnet-1 
     - subnet-2 
    listeners: 
     - protocol: https 
     load_balancer_port: 443 
     instance_port: 80 
     ssl_certificate_id: "{{ ssl_certificate_id }}" 
    health_check: 
     ping_protocol: http 
     ping_port: 80 
     ping_path: "/status" 
     response_timeout: 3 
     interval: 5 
     unhealthy_threshold: 2 
     healthy_threshold: 2 
    access_logs: 
     interval: 5 
     s3_location: "{{ function }}-{{ release }}-elb" 
     s3_prefix: "logs" 
    with_items: ec2instance.instances 

答えて

1

私が考えることができる最も簡単なものは、パラメータ化されたものです。
ワンショットのタスクのリストを作成します。 elb_from_tagged_instances.yml
そして、ループ内includemain.ymlを行います

- include: elb_from_tagged_instances.yml function={{item[0]}} release={{item[1]}} 
    with_together: 
     - "{{function}}" 
     - "{{release}}" 

そして、あなたが何らかの形でクロス交差機能/解放する必要がない場合、私は辞書や反復の1つのリストを持つ2つのリスト機能/解放を交換したいですその上。

UPDATE:

また
--- 
- hosts: localhost 
    connection: local 
    vars: 
    functions: 
     - api 
     - webapp 
     - mysql 
    releases: 
     - prod 
     - stage 
     - dev 
    tasks: 
    - include: include_z1.yml function="{{item[0]}}" release="{{item[1]}}" 
     with_nested: 
     - "{{functions}}" 
     - "{{releases}}" 

あなたが(私の例ではfunctionfunctions(複数))のリストと、パラメータに異なる名前を使用する必要があること、注意を避けるために:9のペアを取得するには、ネストされたforループ例再帰的なテンプレート。

+0

返信いただきありがとうございます。これはループがうまく動作するようにはうまくいくようですが、{{function}}と{{release}}の2つ以上のセットで同時に動作させることができませんでした。 "{function}} - {{release}}は" msg "のような大きな値として出力されます:" [u'api '、u'webapp'、u'mysql '] - [u'prod' u'stv '] "また、私は持っていることを望みます。 api-prod、api-stage、api-dev、webapp-prod、webapp-stage ...などです。あなたはそれをすると思いますか? – tweeks200

+0

@ tweeks200確かに非常に奇妙なこと...私はテストしたコードで私の答えを更新しました。 –

+0

@ tweeks200は私のテンプレートループがうまくいかなかったバグを見つけて、答えをもう一度更新しました:) include( 'function')とarray(' functions')のパラメータの異なる名前がキーです!感謝! –

関連する問題