Ansibleのntc-ansibleモジュール群まとめ (①概要、セットアップ編)

# 1. はじめに

Ansibleには、公式モジュール以外に、サードパーティーから提供されている各種モジュールがあります。
今回は、Network to Codeが提供するネットワークモジュール群`ntc-ansible`について、調査したことを備忘録としてまとめました。

# 2. ntc-ansible概要

### 2.1. 公式モジュールと比較した特徴

- マルチベンダーサポート
公式モジュールでは、基本的にNW機器のOS毎に、個別のモジュールが提供されています。
一方ntc-ansibleでは、1つのモジュールでマルチベンダーの機器を操作可能です。

- 多様なCLIログイン方式をサポート
公式モジュールでは、CLIログインのConnectionプラグインとしてnetwork_cliを使用します。
本プラグインはPythonライブラリであるparamikoを用いているため、サポートするログイン方式はSSHのみです。
一方ntc-ansibleでは、CLIログインでPythonライブラリのnetmikoなどを使用するため、SSHに加えTelnetでもログイン可能です。
※公式モジュールでもtelnetという専用モジュールがありますが、ログイン+コマンド実行機能のみで、例えばTemplateファイルで色々したいといったことができません。主にTelnetからSSHへの移行時に使うことを意図したモジュールのようです。
※Telnetはログイン時の認証情報や認証後の通信を平文でやりとりするため、セキュリティ上の観点から使うべきではありません。本記事もTelnetの利用を推奨するものではありません！！

### 2.2. モジュール一覧
2018年12月時点で、以下の8つのモジュールが提供されています。

| No. | モジュール名       | 内容              |
|:----|:-----------------|:------------------|
|  1  | ntc_show_command | APIを提供しないNW機器から構造化されたデータを取得。 |
|  2  | ntc_config_command | APIを提供しないNW機器へコマンドを送信。 |
|  3  | ntc_save_config | Running Configを保存。オプションで、Ansibleコントロールホストへファイルをバックアップ可能。 |
|  4  | ntc_file_copy | AnsibleコントロールホストからNW機器へファイルをコピー。 |
|  5  | ntc_reboot | NW機器を再起動。 |
|  6  | ntc_get_facts | NW機器からホスト名、機種、OSバージョン、シリアル番号、インターフェース情報などを収集。 |
|  7  | ntc_rollback | 主に2つの機能を実行。(1) チェックポイントファイル作成やRunning Configのバックアップ。 (2) 以前作成したチェックポイント/バックアップConfigへのロールバック。|
|  8  | ntc_install_os | 新規OSのインストール(プラットフォームによっては、Bootオプションのセットのみ)。 |

### 2.3. サポートベンダー
`ntc_show_command`と`ntc_config_command`モジュールは、netmikoがサポートしているベンダーであれば使用可能。 
[netmikoのサポートベンダー](https://pypi.org/project/netmiko/)
その他モジュールについては、Cisco Nexusはpyntc、Aristaはpyeapi、Cisco IOSはnetmiko、JuniperはPyEZを使ってサポート。

### 2.4. 参考URL
- GitHub　https://github.com/networktocode/ntc-ansible
- ntc-docs > ntc-ansible Modules (multi-vendor)  http://docs.networktocode.com/en/latest/


# 3. ntc-ansibleのセットアップ

### 3.1. 実行環境

| No. | ハード/ソフト     | バージョン         | 用途              |
|:----|:-----------------|:------------------|:------------------|
|  1  | CentOS | 7.5.1804 | ntc-ansibleをインストールする機器 |
|  2  | python | 2.7.5 |  |
|  3  | ansible | 2.7.0 |  |
|  4  | ntc-ansible | 0.1.0 |  |
|  5  | netmiko | 2.3.0 |  |
|  6  | textfsm | 0.4.1 |  |
|  7  | gtextfsm | 0.2.1 |  |
|  8  | terminal | 0.4.0 |  |
|  9  | Cisco CSR1000V | 15.2(2)E6 | Ansibleで管理する機器 |

### 3.2. セットアップ手順
※自分の環境用に多少カスタマイズした手順です。本家は[こちら](https://github.com/networktocode/ntc-ansible)を参照願います。
※Python、Ansibleはインストール済みの前提とします。

(1) 3.1. No.5~8のPythonライブラリをインストール

```text:
[user@localhost ~]$ sudo pip install netmiko
[user@localhost ~]$ sudo pip install textfsm
[user@localhost ~]$ sudo pip install gtextfsm   # 公式の手順には記載されていませんが、インストールが必要でした。
[user@localhost ~]$ sudo pip install terminal
```

(2) ntc-ansibleのGitクローン＆インストール

```text:
[user@localhost ~]$ git clone https://github.com/networktocode/ntc-ansible --recursive
[user@localhost ~]$ sudo chmod 755 ntc-ansible
[user@localhost ~]$ cd ntc-ansible
[user@localhost ntc-ansible]$ sudo python setup.py install
```

(3) ansible.cfgの修正

```text:
[user@localhost ntc-ansible]$ sudo vi ansible.cfg   # ntc-ansible用のcfgファイル

[defaults]
filter_plugins = filter_plugins
inventory      = /home/user/ntc-ansible/   # 追加
library        = /home/user/ntc-ansible/library/   # 追加
```

(4) バージョン確認

```text:
[user@localhost ntc-ansible]$ ansible --version
ansible 2.7.0
  config file = /home/user/ntc-ansible/ansible.cfg
  configured module search path = [u'/home/user/ntc-ansible/library']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Apr 11 2018, 07:36:10) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]
```

# 4. 終わりに

別記事で、いくつかのモジュールで動作確認を行った結果も投稿したいと思います。