© BIGLOBE Inc. 20161
JSNAPyとPyEZで作る
次世代ネットワークオペレーション
の可能性
BIGLOBE Inc.
Taiji Tsuchiya
© BIGLOBE Inc. 20162
自己紹介
l 土屋 太二(30)
l BIGLOBEバックボーンネットワーク担当
p ASネットワーク(AS2518)の
設計/開発/検証/運用/顧客サポート/営業支援
p ネットワーク運用の自動化システム開発
0% 20% 40% 60% 80% 100%
NW設計/検証
30%
NW運用
40%
サポート
15%
自動化
15%
仕事の割合
© BIGLOBE Inc. 20163
一般的なネットワーク作業フロー
1.  手順書/コンフィグ 作成
2.  手順書/コンフィグ 査閲/承認(2-3名が査閲)
3.  作業実施
1.  ルータログイン
2.  ルータ状態確認
3.  ルータ設定
4.  ルータ状態確認
5.  ネットワーク正常性確認
6.  コンフィグ保存
4.  作業完了報告
© BIGLOBE Inc. 20164
ネットワーク作業自動化のための要件
l 全工程において極力、自動化/省力化
できること
p ただしルータ設定投入可否は
作業者の判断に委ねるかは議論の余地あり
l ネットワーク技術者による
事前レビューが可能であること
l 作業時のログを残せること
© BIGLOBE Inc. 20165
Juniper公式ツールで実現
l PyEZ
p JUNOSルータを設定するPythonライブラリ
Ø ルータへ設定投入および状態取得が可能
Ø JUNOS version11.4以降の利用可能
l JSNAPy
p JUNOSルータの状態管理ツール
Ø 「あるべき状態」を定義し、合否 を判定
Ø スナップショットの取得 / 比較 / チェック を実施
Ø コマンドラインツールとPythonライブラリを保有
https://github.com/Juniper/jsnapy/wiki
https://github.com/Juniper/py-junos-eznc
※JSNAPy最新版v1.0.0は不具合があったので、未リリースのv1.0.1を利用。
pip install git+https://github.com/Juniper/jsnapy.git でダウンロード
※PyEZ最新版v2.0.1を利用。 pip install junos-eznc でダウンロード
© BIGLOBE Inc. 20166
PyEZ: ルータ設定ライブラリ
l 主な機能
l  ルータ設定の投入、読み込み
l  load / commit / commit check / diff / rollback / lock
など手動設定とほぼ同じ機能が利用可能
l  本体情報やARP/ルーティングテーブル情報などの取得
l  OSインストール/シャットダウン/再起動
Router
PyEZ
Server
NETCONF over SSH
open
load config_file
(overload | merge | replace )
diff / commit check
commit / rollback
© BIGLOBE Inc. 20167
set_firefly1_change_hostname.py
from jnpr.junos import Device
from jnpr.junos.utils.config import Config
# ルータとのSSH/NETCONFセッションを確立
dev1 = Device( host=’192.168.0.1’, user=’user1’, password=’password1')
dev1.open()
dev1.bind(cu=Config)
dev1.cu.lock()  # 他セッションから設定されないようにロックをかける
# ルータ設定ファイルを読み込み (この時点では未コミット)
conf_filename = "./change_hostname.conf”
dev1.cu.load(path=conf_filename, format="text", merge=True)
print dev1.cu.diff()         # 設定差分を確認(show | compare 相当)
print dev1.cu.commit_check()  # コミットチェックを実施
dev1.cu.commit() # コミットを実施
dev1.cu.unlock() # ロックを解除
dev1.close() # セッションを切断
PyEZ: サンプルコード(PyEZ関連部分を抜粋)
change_hostname.conf
system {
host-name firefly1_changed_by_PyEZ;
}
© BIGLOBE Inc. 20168
PyEZ: 実行結果
前ページのコードに加えて、
デモ用に進捗状況を表示実装
を追加しています。
© BIGLOBE Inc. 20169
JSNAPy: ルータ状態管理ツール/ライブラリ
p 主な機能
- スナップショットを取得
jsnapy --snap <スナップショット名> -f <定義ファイル>
- 2つのスナップショットの差分状態を比較してチェック
jsnapy --check <スナップショット名1> <スナップショット名2> -f <定義ファイル>
- 取得した時点のスナップショットが、定義した条件を満たすかチェック
jsnapy --snapcheck <スナップショット名> -f <定義ファイル>
Router2 Router1
Routr2 Router1
JSNAPy
Server
JSNAPy
Server
状態1
状態2
状態1のshow interface結果を保存
jsnapy --snap snap01
状態2のshow interface結果を保存
jsnapy --snap snap02
状態1と状態2の差分をチェック
jsnapy --check snap01 snap02
インタフェースがupになっているかチェック
jsnapy --shnapcheck snap01
© BIGLOBE Inc. 201610
JSNAPy: 定義ファイルの例
l ホスト名が「router1_changed_by_PyEZ」か否か確認
test_hostname:
- command: show version
- item:
xpath: /software-information
tests:
- is-equal: host-name, router1_changed_by_PyEZ
info: "Test : OK"
err: "Test : NG"
test_hostname.yml
hosts:
- device: 192.168.0.1
username : user1
passwd: password1
tests:
- ./tests/test_hostname.yml
config_router1.yml
© BIGLOBE Inc. 201611
JSNAPy: コマンドライン実行結果
1 9 2 . 1 6 8 . 0 . 1
1 9 2 . 1 6 8 . 0 . 1
© BIGLOBE Inc. 201612
PyEZ と JSNAPy を使って
ISPネットワーク設定作業を
自動化してみました。
(ご利用の注意)
現時点で、社内で正式に展開しているツールではありません。
社内で頻繁に発生する実作業を想定したシミュレーションです。
「うちで使ってみたけど障害出たぞ!」と申されましても
責任は一切負いかねますので、予めご承知ください。
© BIGLOBE Inc. 201613
ISPの設定作業例: Private Peering
l ASを所有する組織同士が同一DC内で
eBGPによる経路交換を実施する作業
l 手順
p 組織間での交渉/構内配線の手配
p ケーブル配線
p インタフェースの設定
p 疎通確認
p eBGP設定の投入
p 経路広報の確認
p トラフィック変移状態の確認
自動化対象
Router1
(AS65001)
Router2
(AS65000)
経路情報
経路情報
© BIGLOBE Inc. 201614
システム構成
Firefly1Firefly2
PyEZ
ライブラリ
インタフェース設定
eBGP設定
完了済
物理接続 完了済
JSNAPy
ライブラリ
シナリオファイル
シナリオ
実行プログラム
査閲/承認
ネットワーク技術者
(査閲者)
ネットワーク技術者
(作業者)
作成 実行
インタフェース設定 未設定
eBGP設定 未完了
システムとの疎通設定 完了済
•  シナリオファイルを作成
•  作業実施/中止を判断
•  ルータ設定のコミット可否を判断
•  作業手順を記述
•  対象ルータ情報を記述
•  ルータ設定、テストの手順を記述
ルータの設定投入
•  インタフェース設定
•  eBGP設定
ルータ状態の正常性テスト
•  インタフェース状態テスト
•  BGP 状態テスト
•  経路送信テスト
•  経路広告テスト
コミット可否は
作業者が判断
•  シナリオファイルから情報抽出
•  ルータコンフィグの生成
•  テストファイルの生成
•  ルータ設定投入(PyEZ)を実行
•  ルータ状態テスト(JSNAPy)を実行
© BIGLOBE Inc. 201615
シナリオファイル 記述例
purpus: |
本作業は、abc株式会社(AS65002)が
運用するルータと、拠点Xでプライベート
 ピアを構築することを目的としている。
operator: Taiji Tsuchiya
operation_date: 20161115
hosts:
management_ipaddress:192.168.34.16
hostname: firefly1
model: firefly-perimeter
username: user1
password: password1
scenario:
- test_hostname
- test_model
- test_interface:
interface_name: ge-0/0/2
interface_status: down
- set_add_interface:
interface_name: ge-0/0/2
interface_address_ipv4: 192.168.35.1
interface_subnet_ipv4: 30
interface_description: AS65002_peer
- test_interface:
interface_name: ge-0/0/2
interface_status: up
- set_add_bgp_neighbor:
interface_name: ge-0/0/2
neighbor_asnum: 65002
local_asnum: 65001
neighbor_address_ipv4: 192.168.35.2
neighbor_description: AS65002_peer
- test_bgp_neighbor:
neighbor_address_ipv4: 192.168.35.2
neighbor_status: Established
青文字: ルータ状態確認手順
赤文字: ルータ設定変更手順
© BIGLOBE Inc. 201616
コンフィグファイル一例
protocols {
bgp {
family inet {
unicast;
}
group {{ interface_name }} {
type external;
neighbor {{ neighbor_address_ipv4 }} {
description {{ neighbor_description }};
peer-as {{ neighbor_asnum }};
}
}
}
}
- set_add_bgp_neighbor:
interface_name: ge-0/0/2
neighbor_asnum: 65002
local_asnum: 65001
neighbor_address_ipv4: 192.168.35.2
neighbor_description: AS65002_peer
JUNOSルータ
設定変更を実施
テンプレートファイル
テンプレート用パラメータ
(前述のシナリオファイルより抽出)
© BIGLOBE Inc. 201617
実行結果 一部抜粋
緑文字: 正常が確認できている部分
赤文字: 異常が確認できている部分
黄文字: 作業者に判断を委ねている部分
© BIGLOBE Inc. 201618
デモ
https://goo.gl/vR8cEE
© BIGLOBE Inc. 201619
所感 自動化システムについて
l うまくいったポイント
p 2-3時間程度かかる作業が、10分で完了!
p 作業者の負担軽減、手順書作成/査閲を時間短縮
p (Juniperツール充実のおかげで)
実働二週間でここまでできましたJ
l 悩ましいポイント
p YAML形式の手順書を、運用現場に
受け入れてもらえるか。理解と協力が必要。
p マルチベンダー対応も見据えた設計開発が必要。
Juniperツールと同じことが他社APIで実現できるか。
© BIGLOBE Inc. 201620
所感 Juniperツールについて
l PyEZ : ルータ設定ライブラリ
p 手動設定と同様の機能が実現でき、非常に強力
p ドキュメントやサンプルコードも充実
p JUNOS 11.4以降で動作するので導入の敷居が低い
l JSNAPy : ルータ状態管理ツール
p テストを人が読める記述方法で定義できるのは優秀
p プログラムから実行する機能はやや物足りない
Ø 設定ファイルをテンプレート化できない(PyEZは可能)
Ø xpath指定や条件文の記述、テスト結果取得にやや苦労
p ドキュメントが少なく、ノウハウを貯める必要あり
© BIGLOBE Inc. 201621
(Juniperさんに限らず)メーカーさんにお願いしたいこと
l ネットワーク作業を自動化するための
API/便利ツールを提供してください!
p PyEZ、JSNAPyの存在、本当に助かります。
p ネットワーク装置の自動化のしやすさは、
将来的に機器選定基準の一つに十分なりえます。
l 自動化導入のハードルを下げてください!
p ドキュメントの充実
p ユースケースごとのサンプル、Tips公開
p 自動化の導入ケースの紹介
Ø 成功パターン、失敗パターンなど
© BIGLOBE Inc. 201622
コミュニティの皆さんにお願いしたいこと
l 業務自動化にぜひトライしてみてください!
p 小さいことでもOK! 下手くそでもOK!
p オープンソースソフトウェアに貢献できることは
ソフトウェアが書けなくても、たくさんあります。
Ø 使ってみる / バグを知らせる / 利用事例の共有 etc.
l ネットワーク運用自動化の要求/知見/利用事例を
メーカーさんやコミュニティにフィードバックしましょう
© BIGLOBE Inc. 201623
まとめ
l PyEZ: ルータ設定ライブラリ
l JSNAPy: ルータ状態管理ツール/ライブラリ
を使って
ISPネットワーク設定作業を自動化してみました。
本発表をきっかけに、みなさまの職場で
自動化への挑戦がたくさん出てくることを
心から楽しみにしています。
© BIGLOBE Inc. 201624
ご参考
l 本日の詳細内容をブログで紹介しています。
http://qiita.com/items/065eef08f7b673cb7bb6
l 発表で使ったすべてのプログラムを公開しています。
p PyEZ利用例:   https://github.com/taijiji/sample_pyez
p JSNAPy利用例: https://github.com/taijiji/sample_jsnapy
p ISP作業自動化デモ: https://github.com/taijiji/scenarioJUNOS
l ネットワーク運用自動化勉強会 NetOpsCoding
で紹介した自動化事例もご参照ください
p まとめページ https://github.com/netops-coding/netops-tips/wiki
p NetOpsCoding AdventCalendar2016
http://qiita.com/advent-calendar/2016/netopscoding

JSNAPyとPyEZで作る次世代ネットワークオペレーションの可能性

  • 1.
    © BIGLOBE Inc.20161 JSNAPyとPyEZで作る 次世代ネットワークオペレーション の可能性 BIGLOBE Inc. Taiji Tsuchiya
  • 2.
    © BIGLOBE Inc.20162 自己紹介 l 土屋 太二(30) l BIGLOBEバックボーンネットワーク担当 p ASネットワーク(AS2518)の 設計/開発/検証/運用/顧客サポート/営業支援 p ネットワーク運用の自動化システム開発 0% 20% 40% 60% 80% 100% NW設計/検証 30% NW運用 40% サポート 15% 自動化 15% 仕事の割合
  • 3.
    © BIGLOBE Inc.20163 一般的なネットワーク作業フロー 1.  手順書/コンフィグ 作成 2.  手順書/コンフィグ 査閲/承認(2-3名が査閲) 3.  作業実施 1.  ルータログイン 2.  ルータ状態確認 3.  ルータ設定 4.  ルータ状態確認 5.  ネットワーク正常性確認 6.  コンフィグ保存 4.  作業完了報告
  • 4.
    © BIGLOBE Inc.20164 ネットワーク作業自動化のための要件 l 全工程において極力、自動化/省力化 できること p ただしルータ設定投入可否は 作業者の判断に委ねるかは議論の余地あり l ネットワーク技術者による 事前レビューが可能であること l 作業時のログを残せること
  • 5.
    © BIGLOBE Inc.20165 Juniper公式ツールで実現 l PyEZ p JUNOSルータを設定するPythonライブラリ Ø ルータへ設定投入および状態取得が可能 Ø JUNOS version11.4以降の利用可能 l JSNAPy p JUNOSルータの状態管理ツール Ø 「あるべき状態」を定義し、合否 を判定 Ø スナップショットの取得 / 比較 / チェック を実施 Ø コマンドラインツールとPythonライブラリを保有 https://github.com/Juniper/jsnapy/wiki https://github.com/Juniper/py-junos-eznc ※JSNAPy最新版v1.0.0は不具合があったので、未リリースのv1.0.1を利用。 pip install git+https://github.com/Juniper/jsnapy.git でダウンロード ※PyEZ最新版v2.0.1を利用。 pip install junos-eznc でダウンロード
  • 6.
    © BIGLOBE Inc.20166 PyEZ: ルータ設定ライブラリ l 主な機能 l  ルータ設定の投入、読み込み l  load / commit / commit check / diff / rollback / lock など手動設定とほぼ同じ機能が利用可能 l  本体情報やARP/ルーティングテーブル情報などの取得 l  OSインストール/シャットダウン/再起動 Router PyEZ Server NETCONF over SSH open load config_file (overload | merge | replace ) diff / commit check commit / rollback
  • 7.
    © BIGLOBE Inc.20167 set_firefly1_change_hostname.py from jnpr.junos import Device from jnpr.junos.utils.config import Config # ルータとのSSH/NETCONFセッションを確立 dev1 = Device( host=’192.168.0.1’, user=’user1’, password=’password1') dev1.open() dev1.bind(cu=Config) dev1.cu.lock()  # 他セッションから設定されないようにロックをかける # ルータ設定ファイルを読み込み (この時点では未コミット) conf_filename = "./change_hostname.conf” dev1.cu.load(path=conf_filename, format="text", merge=True) print dev1.cu.diff()         # 設定差分を確認(show | compare 相当) print dev1.cu.commit_check()  # コミットチェックを実施 dev1.cu.commit() # コミットを実施 dev1.cu.unlock() # ロックを解除 dev1.close() # セッションを切断 PyEZ: サンプルコード(PyEZ関連部分を抜粋) change_hostname.conf system { host-name firefly1_changed_by_PyEZ; }
  • 8.
    © BIGLOBE Inc.20168 PyEZ: 実行結果 前ページのコードに加えて、 デモ用に進捗状況を表示実装 を追加しています。
  • 9.
    © BIGLOBE Inc.20169 JSNAPy: ルータ状態管理ツール/ライブラリ p 主な機能 - スナップショットを取得 jsnapy --snap <スナップショット名> -f <定義ファイル> - 2つのスナップショットの差分状態を比較してチェック jsnapy --check <スナップショット名1> <スナップショット名2> -f <定義ファイル> - 取得した時点のスナップショットが、定義した条件を満たすかチェック jsnapy --snapcheck <スナップショット名> -f <定義ファイル> Router2 Router1 Routr2 Router1 JSNAPy Server JSNAPy Server 状態1 状態2 状態1のshow interface結果を保存 jsnapy --snap snap01 状態2のshow interface結果を保存 jsnapy --snap snap02 状態1と状態2の差分をチェック jsnapy --check snap01 snap02 インタフェースがupになっているかチェック jsnapy --shnapcheck snap01
  • 10.
    © BIGLOBE Inc.201610 JSNAPy: 定義ファイルの例 l ホスト名が「router1_changed_by_PyEZ」か否か確認 test_hostname: - command: show version - item: xpath: /software-information tests: - is-equal: host-name, router1_changed_by_PyEZ info: "Test : OK" err: "Test : NG" test_hostname.yml hosts: - device: 192.168.0.1 username : user1 passwd: password1 tests: - ./tests/test_hostname.yml config_router1.yml
  • 11.
    © BIGLOBE Inc.201611 JSNAPy: コマンドライン実行結果 1 9 2 . 1 6 8 . 0 . 1 1 9 2 . 1 6 8 . 0 . 1
  • 12.
    © BIGLOBE Inc.201612 PyEZ と JSNAPy を使って ISPネットワーク設定作業を 自動化してみました。 (ご利用の注意) 現時点で、社内で正式に展開しているツールではありません。 社内で頻繁に発生する実作業を想定したシミュレーションです。 「うちで使ってみたけど障害出たぞ!」と申されましても 責任は一切負いかねますので、予めご承知ください。
  • 13.
    © BIGLOBE Inc.201613 ISPの設定作業例: Private Peering l ASを所有する組織同士が同一DC内で eBGPによる経路交換を実施する作業 l 手順 p 組織間での交渉/構内配線の手配 p ケーブル配線 p インタフェースの設定 p 疎通確認 p eBGP設定の投入 p 経路広報の確認 p トラフィック変移状態の確認 自動化対象 Router1 (AS65001) Router2 (AS65000) 経路情報 経路情報
  • 14.
    © BIGLOBE Inc.201614 システム構成 Firefly1Firefly2 PyEZ ライブラリ インタフェース設定 eBGP設定 完了済 物理接続 完了済 JSNAPy ライブラリ シナリオファイル シナリオ 実行プログラム 査閲/承認 ネットワーク技術者 (査閲者) ネットワーク技術者 (作業者) 作成 実行 インタフェース設定 未設定 eBGP設定 未完了 システムとの疎通設定 完了済 •  シナリオファイルを作成 •  作業実施/中止を判断 •  ルータ設定のコミット可否を判断 •  作業手順を記述 •  対象ルータ情報を記述 •  ルータ設定、テストの手順を記述 ルータの設定投入 •  インタフェース設定 •  eBGP設定 ルータ状態の正常性テスト •  インタフェース状態テスト •  BGP 状態テスト •  経路送信テスト •  経路広告テスト コミット可否は 作業者が判断 •  シナリオファイルから情報抽出 •  ルータコンフィグの生成 •  テストファイルの生成 •  ルータ設定投入(PyEZ)を実行 •  ルータ状態テスト(JSNAPy)を実行
  • 15.
    © BIGLOBE Inc.201615 シナリオファイル 記述例 purpus: | 本作業は、abc株式会社(AS65002)が 運用するルータと、拠点Xでプライベート  ピアを構築することを目的としている。 operator: Taiji Tsuchiya operation_date: 20161115 hosts: management_ipaddress:192.168.34.16 hostname: firefly1 model: firefly-perimeter username: user1 password: password1 scenario: - test_hostname - test_model - test_interface: interface_name: ge-0/0/2 interface_status: down - set_add_interface: interface_name: ge-0/0/2 interface_address_ipv4: 192.168.35.1 interface_subnet_ipv4: 30 interface_description: AS65002_peer - test_interface: interface_name: ge-0/0/2 interface_status: up - set_add_bgp_neighbor: interface_name: ge-0/0/2 neighbor_asnum: 65002 local_asnum: 65001 neighbor_address_ipv4: 192.168.35.2 neighbor_description: AS65002_peer - test_bgp_neighbor: neighbor_address_ipv4: 192.168.35.2 neighbor_status: Established 青文字: ルータ状態確認手順 赤文字: ルータ設定変更手順
  • 16.
    © BIGLOBE Inc.201616 コンフィグファイル一例 protocols { bgp { family inet { unicast; } group {{ interface_name }} { type external; neighbor {{ neighbor_address_ipv4 }} { description {{ neighbor_description }}; peer-as {{ neighbor_asnum }}; } } } } - set_add_bgp_neighbor: interface_name: ge-0/0/2 neighbor_asnum: 65002 local_asnum: 65001 neighbor_address_ipv4: 192.168.35.2 neighbor_description: AS65002_peer JUNOSルータ 設定変更を実施 テンプレートファイル テンプレート用パラメータ (前述のシナリオファイルより抽出)
  • 17.
    © BIGLOBE Inc.201617 実行結果 一部抜粋 緑文字: 正常が確認できている部分 赤文字: 異常が確認できている部分 黄文字: 作業者に判断を委ねている部分
  • 18.
    © BIGLOBE Inc.201618 デモ https://goo.gl/vR8cEE
  • 19.
    © BIGLOBE Inc.201619 所感 自動化システムについて l うまくいったポイント p 2-3時間程度かかる作業が、10分で完了! p 作業者の負担軽減、手順書作成/査閲を時間短縮 p (Juniperツール充実のおかげで) 実働二週間でここまでできましたJ l 悩ましいポイント p YAML形式の手順書を、運用現場に 受け入れてもらえるか。理解と協力が必要。 p マルチベンダー対応も見据えた設計開発が必要。 Juniperツールと同じことが他社APIで実現できるか。
  • 20.
    © BIGLOBE Inc.201620 所感 Juniperツールについて l PyEZ : ルータ設定ライブラリ p 手動設定と同様の機能が実現でき、非常に強力 p ドキュメントやサンプルコードも充実 p JUNOS 11.4以降で動作するので導入の敷居が低い l JSNAPy : ルータ状態管理ツール p テストを人が読める記述方法で定義できるのは優秀 p プログラムから実行する機能はやや物足りない Ø 設定ファイルをテンプレート化できない(PyEZは可能) Ø xpath指定や条件文の記述、テスト結果取得にやや苦労 p ドキュメントが少なく、ノウハウを貯める必要あり
  • 21.
    © BIGLOBE Inc.201621 (Juniperさんに限らず)メーカーさんにお願いしたいこと l ネットワーク作業を自動化するための API/便利ツールを提供してください! p PyEZ、JSNAPyの存在、本当に助かります。 p ネットワーク装置の自動化のしやすさは、 将来的に機器選定基準の一つに十分なりえます。 l 自動化導入のハードルを下げてください! p ドキュメントの充実 p ユースケースごとのサンプル、Tips公開 p 自動化の導入ケースの紹介 Ø 成功パターン、失敗パターンなど
  • 22.
    © BIGLOBE Inc.201622 コミュニティの皆さんにお願いしたいこと l 業務自動化にぜひトライしてみてください! p 小さいことでもOK! 下手くそでもOK! p オープンソースソフトウェアに貢献できることは ソフトウェアが書けなくても、たくさんあります。 Ø 使ってみる / バグを知らせる / 利用事例の共有 etc. l ネットワーク運用自動化の要求/知見/利用事例を メーカーさんやコミュニティにフィードバックしましょう
  • 23.
    © BIGLOBE Inc.201623 まとめ l PyEZ: ルータ設定ライブラリ l JSNAPy: ルータ状態管理ツール/ライブラリ を使って ISPネットワーク設定作業を自動化してみました。 本発表をきっかけに、みなさまの職場で 自動化への挑戦がたくさん出てくることを 心から楽しみにしています。
  • 24.
    © BIGLOBE Inc.201624 ご参考 l 本日の詳細内容をブログで紹介しています。 http://qiita.com/items/065eef08f7b673cb7bb6 l 発表で使ったすべてのプログラムを公開しています。 p PyEZ利用例:   https://github.com/taijiji/sample_pyez p JSNAPy利用例: https://github.com/taijiji/sample_jsnapy p ISP作業自動化デモ: https://github.com/taijiji/scenarioJUNOS l ネットワーク運用自動化勉強会 NetOpsCoding で紹介した自動化事例もご参照ください p まとめページ https://github.com/netops-coding/netops-tips/wiki p NetOpsCoding AdventCalendar2016 http://qiita.com/advent-calendar/2016/netopscoding