Más contenido relacionado La actualidad más candente (20) Similar a 私たちはRESTCONFでネットワーク自動化的に何が嬉しくなるのか考えてみた (20) 私たちはRESTCONFでネットワーク自動化的に何が嬉しくなるのか考えてみた2. 2
はじめに
ネットワーク機器の操作手段は CLI が主流
RESTCONF は全く別のアプローチ
自動化的に、何が嬉しくなるのか考えてみた
※ The CLI is dead とは思っていません
※ Cisco IOS XE 16.11.1 での検証です
※ 私自身はこの分野は調査中の段階です
自動化?
プログラマビリティ? 操作性?
3. 自己紹介
3
名前 横地 晃
所属 株式会社エーピーコミュニケーションズ 自動化グループ
業務 ネットワーク自動化サービス関連
@akira6592
執筆など
Ansible実践ガイド 第3版
Software Design 2018年12月号 Ansible 特集
技術ブログ(てくなべ)
2019年10月18日
第3版発売
ネットワーク対応も追加
5. RESTCONF とは(概要)
5
REST ベースでネットワーク機器を操作する
規格(RFC8040、2017年)
データモデリング言語として YANG を利用
ネットワーク機器
HTTP(S)
REST
(GET/POST/PUT/PATCH/DELETE)
ライブラリ・ツールなど
{ }YANG YANG
7. 実行例:RESTCONF による情報取得
7
$ curl -k -X GET https://rt01/restconf/data/ietf-interfaces:interfaces-state/interface ¥
-H 'Content-Type: application/yang-data+json' ¥
-H 'Accept: application/yang-data+json' ¥
-u 'testuser:testpassword'
curl で、インターフェース状態を取得する例
GET したい情報のパスなどを指定
8. 実行例:RESTCONF による情報取得
8
$ curl -k -X GET https://rt01/restconf/data/ietf-interfaces:interfaces-state/interface ¥
-H 'Content-Type: application/yang-data+json' ¥
-H 'Accept: application/yang-data+json' ¥
-u 'testuser:testpassword'
curl で、インターフェース状態を取得する例
{
"ietf-interfaces:interface": [
{
"name": "GigabitEthernet1",
"type": "iana-if-type:ethernetCsmacd",
"admin-status": "up",
"oper-status": "up",
"last-change": "2019-10-09T17:47:36.000747+00:00",
"if-index": 1,
"phys-address": "00:50:56:xx:xx:xx",
"speed": "1024000000",
"statistics": {
"discontinuity-time": "2019-10-09T17:46:12.000538+00:00",
"in-octets": "75804004962",
"in-unicast-pkts": "101030500",
"in-broadcast-pkts": "0",
"in-multicast-pkts": "0",
…(略)…
GET したい情報のパスなどを指定
JSON で返ってくる
11. 対応ツールが多い
11
HTTP を扱う汎用的なものでOK
◦ 各プログラミング言語の HTTP クライアントライブラリ
(Python の requests など)
◦ curl コマンド
◦ Ansible の uri、restconf_* モジュール
◦ など
CLI でつらいのは・・
◦ 専用ツールやライブラリのみで、やや限定的(Ansible、netmiko、NAPALM など)
HTTP を
しゃべれれば基本OK
etc.
13. 構造化データでやりとりできる
13
JSON、XML を利用する
◦ プログラマビリティが高く、自動化しやすい
CLI でつらいのは・・
◦ 正規表現やテンプレートを駆使、またはパーサー(TextFSM、Genie Parser など)が必要
{
"Cisco-IOS-XE-ntp:server-list": [
{
"ip-address": "10.0.0.1"
},
{
"ip-address": "10.0.0.2"
}
]
}
参照 NTP サーバーの設定をJSONで取得した例
17. CLI の場合(参照 NTP サーバー変更の例)
17
ntp server 10.0.0.1
ntp server 10.0.0.8
ntp server 10.0.0.9
ntp server 10.0.0.1
ntp server 10.0.0.2
ntp server 10.0.0.3
Before After
CLI の場合
何をすればよい?
18. CLI の場合(参照 NTP サーバー変更の例)
18
ntp server 10.0.0.1
ntp server 10.0.0.8
ntp server 10.0.0.9
ntp server 10.0.0.1
ntp server 10.0.0.2
ntp server 10.0.0.3
Before After
sw1(config)# no ntp server 10.0.0.2
sw1(config)# no ntp server 10.0.0.3
sw1(config)# ntp server 10.0.0.8
sw1(config)# ntp server 10.0.0.9
操作する側が
追加、削除を
意識する必要がある
・操作とデータが混在
・自動化しにくい
・どうせなら他のことに頭を使いたい
コマンド実行内容
19. RESTCONF の場合(参照 NTP サーバー変更の例)
19
ntp server 10.0.0.1
ntp server 10.0.0.8
ntp server 10.0.0.9
ntp server 10.0.0.1
ntp server 10.0.0.2
ntp server 10.0.0.3
Before After
RESTCONF の場合
何をすればよい?
20. RESTCONF の場合(参照 NTP サーバー変更の例)
20
ntp server 10.0.0.1
ntp server 10.0.0.8
ntp server 10.0.0.9
ntp server 10.0.0.1
ntp server 10.0.0.2
ntp server 10.0.0.3
Before After
{
"Cisco-IOS-XE-ntp:server": {
"server-list": [
{"ip-address": "10.0.0.1"},
{"ip-address": "10.0.0.8"},
{"ip-address": "10.0.0.9"}
]
}
}
操作する側が
追加、削除を
意識する必要がない
・操作とデータが分離!
・あるべき状態を PUT するだけ!
・自動化しやすい!
※ あくまで一例。すべての設定がこのようにできるとは限らない
PUT する body
22. まとめ
22
RESTCONF は REST でネットワーク機器
を操作する規格、データモデリングはYANG
対応ツールが多い (HTTPをしゃべれれば基本OK)
構造化データでやりとりできる (JSON/XML)
モデル駆動で操作できる
お使いの機器が RESTCONF に対応しているか確認してみてください。
そして、CLI がつらくなったら RESTCONF のことを思い出してください。
(まだ YANG ファイルの見方に慣れずに使いこなせません・・)
23. 参考
23
サイト
◦ Cisco IOS XE Everest 16.6.x プログラマビリティ コンフィギュレーション ガイド
◦ https://www.cisco.com/c/ja_jp/td/docs/ios-
xml/ios/prog/configuration/166/b_166_programmability_cg/b_166_programmability_cg_chapter_01011.html
◦ Cisco DevNet Learning Labs - Exploring IOS XE YANG Data Models with RESTCONF
◦ https://developer.cisco.com/learning/lab/intro-restconf/step/1
◦ Automating Your Network Operations, Part 3 – Data-Driven Ansible
◦ https://blogs.cisco.com/developer/automating-network-operations-3
◦ JANOG36 NETCONF/YANG
◦ https://www.janog.gr.jp/meeting/janog36/program/netconf
◦ データモデリング言語 YANG を活用した マルチベンダネットワーク制御
◦ http://onic.jp/archive/2017/_cms/wp-content/uploads/2017/11/cisco.pdf
◦ restconf_config モジュールで Cisco IOS XE のSyslogサーバー設定追加・削除してみる
◦ https://tekunabe.hatenablog.jp/entry/2019/09/09/ansible_restconf_config_ios
書籍
◦ Network Programmability with YANG
◦ https://www.amazon.co.jp/dp/0135180392
試してみたい方へ
◦ Cisco DevNet SandBox (オンラインのラボ環境)
◦ https://devnetsandbox.cisco.com/RM/Topology
◦ ちょっとした情報取得なら予約なしの「IOS XE on CSR Latest Code Always On」がおすすめ