Ansibleでネットワークを構成管理・自動化、なんて話を多く聞く昨今!NWエンジニアの皆さん如何お過ごしでしょうか。NWエンジニアはプログラムに触れる機会が少なめで、"コードを書いて自動化"みたいなアクションが苦手な方が多いのではないでしょうか?そんな中、AIツールも流行ってて『ChatGPTでプログラムを書ける』と聞きます。「じゃあ、ChatGPTにAnsibleやらせれば、とっつきやすく簡単にできるんじゃないの?」と思い、実際にやってみました。今回はそんなAnsible+ChatGPTの実験レポートをお届けします。【NW設定自動化】をAnsible+ChatGPTで知識ゼロからできるのか?ー前編はshowコマンド編です。
いちおうツール説明
ChatGPTとは?
ChatGPTのロゴ、WikipediaCommonsより引用
言わずと知れたOpenAI社の作った生成AI。基本は言語モデルであり、言語を受け付け、言語で返事をします。この入力言語の事を「プロンプト」と呼びます。プロンプトを細かく記載することで詳細な指示が可能。
せっかくなのでChatGPTに自己紹介を依頼してみましょうか、プロンプトはこんな感じで。
すると、以下のような感じで返事が返ってきました。
おっ!いいこと言いますね今回はこれを使って、Ansibleというツールのコードを自動的に作ってもらいます。
Ansibleって何?
Ansibleのロゴ、WikipediaCommonsより引用
構成管理ツールの一つ。オープンソースであるため自由に利用可能。SSH経由などで操作対象機器に接続し、あらかじめ決められた処理を行う事が出来ます。
"知識ゼロから"とは言うものの、最低限のAnsibleの構成くらいは知っておいた方が分かりやすいかな?ということで、構成要素とファイル構成について書いておきます。
Ansibleの構成要素
Ansibleの構成要素はざっくり書き出すと以下の通り。
・Ansibleコマンド … コマンドラインで実行するコマンド。プレイブックを指定する・プレイブック … Ansibleの骨組み、ここに処理を記載する ・HOSTS … 対象ホストを定義する箇所、IPアドレスなどを指定する ・VARS … 変数を定義する箇所、ログインIDやパスワードが変数に該当する ・TASKS … 処理内容。"モジュール"と呼ばれる定義済みのプログラムを利用する 用途ごと様々なモジュールが存在し、柔軟かつ正確な処理が可能
図にしてみました。こんな感じかな?
この構造を理解したり、漏れのないようコードを書いたりするのが大変!また星の数ほどあるAnsibleモジュールから適切なものを探して組み込むのも時間がかかります。
今回はこの辺をChatGPTにやらせることで簡単に知識ゼロからできるのか?という実験をやります。レッツトライ!
AnsibleをChatGPTで自動化してみる
始める前に、今回の環境の前提条件を書いておきます。こんな感じでやらせて下さい。
■前提条件・ChatGPTはGPT-4を利用・オペレーションはLinuxサーバで行う・Ansibleはオペレーションサーバにインストール済み・操作対象にはSSHで接続して実行する・操作対象はAristaのEOSで動作・操作内容はシンプルなshowコマンド
※本記事掲載のホスト名など固有情報はマスクします。掲載されている値はChatGPTが出力したサンプル値です。
以上、すごく簡単なshowコマンドでやってみます。これができなければ始まらない。
Ansible+ChatGPTでshowコマンドをとってみる
さっそくChatGPTにAnsibleのコードを出力させてみましょう。以下のような簡単なプロンプトを入力、
■プロンプトArista機器をAnsibleを用いて操作する方法を教えて下さい。初心者にもわかるシンプルなAnsibleのプレイブックで、インターフェイス「Eth49/1」の設定をshowコマンドで確認したいですどのようなやり方があるか教えて下さい
おっ、親切に前提条件から教えてくるようです。しんせつ。
続いて、インベントリファイルを生成してくれました。
そしてプレイブック。
実行コマンド、
以上、
ふむふむ。arista.eos.eos_commandモジュールでshowコマンドを送り、結果を debugモジュールで表示させてくれるようです。
ファイル構成のイメージとしては、こんな感じ。
知識ゼロなので、コピペでファイルを作成していきましょう。
オペレーションサーバでカタカタ。プレイブックとインベントリを作成。
プレイブックファイル.yml
インベントリファイル.ini ※上記はサンプル値です(コンプラ対策)
ファイルができたら、指定されたとおりのAnsibleコマンドを実行してみます。ぽち!
あっ!?失敗?
赤文字でfatalメッセージを吐いて、failed=1 となっています
知識ゼロということで、デバッグもChatGPTにやらせますよ。エラーメッセージをそのままChatGPTのプロンプトに打ちこみます。
すると、何かわかったらしく改善案を提案してきました。
上記のような対処方法が提案されました。なるほど、そもそも今回はSSHで接続する想定でしたが、eAPI(HTTP)で接続の設定になっていたようです。ChatGPTに修正を依頼します。
ふむふむ。ansible_connection: の箇所が"httpapi"から"network_cli"に変わりました。指示されたとおりインベントリを修正して、再度実行してみます。
今度は緑で OK=2 と表示、うまくいったようです。"show interface"コマンドの結果が出力されました。
OK。ひとまず、ChatGPTの指示どおりのコードでAnsibleを動かすことに成功しました。えらい。
ChatGPTにAnsibleの機能を追加させてみる
続いて、コードの改修をさせてみましょう。ログを吐き出す機能をつけてもらおうかな?プロンプトで依頼していきます。
さぁどうだ?
以下のようなプレイブックが出力されました。
ふむふむ。"file"、"copy"の二つのモジュールが追加されています。
新たにプレイブックを作成し、実行。
エラー無く実行できましたし、指定したとおりのファイル名でログファイルが出力されています。グッド。
もう一つ頼んでみましょう。自動化っていうと複数の機器に実行するものですよね。二台に対応するよう依頼してみましょうか。
おぉ!やり方を教えてくれたうえに、ファイル名にIPを入れる方法まで教えてくれました。しんせつ。
しかし、適用して実行してみると失敗。1台にしか適用されません。
すかさずChatGPTにツッコミを入れていきましょう。うまくいかないよ!
「ナイス気付きです!」ではなく、最初からChatGPT君が教えてくれたらよかったのですが、まぁいいでしょう。プレイブックを修正します。
実行。
うーーーん。二台にはできましたが、不完全。
arista1 が ok=3 なのに対して、arista2 が ok=1 になっています。結果を見てみると、ログファイルが生成されていませんでした。
再度ChatGPT聞こうとしたら、何か言ってます。
ふむふむ。作業中のプレイブックを貼ればもっと正確な結果が出せると。
依頼事項と一緒に、前回ChatGPTから出力されたプレイブックを貼り付けてみます。ぺたり。
原因がわかったらしく、新しいプレイブックが届きました。こちらを実行すると…
いけました!
だいぶやりとりに時間がかかりましたが、"二台に対して特定のログを採取するAnsible"が完成。
この可変値の「ホスト名」「コマンド」を本番の値に書き換えるだけ(ここは手作業)で、ログとりツールとして使えるのではっ!
応用して、
・Ansibleをcronで動かして定時ログとり・障害試験とかで全機器のログをとる
とかは知識ゼロでも簡単に自動化できるのではないでしょうか?
【検証結果】Ansible+ChatGPTで知識ゼロからshowコマンドの自動化はできました。が、一発で出来ない場合があり、ChatGPTとやりとりが必要。丁寧にプロンプトを書いたり、Ansibleの基礎知識がわかっていると早いかも。
というところでしょうか、
慣れてきたら、テラタームマクロを書くよりかんたんかも?
おまけ:ChatGPTにAnsibleのshowプレイブックを書いてもらうサンプルプロンプト
おまけで、一撃で出力できそうなサンプルプロンプトを書いておきます。
【サンプル プロンプト】以下の要件を満たすAnsibleのプレイブックとインベントリファイルを作成して下さい。■前提条件・Arista機器を対象にする・SSHで接続して実行する・シンプルな構造にする・オペレーションはLinuxサーバで行う・オペレーションサーバにAnsibleはインストールされているものとする■実行内容・複数台の機器に複数のコマンドを実行・結果をログファイルに保存・ログファイルはディレクトリ YYYYMMDD を作成しその配下に保存する・ファイル名は YYYYMMDD_HHMMSS_IPアドレス.txt とする※YYYYは西暦4桁、MMは月を2桁、DDは日を2桁、HHは時間を2桁、MMは分を2桁、SSは秒を2桁■機器192.168.1.1192.168.1.2■コマンドshow int statusshow int version
※回答にゆれがあるので、思った通りにいかないときはプロンプトをよしなに変えたり、追加で依頼したりしてみてください。
以上、
長くなったのは今回はここまで!
後編ではChatGPT+Ansibleで設定変更自動化にチャレンジしてみたいと思います。
まとめ
Ansible+ChatGPTで知識ゼロでもshowコマンドを実行させるプレイブックとインベントリの出力に成功。機能追加や困ったときのデバッグにも対応できました。
欠点としては、ChatGPTとのやりとりに時間がかかること。
ひとむかし前は非対応だったはずなのですが、進歩しましたねChatGPT。えらい。
Ansibleに抵抗感があるNWエンジニアのみなさん、ひとまずChatGPTに依頼してみて、だまされたと思って言われた通りやってみたらラクできるかもしれませんよ。お試しあれ。
ご拝読ありがとうございました。
【NW構成図】は一周まわってエクセルで書けば良いのでは?という提案