2016-03-22 14 views
2

一部のサイトでループするプレイブックを設定しようとしています。サイト内には、ルータとスイッチがあります。一般に1台のルータと少なくとも1台のスイッチがあります。今のところ、私は両方のサイトで1つのルータが動作するようにロジックを設定しようとしています。私は "with_nested"する必要があると信じていますが、勝利したコードを思いつくことはできません。これは私が今持っているものです。今のところAnecessでネストされたループを実行できません

hosts: local 

vars: 
    data_vlan: 10 
    voice_vlan: 20 

    sites: 
    - site1: 
     routers: 
     - hostname: router1 
      loopback0: 192.168.1.1 
      wan_ip: 10.0.0.2 
      lan_ip: 172.16.1.1 

    - site2: 
     routers: 
     - hostname: router1 
      loopback0: 192.168.2.1 
      wan_ip: 10.0.0.4 
      lan_ip: 172.16.2.1 

tasks: 

    - name: Generate router configs 
    template: src=templates/router.j2 dest=scripts/{{ item [1] }}/{{ item[1] }}-{{ item[1] }}.txt 
    with_nested: 
     - "{{ sites }}" 

私はアイテムDESTセクションの[1]、第3の時間を持っていますが、最終的に私はそれをホスト名になりたいです。だからscripts/site1/site1-router1.txtなど。このコードでは、site1とsite2が正しく取得されますが、ホスト名varsに到達する方法を把握することはできません。

with_nestedで複数の変数を試しましたが、取得できませんでした。最終結果は次のようになります

SITE1、ルータ1

SITE1、1

SITE1スイッチ、N

SITE2、ルータ1

SITE2、1

SITE2スイッチを切り替えます、スイッチN

答えて

1

まず、概念あなたのYAMLのualな問題か、おそらくstackoverflowのコードをここにインデントすると壊れてしまったでしょう。

抜粋:

sites: 
    - site1: 
     routers: 
     - hostname: router1 

私見意味がありません。 site1は空のキーです。これは、これらのオプションのいずれかである必要があり、次のいずれか

  1. routersはSITE1のサブ要素でなければなりません:

     sites: 
        - site1: 
         routers: 
          - hostname: router1
  2. サイトでは、リストの代わりに辞書のようになります。

     sites: 
        site1: 
         routers: 
         - hostname: router1
  3. サイト名は、キーではなく値として保存する必要があります。

     sites: 
        - name: site1 
         routers: 
         - hostname: router1

オプション3は、ループオーバーするのが最も簡単なので、選択してみましょう。また、コンテンツにアクセスするサイトの名前を知る必要はありません。すべてのコンテンツは一般的なキー(sites[0].name/sites[0].routers[0].hostnameなど)でアクセスできます。他のすべてのソリューションでは、コンテンツにアクセスする前にサイトの名前を知っておく必要があります。

私は

閉じる "をwith_nested" する必要があると考えています。私はまた、それらを常に間違って取得し、それを参照する必要があります。使用する正しいループは、with_subelements

- debug: msg="{{ item.0.name }} {{ item.1.hostname }}" 
    with_subelements: 
    - "{{ sites }}" 
    - routers 
+0

ありがとうございます。私は最初、オプション3でどのように構成されているかを構造化しましたが、それは犠牲にされた多くのものを試しました。今度はJinja2の部分を理解してください。 – mikey

関連する問題