ついて、思いの外反響があったのでみんな似たようなところで苦労してるんだろうなーと勝手に思っています。実際いろいろ作ってたときの記録などなどを元に少しバッドノウハウ系の話をさらってみました。やっていたもの自体は会社でのあれこれの話とかも入って出せないのですが。年以上前の話になるので、最近の環境ではそんなに当てはまらない話があるかもしれませんが、もともと、かつてこういうところで困ったから今どういう動きがあるのか、というのを見てもらえればいいやと思っているので問題ないでしょう。皆様のCLIベース自動化に関する愚痴・鬱憤・バッドノウハウ体験をお待ちしております。Janetterとつぶやいてみたりしたらいくつかリプライもらったのでその辺も含めてまとめておきます。セッションを張る場合、始めてアクセスするホストの鍵確認応答でこけるというのはみんなやったことがあるのでは...。まあテスト時とかはともかく、認証周りの運用とかはまじめに考えないとだめです。strictHostKeyChecking=noログインリトライログイン処理のリトライ(ユーザ名あるいはパスワードが正しくないときに、数回ログインを繰り返す)処理を入れるかどうか。1回でうまくログインできないケースがあったんだと思われるけど状況詳細不明です。リトライカウント入れておかないとループします...ログイン後の強制プロンプト出力のためのリターン入力ログインした時にプロンプトが出るマシンと、そうでないマシンがあるから無駄にEnter1回入れるってのは、まさにバッドノウハウ感ある。Janetterやりますよね。コマンドのエントリポイントが返ってこないと先に進まないんですよ...。振るところから自動化するというのをやったことがあるんですが、リモートログイン時とシリアル利用時にプロンプトの出方が違うというのもあります。あと、初期状態だと初期設定ウィザードとかに入る機材がそれなりにあるので、そこをキャンセルした上で設定コマンド流し込むとか作ってた。値を見て、知らないやつだとエラー返すというのがありました...(v9だったか?)。エラー出されるので環境変数設定し直してるコードが出てきた。さんはこの辺いろいろ変わったという話もあり...最近のは触ったことないんですがどうでしょうね。なってしまって...。自動化を強いられるという地獄。ような確認応答をする必要があるというのは前回にも書いたとおり。問題は、ログインしたい時点で、CLI上、どのモードになってるかなんですよね。したら、いったんそのモードを抜けてからログアウトコマンドを打たないとちゃんとログアウトしてくれないわけです。いくつか対応策はあります。投げ込むコマンドを記述する段階でログアウトまで意識したコマンドを記述しておく。多いと処理中断したり少ないとうまくログアウトしなかったり、チェックが難しいです。入ったりするのでそこがどうなるか。モード遷移とかも管理するのかとかね...。まとめて流すようにしておくとかもあるかもしれない。文字以外を書いてくる人がいます。パラメタの埋め込みテンプレートエンジンとか使ったりするわけですが...。扱うかは考えておく必要があります。バリデーションも...省略記法が許されるモノとかがあると非常に怪しげに。皆様のCLIベース自動化に関する愚痴・鬱憤・バッドノウハウ体験をお待ちしております。10進なので軽微ですが。物凄い細かいところだと、長い文字列を受け付けるのに勝手に32文字で切るとかありますね。処理できないからしっかり見る、文字列は大半がコメントだから適当。的に考えると、サニタイズされてなくて怖い。そのまま出てきて引っかかって処理中断とかね...仕方がないので、このコマンドに対しては、次のプロンプトが出るまでエラーは無視する、といった処理いれるわけです。ループ回避これは処理系依存の話があるかもしれないですが...。イベントに対してコールバックを設定しておく形になるのでそれを想定してください。したプロセスから返ってくる応答(文字列)について正規表現マッチして、マッチした正規表現に対して設定されているコールバックを呼ぶ。正規表現は複数登録できて、上から順にチェックしていく...という動作をします。上記の、あるコマンドに対するエラー無視とか、何かを無視して先に進むようなケースはリスクがあります。コマンド出力にプロンプト相当の文字列があるので無視して先に進む、みたいなのを考えるとわかりやすいと思います。下手すると無限にプロンプト待ちになります。特権モード移行も、多くのネットワーク機器は特権モードになるとプロンプトが変わるんですが、あるデバイスでは、特権ユーザではいると最初から特権モード状態だったりして、特権モードコマンドの前後でプロンプトが変化しないことがあります。これはプロンプトマッチの順序を間違えると、やっぱり無限ループする。(モード前後でプロンプトが変化しない場合、特権モードのプロンプトを待ち続ける。)ということで、無限(プロンプト待ち)ループを回避するために、一つのコマンドに対してのイベントループカウンタとかをいれて一定以上ループが回っている場合は強制終了させる、といった回避策を入れたりしてました。そのほかいろいろUNIXは真祖(POSIX)があって、基本的な部分はそんなにぶれないけど、NW機器は真祖がいないだよね。セキュリティ機器は中身がBSD/Linuxだけど僕らが触る部分はラッピングされた外の世界だったりするので、こんなにバラバラ。コマンドラインへ遷移できる機器はまだマシな方。かすらない場合があるからね。