てくなべ (tekunabe)

ansible / network / automation / StackStorm

【Ansible】ios_config モジュールでべき等性を考慮せずにコンフィグを投入する方法(match: none)

■ match オプション を none にするとべき等性を考慮しない

Ansible には、Cisco IOS 機器にコンフィグ投入などができる ios_config というモジュールがあります。 このモジュールはデフォルトで、べき等性を保とうとする仕様になっています。 大まかな流れとしては以下の通りです。

  1. 事前に現状のコンフィグを取得
  2. オプションで指定されたコンフィグとの差分を確認
  3. 差分コンフィグのみを投入

なんらかの事情で、べき等性を考慮せずに無条件でコンフィグを投入したい場合は match オプションに none を指定します。

  • ios_config モジュールの match オプションの none の説明

    if match is set to none, the module will not attempt to compare the source configuration with the running configuration on the remote device.


■ 検証

簡単な例で検証した結果を記載します。

環境: Ansbile 2.7.0

match: no を指定しない場合(デフォルト)

Playbook
- hosts: iosal
  gather_facts: no

  tasks:
    - name: set ntp
      ios_config:
        lines:
          - ntp server 10.0.0.123
初回実行 (changed=1)
TASK [set ntp] *************************************************************
changed: [iosal1]

PLAY RECAP *****************************************************************
iosal1                     : ok=1    changed=1    unreachable=0    failed=0

今までなかっコンフィグを指定したため、実際に投入され、changed になりました。

再実行 (changed=0: べき等性を考慮した結果)

同じ Playbook を使用してもう一度実行します。

TASK [set ntp] *************************************************************
ok: [iosal1]

PLAY RECAP *****************************************************************
iosal1                     : ok=1    changed=0    unreachable=0    failed=0

タスクは changed にならず、べき等性を考慮した結果となりました。

match: none を指定する場合

先の検証で投入したコンフィグはいったん削除し、match: none を指定した Playbook で検証します。

Playbook
- hosts: iosal
  gather_facts: no

  tasks:
    - name: set ntp
      ios_config:
        lines:
          - ntp server 10.0.0.123
        match: none          # 追加
初回実行 (changed=1)
TASK [set ntp] *************************************************************
changed: [iosal1]

PLAY RECAP *****************************************************************
iosal1                     : ok=1    changed=1    unreachable=0    failed=0

今までなかっコンフィグを指定したため、実際に投入され、changed になりました。

再実行 (changed=1: べき等性を考慮しなかった結果)

同じ Playbook を使用してもう一度実行します。

TASK [set ntp] *************************************************************
changed: [iosal1]

PLAY RECAP *****************************************************************
iosal1                     : ok=1    changed=1    unreachable=0    failed=0

また changed になり、べき等性を考慮しなかった結果となりました。