IOS 上の Ansible でインターフェースのサブセットをループする

IOS 上の Ansible でインターフェースのサブセットをループする

Windows 10 と Ubuntu で Ansible 2.9.9 を使用して WISL を実行しています。Ansible は初めてです。Cisco デバイスで show を実行して、特定のネットワーク プロトコルが実行されるインターフェイスを取得します。次に、インターフェイスを抽出して、それらに対してコマンドを実行します。この場合は、プロトコルをオフにします。理想的には、show コマンドは簡単に変更できます。多くのプロトコルと同様に、これがこの状態を確認する一貫した方法です。Ansible がこのプロトコル情報を保存する方法はいくつかあるかもしれません。おそらく事実で保存するのでしょうか? ios_config を使用した例を次の場所で見つけました。モジュールただし、インターフェイスは、次のヘルパー例に示すようにハードコードされています。

- name: configure ip helpers on multiple interfaces
  ios_config:
    lines:
      - ip helper-address 172.26.1.10
      - ip helper-address 172.26.3.8
    parents: "{{ item }}"
  with_items:
    - interface Ethernet1
    - interface Ethernet2
    - interface GigabitEthernet1

私の試みは次の通りで、マルチキャストがアクティブな 2 つのインターフェースが得られます。しかし、ループ内のこれらのインターフェースに対して次に何をすればよいのでしょうか? :

  tasks:
  - name: Gather interfaces running PIM
    ios_command:
      commands:
        - show ip pim interface
    register: pim

  - name: Write PIM interface data to file
    copy:
      content: "{{pim.stdout_lines[0]}}"
      dest: "backups/{{ansible_alias}}-pim-interfaces.txt"


  - name: Glean PIM INTF's
    shell: cat backups/{{ ansible_alias }}-pim-interfaces.txt | tr ' ' '\n' | grep 'GigabitEthernet'
    register: pim

  - debug: msg='{{ pim.stdout_lines }}'


TASK [debug] ******************************************************************************************************************************************************************************************************
ok: [10.239.121.2] => {
    "msg": [
        "GigabitEthernet0/0/0",
        "GigabitEthernet0/0/1.125"
    ]
}

ご指導いただければ幸いです。

答え1

ここで、loop(これにより、2.5 以降、すべてのwith_ディレクティブが非推奨になりましたが、ドキュメントの多くではまだこれが反映されていません)。

Ansible の例を変更すると、次のようになります。

- name: configure ip helpers on multiple interfaces
  ios_config:
    lines:
      - ip helper-address 172.26.1.10
      - ip helper-address 172.26.3.8
    parents: item
  loop: '{{ ["interface "]|product(pim.stdout_lines)|map("join")|list }}'

出力を検査するには:

- debug:
    var: item
  loop: '{{ ["interface "]|product(pim.stdout_lines)|map("join")|list }}'

これloopは、Ansible でリスト内のすべての文字列にプレフィックスを追加する方法

関連情報