てくなべ (tekunabe)

ansible / network automation / 学習メモ

【Ansible】net_get モジュールで SCP でコンフィグをバックアップする

■ はじめに

Ansible 2.6 で SCP/SFTP でネットワーク機器とファイルを送受信する net_get モジュールと、 net_put モジュール ができました。 このうち、この記事ではファイルを受信する net_get モジュールを使って、Cisco IOSstartup-config のバックアップを、Anislbe ホストにファイルとしてバックアップしてみたいと思います。 (Ansible 2.6.2 で確認)


■ 準備

IOS

予め IOS 側で SSH のほかに、SCP を有効にします。

ip scp server enable

Ansible ホスト側

Python (Ansible) で SCP するためのパッケージをインストールします。

pip install scp


■ Playbook

- hosts: ios
  gather_facts: no

  tasks:
    - name: scp test
      net_get:
        src: startup-config
        dest: ios_startp-config.txt

  vars:
    ansible_connection: network_cli
    ansible_network_os: ios
    ansible_user: testuser
    ansible_ssh_pass: testpass

■ インベントリファイル

必要な変数はすべて Playbook 側で定義済みです

[ios]
172.16.0.2


■ 実行

Playbook を実行します。

(ansible262) [vagrant@centos7 vagrant]$ ansible-playbook -i inventory net_get.yml 
PLAY [ios] ***************************************************************************

TASK [scp test] **********************************************************************
changed: [172.16.0.2]

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

無事に実行されました。

■ 確認

Ansible ホスト側で、ファイルが保存されたか確認します。

(ansible262) [vagrant@centos7 vagrant]$ cat ios_startp-config.txt

!
! Last configuration change at 12:24:10 UTC Tue Aug 7 20
18 by testuser
!
version 16.8
service timestamps debug datetime msec
service timestamps log datetime msec
platform qfp utilization monitor load 80
no platform punt-keepalive disable-kernel-core
platform console virtual
!
hostname RouterA

(...略...)

無事に保存されました。


■ まとめ

コンフィグをファイルとしてバックアップするだけでしたら、 ios_command モジュール や、ios_facts モジュール でも可能ですが、事情により、プラットフォーム非依存のモジュール(ansible_network_os 変数の定義は必要ですが)を利用したい場合は、この方法もありかと思います。