てくなべ (tekunabe)

ansible / network / automation

JANOG43 レポートその3【ハッカソン編】スタッフ兼参加者として

はじめに

f:id:akira6592:20190201174616p:plain:w400
ハッカソン風景

2019/01/23-25 に山梨県甲府市コラニー文化ホール(山梨県立県民文化ホール)で開催された JANOG43 Meeting in Yamanashi に参加してきました。(ハッカソンは1/22)

本ブログでは、3回に分けてレポートします。

JANOG ハッカソンとは、ネットワーク運用における自動化や可視化などをテーマにして、チーム(または一人)で仕組みを作るイベントです。今回は、スタッフ兼参加者として関わらせていだきました。

本記事では、スタッフと参加者の両面での準備や当日の様子などをまとめます。

なお、Day2 の JANOG43 ハッカソン Wrap-up & Winnerでも、当日の様子やアンケートが公開されていますので是非ご覧下さい。



■ 経緯と準備

スタッフか参加者か

2018/09/19に、JANOGのメーリングリストに「[janog:14433] JANOG43 ハッカソン 開催のお知らせ & スタッフ応募 のお知らせ」というタイトルで案内がありました。 JANOG42 での初開催に引き続き2回目の開催です。JANOG42 では参加できなかったため、今回は何かしらの形で関りたいと思いました。

この時は、丸一日も集中力が持たないと思って、参加者ではなくスタッフとして応募しました。

スタッフミーティング・役割分担

計2回オンラインでのミーティングで役割分担や状況の共有、当日の流れの確認などを行いました。

一例ですが、役割としては以下のようなものがありました。

  • 応募者連絡窓口
  • 仮想環境準備
  • 会場ファシリティー
  • 当日司会
  • 優勝チーム投票&集計 → 私はこれを担当
  • 懇親会手配

準備の期間は一度もリアルで集まることはなかったのですが、オンラインミーティングの映像と、スタッフ向けのSlackで実写アイコンが推奨されていたため、当日に戸惑うことはあまりありませんでした。

テーマ案の書き込み

私が書き込んだのは以下の3つです。私自身がやるぞ、というわけではなく、参加者のアイディアのきっかけになればと思っていました。

  • パラメーターシートの自動生成
    • コンフィグかshowコマンドの結果を収集、パースしてテンプレートに埋め込み、パラメーターシート(markdown程度?)を生成する
    • Python / Ansible など
  • 障害発生時の情報収集の自動化
    • 障害発生を何かしらで検知、トリガーにして、障害調査に必要なshowコマンド結果を自動実行、収集する
    • Python / Ansible など
  • 障害発生時の自動復旧
    • 障害発生を何かしらで検知、トリガーにして、障害復旧に必要なコマンドを自動実行する(難しそう)
    • Python / Ansible など
  • 設定変更の事前検証の自動化
    • 設定変更しようとする内容が、意図した通りになるかをBafishで検証してOK/NGを返す。余裕があれば投入までパイプラインのようなもに
    • Batfish / Python / Ansible など

ほかにも、参加者などからさまざまなテーマが書き込まれました。実際になにをやるかは当日に最終決定するので、この時点では案出しと興味の表明程度です。



ハッカソン当日(Day0: 2019/01/22)

スタッフの朝はちょっと早い

f:id:akira6592:20190201170958p:plain:w400
「OUT」の文字は外から見ると逆に

会場となる山梨県立図書館に、スタッフは 9:00 集合。あまりちょうどいい特急がなく、早めの到着です。図書館は外から見ても伝わる素敵感でした。

会場の準備

f:id:akira6592:20190201171125p:plain:w400
チーム数が決まっていないなかで配置

2Fの多目的ホールが会場です。ここでスタッフは机やいす、電源タップなどの準備をしていきます。 10:00 に近づくと続々と参加者が到着しました。

チームとテーマ決め

開始のあいさつや、環境の説明が終わると、あらかじめ書かれたテーマ案について簡単に説明する時間が設けられました。これを聞いた後に、実際にチームを組んでいきます。

なお、最終的には以下の8つのチームになりました。

  • id1: トラッフィックコントロール最適化
  • id2: 「Linux標準教科書」のNotebook化
  • id3: NW構成管理とトラフィック経路の世代管理/ ルータ状態の記録・保存および管理、経路の見える化
  • id4: ルータの正常性確認の自動化
  • id5: ansible+githubフローでテスト自動化
  • id6: データ収集・オペレーション自動化によるNW運用の改善
  • id7: Telemetryを用いた障害検知と復旧の自動化
  • id8: NW flowとDNS 名前解決を合わせたデータ分析

私たちのチームは

f:id:akira6592:20190201171528p:plain:w400
チーム&テーマ相談中
大変ありがたいことに、親和性の高いテーマ案のチームが集まって、一緒にやろうとお誘いをいただいたて「Telemetryを用いた障害検知と復旧の自動化」に取り組むことにしました。なので、スタッフ兼参加者となりました。

OSPFによる冗長構成されたネットワークで、通常経路中ルーターのインターフェースに異常があった時に、自動でコスト変更をして経路を迂回させ、事後経路の情報を通知する、というものです。

利用ツールや技術は以下です。

  • 仮想ネットワーク機器(IOS XRv、vEOS)
    • XRv は Telemetry に対応したバージョンを持ち込みデプロイ
  • Telemetry
  • Prometheus
  • Ansible
  • Grafana
  • skack

ラボ環境

今回は、JPNIC様にご協力いただいて、IOS XRv、vSRX、cEOS、UbuntuCentOSが、数台ずつの環境となりました。もちチーム独自で準備した環境を利用してもOKです。

レッツ作業

各チームがテーマに沿ってモノを作り上げる作業をしていきます。

f:id:akira6592:20190201171626p:plain:w400
構成

私たちのチームでも構成を図にして、ルーター設定、Telemetry関連、Ansible関連のように役割分担をしていきます。 だいたい1つの役割につき1コンテナ(docker)を利用し、docker-compose でまとめる、といった構成です。軽いVMの代わりとしてコンテナを使いましたが、役割を分けつつ、最後は一つの成果物にしたいハッカソンのチームには相性が良いと思いました。

f:id:akira6592:20190201172259p:plain:w400
作業中

私は、Ansible の Playbook を Web API で実行させる仕組みのところを担当しました。 API といえば、Ansible Tower や AWX が持っている機能です。ですが、あえて最近知ってまだ試せていなかった ansible-runner-serviceに挑戦しました。 localhost を対象とした Playbook を実行することはできたのですが、インベントリを作成する方法が分からずかなり苦戦しました。

時間が途中でなくなってきたので、結局 flask で簡易的な Web API もどきを書いてしのぎました・・。

(後日談)

なお後日、YAML で定義すればよいことが分かりました。



発表と投票

17:00 で作業終了。この時間までに各チームで発表資料を作り、ここからは発表と投票の時間です。

f:id:akira6592:20190201173405p:plain:w400
発表中1

f:id:akira6592:20190201173255p:plain:w400
発表中2

投票は Slack 上で行いました。各チームの発表を聞いて、自分がいいなとおもったら、いいねのする形式です。

f:id:akira6592:20190201173047p:plain:w400
いいねのリアクションとして投票(画面は抜粋)

見事優勝したのは「NW flowとDNS 名前解決を合わせたデータ分析」をテーマにしたチームです。おめでとうございました!

優勝チームは Day2 の JANOG43 ハッカソン Wrap-up & Winner の枠でプレゼンする権利が与えられます。



■ Wrap-up & Winner

f:id:akira6592:20190201171918p:plain:w400
Wrap-up & Winner

Day2 の JANOG43 ハッカソン Wrap-up & Winner で、ハッカソンの概要、当日の様子、アンケート結果、優勝チームのプレゼンが行われました。

資料

アーカイブ配信 (2019/02/28 12:59 まで)



■ まとめ・感想

JANOG ハッカソンのスタッフ兼参加者としてあれこれをまとめました。

普通に使われる Ansible

ツールとしては、8チーム中5チームがネットワーク機器の操作に Ansible を利用していたのが印象的でした。

反省

みなさん技術力がとても高く圧倒されました。特に私が足りないと思ったの、Telemetry や監視ツールの知識です。

また、参加者として作業に集中しすぎてしまいました。スタッフとしてももっと他チームの様子も見たりすればよかったと思いました。(Ansibleの質問は少しだけ答えられましたが・・)

時間がいくらあっても足りない

前回のハッカソンは半日開催でしたが、短いという声が多く、今回は一日開催となりました。 ですが、一日でも足りず、チーム内で「なにを諦めて、どこを落としどころにするか」を決めるというタスクが自然発生します。 おそれくこれはいくら時間があっても足りない話な気がしています。

ハッカソン参加への不安を解消するには

テーマを決めるうえで大きなポイントは以下の2つです。

  • 当日に何を実現したいか(What)
  • 何を使うか(How: プログラム言語やツール)

What のほうがより重要だと感じています。もし、How のほうが強いのであれば、その How が活用されそうな他のチームを探して一緒にやるのが良いと思います。

How の面では、今回や過去のJANOGでも参考になるプログラムがありました。どんなツールで何ができるの?どう使うの?のヒントになると思います。

さいごに

とても楽しく、良い思い出になりました。ありがとうございました。

f:id:akira6592:20190201173549p:plain:w500
お疲れ様でした!

写真は JANOG43 スタッフの伊藤さんが撮影されたものも利用させていただきました。ありがとうございました。