SlideShare a Scribd company logo
株式会社 エーピーコミュニケーションズ
横地 晃
2019/09/05
#npstudy
ネットワークプログラマビリティ勉強会 #18
2
はじめに
l ネットワーク機器の通常の show コマンドの結果は、
機械にとっては取り扱いにくくなりがち。
l これを解決する、show コマンドの結果を
構造化データにするパーサーと、他ツールとの
組み合わせをご紹介します。
{
"INTF": "GigabitEthernet1",
"IPADDR": "10.10.20.48",
"PROTO": "up",
"STATUS": "up"
},
{
"INTF": "GigabitEthernet2",
"IPADDR": "unassigned",
"PROTO": "down",
"STATUS": "administratively down"
}
show ip interface brief 結果のパース結果例
⾃⼰紹介
3
名前 横地 晃
所属 株式会社エーピーコミュニケーションズ
業務 ネットワーク⾃動化のサービス開発
ブログ てくなべ https://tekunabe.hatenablog.jp
@akira6592
発表・執筆など
l Ansible実践ガイド 第3版
l Software Design 2018年12⽉号 Ansible 特集
l NetOpsCoding#5 × ネットワークプログラマビリティ勉強会#13
第3版
ネットワーク対応も追加
2019年10⽉発売予定
4
パーサーとは
パーサーとは
5
l show コマンドの結果を、機械が取り扱いやすい
構造化データに変換するもの (今回の発表の⽂脈上の説明)
「そもそもネットワーク器機が構造化データを出⼒してくれればいいのでは︖」→ ごもっとも
csr1000v#show ip interface brief
Interface IP-Address OK? Method Status Protocol
GigabitEthernet1 10.10.20.48 YES NVRAM up up
GigabitEthernet2 unassigned YES NVRAM administratively down down
GigabitEthernet3 unassigned YES NVRAM administratively down down
{
"INTF": "GigabitEthernet1",
"IPADDR": "10.10.20.48",
"PROTO": "up",
"STATUS": "up"
},
{
"INTF": "GigabitEthernet2",
"IPADDR": "unassigned",
"PROTO": "down",
"STATUS": "administratively down"
},
{
"INTF": "GigabitEthernet3",
"IPADDR": "unassigned",
"PROTO": "down",
"STATUS": "administratively down"
}
機械が取り扱いやすい
パーサー
今回ご紹介するパーサーたち
6
l TextFSM
l Genie Parser
netmiko
Ansible Genie Parser
TextFSM
パーサー⾃動化ツール
コマンド実⾏ 連携 {
"INTF": "GigabitEthernet1",
"IPADDR": "10.10.20.48",
"PROTO": "up",
"STATUS": "up"
}
変換
⾃動化ツールとの
組み合わせもご紹介
構造化データネットワーク機器
今回の例で利⽤するコマンド結果
7
csr1000v#show ip interface brief
Interface IP-Address OK? Method Status Protocol
GigabitEthernet1 10.10.20.48 YES NVRAM up up
GigabitEthernet2 unassigned YES NVRAM administratively down down
GigabitEthernet3 unassigned YES NVRAM administratively down down
Loopback0 unassigned YES unset up up
Loopback1 unassigned YES unset up up
Loopback2 unassigned YES unset up up
l Cisco IOS-XE の show ip interface brief 結果
環境: Cisco DevNet Sandbox CSRV1000V IOS-XE (16.11.01a)
これをパースします
8
TextFSM
カスタマイズが容易なパーサー
TextFSM とは
9
l Python製のパーサー
◦ https://github.com/google/textfsm
l ntc-templates のテンプレートを利⽤可
◦ プラットフォーム数 23
◦ コマンド数 290
◦ https://github.com/networktocode/ntc-templates
l テンプレートは追加、カスタマイズ可能
l pip install textfsm でインストール
(2019/09/03現在)
TextFSM で利⽤するテンプレート例
10
Value INTF (¥S+)
Value IPADDR (¥S+)
Value STATUS (up|down|administratively down)
Value PROTO (up|down)
Start
^${INTF}¥s+${IPADDR}¥s+¥w+¥s+¥w+¥s+${STATUS}¥s+${PROTO} -> Record
Cisco IOS の show ip interface brief コマンドのパーステンプレート
https://github.com/networktocode/ntc-templates/blob/master/templates/cisco_ios_show_ip_interface_brief.template
正規表現
TextFSM 単体(コード)
11
import textfsm
from pprint import pprint
# テンプレートファイルの読み込み
template = open('./templates/cisco_ios_show_ip_interface_brief.template', 'r')
re_table = textfsm.TextFSM(template)
fsm_results = re_table.ParseText(raw_text_data)
results = list()
# ヘッダーとデータを結合
for item in fsm_results:
results.append(dict(zip(re_table.header, item)))
pprint(results)
https://github.com/google/textfsm/wiki/TextFSM#using-the-library公式サンプル
テンプレートファイル名
コマンド結果は
何かしらで準備しておく
TextFSM 単体(結果)
12
[{'INTF': 'GigabitEthernet1',
'IPADDR': '10.10.20.48',
'PROTO': 'up',
'STATUS': 'up'},
{'INTF': 'GigabitEthernet2',
'IPADDR': 'unassigned',
'PROTO': 'down',
'STATUS': 'administratively down'},
{'INTF': 'GigabitEthernet3',
'IPADDR': 'unassigned',
'PROTO': 'down',
'STATUS': 'administratively down'},
{'INTF': 'Loopback0', 'IPADDR': 'unassigned', 'PROTO': 'up', 'STATUS': 'up'},
{'INTF': 'Loopback1', 'IPADDR': 'unassigned', 'PROTO': 'up', 'STATUS': 'up'},
{'INTF': 'Loopback2', 'IPADDR': 'unassigned', 'PROTO': 'up', 'STATUS': 'up'}]
TextFSM + Netmiko(コード)
13
l Netmiko 2.0.0 から TextFSM 同梱
from netmiko import Netmiko
import os
from pprint import pprint
ios1 = {
"host": ”10.10.20.48",
"device_type": "cisco_ios",
"username": "testuser",
"password": "testpass"
}
os.environ["NET_TEXTFSM"] = "/home/npstudy/templates"
net_connect = Netmiko(**ios1)
result = net_connect.send_command("show ip interface brief", use_textfsm=True)
pprint(result)
実⾏コマンド
テンプレートファイル格納
「ディレクトリ」を環境変数に指定
(デフォルトは ./ntc-templates/templates)
TextFSM をパーサーに使う指定
TextFSM + Netmiko(結果)
14
[{'intf': 'GigabitEthernet1',
'ipaddr': '10.10.20.48',
'proto': 'up',
'status': 'up'},
{'intf': 'GigabitEthernet2',
'ipaddr': 'unassigned',
'proto': 'down',
'status': 'administratively down'},
{'intf': 'GigabitEthernet3',
'ipaddr': 'unassigned',
'proto': 'down',
'status': 'administratively down'},
{'intf': 'Loopback0', 'ipaddr': 'unassigned', 'proto': 'up', 'status': 'up'},
{'intf': 'Loopback1', 'ipaddr': 'unassigned', 'proto': 'up', 'status': 'up'},
{'intf': 'Loopback2', 'ipaddr': 'unassigned', 'proto': 'up', 'status': 'up'}]
TextFSM + Ansible(Playbook)
15
l Ansible 2.4 で parse_cli_textfsm フィルター追加
- hosts: ios
gather_facts: no
vars:
template_file: "./templates/cisco_ios_show_ip_interface_brief.template"
tasks:
- name: show
ios_command:
commands:
- show ip interface brief
register: result
- name: show parsed result
debug:
msg: "{{ result.stdout[0] | parse_cli_textfsm(template_file) }}"
※別途、インベントリ、認証情報の定義が必要
実⾏コマンド
テンプレートファイル名
(vars で定義済み)
要 pip install textfsm
TextFSM + Ansible(結果)
16
ok: [ios1] => {
"msg": [
{
"INTF": "GigabitEthernet1",
"IPADDR": "10.10.20.48",
"PROTO": "up",
"STATUS": "up"
},
{
"INTF": "GigabitEthernet2",
"IPADDR": "unassigned",
"PROTO": "down",
"STATUS": "administratively down"
},
{
"INTF": "GigabitEthernet3",
"IPADDR": "unassigned",
"PROTO": "down",
"STATUS": "administratively down"
},
{
"INTF": "Loopback0",
"IPADDR": "unassigned",
"PROTO": "up",
"STATUS": "up"
},
{
"INTF": "Loopback1",
"IPADDR": "unassigned",
"PROTO": "up",
"STATUS": "up"
},
{
"INTF": "Loopback2",
"IPADDR": "unassigned",
"PROTO": "up",
"STATUS": "up"
}
]
}
17
Genie Parser
Cisco 機器に強いパーサー
Genie Parser とは
18
l Python製テストフレームワーク/ライブラリ
「pyATS/Genie」内のパーサー
◦ https://github.com/CiscoTestAutomation/genieparser
◦ Cisco 社が開発をはじめたもの
l Cisco 機器への対応が充実
◦ プラットフォーム数 8(Cisco 7、Juniper 1)
◦ コマンド数 約1300
◦ https://pubhub.devnetcloud.com/media/genie-feature-browser/docs/#/parsers
l pip install genie でインストール
(2019/09/03現在)
Genie Parser 単体(コード)
19
testbed:
name: "testbed1"
devices:
csr1000v:
type: catalyst
platform: iosxe
os: "iosxe"
alias: "ios1"
tacacs:
login_prompt: "login:"
password_prompt: "Password:"
username: testuser
passwords:
tacacs: testpass
# enable: testpass
# line: testpass
connections:
ssh:
protocol: ssh
ip: "10.10.20.48"
コマンド結果は
何かしらで準備しておく
testbedファイル(接続情報)
from genie.conf import Genie
from pprint import pprint
testbed = Genie.init("./testbed.yml")
device = testbed.devices["csr1000v"]
device.connect()
output = device.parse("show ip interface brief")
pprint(output)
Testbedファイル
実⾏コマンド
接続先
実⾏コード
Genie Parser 単体(結果1)
20
[2019-09-04 15:30:20,523] +++ csr1000v logfile /tmp/csr1000v-cli-20190904T153020523.log +++
[2019-09-04 15:30:20,524] +++ Unicon plugin iosxe +++
Password:
[2019-09-04 15:30:28,022] +++ connection to spawn: ssh -l developer 10.10.20.48, id: 4458345528 +++
[2019-09-04 15:30:28,023] connection to csr1000v
Welcome to the DevNet Sandbox for CSR1000v and IOS XE
The following programmability features are already enabled:
- NETCONF
- RESTCONF
Thanks for stopping by.
csr1000v#
[2019-09-04 15:30:29,379] +++ initializing handle +++
[2019-09-04 15:30:29,381] +++ csr1000v: executing command 'term length 0' +++
term length 0
csr1000v#
[2019-09-04 15:30:29,647] +++ csr1000v: executing command 'term width 0' +++
term width 0
csr1000v#
[2019-09-04 15:30:29,883] +++ csr1000v: executing command 'show version' +++
show version
Cisco IOS XE Software, Version 16.09.03
...略....
csr1000v#
[2019-09-04 15:30:30,171] +++ csr1000v: config +++
config term
Enter configuration commands, one per line. End with CNTL/Z.
csr1000v(config)#no logging console
csr1000v(config)#line console 0
csr1000v(config-line)#exec-timeout 0
csr1000v(config-line)#end
csr1000v#
[2019-09-04 15:30:32,395] +++ csr1000v: executing command 'show ip interface brief' +++
show ip interface brief
Interface IP-Address OK? Method Status Protocol
GigabitEthernet1 10.10.20.48 YES NVRAM up up
GigabitEthernet2 unassigned YES NVRAM administratively down down
GigabitEthernet3 unassigned YES NVRAM administratively down down
Loopback0 unassigned YES unset up up
Loopback1 unassigned YES unset up up
Loopback2 unassigned YES unset up up
csr1000v#
ログインや ter len 0 などの
ログが流れていく・・・
↓
続く
Genie Parser 単体(結果2)
21
{'interface': {'GigabitEthernet1': {'interface_is_ok': 'YES',
'ip_address': '10.10.20.48',
'method': 'NVRAM',
'protocol': 'up',
'status': 'up'},
'GigabitEthernet2': {'interface_is_ok': 'YES',
'ip_address': 'unassigned',
'method': 'NVRAM',
'protocol': 'down',
'status': 'administratively down'},
'GigabitEthernet3': {'interface_is_ok': 'YES',
'ip_address': 'unassigned',
'method': 'NVRAM',
'protocol': 'down',
'status': 'administratively down'},
'Loopback0': {'interface_is_ok': 'YES',
'ip_address': 'unassigned',
'method': 'unset',
'protocol': 'up',
'status': 'up'},
'Loopback1': {'interface_is_ok': 'YES',
'ip_address': 'unassigned',
'method': 'unset',
'protocol': 'up',
'status': 'up'},
'Loopback2': {'interface_is_ok': 'YES',
'ip_address': 'unassigned',
'method': 'unset',
'protocol': 'up',
'status': 'up'}}}
↓
続き
Genie Parser + netmiko(コード)
22
from netmiko import Netmiko
import os
from pprint import pprint
ios1 = {
"host": ”10.10.20.48",
"device_type": "cisco_ios",
"username": "testuser",
"password": "testpass"
}
net_connect = Netmiko(**ios1)
result = net_connect.send_command("show ip interface brief", use_genie=True)
pprint(result)
実⾏コマンド
l Netmiko 2.4.1 で Genie/pyATS parser サポート
要 pip install genie
Genie Parser を
パーサーに使う指定
Genie Parser + netmiko(結果)
23
{'interface': {'GigabitEthernet1': {'interface_is_ok': 'YES',
'ip_address': '10.10.20.48',
'method': 'NVRAM',
'protocol': 'up',
'status': 'up'},
'GigabitEthernet2': {'interface_is_ok': 'YES',
'ip_address': 'unassigned',
'method': 'NVRAM',
'protocol': 'down',
'status': 'administratively down'},
'GigabitEthernet3': {'interface_is_ok': 'YES',
'ip_address': 'unassigned',
'method': 'NVRAM',
'protocol': 'down',
'status': 'administratively down'},
'Loopback0': {'interface_is_ok': 'YES',
'ip_address': 'unassigned',
'method': 'unset',
'protocol': 'up',
'status': 'up'},
'Loopback1': {'interface_is_ok': 'YES',
'ip_address': 'unassigned',
'method': 'unset',
'protocol': 'up',
'status': 'up'},
'Loopback2': {'interface_is_ok': 'YES',
'ip_address': 'unassigned',
'method': 'unset',
'protocol': 'up',
'status': 'up'}}}
Genie Parser + Ansible(Playbook)
24
l clay584.parse_genie ロールで連携
- hosts: ios
gather_facts: no
vars:
show: show ip interface brief
tasks:
- name: Read in parse_genie role
include_role:
name: clay584.parse_genie
- name: ios command test
ios_command:
commands:
- "{{ show }}"
register: result
- name:
debug:
msg: "{{ result.stdout[0] | parse_genie(command=show, os='iosxe') }}"
※別途、インベントリ、認証情報の定義が必要
あらかじめ
ansible-galaxy install clay584.parse_genie
でインストールしたロールを仕様
実⾏コマンド
(vars で定義済み)
要 ansible-galaxy install clay584.parse_genie
実⾏コマンド
(vars で定義済み)
対象OS
Genie Parser + Ansible(結果)
25
ok: [ios1] => {
"msg": {
“interface”: {
"GigabitEthernet1": {
"interface_is_ok": "YES",
"ip_address": "10.10.20.48",
"method": "NVRAM",
"protocol": "up",
"status": "up"
},
"GigabitEthernet2": {
"interface_is_ok": "YES",
"ip_address": "unassigned",
"method": "NVRAM",1
"protocol": "down",
"status": "administratively down"
},
"GigabitEthernet3": {
"interface_is_ok": "YES",
"ip_address": "unassigned",
"method": "NVRAM",
"protocol": "down",
"status": "administratively down"
},
"Loopback0": {
"interface_is_ok": "YES",
"ip_address": "unassigned",
"method": "unset",
"protocol": "up",
"status": "up"
},
"Loopback1": {
"interface_is_ok": "YES",
"ip_address": "unassigned",
"method": "unset",
"protocol": "up",
"status": "up"
},
"Loopback2": {
"interface_is_ok": "YES",
"ip_address": "unassigned",
"method": "unset",
"protocol": "up",
"status": "up"
}
}
}
}
26
まとめ
まとめ
27
l TextFSM
◦ カスタマイズが容易
l Genie Parser
◦ Cisco 機器に強い
l 使い分け(個⼈的主観)
◦ Cisco の機器が対象なら Genie Parser
◦ それ以外、容易にカスタマイズしたいなら TextFSM
l netmiko や Ansible との連携も便利
参考
28
l TextFSM
◦ netmiko と TextFSM を利⽤してネットワーク機器の show コマンド結果をパースする
◦ https://tekunabe.hatenablog.jp/entry/2018/12/31/netmiko_textfsm
◦ ネットワーク機器のコマンド結果をパースする parse_cli_textfsm フィルタープラグインを試す
◦ https://tekunabe.hatenablog.jp/entry/2017/09/23/parse_cli_textfsm
l Genie Parser
◦ pyATS/Genie : ネットワークテスト⾃動化ツール pyATS & Genie についてとインストール⽅法
◦ https://ccieojisan.net/post-1697/
◦ Genie Parser/OpsによるCisco機器のログ取得・構⽂解析
◦ https://qiita.com/tech_kitara/items/f5c4ae6cbab8e7240f40
◦ Ansible 連携ロール「clay584.parse_genie」の説明
◦ https://developer.cisco.com/codeexchange/github/repo/clay584/parse_genie
l ansible-network.network-engine ロール(今回ご紹介できなかったもの)
◦ command_parser という Ansible ネイティブなパーサーがある
◦ リポジトリ
◦ https://github.com/ansible-network/network-engine

More Related Content

What's hot (20)

RHEL7/CentOS7 NetworkManager徹底入門
RHEL7/CentOS7 NetworkManager徹底入門RHEL7/CentOS7 NetworkManager徹底入門
RHEL7/CentOS7 NetworkManager徹底入門
Etsuji Nakai
 
Ansible tower 構築方法と使い方
Ansible tower 構築方法と使い方Ansible tower 構築方法と使い方
Ansible tower 構築方法と使い方
Hiroshi Okano
 
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
NTT DATA Technology & Innovation
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
Motonori Shindo
 
ロードバランスへの長い道
ロードバランスへの長い道ロードバランスへの長い道
ロードバランスへの長い道
Jun Kato
 
ネットワーク機器のAPIあれこれ入門 (NetOpsCoding#2)
ネットワーク機器のAPIあれこれ入門(NetOpsCoding#2)ネットワーク機器のAPIあれこれ入門(NetOpsCoding#2)
ネットワーク機器のAPIあれこれ入門 (NetOpsCoding#2)
Kentaro Ebisawa
 
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
NTT DATA Technology & Innovation
 
3分でわかるAzureでのService Principal
3分でわかるAzureでのService Principal3分でわかるAzureでのService Principal
3分でわかるAzureでのService Principal
Toru Makabe
 
Kubernetes環境に対する性能試験(Kubernetes Novice Tokyo #2 発表資料)
Kubernetes環境に対する性能試験(Kubernetes Novice Tokyo #2 発表資料)Kubernetes環境に対する性能試験(Kubernetes Novice Tokyo #2 発表資料)
Kubernetes環境に対する性能試験(Kubernetes Novice Tokyo #2 発表資料)
NTT DATA Technology & Innovation
 
明日からはじめるネットワーク運用自動化
明日からはじめるネットワーク運用自動化明日からはじめるネットワーク運用自動化
明日からはじめるネットワーク運用自動化
Taiji Tsuchiya
 
AS45679 on FreeBSD
AS45679 on FreeBSDAS45679 on FreeBSD
AS45679 on FreeBSD
Tomocha Potter
 
Prometheus入門から運用まで徹底解説
Prometheus入門から運用まで徹底解説Prometheus入門から運用まで徹底解説
Prometheus入門から運用まで徹底解説
貴仁 大和屋
 
Amazon EKS によるスマホゲームのバックエンド運用事例
Amazon EKS によるスマホゲームのバックエンド運用事例Amazon EKS によるスマホゲームのバックエンド運用事例
Amazon EKS によるスマホゲームのバックエンド運用事例
gree_tech
 
vSRX on Your Laptop : PCで始めるvSRX ~JUNOSをさわってみよう!~
vSRX on Your Laptop : PCで始めるvSRX ~JUNOSをさわってみよう!~vSRX on Your Laptop : PCで始めるvSRX ~JUNOSをさわってみよう!~
vSRX on Your Laptop : PCで始めるvSRX ~JUNOSをさわってみよう!~
Juniper Networks (日本)
 
Keycloak拡張入門
Keycloak拡張入門Keycloak拡張入門
Keycloak拡張入門
Hiroyuki Wada
 
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/FallZabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
Atsushi Tanaka
 
AWS Black Belt Online Seminar 2016 Amazon EC2 Container Service
AWS Black Belt Online Seminar 2016 Amazon EC2 Container ServiceAWS Black Belt Online Seminar 2016 Amazon EC2 Container Service
AWS Black Belt Online Seminar 2016 Amazon EC2 Container Service
Amazon Web Services Japan
 
私たちはRESTCONFでネットワーク自動化的に何が嬉しくなるのか考えてみた
私たちはRESTCONFでネットワーク自動化的に何が嬉しくなるのか考えてみた私たちはRESTCONFでネットワーク自動化的に何が嬉しくなるのか考えてみた
私たちはRESTCONFでネットワーク自動化的に何が嬉しくなるのか考えてみた
akira6592
 
大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌
LINE Corporation
 
【SRX】JUNOS ハンズオントレーニング資料 SRXシリーズ サービス ゲートウェイ コース
【SRX】JUNOS ハンズオントレーニング資料 SRXシリーズ サービス ゲートウェイ コース【SRX】JUNOS ハンズオントレーニング資料 SRXシリーズ サービス ゲートウェイ コース
【SRX】JUNOS ハンズオントレーニング資料 SRXシリーズ サービス ゲートウェイ コース
Juniper Networks (日本)
 
RHEL7/CentOS7 NetworkManager徹底入門
RHEL7/CentOS7 NetworkManager徹底入門RHEL7/CentOS7 NetworkManager徹底入門
RHEL7/CentOS7 NetworkManager徹底入門
Etsuji Nakai
 
Ansible tower 構築方法と使い方
Ansible tower 構築方法と使い方Ansible tower 構築方法と使い方
Ansible tower 構築方法と使い方
Hiroshi Okano
 
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
NTT DATA Technology & Innovation
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
Motonori Shindo
 
ロードバランスへの長い道
ロードバランスへの長い道ロードバランスへの長い道
ロードバランスへの長い道
Jun Kato
 
ネットワーク機器のAPIあれこれ入門 (NetOpsCoding#2)
ネットワーク機器のAPIあれこれ入門(NetOpsCoding#2)ネットワーク機器のAPIあれこれ入門(NetOpsCoding#2)
ネットワーク機器のAPIあれこれ入門 (NetOpsCoding#2)
Kentaro Ebisawa
 
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
NTT DATA Technology & Innovation
 
3分でわかるAzureでのService Principal
3分でわかるAzureでのService Principal3分でわかるAzureでのService Principal
3分でわかるAzureでのService Principal
Toru Makabe
 
Kubernetes環境に対する性能試験(Kubernetes Novice Tokyo #2 発表資料)
Kubernetes環境に対する性能試験(Kubernetes Novice Tokyo #2 発表資料)Kubernetes環境に対する性能試験(Kubernetes Novice Tokyo #2 発表資料)
Kubernetes環境に対する性能試験(Kubernetes Novice Tokyo #2 発表資料)
NTT DATA Technology & Innovation
 
明日からはじめるネットワーク運用自動化
明日からはじめるネットワーク運用自動化明日からはじめるネットワーク運用自動化
明日からはじめるネットワーク運用自動化
Taiji Tsuchiya
 
Prometheus入門から運用まで徹底解説
Prometheus入門から運用まで徹底解説Prometheus入門から運用まで徹底解説
Prometheus入門から運用まで徹底解説
貴仁 大和屋
 
Amazon EKS によるスマホゲームのバックエンド運用事例
Amazon EKS によるスマホゲームのバックエンド運用事例Amazon EKS によるスマホゲームのバックエンド運用事例
Amazon EKS によるスマホゲームのバックエンド運用事例
gree_tech
 
vSRX on Your Laptop : PCで始めるvSRX ~JUNOSをさわってみよう!~
vSRX on Your Laptop : PCで始めるvSRX ~JUNOSをさわってみよう!~vSRX on Your Laptop : PCで始めるvSRX ~JUNOSをさわってみよう!~
vSRX on Your Laptop : PCで始めるvSRX ~JUNOSをさわってみよう!~
Juniper Networks (日本)
 
Keycloak拡張入門
Keycloak拡張入門Keycloak拡張入門
Keycloak拡張入門
Hiroyuki Wada
 
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/FallZabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
Atsushi Tanaka
 
AWS Black Belt Online Seminar 2016 Amazon EC2 Container Service
AWS Black Belt Online Seminar 2016 Amazon EC2 Container ServiceAWS Black Belt Online Seminar 2016 Amazon EC2 Container Service
AWS Black Belt Online Seminar 2016 Amazon EC2 Container Service
Amazon Web Services Japan
 
私たちはRESTCONFでネットワーク自動化的に何が嬉しくなるのか考えてみた
私たちはRESTCONFでネットワーク自動化的に何が嬉しくなるのか考えてみた私たちはRESTCONFでネットワーク自動化的に何が嬉しくなるのか考えてみた
私たちはRESTCONFでネットワーク自動化的に何が嬉しくなるのか考えてみた
akira6592
 
大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌
LINE Corporation
 
【SRX】JUNOS ハンズオントレーニング資料 SRXシリーズ サービス ゲートウェイ コース
【SRX】JUNOS ハンズオントレーニング資料 SRXシリーズ サービス ゲートウェイ コース【SRX】JUNOS ハンズオントレーニング資料 SRXシリーズ サービス ゲートウェイ コース
【SRX】JUNOS ハンズオントレーニング資料 SRXシリーズ サービス ゲートウェイ コース
Juniper Networks (日本)
 

Similar to show コマンド結果をパースする方法あれこれ #npstudy (20)

ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)
ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)
ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)
akira6592
 
WebRTC meetup Tokyo 1
WebRTC meetup  Tokyo 1WebRTC meetup  Tokyo 1
WebRTC meetup Tokyo 1
mganeko
 
ネットワーク構築訓練 入門
ネットワーク構築訓練 入門ネットワーク構築訓練 入門
ネットワーク構築訓練 入門
株式会社 NTTテクノクロス
 
JAWS DAYS 2018 | IoT時代におけるデバイスのファームウェアとクラウドのいい関係
JAWS DAYS 2018 | IoT時代におけるデバイスのファームウェアとクラウドのいい関係JAWS DAYS 2018 | IoT時代におけるデバイスのファームウェアとクラウドのいい関係
JAWS DAYS 2018 | IoT時代におけるデバイスのファームウェアとクラウドのいい関係
SORACOM,INC
 
ネットワークコマンド入力に対応したツール事例
ネットワークコマンド入力に対応したツール事例ネットワークコマンド入力に対応したツール事例
ネットワークコマンド入力に対応したツール事例
fumoto kazuhiro
 
シスコ装置を使い倒す!組込み機能による可視化からセキュリティ強化
シスコ装置を使い倒す!組込み機能による可視化からセキュリティ強化シスコ装置を使い倒す!組込み機能による可視化からセキュリティ強化
シスコ装置を使い倒す!組込み機能による可視化からセキュリティ強化
シスコシステムズ合同会社
 
Smart Tennis Lesson Serverless Design
Smart Tennis Lesson Serverless DesignSmart Tennis Lesson Serverless Design
Smart Tennis Lesson Serverless Design
Ryuji TAKEHARA
 
Windows コンテナを AKS に追加する
Windows コンテナを AKS に追加するWindows コンテナを AKS に追加する
Windows コンテナを AKS に追加する
Yuto Takei
 
20150715 xflow kikuta_final
20150715 xflow kikuta_final20150715 xflow kikuta_final
20150715 xflow kikuta_final
Kazumasa Ikuta
 
PythonからV-Sido CONNECTで ロボットを操る ~ ハードウェアの絡んだ仕組みの制御を考える ~
PythonからV-Sido CONNECTで ロボットを操る ~ ハードウェアの絡んだ仕組みの制御を考える ~PythonからV-Sido CONNECTで ロボットを操る ~ ハードウェアの絡んだ仕組みの制御を考える ~
PythonからV-Sido CONNECTで ロボットを操る ~ ハードウェアの絡んだ仕組みの制御を考える ~
Daisuke Imai
 
161027 net opscoding-junos-automation
161027 net opscoding-junos-automation161027 net opscoding-junos-automation
161027 net opscoding-junos-automation
Hiromi Tsukamoto
 
perfを使ったPostgreSQLの解析(後編)
perfを使ったPostgreSQLの解析(後編)perfを使ったPostgreSQLの解析(後編)
perfを使ったPostgreSQLの解析(後編)
NTT DATA OSS Professional Services
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
Takayoshi Tanaka
 
本気で使うStack storm
本気で使うStack storm本気で使うStack storm
本気で使うStack storm
tyamane
 
ぱっと見でわかるC++11
ぱっと見でわかるC++11ぱっと見でわかるC++11
ぱっと見でわかるC++11
えぴ 福田
 
PostgreSQL 12の話
PostgreSQL 12の話PostgreSQL 12の話
PostgreSQL 12の話
Masahiko Sawada
 
クラウド時代のネットワーク再入門
クラウド時代のネットワーク再入門クラウド時代のネットワーク再入門
クラウド時代のネットワーク再入門
Naoto MATSUMOTO
 
OpenDaylightを用いた次世代ネットワーク構成管理の考察
OpenDaylightを用いた次世代ネットワーク構成管理の考察OpenDaylightを用いた次世代ネットワーク構成管理の考察
OpenDaylightを用いた次世代ネットワーク構成管理の考察
Naoto MATSUMOTO
 
Reconf_201409
Reconf_201409Reconf_201409
Reconf_201409
Takefumi MIYOSHI
 
"Up" with vagrant and docker
"Up" with vagrant and docker"Up" with vagrant and docker
"Up" with vagrant and docker
Hiroshi Miura
 
ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)
ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)
ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)
akira6592
 
WebRTC meetup Tokyo 1
WebRTC meetup  Tokyo 1WebRTC meetup  Tokyo 1
WebRTC meetup Tokyo 1
mganeko
 
JAWS DAYS 2018 | IoT時代におけるデバイスのファームウェアとクラウドのいい関係
JAWS DAYS 2018 | IoT時代におけるデバイスのファームウェアとクラウドのいい関係JAWS DAYS 2018 | IoT時代におけるデバイスのファームウェアとクラウドのいい関係
JAWS DAYS 2018 | IoT時代におけるデバイスのファームウェアとクラウドのいい関係
SORACOM,INC
 
ネットワークコマンド入力に対応したツール事例
ネットワークコマンド入力に対応したツール事例ネットワークコマンド入力に対応したツール事例
ネットワークコマンド入力に対応したツール事例
fumoto kazuhiro
 
シスコ装置を使い倒す!組込み機能による可視化からセキュリティ強化
シスコ装置を使い倒す!組込み機能による可視化からセキュリティ強化シスコ装置を使い倒す!組込み機能による可視化からセキュリティ強化
シスコ装置を使い倒す!組込み機能による可視化からセキュリティ強化
シスコシステムズ合同会社
 
Smart Tennis Lesson Serverless Design
Smart Tennis Lesson Serverless DesignSmart Tennis Lesson Serverless Design
Smart Tennis Lesson Serverless Design
Ryuji TAKEHARA
 
Windows コンテナを AKS に追加する
Windows コンテナを AKS に追加するWindows コンテナを AKS に追加する
Windows コンテナを AKS に追加する
Yuto Takei
 
20150715 xflow kikuta_final
20150715 xflow kikuta_final20150715 xflow kikuta_final
20150715 xflow kikuta_final
Kazumasa Ikuta
 
PythonからV-Sido CONNECTで ロボットを操る ~ ハードウェアの絡んだ仕組みの制御を考える ~
PythonからV-Sido CONNECTで ロボットを操る ~ ハードウェアの絡んだ仕組みの制御を考える ~PythonからV-Sido CONNECTで ロボットを操る ~ ハードウェアの絡んだ仕組みの制御を考える ~
PythonからV-Sido CONNECTで ロボットを操る ~ ハードウェアの絡んだ仕組みの制御を考える ~
Daisuke Imai
 
161027 net opscoding-junos-automation
161027 net opscoding-junos-automation161027 net opscoding-junos-automation
161027 net opscoding-junos-automation
Hiromi Tsukamoto
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
Takayoshi Tanaka
 
本気で使うStack storm
本気で使うStack storm本気で使うStack storm
本気で使うStack storm
tyamane
 
ぱっと見でわかるC++11
ぱっと見でわかるC++11ぱっと見でわかるC++11
ぱっと見でわかるC++11
えぴ 福田
 
クラウド時代のネットワーク再入門
クラウド時代のネットワーク再入門クラウド時代のネットワーク再入門
クラウド時代のネットワーク再入門
Naoto MATSUMOTO
 
OpenDaylightを用いた次世代ネットワーク構成管理の考察
OpenDaylightを用いた次世代ネットワーク構成管理の考察OpenDaylightを用いた次世代ネットワーク構成管理の考察
OpenDaylightを用いた次世代ネットワーク構成管理の考察
Naoto MATSUMOTO
 
"Up" with vagrant and docker
"Up" with vagrant and docker"Up" with vagrant and docker
"Up" with vagrant and docker
Hiroshi Miura
 
Ad

More from akira6592 (20)

新人研修資料 向き合うエンジニア
新人研修資料 向き合うエンジニア新人研修資料 向き合うエンジニア
新人研修資料 向き合うエンジニア
akira6592
 
Ansible とネットワーク自動化の概要(SmartCS と Ansible の連携による自動化の可能性を体験!)
Ansible とネットワーク自動化の概要(SmartCS と Ansible の連携による自動化の可能性を体験!)Ansible とネットワーク自動化の概要(SmartCS と Ansible の連携による自動化の可能性を体験!)
Ansible とネットワーク自動化の概要(SmartCS と Ansible の連携による自動化の可能性を体験!)
akira6592
 
Ansible 実践ガイド第3版 ネットワーク担当としてのふりかえり #インフラエンジニアBooks
Ansible 実践ガイド第3版 ネットワーク担当としてのふりかえり #インフラエンジニアBooksAnsible 実践ガイド第3版 ネットワーク担当としてのふりかえり #インフラエンジニアBooks
Ansible 実践ガイド第3版 ネットワーク担当としてのふりかえり #インフラエンジニアBooks
akira6592
 
Ansible でお世話になっている機能と拡張
Ansible でお世話になっている機能と拡張Ansible でお世話になっている機能と拡張
Ansible でお世話になっている機能と拡張
akira6592
 
Ansible 2.10 と Collection
Ansible 2.10 と CollectionAnsible 2.10 と Collection
Ansible 2.10 と Collection
akira6592
 
自動化の下ごしらえ
自動化の下ごしらえ自動化の下ごしらえ
自動化の下ごしらえ
akira6592
 
向き合うエンジニア 2020年度版
向き合うエンジニア 2020年度版向き合うエンジニア 2020年度版
向き合うエンジニア 2020年度版
akira6592
 
はじめてAnsibleのバグ修正に協力してみた
はじめてAnsibleのバグ修正に協力してみたはじめてAnsibleのバグ修正に協力してみた
はじめてAnsibleのバグ修正に協力してみた
akira6592
 
CML-Personal (VIRL2)のインストールと基本機能
CML-Personal (VIRL2)のインストールと基本機能CML-Personal (VIRL2)のインストールと基本機能
CML-Personal (VIRL2)のインストールと基本機能
akira6592
 
BGP Unnumbered で遊んでみた
BGP Unnumbered で遊んでみたBGP Unnumbered で遊んでみた
BGP Unnumbered で遊んでみた
akira6592
 
自動化ツール Ansible に触れてみよう(技術インターン)
 自動化ツール Ansible に触れてみよう(技術インターン) 自動化ツール Ansible に触れてみよう(技術インターン)
自動化ツール Ansible に触れてみよう(技術インターン)
akira6592
 
技術ブログを書こう
技術ブログを書こう技術ブログを書こう
技術ブログを書こう
akira6592
 
Ansible2.9 ネットワーク対応のアップデート #ansiblejp
Ansible2.9 ネットワーク対応のアップデート #ansiblejpAnsible2.9 ネットワーク対応のアップデート #ansiblejp
Ansible2.9 ネットワーク対応のアップデート #ansiblejp
akira6592
 
はじめた自動化をどう広めるか 書籍「Fearless Change」からのヒント
はじめた自動化をどう広めるか 書籍「Fearless Change」からのヒントはじめた自動化をどう広めるか 書籍「Fearless Change」からのヒント
はじめた自動化をどう広めるか 書籍「Fearless Change」からのヒント
akira6592
 
はじめどころを探る自動化アセスメント(JANOG44 ここからはじめよう、運用自動化)
はじめどころを探る自動化アセスメント(JANOG44 ここからはじめよう、運用自動化)はじめどころを探る自動化アセスメント(JANOG44 ここからはじめよう、運用自動化)
はじめどころを探る自動化アセスメント(JANOG44 ここからはじめよう、運用自動化)
akira6592
 
向き合うエンジニア
向き合うエンジニア向き合うエンジニア
向き合うエンジニア
akira6592
 
Ansible 2.8 アップデート情報 -機能追加と注意点-
Ansible 2.8 アップデート情報 -機能追加と注意点-Ansible 2.8 アップデート情報 -機能追加と注意点-
Ansible 2.8 アップデート情報 -機能追加と注意点-
akira6592
 
ネットワークコンフィグ分析ツール Batfish との付き合い方
ネットワークコンフィグ分析ツール Batfish との付き合い方ネットワークコンフィグ分析ツール Batfish との付き合い方
ネットワークコンフィグ分析ツール Batfish との付き合い方
akira6592
 
Ansibleではじめるサーバー・ネットワークの自動化(2019/04版)
Ansibleではじめるサーバー・ネットワークの自動化(2019/04版)Ansibleではじめるサーバー・ネットワークの自動化(2019/04版)
Ansibleではじめるサーバー・ネットワークの自動化(2019/04版)
akira6592
 
Ansibleではじめるサーバー・ネットワークの自動化(2019/02版)
Ansibleではじめるサーバー・ネットワークの自動化(2019/02版)Ansibleではじめるサーバー・ネットワークの自動化(2019/02版)
Ansibleではじめるサーバー・ネットワークの自動化(2019/02版)
akira6592
 
新人研修資料 向き合うエンジニア
新人研修資料 向き合うエンジニア新人研修資料 向き合うエンジニア
新人研修資料 向き合うエンジニア
akira6592
 
Ansible とネットワーク自動化の概要(SmartCS と Ansible の連携による自動化の可能性を体験!)
Ansible とネットワーク自動化の概要(SmartCS と Ansible の連携による自動化の可能性を体験!)Ansible とネットワーク自動化の概要(SmartCS と Ansible の連携による自動化の可能性を体験!)
Ansible とネットワーク自動化の概要(SmartCS と Ansible の連携による自動化の可能性を体験!)
akira6592
 
Ansible 実践ガイド第3版 ネットワーク担当としてのふりかえり #インフラエンジニアBooks
Ansible 実践ガイド第3版 ネットワーク担当としてのふりかえり #インフラエンジニアBooksAnsible 実践ガイド第3版 ネットワーク担当としてのふりかえり #インフラエンジニアBooks
Ansible 実践ガイド第3版 ネットワーク担当としてのふりかえり #インフラエンジニアBooks
akira6592
 
Ansible でお世話になっている機能と拡張
Ansible でお世話になっている機能と拡張Ansible でお世話になっている機能と拡張
Ansible でお世話になっている機能と拡張
akira6592
 
Ansible 2.10 と Collection
Ansible 2.10 と CollectionAnsible 2.10 と Collection
Ansible 2.10 と Collection
akira6592
 
自動化の下ごしらえ
自動化の下ごしらえ自動化の下ごしらえ
自動化の下ごしらえ
akira6592
 
向き合うエンジニア 2020年度版
向き合うエンジニア 2020年度版向き合うエンジニア 2020年度版
向き合うエンジニア 2020年度版
akira6592
 
はじめてAnsibleのバグ修正に協力してみた
はじめてAnsibleのバグ修正に協力してみたはじめてAnsibleのバグ修正に協力してみた
はじめてAnsibleのバグ修正に協力してみた
akira6592
 
CML-Personal (VIRL2)のインストールと基本機能
CML-Personal (VIRL2)のインストールと基本機能CML-Personal (VIRL2)のインストールと基本機能
CML-Personal (VIRL2)のインストールと基本機能
akira6592
 
BGP Unnumbered で遊んでみた
BGP Unnumbered で遊んでみたBGP Unnumbered で遊んでみた
BGP Unnumbered で遊んでみた
akira6592
 
自動化ツール Ansible に触れてみよう(技術インターン)
 自動化ツール Ansible に触れてみよう(技術インターン) 自動化ツール Ansible に触れてみよう(技術インターン)
自動化ツール Ansible に触れてみよう(技術インターン)
akira6592
 
技術ブログを書こう
技術ブログを書こう技術ブログを書こう
技術ブログを書こう
akira6592
 
Ansible2.9 ネットワーク対応のアップデート #ansiblejp
Ansible2.9 ネットワーク対応のアップデート #ansiblejpAnsible2.9 ネットワーク対応のアップデート #ansiblejp
Ansible2.9 ネットワーク対応のアップデート #ansiblejp
akira6592
 
はじめた自動化をどう広めるか 書籍「Fearless Change」からのヒント
はじめた自動化をどう広めるか 書籍「Fearless Change」からのヒントはじめた自動化をどう広めるか 書籍「Fearless Change」からのヒント
はじめた自動化をどう広めるか 書籍「Fearless Change」からのヒント
akira6592
 
はじめどころを探る自動化アセスメント(JANOG44 ここからはじめよう、運用自動化)
はじめどころを探る自動化アセスメント(JANOG44 ここからはじめよう、運用自動化)はじめどころを探る自動化アセスメント(JANOG44 ここからはじめよう、運用自動化)
はじめどころを探る自動化アセスメント(JANOG44 ここからはじめよう、運用自動化)
akira6592
 
向き合うエンジニア
向き合うエンジニア向き合うエンジニア
向き合うエンジニア
akira6592
 
Ansible 2.8 アップデート情報 -機能追加と注意点-
Ansible 2.8 アップデート情報 -機能追加と注意点-Ansible 2.8 アップデート情報 -機能追加と注意点-
Ansible 2.8 アップデート情報 -機能追加と注意点-
akira6592
 
ネットワークコンフィグ分析ツール Batfish との付き合い方
ネットワークコンフィグ分析ツール Batfish との付き合い方ネットワークコンフィグ分析ツール Batfish との付き合い方
ネットワークコンフィグ分析ツール Batfish との付き合い方
akira6592
 
Ansibleではじめるサーバー・ネットワークの自動化(2019/04版)
Ansibleではじめるサーバー・ネットワークの自動化(2019/04版)Ansibleではじめるサーバー・ネットワークの自動化(2019/04版)
Ansibleではじめるサーバー・ネットワークの自動化(2019/04版)
akira6592
 
Ansibleではじめるサーバー・ネットワークの自動化(2019/02版)
Ansibleではじめるサーバー・ネットワークの自動化(2019/02版)Ansibleではじめるサーバー・ネットワークの自動化(2019/02版)
Ansibleではじめるサーバー・ネットワークの自動化(2019/02版)
akira6592
 
Ad

show コマンド結果をパースする方法あれこれ #npstudy

  • 2. 2 はじめに l ネットワーク機器の通常の show コマンドの結果は、 機械にとっては取り扱いにくくなりがち。 l これを解決する、show コマンドの結果を 構造化データにするパーサーと、他ツールとの 組み合わせをご紹介します。 { "INTF": "GigabitEthernet1", "IPADDR": "10.10.20.48", "PROTO": "up", "STATUS": "up" }, { "INTF": "GigabitEthernet2", "IPADDR": "unassigned", "PROTO": "down", "STATUS": "administratively down" } show ip interface brief 結果のパース結果例
  • 3. ⾃⼰紹介 3 名前 横地 晃 所属 株式会社エーピーコミュニケーションズ 業務 ネットワーク⾃動化のサービス開発 ブログ てくなべ https://tekunabe.hatenablog.jp @akira6592 発表・執筆など l Ansible実践ガイド 第3版 l Software Design 2018年12⽉号 Ansible 特集 l NetOpsCoding#5 × ネットワークプログラマビリティ勉強会#13 第3版 ネットワーク対応も追加 2019年10⽉発売予定
  • 5. パーサーとは 5 l show コマンドの結果を、機械が取り扱いやすい 構造化データに変換するもの (今回の発表の⽂脈上の説明) 「そもそもネットワーク器機が構造化データを出⼒してくれればいいのでは︖」→ ごもっとも csr1000v#show ip interface brief Interface IP-Address OK? Method Status Protocol GigabitEthernet1 10.10.20.48 YES NVRAM up up GigabitEthernet2 unassigned YES NVRAM administratively down down GigabitEthernet3 unassigned YES NVRAM administratively down down { "INTF": "GigabitEthernet1", "IPADDR": "10.10.20.48", "PROTO": "up", "STATUS": "up" }, { "INTF": "GigabitEthernet2", "IPADDR": "unassigned", "PROTO": "down", "STATUS": "administratively down" }, { "INTF": "GigabitEthernet3", "IPADDR": "unassigned", "PROTO": "down", "STATUS": "administratively down" } 機械が取り扱いやすい パーサー
  • 6. 今回ご紹介するパーサーたち 6 l TextFSM l Genie Parser netmiko Ansible Genie Parser TextFSM パーサー⾃動化ツール コマンド実⾏ 連携 { "INTF": "GigabitEthernet1", "IPADDR": "10.10.20.48", "PROTO": "up", "STATUS": "up" } 変換 ⾃動化ツールとの 組み合わせもご紹介 構造化データネットワーク機器
  • 7. 今回の例で利⽤するコマンド結果 7 csr1000v#show ip interface brief Interface IP-Address OK? Method Status Protocol GigabitEthernet1 10.10.20.48 YES NVRAM up up GigabitEthernet2 unassigned YES NVRAM administratively down down GigabitEthernet3 unassigned YES NVRAM administratively down down Loopback0 unassigned YES unset up up Loopback1 unassigned YES unset up up Loopback2 unassigned YES unset up up l Cisco IOS-XE の show ip interface brief 結果 環境: Cisco DevNet Sandbox CSRV1000V IOS-XE (16.11.01a) これをパースします
  • 9. TextFSM とは 9 l Python製のパーサー ◦ https://github.com/google/textfsm l ntc-templates のテンプレートを利⽤可 ◦ プラットフォーム数 23 ◦ コマンド数 290 ◦ https://github.com/networktocode/ntc-templates l テンプレートは追加、カスタマイズ可能 l pip install textfsm でインストール (2019/09/03現在)
  • 10. TextFSM で利⽤するテンプレート例 10 Value INTF (¥S+) Value IPADDR (¥S+) Value STATUS (up|down|administratively down) Value PROTO (up|down) Start ^${INTF}¥s+${IPADDR}¥s+¥w+¥s+¥w+¥s+${STATUS}¥s+${PROTO} -> Record Cisco IOS の show ip interface brief コマンドのパーステンプレート https://github.com/networktocode/ntc-templates/blob/master/templates/cisco_ios_show_ip_interface_brief.template 正規表現
  • 11. TextFSM 単体(コード) 11 import textfsm from pprint import pprint # テンプレートファイルの読み込み template = open('./templates/cisco_ios_show_ip_interface_brief.template', 'r') re_table = textfsm.TextFSM(template) fsm_results = re_table.ParseText(raw_text_data) results = list() # ヘッダーとデータを結合 for item in fsm_results: results.append(dict(zip(re_table.header, item))) pprint(results) https://github.com/google/textfsm/wiki/TextFSM#using-the-library公式サンプル テンプレートファイル名 コマンド結果は 何かしらで準備しておく
  • 12. TextFSM 単体(結果) 12 [{'INTF': 'GigabitEthernet1', 'IPADDR': '10.10.20.48', 'PROTO': 'up', 'STATUS': 'up'}, {'INTF': 'GigabitEthernet2', 'IPADDR': 'unassigned', 'PROTO': 'down', 'STATUS': 'administratively down'}, {'INTF': 'GigabitEthernet3', 'IPADDR': 'unassigned', 'PROTO': 'down', 'STATUS': 'administratively down'}, {'INTF': 'Loopback0', 'IPADDR': 'unassigned', 'PROTO': 'up', 'STATUS': 'up'}, {'INTF': 'Loopback1', 'IPADDR': 'unassigned', 'PROTO': 'up', 'STATUS': 'up'}, {'INTF': 'Loopback2', 'IPADDR': 'unassigned', 'PROTO': 'up', 'STATUS': 'up'}]
  • 13. TextFSM + Netmiko(コード) 13 l Netmiko 2.0.0 から TextFSM 同梱 from netmiko import Netmiko import os from pprint import pprint ios1 = { "host": ”10.10.20.48", "device_type": "cisco_ios", "username": "testuser", "password": "testpass" } os.environ["NET_TEXTFSM"] = "/home/npstudy/templates" net_connect = Netmiko(**ios1) result = net_connect.send_command("show ip interface brief", use_textfsm=True) pprint(result) 実⾏コマンド テンプレートファイル格納 「ディレクトリ」を環境変数に指定 (デフォルトは ./ntc-templates/templates) TextFSM をパーサーに使う指定
  • 14. TextFSM + Netmiko(結果) 14 [{'intf': 'GigabitEthernet1', 'ipaddr': '10.10.20.48', 'proto': 'up', 'status': 'up'}, {'intf': 'GigabitEthernet2', 'ipaddr': 'unassigned', 'proto': 'down', 'status': 'administratively down'}, {'intf': 'GigabitEthernet3', 'ipaddr': 'unassigned', 'proto': 'down', 'status': 'administratively down'}, {'intf': 'Loopback0', 'ipaddr': 'unassigned', 'proto': 'up', 'status': 'up'}, {'intf': 'Loopback1', 'ipaddr': 'unassigned', 'proto': 'up', 'status': 'up'}, {'intf': 'Loopback2', 'ipaddr': 'unassigned', 'proto': 'up', 'status': 'up'}]
  • 15. TextFSM + Ansible(Playbook) 15 l Ansible 2.4 で parse_cli_textfsm フィルター追加 - hosts: ios gather_facts: no vars: template_file: "./templates/cisco_ios_show_ip_interface_brief.template" tasks: - name: show ios_command: commands: - show ip interface brief register: result - name: show parsed result debug: msg: "{{ result.stdout[0] | parse_cli_textfsm(template_file) }}" ※別途、インベントリ、認証情報の定義が必要 実⾏コマンド テンプレートファイル名 (vars で定義済み) 要 pip install textfsm
  • 16. TextFSM + Ansible(結果) 16 ok: [ios1] => { "msg": [ { "INTF": "GigabitEthernet1", "IPADDR": "10.10.20.48", "PROTO": "up", "STATUS": "up" }, { "INTF": "GigabitEthernet2", "IPADDR": "unassigned", "PROTO": "down", "STATUS": "administratively down" }, { "INTF": "GigabitEthernet3", "IPADDR": "unassigned", "PROTO": "down", "STATUS": "administratively down" }, { "INTF": "Loopback0", "IPADDR": "unassigned", "PROTO": "up", "STATUS": "up" }, { "INTF": "Loopback1", "IPADDR": "unassigned", "PROTO": "up", "STATUS": "up" }, { "INTF": "Loopback2", "IPADDR": "unassigned", "PROTO": "up", "STATUS": "up" } ] }
  • 18. Genie Parser とは 18 l Python製テストフレームワーク/ライブラリ 「pyATS/Genie」内のパーサー ◦ https://github.com/CiscoTestAutomation/genieparser ◦ Cisco 社が開発をはじめたもの l Cisco 機器への対応が充実 ◦ プラットフォーム数 8(Cisco 7、Juniper 1) ◦ コマンド数 約1300 ◦ https://pubhub.devnetcloud.com/media/genie-feature-browser/docs/#/parsers l pip install genie でインストール (2019/09/03現在)
  • 19. Genie Parser 単体(コード) 19 testbed: name: "testbed1" devices: csr1000v: type: catalyst platform: iosxe os: "iosxe" alias: "ios1" tacacs: login_prompt: "login:" password_prompt: "Password:" username: testuser passwords: tacacs: testpass # enable: testpass # line: testpass connections: ssh: protocol: ssh ip: "10.10.20.48" コマンド結果は 何かしらで準備しておく testbedファイル(接続情報) from genie.conf import Genie from pprint import pprint testbed = Genie.init("./testbed.yml") device = testbed.devices["csr1000v"] device.connect() output = device.parse("show ip interface brief") pprint(output) Testbedファイル 実⾏コマンド 接続先 実⾏コード
  • 20. Genie Parser 単体(結果1) 20 [2019-09-04 15:30:20,523] +++ csr1000v logfile /tmp/csr1000v-cli-20190904T153020523.log +++ [2019-09-04 15:30:20,524] +++ Unicon plugin iosxe +++ Password: [2019-09-04 15:30:28,022] +++ connection to spawn: ssh -l developer 10.10.20.48, id: 4458345528 +++ [2019-09-04 15:30:28,023] connection to csr1000v Welcome to the DevNet Sandbox for CSR1000v and IOS XE The following programmability features are already enabled: - NETCONF - RESTCONF Thanks for stopping by. csr1000v# [2019-09-04 15:30:29,379] +++ initializing handle +++ [2019-09-04 15:30:29,381] +++ csr1000v: executing command 'term length 0' +++ term length 0 csr1000v# [2019-09-04 15:30:29,647] +++ csr1000v: executing command 'term width 0' +++ term width 0 csr1000v# [2019-09-04 15:30:29,883] +++ csr1000v: executing command 'show version' +++ show version Cisco IOS XE Software, Version 16.09.03 ...略.... csr1000v# [2019-09-04 15:30:30,171] +++ csr1000v: config +++ config term Enter configuration commands, one per line. End with CNTL/Z. csr1000v(config)#no logging console csr1000v(config)#line console 0 csr1000v(config-line)#exec-timeout 0 csr1000v(config-line)#end csr1000v# [2019-09-04 15:30:32,395] +++ csr1000v: executing command 'show ip interface brief' +++ show ip interface brief Interface IP-Address OK? Method Status Protocol GigabitEthernet1 10.10.20.48 YES NVRAM up up GigabitEthernet2 unassigned YES NVRAM administratively down down GigabitEthernet3 unassigned YES NVRAM administratively down down Loopback0 unassigned YES unset up up Loopback1 unassigned YES unset up up Loopback2 unassigned YES unset up up csr1000v# ログインや ter len 0 などの ログが流れていく・・・ ↓ 続く
  • 21. Genie Parser 単体(結果2) 21 {'interface': {'GigabitEthernet1': {'interface_is_ok': 'YES', 'ip_address': '10.10.20.48', 'method': 'NVRAM', 'protocol': 'up', 'status': 'up'}, 'GigabitEthernet2': {'interface_is_ok': 'YES', 'ip_address': 'unassigned', 'method': 'NVRAM', 'protocol': 'down', 'status': 'administratively down'}, 'GigabitEthernet3': {'interface_is_ok': 'YES', 'ip_address': 'unassigned', 'method': 'NVRAM', 'protocol': 'down', 'status': 'administratively down'}, 'Loopback0': {'interface_is_ok': 'YES', 'ip_address': 'unassigned', 'method': 'unset', 'protocol': 'up', 'status': 'up'}, 'Loopback1': {'interface_is_ok': 'YES', 'ip_address': 'unassigned', 'method': 'unset', 'protocol': 'up', 'status': 'up'}, 'Loopback2': {'interface_is_ok': 'YES', 'ip_address': 'unassigned', 'method': 'unset', 'protocol': 'up', 'status': 'up'}}} ↓ 続き
  • 22. Genie Parser + netmiko(コード) 22 from netmiko import Netmiko import os from pprint import pprint ios1 = { "host": ”10.10.20.48", "device_type": "cisco_ios", "username": "testuser", "password": "testpass" } net_connect = Netmiko(**ios1) result = net_connect.send_command("show ip interface brief", use_genie=True) pprint(result) 実⾏コマンド l Netmiko 2.4.1 で Genie/pyATS parser サポート 要 pip install genie Genie Parser を パーサーに使う指定
  • 23. Genie Parser + netmiko(結果) 23 {'interface': {'GigabitEthernet1': {'interface_is_ok': 'YES', 'ip_address': '10.10.20.48', 'method': 'NVRAM', 'protocol': 'up', 'status': 'up'}, 'GigabitEthernet2': {'interface_is_ok': 'YES', 'ip_address': 'unassigned', 'method': 'NVRAM', 'protocol': 'down', 'status': 'administratively down'}, 'GigabitEthernet3': {'interface_is_ok': 'YES', 'ip_address': 'unassigned', 'method': 'NVRAM', 'protocol': 'down', 'status': 'administratively down'}, 'Loopback0': {'interface_is_ok': 'YES', 'ip_address': 'unassigned', 'method': 'unset', 'protocol': 'up', 'status': 'up'}, 'Loopback1': {'interface_is_ok': 'YES', 'ip_address': 'unassigned', 'method': 'unset', 'protocol': 'up', 'status': 'up'}, 'Loopback2': {'interface_is_ok': 'YES', 'ip_address': 'unassigned', 'method': 'unset', 'protocol': 'up', 'status': 'up'}}}
  • 24. Genie Parser + Ansible(Playbook) 24 l clay584.parse_genie ロールで連携 - hosts: ios gather_facts: no vars: show: show ip interface brief tasks: - name: Read in parse_genie role include_role: name: clay584.parse_genie - name: ios command test ios_command: commands: - "{{ show }}" register: result - name: debug: msg: "{{ result.stdout[0] | parse_genie(command=show, os='iosxe') }}" ※別途、インベントリ、認証情報の定義が必要 あらかじめ ansible-galaxy install clay584.parse_genie でインストールしたロールを仕様 実⾏コマンド (vars で定義済み) 要 ansible-galaxy install clay584.parse_genie 実⾏コマンド (vars で定義済み) 対象OS
  • 25. Genie Parser + Ansible(結果) 25 ok: [ios1] => { "msg": { “interface”: { "GigabitEthernet1": { "interface_is_ok": "YES", "ip_address": "10.10.20.48", "method": "NVRAM", "protocol": "up", "status": "up" }, "GigabitEthernet2": { "interface_is_ok": "YES", "ip_address": "unassigned", "method": "NVRAM",1 "protocol": "down", "status": "administratively down" }, "GigabitEthernet3": { "interface_is_ok": "YES", "ip_address": "unassigned", "method": "NVRAM", "protocol": "down", "status": "administratively down" }, "Loopback0": { "interface_is_ok": "YES", "ip_address": "unassigned", "method": "unset", "protocol": "up", "status": "up" }, "Loopback1": { "interface_is_ok": "YES", "ip_address": "unassigned", "method": "unset", "protocol": "up", "status": "up" }, "Loopback2": { "interface_is_ok": "YES", "ip_address": "unassigned", "method": "unset", "protocol": "up", "status": "up" } } } }
  • 27. まとめ 27 l TextFSM ◦ カスタマイズが容易 l Genie Parser ◦ Cisco 機器に強い l 使い分け(個⼈的主観) ◦ Cisco の機器が対象なら Genie Parser ◦ それ以外、容易にカスタマイズしたいなら TextFSM l netmiko や Ansible との連携も便利
  • 28. 参考 28 l TextFSM ◦ netmiko と TextFSM を利⽤してネットワーク機器の show コマンド結果をパースする ◦ https://tekunabe.hatenablog.jp/entry/2018/12/31/netmiko_textfsm ◦ ネットワーク機器のコマンド結果をパースする parse_cli_textfsm フィルタープラグインを試す ◦ https://tekunabe.hatenablog.jp/entry/2017/09/23/parse_cli_textfsm l Genie Parser ◦ pyATS/Genie : ネットワークテスト⾃動化ツール pyATS & Genie についてとインストール⽅法 ◦ https://ccieojisan.net/post-1697/ ◦ Genie Parser/OpsによるCisco機器のログ取得・構⽂解析 ◦ https://qiita.com/tech_kitara/items/f5c4ae6cbab8e7240f40 ◦ Ansible 連携ロール「clay584.parse_genie」の説明 ◦ https://developer.cisco.com/codeexchange/github/repo/clay584/parse_genie l ansible-network.network-engine ロール(今回ご紹介できなかったもの) ◦ command_parser という Ansible ネイティブなパーサーがある ◦ リポジトリ ◦ https://github.com/ansible-network/network-engine