Teratermマクロフレームワーク「Teracotta」チュートリアル ～自動ログイン編

以前 [Teratermマクロのフレームワークを作った - Qiita](https://qiita.com/guskma/items/704d421d599dd8d8430f) という記事でTeracottaを紹介させていただきました。

結構多くの人に読んでいただき、応援の言葉もいただき大変ありがたく思っています。

さて紹介したまでは良いですが、よく考えてみたら「サンプルファイル読んで試してみてくれ！」と丸投げジャーマンスープレックスをかましたきりで、じゃあ具体的にどんなことが出来るの？　みたいな設定例を紹介していませんでした。申し訳ねぇ。

ということで、今回はチュートリアル第1弾ということで、みんながTeratermマクロでよくやっているような自動ログインマクロをteracottaで作ってみようと思います。

## 0. 前提環境

今回は3台のNW機器にログインするシナリオを書いてみます。

![NW.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/391534/215ffee8-8859-5bd0-2d74-d1da8ee5e31e.png)

ベンダーも接続方法もバラバラなので、普通にTeratermマクロで自動ログイン処理を加工とすると結構面倒です。

これがTeracottaであれば一つのシナリオファイルを書くことで解決します。

## 1. 準備

TeracottaをGitHubから落としてきて適当なフォルダに展開しましょう。

Teracotta本体のダウンロードはこちらから↓
[Releases · guskma/teracotta](https://github.com/guskma/teracotta/releases)

最新バージョンの項目から「Source Code(zip)」と書かれたリンクをクリックすれば、一通りのセットがダウンロードできます。

簡単なファイル/フォルダ構成だけ解説します。

```:フォルダ構成
teracotta/
teracotta.ttl           #本体 (※)
hosts-example.csv       #インベントリサンプル (※)
config-example.ini      #設定ファイルサンプル (※)
api/                    #TeracottaAPI格納フォルダ
 + _global/             #共通API
 | cisco-ios/           #CiscoIOS用API
 | ...and more
user-api/               #ユーザAPI格納フォルダ
scenario/               #シナリオ格納フォルダ
 + scenario-example.ini #シナリオサンプル (※)
lib/                    #Teracotta用ライブラリ格納フォルダ
 + sys/                 #Teracottaシステム用ライブラリ
 | ...and more
```

今回のチュートリアルで触るファイルは上記4ファイルです。

他にもごちゃごちゃとありますが、全て無視してください。
※当然ですが削除はしちゃダメですよ！

## 2. 必要なファイルを準備する。

Teracottaを実行する上で最低限用意するべきファイルは

- `config.ini`
- `hosts.csv`
- `scenario.ini`

の3ファイルです。
それぞれサンプルファイルが用意されているので、リネームして編集しましょう。

### config.ini

`config.ini` に関しては、サンプルファイルをリネームするだけで特に編集することはありません。
コメントを確認し、自分の環境に合わせて変更するべき物があれば都度修正してみてください。

### hosts.csv

ログインに必要な機器情報を記載します。

|sysname|dest          |port|protocol|type     |scenario|loginuser|password |become|logfilename       |
|-------|--------------|----|--------|---------|--------|---------|---------|------|------------------|
|test-01|192.168.1.10  |23  |telnet  |cisco-ios|login   |         |cisco    |cisco |log\c3560-log.txt |
|test-02|192.168.1.20  |23  |telnet  |screenos |login   |netscreen|netscreen|      |log\ssg5-log.txt  |
|test-03|              |    |console |fortios  |login   |admin    |         |      |log\fg100e-log.txt|

CSVファイルはカンマ区切り、囲み文字はダブルクォーテーションかシングルクォーテーションを使ってください。
囲み文字を使っても改行には対応しておりませんので、お気をつけください。

文字コードはShift-JISで保存しましょう。
簡単に動作確認はしていますが、もしかしたら思わぬエラーが起こる可能性もあります。その場合はここのコメント欄でもGitHubのIssueでも良いので、お気軽にお問い合わせください。

### scenario.ini

実際にどのような動作をさせるか、処理内容をこのiniファイルに書いていきます。

`scenario.ini` と書いていますが、今回は `login.ini` というファイル名にして `scenario` フォルダ内に保存してください。
これは前項の `hosts.csv` 内で `scenario` 列の値を `login` にしていることが理由です。

```ini:login.ini
; 自動ログインシナリオ
; ログインするだけして後は作業者の手に委ねます
[part_0]
API=connect

[part_1]
API=logopen

[part_2]
API=login

[part_3]
API=unlink
```

行頭にセミコロンまたはシャープを入れることでコメント行として認識されます。
こちらもShift-JISで保存してください。

## 3. Teracotta実行

`ttpmacro.exe` に `teracotta.ttl` を読み込ませます。

この実行方法は、一般的なTeratermマクロと同じです。
ttlファイルに `ttpmacro.exe` が関連付けられている場合は、 `teracotta.ttl` をダブルクリックで動作します。
Teratermが立ち上げてある場合は、[Tools]->[macro] から呼び出すことも可能です。
コマンドラインから呼び出す場合は以下のようにします。(バッチファイルにしても構いません)

```batch:コマンドプロンプト
SET TTPMACRO="C:\Program Files(x86)\teraterm\ttpmacro.exe"
SET TERACOTTA="C:\(teracotta格納フォルダ)\teracotta.ttl"

%TTPMACRO% %TERACOTTA%
```

コマンドプロンプトから実行する場合は、 `teracotta.ttl` の指定先を絶対パスで書くようにしてください。
これはTeratermの仕様の問題で、相対パスで指定した場合に `ttpmacro.exe` の格納フォルダパスが基準となってしまうからです。

`teracotta.ttl` を実行すると、各機器に自動でログインされたあとでマクロが停止します。
ログ取得も自動で開始されており、teracottaフォルダ内にあるlogフォルダ内にログファイルが出力されています。

## 4. エラーが発生したら

teracotta.ttl実行後、`log\error.log` というログファイルが生成されます。

これはTeracotta自身のシステムログです。何かしらのエラーが発生した場合、このファイルにエラーメッセージが出力されるようになっています。
Teracottaが正しく動かなかった！というときの切り分けに活用してください。

## 色々な使い方が出来るように随時開発中

現状では限られた使い方でしかTeracottaの真価は発揮できていません。

しかし！色々なシーンで使うことを想定して地道に開発中ですのでちょくちょく見に来てくれると嬉しいです！
GitHubの右上に「Watch」ボタンがあるので、コレをクリックしてもらえればマイページに新着情報が表示されるようになりますし、新着コミットがあったらメール通知してくれたりもします。

不具合や、特定シーンを想定した機能が欲しいという要望がある方はIssueに書き込んでくれても大丈夫です。出来る限り実装できるように努めます。

では、今後ともTeracottaをよろしくおねがいします！