ルータコンフィグ収集ツールConfigCollecor作りました

#概要
以前投稿したルータコンフィグ収集ツールを修正して、PyPIで公開しました。
[Cisco/Juniperルータのコンフィグを一元取得するツール]
(http://qiita.com/taijijiji/items/620908c1bec27e1ea933)

https://pypi.python.org/pypi/ConfigCollector
https://github.com/taijiji/ConfigCollector

初めてのPyPI登録だったので手間取りましたが、なんとかPyPIデビューすることができました。

#モチベーション
ルータコンフィグをGitで管理したかったのですが、Gitの前に、運用しているルータ群のコンフィグのコンフィグを集めるのが手間だったので、1コマンドで全ルータのコンフィグ収集ができるConfigCollectorを作りました。  

Gitコマンドも含めて自動化しようとも考えたのですが、「confilctした場合は人手で取捨選択したほうがよい」「機密情報であるルータコンフィグを強制アップロードさせると操作を間違った時にトラブルが出そう」「エラー時にgit removeなどのオプション機能を実装するのがめんどくさかった(実装が面倒な割に、ニーズがあるかよくわからない)」といった理由から、本ツールのターゲットは「複数のルータに対してSSHログインしてコンフィグを取得
・収集する」ことに限定しています。

#インストール
PyPIで公開したことで、pipコマンドでインストールできるようになりました。

```
pip install configcolletctor
```

pipを使ったことがない方はこちらの記事を参考にpipをインストールしてください。
[Pythonで一番最初に入れるべきパッケージ setuptools と pip]
(http://www.lifewithpython.com/2012/11/Python-package-setuptools-pip.html)

#使い方

インストール後、このようにしてツールを動かします。

```
configcollector -i [inventory_file] -o [output_dirctory]
```

- inventory_file
  - ルータ情報をJson形式で記述します。
  - ルータOSは下記の中から選びます。
     - JUNOS
     - IOS
     - IOS-XE
     - IOS-XR
 - inventory_file記述例
 
```
[
    {
        "hostname" : "router1",
        "username" : "user1",
        "password" : "aaabbbccc",
        "ipv4"     : "192.168.0.1",
        "os"       : "JUNOS"
    },
    {
        "hostname" : "router2",
        "username" : "user2",
        "password" : "aaabbbccc",
        "ipv4"     : "192.168.0.2",
        "os"       : "IOS-XR"
    },
    {
        "hostname" : "router3",
        "username" : "user3",
        "password" : "aaabbbccc",
        "ipv4"     : "192.168.0.3",
        "os"       : "IOS"
    }
]
```

- output_directory  
 取得したルータコンフィグが出力されるディレクトリです。  
 デフォルトでは、カレントディレクリが指定されます。

#使用例
ConfigCollectorは下記のようにして使います。

まずルータコンフィグが保存される出力先のディレクトリを作成します。

```
    % mkdir router_config
```

ConfigCollectorを実行します

```
    % configcollector -i sample_routers.json -o router_config/

    Accessing router: router1...
    Writing output file "router_config/router1"...
    Success : "router_config/router1"!
    Accessing router: router2...
    Writing output file "router_config/router2"...
    Success : "router_config/router2"!
    Accessing router: router3...
    Writing output file "router_config/router3"...
    Success : "router_config/router3"!
```

作成されたファイルを確認します。

```
    % ls router_config
    router1.txt  router2.txt  router3.txt
```

```
    % less router1.txt

    show configuration | no-more
    ## Last commit: 2015-05-01 17:00:00 JST by user1
    version x.x.x;
    system {
        host-name router1;
        time-zone Asia/Tokyo;
    (snip)
```

以上で完了です。

#本ツールを使ってルータコンフィグをGit管理する
本ツールで取得したルータコンフィグを以下の手順でGit管理することができます。

1.Git管理サーバを使ってルータコンフィグ用レポジトリを作成
2.ルータコンフィグの取得

```
 % configcollector -i sample_routers.json -o router_config/
```

3.git ステージングに追加　（更新候補として指定）

```
 % git add router_config/ . 
```

4.git コミット (更新を実行)

```
 % git commit 
```

5.git リモートレポジトリにアップロード (Git管理サーバにアップロード)

```
 % git push
 (初回のみ % git push origin master)
```

6.Git管理サーバで確認

# 所感
人生で初めてPyPIに登録しました。はじめてまともなOSSコミッターの仲間入りができたような気持ちで嬉しい限りです。
まだPyPIやOSSのお作法がわかっていないところが多分にあるので、ぜひフィードバックいただけると嬉しいです。
https://pypi.python.org/pypi/ConfigCollector
https://github.com/taijiji/ConfigCollector