てくなべ (tekunabe)

ansible / network / automation

[Ansible] cisco.ios collection 0.0.3 リリース、ACL や OSPF などのモジュールなどが追加

はじめに

Ansible は、Ansible 本体の標準モジュールの他に、Collection という形式でも配布されています。

例えば、ios_* モジュールは cisco.ios collection 経由で配布されてます。

先日 cisco.ios collection 0.0.3 がリリースされ、4つモジュールが追加されました。

この記事では追加されたモジュールについて、ごく簡単ではありますがご紹介します。


追加モジュール

いずれも、Netwrok Resource Module です。

cisco.ios.ios_acl_interfaces

cisco.ios/ios_acl_interfaces.py at 0.0.3 · ansible-collections/cisco.ios · GitHub

ACL をインターフェースに適用するモジュールです。

  • Example (
- name: Merge module attributes of given access-groups
  cisco.ios.ios_acl_interfaces:
    config:
    - name: GigabitEthernet0/1
      access_groups:
      - afi: ipv4
        acls:
        - name: 110
          direction: in
        - name: 123
          direction: out
      - afi: ipv6
        acls:
        - name: test_v6
          direction: out
        - name: temp_v6
          direction: in
    - name: GigabitEthernet0/2
      access_groups:
      - afi: ipv4
        acls:
        - name: 100
          direction: in
    state: merged

cisco.ios.ios_acls

cisco.ios/ios_acls.py at 0.0.3 · ansible-collections/cisco.ios · GitHub

ACL を定義するモジュールです。コマンドのオプションが多いのでモジュールのオプションも多いですね。

標準 ACL、拡張ACL に対応しているようです。

  • Example (
- name: Merge provided configuration with device configuration
  cisco.ios.ios_acls:
    config:
    - afi: ipv4
      acls:
      - name: std_acl
        acl_type: standard
        aces:
        - grant: deny
          source:
            address: 192.168.1.200
        - grant: deny
          source:
            address: 192.168.2.0
            wildcard_bits: 0.0.0.255
      - name: 110
        aces:
        - sequence: 10
          protocol_options:
            icmp:
              traceroute: true
        - grant: deny
          protocol_options:
            tcp:
              ack: true
          source:
            host: 198.51.100.0
          destination:
            host: 198.51.110.0
            port_protocol:
              eq: telnet
      - name: test
        acl_type: extended
        aces:
        - grant: deny
          protocol_options:
            tcp:
              fin: true
          source:
            address: 192.0.2.0
            wildcard_bits: 0.0.0.255
          destination:
            address: 192.0.3.0
            wildcard_bits: 0.0.0.255
            port_protocol:
              eq: www
          option:
            traceroute: true
          ttl:
            eq: 10
      - name: 123
        aces:
        - grant: deny
          protocol_options:
            tcp:
              ack: true
          source:
            address: 198.51.100.0
            wildcard_bits: 0.0.0.255
          destination:
            address: 198.51.101.0
            wildcard_bits: 0.0.0.255
            port_protocol:
              eq: telnet
          tos:
            service_value: 12
        - grant: deny
          protocol_options:
            tcp:
              ack: true
          source:
            address: 192.0.3.0
            wildcard_bits: 0.0.0.255
          destination:
            address: 192.0.4.0
            wildcard_bits: 0.0.0.255
            port_protocol:
              eq: www
          dscp: ef
          ttl:
            lt: 20
    - afi: ipv6
      acls:
      - name: R1_TRAFFIC
        aces:
        - grant: deny
          protocol_options:
            tcp:
              ack: true
          source:
            any: true
            port_protocol:
              eq: www
          destination:
            any: true
            port_protocol:
              eq: telnet
          dscp: af11
    state: merged

cisco.ios.ios_ospfv2

cisco.ios/ios_ospfv2.py at 0.0.3 · ansible-collections/cisco.ios · GitHub

OSPFv4 を設定するモジュールです。細かいオプションも指定できるようです。

  • Example (
- name: Merge provided OSPF V2 configuration
  cisco.ios.ios_ospfv2:
    config:
      processes:
      - process_id: 1
        max_metric:
          router_lsa: true
          on_startup:
            time: 110
        areas:
        - area_id: '5'
          capability: true
          authentication:
            enable: true
        - area_id: '10'
          authentication:
            message_digest: true
          nssa:
            default_information_originate:
              metric: 10
            translate: suppress-fa
          default_cost: 10
          filter_list:
          - name: test_prefix_in
            direction: in
          - name: test_prefix_out
            direction: out
        network:
          address: 198.51.100.0
          wildcard_bits: 0.0.0.255
          area: 5
        default_information:
          originate: true
      - process_id: 200
        vrf: blue
        domain_id:
          ip_address:
            address: 192.0.3.1
        max_metric:
          router_lsa: true
          on_startup:
            time: 100
        auto_cost:
          reference_bandwidth: 4
        areas:
        - area_id: '10'
          capability: true
        distribute_list:
          acls:
          - name: 10
            direction: out
          - name: 123
            direction: in
    state: merged

cisco.ios.ios_static_routes

cisco.ios/ios_static_routes.py at 0.0.3 · ansible-collections/cisco.ios · GitHub

スタティックルートを設定するモジュールです。

ios_static_route モジュール(末尾 s なし)の後継版です。

  • Example (
- name: Merge provided configuration with device configuration
  cisco.ios.ios_static_routes:
    config:
    - vrf: blue
      address_families:
      - afi: ipv4
        routes:
        - dest: 192.0.2.0/24
          next_hops:
          - forward_router_address: 192.0.2.1
            name: merged_blue
            tag: 50
            track: 150
    - address_families:
      - afi: ipv4
        routes:
        - dest: 198.51.100.0/24
          next_hops:
          - forward_router_address: 198.51.101.1
            name: merged_route_1
            distance_metric: 110
            tag: 40
            multicast: true
          - forward_router_address: 198.51.101.2
            name: merged_route_2
            distance_metric: 30
          - forward_router_address: 198.51.101.3
            name: merged_route_3
      - afi: ipv6
        routes:
        - dest: 2001:DB8:0:3::/64
          next_hops:
          - forward_router_address: 2001:DB8:0:3::2
            name: merged_v6
            tag: 105
    state: merged


これらモジュールを利用するには?

cisco.ios collection はAnsible 2.9.10 以上 2.11 未満で利用できるようです。

Ansible versions: >=2.9.10,<2.11

まず、 ansible-galaxy collection install cisco.ios でインストールします。

モジュール名を cisco.ios_acls のように指定して呼び出します。詳細は、公式ドキュメントをご参照ください。

Using collections — Ansible Documentation


おわりに

これまでは Ansible 本体のバージョンアップの際の changelog を見れば、この手の情報は追えたのですが、今は collection の情報をウォッチする必要があります。

気になる方は Collection もチェックすることをおすすめします。

Ansible Galaxy にログインし、対象の Collection のFollow Author ボタンを押してフォローすると、更新をメールや右上のアイコンで通知してくれます。

f:id:akira6592:20200621103006p:plain
Follow Author

[2020/06/23 追記] 1.0.0 がリリースされました。0.0.3 からモジュールは追加されていませんが、ドキュメントが整備されました。