AnsibleでCisco IOSのコンフィグを標準機能だけで収集する

  • 8
    Like
  • 0
    Comment
More than 1 year has passed since last update.

1. 方針

ios_templateというモジュールにはbackupオプションというものがあり、
実行時にバックアップ用にコンフィグをとってくれるようです。
https://docs.ansible.com/ansible/ios_template_module.html

When this argument is configured true, the module will backup the running-config from the node prior to making any changes. The backup file will be written to backup_{{ hostname }} in the root of the playbook directory.

なのでこれを利用して、コンフィグの収集をしてみます。

※2016/10/08追記
ansibleのCHANGELOGによると、 ネットワークモジュールの
*_template モジュールの機能は、 *_config に統合され 2.4で削除されるようです。
https://github.com/ansible/ansible/blob/stable-2.2/CHANGELOG.md

All functionality from *template network modules have been combined into *config module

2. 各ファイルの準備

ios_templateの本来の用途はテンプレートファイルを用意して、流し込みをする
なのですが、今回はコンフィグ変更はしてほしくないので、空のテンプレートファイル
を用意して、それをPlaybookから呼ぶことにします。

2.1. Playbookの作成

getconfig.yml
- hosts: cisco   # イベントファイルで 192.168.1.1を定義済み。もちろん複数定義もOK。
  gather_facts: no
  connection: local

  tasks:
    - name: set
      ios_template:
        provider: "{{ cli }}"
        src: config.j2           # ★★別途定義するテンプレートファイル(今回は空)
        backup: true             # ★★バックアップを取得するオプション
        include_defaults: false  # これを指定しない場合「show run all」になります。
  vars:
    cli:   # 接続情報を辞書で定義(usernameとそれ以降はインベントリファイルから取得定義)
      host:     "{{ inventory_hostname }}"    # ホスト対象ホスト
      username: "{{ ansible_user }}"          # ログインユーザー
      password: "{{ ansible_password }}"      # ログインパスワード
      authorize: true                         # 特権モードに移行
      auth_pass: "{{ cisco_enable_secret }}"  # 特権パスワード

2.2. j2ファイルの作成

空のテンプレートファイルをPlaybookと同じディレクトリに配置します。
ここでは「config.j2」というファイル名にします。
空ファイルは避けたい場合は、!hoge などコンフィグに影響がない内容にしておきます。

3. Playbook実行

3.1. Playbook実行

バックアップコンフィグを書き出すときのパーミッションの関係で、sudoしてます。

user@ubuntu-vm:/etc/ansible$ sudo ansible-playbook getconfig.yml 

PLAY [cisco] *******************************************************************

TASK [set] *********************************************************************
ok: [192.168.1.1]

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

3.2. 収集コンフィグの確認

backupディレクトリの下に、ホスト名と日時を含むファイル名でコンフィグが
保存されていることを確認します。

user@ubuntu-vm:/etc/ansible$ head -n 10 backup/192.168.1.1_config.2016-06-15@22\:17\:32
Building configuration...

Current configuration : 7375 bytes
!
! Last configuration change at 22:06:22 JST Wed Jun 15 2016 by user
! NVRAM config last updated at 21:21:22 JST Wed Jun 15 2016 by user
!
version 12.2
no service pad
service timestamps debug datetime msec

ありました。

4. 注意点

  • 試した限り、もう一度実行すると古いバックアップは削除されます。

5. 参考情報

コンフィグファイルの名前を自分で決めたり、もっと柔軟にやりたい場合は
【Ansible】AnsibleでCisco機器を制御してみる(サンプルコード1 config収集編)
が参考になると思います。