SlideShare a Scribd company logo
シスコシステムズ合同会社
システムズエンジニア 丸山 隆太
2020/7/28
DevNet 編
Cisco Modeling Labs (CML) を使って
ネットワークを学ぼう!
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
Cisco Modeling Labsを使ってネットワークを学ぼう!
CMLとは何か、ユースケースや基本機能、ラボ構築など、デモを交えながらご紹介します
https://learningnetwork.cisco.com/s/article/jp-webinar-cml01
基礎編 (7/7 済)
CMLの活用方法、資格での勉強方法などをデモを交えCCIEホルダーがご紹介します
https://learningnetwork.cisco.com/s/article/jp-webinar-cml02
応用編 (7/14 済)
CMLのAPI/プログラマビリティを用いたネットワーク自動化の観点でご紹介します
https://learningnetwork.cisco.com/s/article/jp-webinar-cml03
DevNet編
終了したセミナーについては、順次、資料と動画を公開中
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
アジェンダ
1
2
3
4
5
CML のおさらい
DevNetについて
CML 2.0 API
DevNet における CML 活用例
まとめ
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
• 丸山 隆太(まるやま りゅうた)
• 人材育成の一環でインターンシップとして出向中 (2019/04〜)
• 出向元:富士通ネットワークソリューションズ株式会社
• インターンシップで学んでいること
• CiscoDNA 関連の製品知識 (Cisco DNA Center, ISE, etc.)
• Python/API/ネットワークプログラマビリティ関連
• お気に入りのCisco製品/技術
• IOS XE 17.2, Catalyst 9000シリーズ
自己紹介
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
アジェンダ
1
2
3
4
5
CML のおさらい
DevNetについて
CML 2.0 API
DevNet における CML 活用例
まとめ
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
Cisco Modeling Labs (CML) とは?
Ciscoが提供する
ネットワークシミュレーションプラットフォーム
• CML1.x
• VIRL (Virtual Internet Routing Labs)
• CML-Enterprise 2.0 (企業向け)
• CML-Personal 2.0 (個人向け)
待望のメジャーバージョンアップ
ブランドはCMLに統一
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
CML 標準付属 プラットフォーム
IOS
IOSv & IOSv L2
IOS XR
XRv & XRv
9000
IOS XE
CSR1000v
NexusASA
ASAv
Other
• TRex
• WAN
Emulator
• Tiny Core
Linux
• Ubuntu
18.04
• CoreOS
• Alpine Linux
NX-OS
7000v &
9000v
※カスタムVMイメージ機能により新規イメージ、サードパーティ製イメージを追加可能
※ディスクイメージバージョン: refplat-20200409-fcs.iso
※各イメージのバージョン等の情報 https://developer.cisco.com/docs/modeling-labs/#!reference-platforms-and-images
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
CML 付属 仮想ノード
ルーター, ファイアウォール
スイッチ サーバー
シミュレーター, その他
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
新規仮想ノードの追加例
新規仮想ノードを追加する際、下記2つのコンポーネントが必要
YAML形式のノード構成ファイル
• CPU,RAM,ネットワークアダプターなどの情報
• 参考:GitHub CML Community
qcow2形式のディスクイメージ
• OSのイメージ
• 別途入手が必要(ベンダーサイトなど)
参考:
https://github.com/CiscoDevNet/cml-community/tree/master/node-definitions
例) A10 vThunderを起動
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
ラボマネージャー と ワークベンチ
ラボ
ワークベンチラボマネージャ
ラボ
• ラボマネージャー: CMLサーバのステータス、ラボを管理するCMLのトップ画面
• ワークベンチ:作成したラボの編集、ネットワークシミュレーションを行うためのメイン画面
• CMLでは1つのネットワークシミュレーションの単位をラボとよぶ
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
ラボマネージャー
システムステータス
• CPU使用率
• メモリ使用率
• ディスク使用率
• 合計仮想ノード数
• 実行中仮想ノード数
など
ラボリスト
• ワークベンチへの移動
• ラボの実行
• ラボの停止
• ラボの初期化
• ラボの削除
など
メニューバー
• ラボの表示切替
• ラボ追加
• ラボのインポート
• ツールへのアクセス
など
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
ワークベンチ
操作・情報表示パネル
• ラボ・ノードの情報
• シミュレーション・ノードの開始
• コンソールアクセス
• ラボのログ表示
など
メニューバー
• ラボのログ表示
• ラボマネージャへの移動
• ラボのエクスポート
• ラボの強制初期化
など
ノード一覧
トポロジ作成
フィールド
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
CML-Enterprise, CML-Personal の比較
Cisco Modeling Labs–Enterprise Cisco Modeling Labs–Personal
対象ユーザ 企業・組織 個人
ユーザ数 マルチユーザ シングルユーザ
ノード数(標準) 20ノード 20ノード
ノード数(最大) 300ノード 20ノード
サポート Cisco TAC Community Support Forum
購入方法 Cisco パートナー経由 Cisco Learning Network Store
ライセンシング スマートライセンス スマートライセンス
スマートアカウントの取得 必要 不要(Cisco.comアカウントがあればOK)
インターネット接続性 必須ではない ※オフラインでの認証も可能 必要 ※1度認証すれば30日間はオフラインでも
使用可能
クラスタリング ロードマップに有り 無し
※現在のバージョンに基づきます。将来のバージョンでは変更される可能性があります。
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
CML
仮想
ラボ
コンソールサーバーとブレイクアウトツール
• CML自体がコンソールサーバーとして機能
• CMLへSSH接続し、各仮想ノードへ接続
• クライアントPCに「ブレイクアウトツール」をインストール
• クライアントPCがプロキシとして、CMLラボのノードに直
接コンソール接続
ブレイクアウトツールコンソールサーバー
自身の端末
CML
(コンソールサーバ)
SSH接続
CML
仮想
ラボ
iTerm2
ブレイクアウト
ツール
Windows, Mac, Linux
TLS通信
CML
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
外部接続コネクター
CML内の仮想ラボ物理ラボ External
Connector
• Cisco DNA Center
• Zabbix
• Ansible
• Docker
• …
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
アジェンダ
1
2
3
4
5
CML のおさらい
DevNetについて
CML 2.0 API
DevNet における CML 活用例
まとめ
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
Cisco DevNet
• アイデアソン&ハッカソン
• DevNet Express
• DevNet Create
• DevNet イノベーションチャレンジ
• DevNet Code Exchange
• DevNet Automation Exchange
• ビジネス、サービス事例
• DevNet Solution Exchange
• 人材開発
• DevNet Learning Labs
• DevNet Sandbox
• DevNet 資格取得
学習、スキル 経験、体験
成果、コードビジネス価値
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
Cisco DevNet コンテンツ/リソース
ソリューションポータル:
Ecosystem Exchange
開発者コミュニティ
コードリポジトリ:
Code Exchange
認定資格:
DevNet Certifications
イベント:
• DevNet Express, DevNet Create
• Cisco Live, Cisco Connect
API ガイド
リモートラボ環境:
DevNet Sandbox
学習コンテンツ:
Learning labs
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
DevNet 認定資格 2020年2月24日開始
https://developer.cisco.com/certification/
インフラ
ストラクチャ
ソフトウェア
アソシエイト スペシャリスト プロフェッショナル エキスパート
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
CCNA
Cisco Certified Network Associate
DevNet Associate
Cisco Certified DevNet Associate
https://www.cisco.com/c/ja_jp/training-events/training-certifications/exams/current-
list/ccna-200-301.html
https://www.cisco.com/c/ja_jp/training-events/training-
certifications/certifications/devnet/cisco-certified-devnet-associate.html
CMLを活用!
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
https://developer.cisco.com/modeling-labs/
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
アジェンダ
1
2
3
4
5
CML のおさらい
DevNetについて
CML 2.0 API
DevNet における CML 活用例
まとめ
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
CML 2.0 API
• APIドキュメントはCML組込
• CMLを操作する135種類のAPI
• Swagger GUIからAPIアクセスの確認
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
Swagger, Postman による認証 Token取得
参考 Postman Collection
https://github.com/sttrayno/CML-Personal-Guide
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
はじめての CML REST API コール
import json
import requests
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
url = "https://<cml_ipaddress>/api/v0/authenticate"
headers = {
'Content-Type': 'application/json',
'accept': 'application/json'
}
payload = {
"username": ”<username>",
"password": ”<password>"
}
response = requests.request("POST", url, headers=headers, data=json.dumps(payload), verify=False).json()
print(response)
認証Tokenの取得例
取得したTokenをヘッダに付けて各APIへアクセス
Pythonライブラリのインポート
HTTPヘッダやペイロードに格納する内容を作成
HTTP POSTメソッドで必要なヘッダ, ペイロードを送信
警告メッセージを表示しない
認証トークン取得APIの変数を作成
APIから返される認証トークンをプリント
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
参考: CMLクライアントライブラリ - virl2-client
認証、リンクやノードの追加削除をシンプルに行う
Python クライアントライブラリ
https://developer.cisco.com/codeexchange/github/repo/CiscoDevNet/virl2-client
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
参考: CMLクライアントライブラリ - virl2-client
参考: virl2-clientを試すJupyter
notebook ファイル(DevNet/Github)
https://github.com/CiscoDevNet/virl2-client/tree/master/examples
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
1. シミュレーションラボ稼働情報の取得
2. YAMLファイルを使ったラボ構成のインポートと起動
3. シミュレーションラボの停止と消去
4. pyATS Testbedファイル(yaml)の出力
ユースケース
1. ラボ情報取得 2. ラボ構成のインポートと起動
test-topology.yaml
3. ラボの停止と消去
getlab.py importlab.py
deletelab.py
CML
pyatsTb_f2d3c5.yaml
4. pyATS用のTestbedファイルを出力
※本セッションでは, pyATSそのも
のについての説明は行いません。
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
1. シミュレーションラボ稼働情報の取得
import json
import requests
cml_url = "https://<cml_ip>/api"
uname = ”<username>"
passwd = ”<password>"
labname = ”<labname>"
def get_token(url, user, password):
api_call = "/v0/authenticate"
url += api_call
headers = {
'Content-Type': 'application/json',
'accept': 'application/json'
}
payload = {
"username": user,
"password": password
}
response = requests.request("POST", url, headers=headers,
data=json.dumps(payload), verify=False).json()
return response
def get_labs(token, url):
api_call = "/v0/labs"
url += api_call
token = 'Bearer' + ' ' + token
headers = {
'accept': 'application/json',
'Authorization': token
}
response = requests.get(url, headers=headers, verify=False).json()
print("#" + " " + "CML 稼働ラボ数" + ": " + str(len(response)) + " at " + labname)
return response
def get_labsdetail(token, url, labids):
token = 'Bearer' + ' ' + token
headers = {
'accept': 'application/json',
'Authorization': token
}
for labid in labids:
api_call = "/v0/labs/" + labid
laburl = url + api_call
guiurl = url.rstrip('api')
guiurl = guiurl + "lab/" + labid
response = requests.get(laburl, headers=headers, verify=False).json()
print("{0:42}{1:22}{2:18}{3:18}".
format(str(response['lab_title']), str(response['created']),
str(response['state']), str(guiurl)))
if __name__ == "__main__":
auth_token = get_token(cml_url, uname, passwd)
print("#"*113)
labids = get_labs(auth_token, cml_url)
print("#"*113)
get_labsdetail(auth_token, cml_url, labids)
print("#"*113)
hellocml.py
認証Token取得
稼働ラボ情報取得
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
1. シミュレーションラボ稼働情報の取得 cont.
~ $python hellocml.py
#################################################################################################################
# CML 稼働ラボ数: 19 at Cisco SE ラボ
#################################################################################################################
Test by tatsaito 2020-06-11 13:33:46 STOPPED https://10.71.154.73/lab/866cb6
test by rmaruyam 2020-06-11 09:17:08 DEFINED_ON_CORE https://10.71.154.73/lab/b3a6eb
To DNAC96 2020-06-17 05:01:40 STARTED https://10.71.154.73/lab/2ba4d1
test by asai 2020-06-17 07:21:17 STOPPED https://10.71.154.73/lab/eeca34
CML-DevNet-Lab 2020-06-22 11:16:04 STARTED https://10.71.154.73/lab/48cadf
TEST Lab asai 2020-06-23 17:42:14 STOPPED https://10.71.154.73/lab/72cbd5
Lab asai 2020-06-24 11:00:16 STOPPED https://10.71.154.73/lab/0fbd5d
TEST Lab asai 2020-06-24 13:17:08 STOPPED https://10.71.154.73/lab/f2d3c5
asai 2020-06-25 13:36:02 STOPPED https://10.71.154.73/lab/0574e5
CML Basic Lab 2020-06-26 13:37:36 STOPPED https://10.71.154.73/lab/deaf38
manual_config_live_vis_configured.virl 2020-06-29 04:11:33 STOPPED https://10.71.154.73/lab/80bbfd
Nov_webinar_demo_topology.virl 2020-06-29 06:25:31 DEFINED_ON_CORE https://10.71.154.73/lab/65ccf2
July_webinar_ospf_eigrp.virl 2020-06-29 06:37:50 DEFINED_ON_CORE https://10.71.154.73/lab/609fbc
Mar15_webinar_l2_unmanaged.virl 2020-06-29 06:38:18 DEFINED_ON_CORE https://10.71.154.73/lab/bae85c
Basic Lab 2 2020-07-08 11:17:55 STOPPED https://10.71.154.73/lab/f72c4b
maruyama-API-Lab 2020-07-19 09:07:25 STOPPED https://10.71.154.73/lab/ebbddc
test-topology-kikuta 2020-07-20 13:23:37 DEFINED_ON_CORE https://10.71.154.73/lab/94d9b1
testtesttest-by-kikuta 2020-07-20 13:27:07 DEFINED_ON_CORE https://10.71.154.73/lab/bf2acf
test-topology.yaml 2020-07-20 15:07:35 STARTED https://10.71.154.73/lab/6b20de
#################################################################################################################
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
2. YAMLファイルを使ったラボ構成のインポートと起動
~ $python import.py test-topology.yaml
Please input an lab title [type q to quit]: test-by-kikuta
test-topology.yaml
<Response [200]>
CMLラボ構成ファイル(YAML or JSON)
インポート/起動するCMLラボの名称
• コンフィグレーションを含めたラボテスト構成を
YAMLで管理し、チームやコミュニティで共有
• CI/CDツールと組み合わせたNetDevOps
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
2. YAMLファイルを使ったラボ構成のインポートと起動 cont.
import.py
def import_lab(token, url):
labtitle = input("Please input an lab title [type q to quit]: ")
api_call = "/v0/import"
url += api_call + "?title=" + labtitle
token = 'Bearer' + ' ' + token
headers = {
'Content-Type': 'application/json',
'accept': 'application/json',
'Authorization': token
}
args = sys.argv
f = open(args[1])
data = f.read()
response = requests.request("POST", url, headers=headers, data=data, verify=False)
print(response)
作成するラボ名称を含めてPOST
ラボ構成YAMLファイルの読み込み
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
lab:
description: ''
notes: ''
timestamp: 1589315403.782141
title: Lab at Tue 20:30 PM
version: 0.0.3
nodes:
- id: n0
label: csr1000v-0
node_definition: csr1000v
x: -600
y: -50
configuration: hostname inserthostname_here
image_definition: csr1000v-161101b
tags: []
interfaces:
- id: i0
label: Loopback0
type: loopback
- id: i1
slot: 0
label: GigabitEthernet1
type: physical
- id: i2
slot: 1
label: GigabitEthernet2
type: physical
- id: i3
slot: 2
label: GigabitEthernet3
type: physical
- id: i4
slot: 3
label: GigabitEthernet4
type: physical
- id: n1
label: csr1000v-1
node_definition: csr1000v
x: 0
y: -50
configuration: hostname inserthostname_here
image_definition: csr1000v-161101b
tags: []
interfaces:
- id: i0
label: Loopback0
type: loopback
- id: i1
slot: 0
label: GigabitEthernet1
type: physical
- id: i2
slot: 1
label: GigabitEthernet2
type: physical
- id: i3
slot: 2
label: GigabitEthernet3
type: physical
- id: i4
slot: 3
label: GigabitEthernet4
type: physical
- id: n2
label: wan-em-0
node_definition: wan_emulator
x: -300
y: -100
configuration: |-
LATENCY="500"
JITTER="5"
LOSS="30.0"
BANDWIDTH="512"
image_definition: alpine-3-10-wanem
tags: []
interfaces:
- id: i0
slot: 0
label: eth0
type: physical
- id: i1
slot: 1
label: eth1
type: physical
links:
- id: l0
i1: i1
n1: n0
i2: i0
n2: n2
- id: l1
i1: i1
n1: n2
i2: i1
test-topology.yaml
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
参考: CMLラボ構成のエクスポート
エクスポートされたCMLラボ構成のYAMLファイル
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
3. シミュレーションラボの停止と消去
def delete_lab(token, url):
token = 'Bearer' + ' ' + token
headers = {
'accept': 'application/json',
'Authorization': token
}
deletelabid = input("Please input lab ID to be deleted? [type q to quit]: ")
api_call = "/v0/labs/" + deletelabid
url = url + api_call
response = requests.delete(url, headers=headers, verify=False)
print(response)
消去したいラボIDをDeleteメソッドで送信
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
4. pyATS Testbedファイル(yaml)の出力
def get_pyats_testbed(token, url, hostname):
pyatslabid = input("Please input lab ID to be deleted? [type q to quit]: ")
token = 'Bearer' + ' ' + token
headers = {
'accept': 'application/json',
'Authorization': token
}
api_call = "/v0/labs/" + pyatslabid + "/pyats_testbed?hostname=" + hostname
url = url + api_call
response = requests.get(url, headers=headers, verify=False)
print(response.text)
with open('testbed.yaml', 'w') as f:
f.write(response.text)
pyATS用のTestbed YAMLファイルをリクエストするAPI
※本セッションでは, pyATSそのも
のについての説明は行いません。
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
~ $ python pyats_testbed.py
Please input lab ID to be deleted? [type q to quit]: deaf38
testbed:
name: CML Basic Lab
tacacs:
login_prompt: 'login:'
password_prompt: 'Password:'
username: '%ENV{PYATS_USERNAME}'
passwords:
tacacs: '%ENV{PYATS_PASSWORD}'
enable: '%ENV{PYATS_AUTH_PASS}'
line: '%ENV{PYATS_PASSWORD}'
devices:
terminal_server:
os: linux
type: linux
connections:
cli:
protocol: ssh
ip: 10.71.154.73
username: change_me
password: change_me
iosv-0:
os: ios
type: router
series: iosv
tacacs:
username: cisco
passwords:
tacacs: cisco
connections:
defaults:
class: unicon.Unicon
a:
protocol: telnet
proxy: terminal_server
command: open /deaf38/n7/0
iosv-1:
os: ios
type: router
series: iosv
tacacs:
username: cisco
passwords:
tacacs: cisco
connections:
defaults:
class: unicon.Unicon
a:
protocol: telnet
proxy: terminal_server
command: open /deaf38/n10/0
iosv-2:
os: ios
type: router
series: iosv
tacacs:
username: cisco
passwords:
tacacs: cisco
connections:
defaults:
class: unicon.Unicon
a:
protocol: telnet
proxy: terminal_server
command: open /deaf38/n11/0
iosv-3:
os: ios
<省略>
~ $ ls | grep deaf38
pyatsTb_deaf38.yaml
pyATS用のTestbed
YAMLファイルを出力
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
スキル人材育成のサイクル短縮を目指し、プログラマビリティをフル活用した
新たな研修プラットフォーム「バーチャルリモートラボ(VRL)」を構築
NTT 西日本のグループ企業として西日本に約 200 の拠点で通信ネットワーク環境の構築から開通・運用サポート・修理まで、暮らしの
快適・安心を地域密着で支えている NTT フィールドテクノ。通信設備の維持管理業務からより付加価値の高い設備系 BPO 事業への
シフトチェンジを推進する上で高品質なスキル人材育成のスピードアップが求められた同社は、プログラマビリティを最大限活用した新
たな研修プラットフォーム「バーチャルリモートラボ(VRL)」を構築。CML (Cisco Modeling Lab) API による仮想での NW 構築研修も実
施し、Off-JT(学び)とOJT(実践)のサイクル短縮化を実現しました。*
DevNet 活用事例:株式会社NTTフィールドテクノ
・豊富な実践的ドキュメントと充実したコミュニティ
・DevNet Expressでシスコ SEから実践的な API / プログラマビリティが学べる
事業内容
課題 ソリューション 結果〜今後
設立
シスコ との関係
1999年4月1日
エンドユーザー
Why DevNet?
コールセンター業務/宅内設備の保守業務/
光開通関連オペレーション業務/交換・伝送路
設備のオンサイト保守業務/設備業務に関す
る技術者育成の業務 など
• CML(Cisco Modeling Labs)
• Cisco DNA Center
• Cisco ISE
• Cisco TrustSec
• Cisco Stealthwatch
シスコ関連製品・サービス
DevNetユースケース
人材育成/高付加価値化
 通信設備の維持管理業務から、より付加
価値の高い設備系BPO*事業へのシフト
チェンジを推進する上で、高品質なスキル
人材育成のスピードアップが求められる
*BPO .. Business Process Outsourcing
 従来型の集合研修は開催時期が限られ、
事前や事後学習もままならない
 専用ハードウェア購入費用や設置スペー
スを抑えたい
 突発的な業務繁忙や災害発生などで学習
機会が失われることも多かった
デジタル技術活用により、いつでもどこ
でも研修を受講できる環境「バーチャル
リモートラボ(VRL)」を構築
 CML (Cisco Modeling Lab) API
:NW 設計、構築、視覚化、シミュレー
ションを仮想環境で実現(CMLをバック
エンドで活用した研修プラットフォーム)
 Cisco ISE REST API 、pxGrid
 Cisco TrustSec
 Cisco DNA Center
 Cisco Stealthwatch
:受講者のセキュアなアクセスを可能に
する認証システムを構築
 新研修プラットフォーム「VRL」により、オンデ
マンド型でいつでもどこでも学べる研修環境
を実現
 CML により ネットワーク 機器購入コストを
大幅に抑え、受講者は自由な NW 設計、構
築、シミュレーション環境がいつでも活用で
きる
 VRL での研修分野を広げフィードバック、集
合研修とのブレンディッドラーニングで育成
効果を向上。今後はグループ企業への提供
拡大も計画
*本取り組みは日本最大級の人事ポータル HR プロの「第 9 回日本 HR チャレンジ大賞」を受賞しました。
https://www.hrpro.co.jp/challenge.php
参考事例
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
アジェンダ
1
2
3
4
5
CML のおさらい
DevNetについて
CML 2.0 API
DevNet における CML 活用例
まとめ
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
DevNet における CML 活用例
デモ1)NETCONF/RESTCONFネットワークOSでのAPI
デモ2)IOS XE on-box pythonネットワーク装置でのプログラマビリティ
デモ3)Cisco DNA CenterSDNコントローラー API
デモ4)AnsibleIaC/構成管理ツール
DevNet/プログラマビリティの要素 CML活用例
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
ネットワークOSでのAPI ネットワーク装置でのプログラマビリティ
SDNコントローラー API IaC/構成管理ツール
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
ネットワークOSでのAPI ネットワーク装置でのプログラマビリティ
SDNコントローラー API IaC/構成管理ツール
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
ネットワークOSでのAPI ネットワーク装置でのプログラマビリティ
SDNコントローラー API IaC/構成管理ツール
複数の装置(OS)での
Netconf/Restconfのテスト
CML上でのLinux活用
複数の装置(OS)での
On-boxプログラミング機能
外部接続を使った
コントローラー接続
外部接続を使った
IaCツール試験
CML上でのIaCツール構築
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
デモ1 NETCONF/RESTCONF
ネットワーク機器の情報取得, 設定変更
CML
CML
実機
CSR1000V
Postman
Ubuntu
デモ1.1 NETCONF/YANG (RFC6241)
デモ1.2 RESTCONF/YANG (RFC8040)
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
デモ2 IOS XE on-box Python
設定変更後に疎通確認&結果報告
event manager applet TestAfterConfig
event syslog pattern "SYS-5-CONFIG_I"
action 100 cli command "enable"
action 110 syslog msg "## Testing after Configuration Change ...... ##"
action 200 cli command "guestshell run python /home/guestshell/pingreport.py"
IOS XE, NXOS,
IOS XR..
CML
on-box Python:
pingreport.py
IOS XE:
EEM*
*EEM … Embedded Event Manager
例)コンフィグ変更のsyslogを検知し、
On-box Pythonを実行
例)ルーター上のpythonスクリプトでは、
事前に指定されたIPアドレスに対してping
を実行し、その結果をExcelファイルにまと
め、Webex Teamsへ送信
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
デモ3 SDNコントローラー API
CML
ネットワーク
実機
Cisco DNA CenterPC
Cisco DNA CenterのAPIで機器情報取得
Cisco DNA Center API ドキュメント
例)
• PC上で, DNAC Command Runner APIへアクセスする
Pythonスクリプトを実行
• DNA Center経由で装置のCLIへアクセス
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
デモ4 IaC/構成管理ツール
Ansibleで複数機種に一括設定変更
例)
• CML上で動作するUbuntu仮想マシンから、
Ansibleを実行
• IOSv, IOSv-L2, IOS XE, Nexus9000vといった
様々なモデルにVRFを設定するPlaybookを実行
VRF設定Playbook:
vrf-test.yaml
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
アジェンダ
1
2
3
4
5
CML のおさらい
DevNetについて
CML 2.0 API
DevNet における CML 活用例
まとめ
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
• CML環境を使ったネットワークのコンフィグや学習に加え、CML環境をAPIから操作すること
で、環境の自動生成や共有が容易
 ネットワークインフラのCI/CD, NetDevOps
 カスタマイズされた学習システム – NTTフィールドテクノ様事例
• CML環境を使ったネットワークのコンフィグや学習に加え、仮想ノードのAPIやプログラミング
機能の学習に活用
 装置のモデルドリブンインターフェース - Netconf, Restconf
 On-box プログラマビリティ
 SDN コントローラー API
 構成管理/IaCツール
• DevNet資格取得への近道
まとめ
CML
API
確認
インポート,起動
消去
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
・ CML 紹介ページ
https://developer.cisco.com/modeling-labs/
• CMLのドキュメント一覧ページ
https://developer.cisco.com/docs/modeling-labs/
• CML-Pのコミュニティサイト
https://learningnetwork.cisco.com/s/topic/0TO3i00000094ZjGAI/cisco-modeling-labs-personal-community
• DevNet ポータルサイト
https://developer.cisco.com/
• DevNet コードリポジトリ検索ページ
https://developer.cisco.com/codeexchange/
• CML – Personal(日本語)
https://learningnetwork.cisco.com/s/article/jp-cisco-cml-personal
• CML – Enterprise(日本語)
https://learningnetwork.cisco.com/s/jp-modeling-labs
参考リンク
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(DevNet編)
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
• 102のラーニングモジュール(7/27現在)
• テクノロジーごとにトラックとして分類された学習コース
(DevNet Express)
• PC環境セットアップ, プログラミング基礎, REST-API
基礎, AnsibleやPowerShellなどのシスコ以外の内
容もカバー
• 概念/考え方, 必要性, プログラミング初歩, 実用コー
ドまでステップ
• サンドボックスのラボに対応
• 学習コードはすべてGitHubで公開
• DevNet 資格の勉強にも有用!
DevNet Express Tracks
https://developer.cisco.com/learning/devnet-express
https://github.com/CiscoDevNet
https://developer.cisco.com/site/sandbox/
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
NETCONF/RESTCONF
https://developer.cisco.com/learning/devnet-express/dnav3-track-jp
1. 複数の装置(OS)でのNetconf/Restconfのテスト
2. CML上でのLinux活用
CML
CML
実機
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
IOS XE on-box python
https://developer.cisco.com/learning/devnet-express/dnav3-track-jp
IOS XE, NXOS,
IOS XR..
複数の装置(OS)でのOn-boxプログラミング機能
CML
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
SDNコントローラー API
https://developer.cisco.com/learning/devnet-express/dnav4-track
CML
ネットワーク
実機
外部接続を使ったコントローラー接続
Cisco DNA CenterPC
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
IaC/構成管理ツール
https://developer.cisco.com/learning/devnet-express/dnav4-track
ネットワーク
Ansible
1. 外部接続を使ったIaCツール試験
2. CML上でのIaCツール構築
CML
CML
実機
各種ネットワークOS, 構成各種Ansibleモジュール

More Related Content

Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(DevNet編)

  • 1. シスコシステムズ合同会社 システムズエンジニア 丸山 隆太 2020/7/28 DevNet 編 Cisco Modeling Labs (CML) を使って ネットワークを学ぼう!
  • 2. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public Cisco Modeling Labsを使ってネットワークを学ぼう! CMLとは何か、ユースケースや基本機能、ラボ構築など、デモを交えながらご紹介します https://learningnetwork.cisco.com/s/article/jp-webinar-cml01 基礎編 (7/7 済) CMLの活用方法、資格での勉強方法などをデモを交えCCIEホルダーがご紹介します https://learningnetwork.cisco.com/s/article/jp-webinar-cml02 応用編 (7/14 済) CMLのAPI/プログラマビリティを用いたネットワーク自動化の観点でご紹介します https://learningnetwork.cisco.com/s/article/jp-webinar-cml03 DevNet編 終了したセミナーについては、順次、資料と動画を公開中
  • 3. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public アジェンダ 1 2 3 4 5 CML のおさらい DevNetについて CML 2.0 API DevNet における CML 活用例 まとめ
  • 4. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public • 丸山 隆太(まるやま りゅうた) • 人材育成の一環でインターンシップとして出向中 (2019/04〜) • 出向元:富士通ネットワークソリューションズ株式会社 • インターンシップで学んでいること • CiscoDNA 関連の製品知識 (Cisco DNA Center, ISE, etc.) • Python/API/ネットワークプログラマビリティ関連 • お気に入りのCisco製品/技術 • IOS XE 17.2, Catalyst 9000シリーズ 自己紹介
  • 5. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public アジェンダ 1 2 3 4 5 CML のおさらい DevNetについて CML 2.0 API DevNet における CML 活用例 まとめ
  • 6. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public Cisco Modeling Labs (CML) とは? Ciscoが提供する ネットワークシミュレーションプラットフォーム • CML1.x • VIRL (Virtual Internet Routing Labs) • CML-Enterprise 2.0 (企業向け) • CML-Personal 2.0 (個人向け) 待望のメジャーバージョンアップ ブランドはCMLに統一
  • 7. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public CML 標準付属 プラットフォーム IOS IOSv & IOSv L2 IOS XR XRv & XRv 9000 IOS XE CSR1000v NexusASA ASAv Other • TRex • WAN Emulator • Tiny Core Linux • Ubuntu 18.04 • CoreOS • Alpine Linux NX-OS 7000v & 9000v ※カスタムVMイメージ機能により新規イメージ、サードパーティ製イメージを追加可能 ※ディスクイメージバージョン: refplat-20200409-fcs.iso ※各イメージのバージョン等の情報 https://developer.cisco.com/docs/modeling-labs/#!reference-platforms-and-images
  • 8. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public CML 付属 仮想ノード ルーター, ファイアウォール スイッチ サーバー シミュレーター, その他
  • 9. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public 新規仮想ノードの追加例 新規仮想ノードを追加する際、下記2つのコンポーネントが必要 YAML形式のノード構成ファイル • CPU,RAM,ネットワークアダプターなどの情報 • 参考:GitHub CML Community qcow2形式のディスクイメージ • OSのイメージ • 別途入手が必要(ベンダーサイトなど) 参考: https://github.com/CiscoDevNet/cml-community/tree/master/node-definitions 例) A10 vThunderを起動
  • 10. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public ラボマネージャー と ワークベンチ ラボ ワークベンチラボマネージャ ラボ • ラボマネージャー: CMLサーバのステータス、ラボを管理するCMLのトップ画面 • ワークベンチ:作成したラボの編集、ネットワークシミュレーションを行うためのメイン画面 • CMLでは1つのネットワークシミュレーションの単位をラボとよぶ
  • 11. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public ラボマネージャー システムステータス • CPU使用率 • メモリ使用率 • ディスク使用率 • 合計仮想ノード数 • 実行中仮想ノード数 など ラボリスト • ワークベンチへの移動 • ラボの実行 • ラボの停止 • ラボの初期化 • ラボの削除 など メニューバー • ラボの表示切替 • ラボ追加 • ラボのインポート • ツールへのアクセス など
  • 12. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public ワークベンチ 操作・情報表示パネル • ラボ・ノードの情報 • シミュレーション・ノードの開始 • コンソールアクセス • ラボのログ表示 など メニューバー • ラボのログ表示 • ラボマネージャへの移動 • ラボのエクスポート • ラボの強制初期化 など ノード一覧 トポロジ作成 フィールド
  • 13. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public CML-Enterprise, CML-Personal の比較 Cisco Modeling Labs–Enterprise Cisco Modeling Labs–Personal 対象ユーザ 企業・組織 個人 ユーザ数 マルチユーザ シングルユーザ ノード数(標準) 20ノード 20ノード ノード数(最大) 300ノード 20ノード サポート Cisco TAC Community Support Forum 購入方法 Cisco パートナー経由 Cisco Learning Network Store ライセンシング スマートライセンス スマートライセンス スマートアカウントの取得 必要 不要(Cisco.comアカウントがあればOK) インターネット接続性 必須ではない ※オフラインでの認証も可能 必要 ※1度認証すれば30日間はオフラインでも 使用可能 クラスタリング ロードマップに有り 無し ※現在のバージョンに基づきます。将来のバージョンでは変更される可能性があります。
  • 14. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public CML 仮想 ラボ コンソールサーバーとブレイクアウトツール • CML自体がコンソールサーバーとして機能 • CMLへSSH接続し、各仮想ノードへ接続 • クライアントPCに「ブレイクアウトツール」をインストール • クライアントPCがプロキシとして、CMLラボのノードに直 接コンソール接続 ブレイクアウトツールコンソールサーバー 自身の端末 CML (コンソールサーバ) SSH接続 CML 仮想 ラボ iTerm2 ブレイクアウト ツール Windows, Mac, Linux TLS通信 CML
  • 15. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public 外部接続コネクター CML内の仮想ラボ物理ラボ External Connector • Cisco DNA Center • Zabbix • Ansible • Docker • …
  • 16. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public アジェンダ 1 2 3 4 5 CML のおさらい DevNetについて CML 2.0 API DevNet における CML 活用例 まとめ
  • 17. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public Cisco DevNet • アイデアソン&ハッカソン • DevNet Express • DevNet Create • DevNet イノベーションチャレンジ • DevNet Code Exchange • DevNet Automation Exchange • ビジネス、サービス事例 • DevNet Solution Exchange • 人材開発 • DevNet Learning Labs • DevNet Sandbox • DevNet 資格取得 学習、スキル 経験、体験 成果、コードビジネス価値
  • 18. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public Cisco DevNet コンテンツ/リソース ソリューションポータル: Ecosystem Exchange 開発者コミュニティ コードリポジトリ: Code Exchange 認定資格: DevNet Certifications イベント: • DevNet Express, DevNet Create • Cisco Live, Cisco Connect API ガイド リモートラボ環境: DevNet Sandbox 学習コンテンツ: Learning labs
  • 19. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public DevNet 認定資格 2020年2月24日開始 https://developer.cisco.com/certification/ インフラ ストラクチャ ソフトウェア アソシエイト スペシャリスト プロフェッショナル エキスパート
  • 20. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public CCNA Cisco Certified Network Associate DevNet Associate Cisco Certified DevNet Associate https://www.cisco.com/c/ja_jp/training-events/training-certifications/exams/current- list/ccna-200-301.html https://www.cisco.com/c/ja_jp/training-events/training- certifications/certifications/devnet/cisco-certified-devnet-associate.html CMLを活用!
  • 21. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public https://developer.cisco.com/modeling-labs/
  • 22. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public アジェンダ 1 2 3 4 5 CML のおさらい DevNetについて CML 2.0 API DevNet における CML 活用例 まとめ
  • 23. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public CML 2.0 API • APIドキュメントはCML組込 • CMLを操作する135種類のAPI • Swagger GUIからAPIアクセスの確認
  • 24. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public Swagger, Postman による認証 Token取得 参考 Postman Collection https://github.com/sttrayno/CML-Personal-Guide
  • 25. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public はじめての CML REST API コール import json import requests import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) url = "https://<cml_ipaddress>/api/v0/authenticate" headers = { 'Content-Type': 'application/json', 'accept': 'application/json' } payload = { "username": ”<username>", "password": ”<password>" } response = requests.request("POST", url, headers=headers, data=json.dumps(payload), verify=False).json() print(response) 認証Tokenの取得例 取得したTokenをヘッダに付けて各APIへアクセス Pythonライブラリのインポート HTTPヘッダやペイロードに格納する内容を作成 HTTP POSTメソッドで必要なヘッダ, ペイロードを送信 警告メッセージを表示しない 認証トークン取得APIの変数を作成 APIから返される認証トークンをプリント
  • 26. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public 参考: CMLクライアントライブラリ - virl2-client 認証、リンクやノードの追加削除をシンプルに行う Python クライアントライブラリ https://developer.cisco.com/codeexchange/github/repo/CiscoDevNet/virl2-client
  • 27. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public 参考: CMLクライアントライブラリ - virl2-client 参考: virl2-clientを試すJupyter notebook ファイル(DevNet/Github) https://github.com/CiscoDevNet/virl2-client/tree/master/examples
  • 28. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public 1. シミュレーションラボ稼働情報の取得 2. YAMLファイルを使ったラボ構成のインポートと起動 3. シミュレーションラボの停止と消去 4. pyATS Testbedファイル(yaml)の出力 ユースケース 1. ラボ情報取得 2. ラボ構成のインポートと起動 test-topology.yaml 3. ラボの停止と消去 getlab.py importlab.py deletelab.py CML pyatsTb_f2d3c5.yaml 4. pyATS用のTestbedファイルを出力 ※本セッションでは, pyATSそのも のについての説明は行いません。
  • 29. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public 1. シミュレーションラボ稼働情報の取得 import json import requests cml_url = "https://<cml_ip>/api" uname = ”<username>" passwd = ”<password>" labname = ”<labname>" def get_token(url, user, password): api_call = "/v0/authenticate" url += api_call headers = { 'Content-Type': 'application/json', 'accept': 'application/json' } payload = { "username": user, "password": password } response = requests.request("POST", url, headers=headers, data=json.dumps(payload), verify=False).json() return response def get_labs(token, url): api_call = "/v0/labs" url += api_call token = 'Bearer' + ' ' + token headers = { 'accept': 'application/json', 'Authorization': token } response = requests.get(url, headers=headers, verify=False).json() print("#" + " " + "CML 稼働ラボ数" + ": " + str(len(response)) + " at " + labname) return response def get_labsdetail(token, url, labids): token = 'Bearer' + ' ' + token headers = { 'accept': 'application/json', 'Authorization': token } for labid in labids: api_call = "/v0/labs/" + labid laburl = url + api_call guiurl = url.rstrip('api') guiurl = guiurl + "lab/" + labid response = requests.get(laburl, headers=headers, verify=False).json() print("{0:42}{1:22}{2:18}{3:18}". format(str(response['lab_title']), str(response['created']), str(response['state']), str(guiurl))) if __name__ == "__main__": auth_token = get_token(cml_url, uname, passwd) print("#"*113) labids = get_labs(auth_token, cml_url) print("#"*113) get_labsdetail(auth_token, cml_url, labids) print("#"*113) hellocml.py 認証Token取得 稼働ラボ情報取得
  • 30. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public 1. シミュレーションラボ稼働情報の取得 cont. ~ $python hellocml.py ################################################################################################################# # CML 稼働ラボ数: 19 at Cisco SE ラボ ################################################################################################################# Test by tatsaito 2020-06-11 13:33:46 STOPPED https://10.71.154.73/lab/866cb6 test by rmaruyam 2020-06-11 09:17:08 DEFINED_ON_CORE https://10.71.154.73/lab/b3a6eb To DNAC96 2020-06-17 05:01:40 STARTED https://10.71.154.73/lab/2ba4d1 test by asai 2020-06-17 07:21:17 STOPPED https://10.71.154.73/lab/eeca34 CML-DevNet-Lab 2020-06-22 11:16:04 STARTED https://10.71.154.73/lab/48cadf TEST Lab asai 2020-06-23 17:42:14 STOPPED https://10.71.154.73/lab/72cbd5 Lab asai 2020-06-24 11:00:16 STOPPED https://10.71.154.73/lab/0fbd5d TEST Lab asai 2020-06-24 13:17:08 STOPPED https://10.71.154.73/lab/f2d3c5 asai 2020-06-25 13:36:02 STOPPED https://10.71.154.73/lab/0574e5 CML Basic Lab 2020-06-26 13:37:36 STOPPED https://10.71.154.73/lab/deaf38 manual_config_live_vis_configured.virl 2020-06-29 04:11:33 STOPPED https://10.71.154.73/lab/80bbfd Nov_webinar_demo_topology.virl 2020-06-29 06:25:31 DEFINED_ON_CORE https://10.71.154.73/lab/65ccf2 July_webinar_ospf_eigrp.virl 2020-06-29 06:37:50 DEFINED_ON_CORE https://10.71.154.73/lab/609fbc Mar15_webinar_l2_unmanaged.virl 2020-06-29 06:38:18 DEFINED_ON_CORE https://10.71.154.73/lab/bae85c Basic Lab 2 2020-07-08 11:17:55 STOPPED https://10.71.154.73/lab/f72c4b maruyama-API-Lab 2020-07-19 09:07:25 STOPPED https://10.71.154.73/lab/ebbddc test-topology-kikuta 2020-07-20 13:23:37 DEFINED_ON_CORE https://10.71.154.73/lab/94d9b1 testtesttest-by-kikuta 2020-07-20 13:27:07 DEFINED_ON_CORE https://10.71.154.73/lab/bf2acf test-topology.yaml 2020-07-20 15:07:35 STARTED https://10.71.154.73/lab/6b20de #################################################################################################################
  • 31. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public 2. YAMLファイルを使ったラボ構成のインポートと起動 ~ $python import.py test-topology.yaml Please input an lab title [type q to quit]: test-by-kikuta test-topology.yaml <Response [200]> CMLラボ構成ファイル(YAML or JSON) インポート/起動するCMLラボの名称 • コンフィグレーションを含めたラボテスト構成を YAMLで管理し、チームやコミュニティで共有 • CI/CDツールと組み合わせたNetDevOps
  • 32. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public 2. YAMLファイルを使ったラボ構成のインポートと起動 cont. import.py def import_lab(token, url): labtitle = input("Please input an lab title [type q to quit]: ") api_call = "/v0/import" url += api_call + "?title=" + labtitle token = 'Bearer' + ' ' + token headers = { 'Content-Type': 'application/json', 'accept': 'application/json', 'Authorization': token } args = sys.argv f = open(args[1]) data = f.read() response = requests.request("POST", url, headers=headers, data=data, verify=False) print(response) 作成するラボ名称を含めてPOST ラボ構成YAMLファイルの読み込み
  • 33. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public lab: description: '' notes: '' timestamp: 1589315403.782141 title: Lab at Tue 20:30 PM version: 0.0.3 nodes: - id: n0 label: csr1000v-0 node_definition: csr1000v x: -600 y: -50 configuration: hostname inserthostname_here image_definition: csr1000v-161101b tags: [] interfaces: - id: i0 label: Loopback0 type: loopback - id: i1 slot: 0 label: GigabitEthernet1 type: physical - id: i2 slot: 1 label: GigabitEthernet2 type: physical - id: i3 slot: 2 label: GigabitEthernet3 type: physical - id: i4 slot: 3 label: GigabitEthernet4 type: physical - id: n1 label: csr1000v-1 node_definition: csr1000v x: 0 y: -50 configuration: hostname inserthostname_here image_definition: csr1000v-161101b tags: [] interfaces: - id: i0 label: Loopback0 type: loopback - id: i1 slot: 0 label: GigabitEthernet1 type: physical - id: i2 slot: 1 label: GigabitEthernet2 type: physical - id: i3 slot: 2 label: GigabitEthernet3 type: physical - id: i4 slot: 3 label: GigabitEthernet4 type: physical - id: n2 label: wan-em-0 node_definition: wan_emulator x: -300 y: -100 configuration: |- LATENCY="500" JITTER="5" LOSS="30.0" BANDWIDTH="512" image_definition: alpine-3-10-wanem tags: [] interfaces: - id: i0 slot: 0 label: eth0 type: physical - id: i1 slot: 1 label: eth1 type: physical links: - id: l0 i1: i1 n1: n0 i2: i0 n2: n2 - id: l1 i1: i1 n1: n2 i2: i1 test-topology.yaml
  • 34. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public 参考: CMLラボ構成のエクスポート エクスポートされたCMLラボ構成のYAMLファイル
  • 35. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public 3. シミュレーションラボの停止と消去 def delete_lab(token, url): token = 'Bearer' + ' ' + token headers = { 'accept': 'application/json', 'Authorization': token } deletelabid = input("Please input lab ID to be deleted? [type q to quit]: ") api_call = "/v0/labs/" + deletelabid url = url + api_call response = requests.delete(url, headers=headers, verify=False) print(response) 消去したいラボIDをDeleteメソッドで送信
  • 36. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public 4. pyATS Testbedファイル(yaml)の出力 def get_pyats_testbed(token, url, hostname): pyatslabid = input("Please input lab ID to be deleted? [type q to quit]: ") token = 'Bearer' + ' ' + token headers = { 'accept': 'application/json', 'Authorization': token } api_call = "/v0/labs/" + pyatslabid + "/pyats_testbed?hostname=" + hostname url = url + api_call response = requests.get(url, headers=headers, verify=False) print(response.text) with open('testbed.yaml', 'w') as f: f.write(response.text) pyATS用のTestbed YAMLファイルをリクエストするAPI ※本セッションでは, pyATSそのも のについての説明は行いません。
  • 37. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public ~ $ python pyats_testbed.py Please input lab ID to be deleted? [type q to quit]: deaf38 testbed: name: CML Basic Lab tacacs: login_prompt: 'login:' password_prompt: 'Password:' username: '%ENV{PYATS_USERNAME}' passwords: tacacs: '%ENV{PYATS_PASSWORD}' enable: '%ENV{PYATS_AUTH_PASS}' line: '%ENV{PYATS_PASSWORD}' devices: terminal_server: os: linux type: linux connections: cli: protocol: ssh ip: 10.71.154.73 username: change_me password: change_me iosv-0: os: ios type: router series: iosv tacacs: username: cisco passwords: tacacs: cisco connections: defaults: class: unicon.Unicon a: protocol: telnet proxy: terminal_server command: open /deaf38/n7/0 iosv-1: os: ios type: router series: iosv tacacs: username: cisco passwords: tacacs: cisco connections: defaults: class: unicon.Unicon a: protocol: telnet proxy: terminal_server command: open /deaf38/n10/0 iosv-2: os: ios type: router series: iosv tacacs: username: cisco passwords: tacacs: cisco connections: defaults: class: unicon.Unicon a: protocol: telnet proxy: terminal_server command: open /deaf38/n11/0 iosv-3: os: ios <省略> ~ $ ls | grep deaf38 pyatsTb_deaf38.yaml pyATS用のTestbed YAMLファイルを出力
  • 38. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public スキル人材育成のサイクル短縮を目指し、プログラマビリティをフル活用した 新たな研修プラットフォーム「バーチャルリモートラボ(VRL)」を構築 NTT 西日本のグループ企業として西日本に約 200 の拠点で通信ネットワーク環境の構築から開通・運用サポート・修理まで、暮らしの 快適・安心を地域密着で支えている NTT フィールドテクノ。通信設備の維持管理業務からより付加価値の高い設備系 BPO 事業への シフトチェンジを推進する上で高品質なスキル人材育成のスピードアップが求められた同社は、プログラマビリティを最大限活用した新 たな研修プラットフォーム「バーチャルリモートラボ(VRL)」を構築。CML (Cisco Modeling Lab) API による仮想での NW 構築研修も実 施し、Off-JT(学び)とOJT(実践)のサイクル短縮化を実現しました。* DevNet 活用事例:株式会社NTTフィールドテクノ ・豊富な実践的ドキュメントと充実したコミュニティ ・DevNet Expressでシスコ SEから実践的な API / プログラマビリティが学べる 事業内容 課題 ソリューション 結果〜今後 設立 シスコ との関係 1999年4月1日 エンドユーザー Why DevNet? コールセンター業務/宅内設備の保守業務/ 光開通関連オペレーション業務/交換・伝送路 設備のオンサイト保守業務/設備業務に関す る技術者育成の業務 など • CML(Cisco Modeling Labs) • Cisco DNA Center • Cisco ISE • Cisco TrustSec • Cisco Stealthwatch シスコ関連製品・サービス DevNetユースケース 人材育成/高付加価値化  通信設備の維持管理業務から、より付加 価値の高い設備系BPO*事業へのシフト チェンジを推進する上で、高品質なスキル 人材育成のスピードアップが求められる *BPO .. Business Process Outsourcing  従来型の集合研修は開催時期が限られ、 事前や事後学習もままならない  専用ハードウェア購入費用や設置スペー スを抑えたい  突発的な業務繁忙や災害発生などで学習 機会が失われることも多かった デジタル技術活用により、いつでもどこ でも研修を受講できる環境「バーチャル リモートラボ(VRL)」を構築  CML (Cisco Modeling Lab) API :NW 設計、構築、視覚化、シミュレー ションを仮想環境で実現(CMLをバック エンドで活用した研修プラットフォーム)  Cisco ISE REST API 、pxGrid  Cisco TrustSec  Cisco DNA Center  Cisco Stealthwatch :受講者のセキュアなアクセスを可能に する認証システムを構築  新研修プラットフォーム「VRL」により、オンデ マンド型でいつでもどこでも学べる研修環境 を実現  CML により ネットワーク 機器購入コストを 大幅に抑え、受講者は自由な NW 設計、構 築、シミュレーション環境がいつでも活用で きる  VRL での研修分野を広げフィードバック、集 合研修とのブレンディッドラーニングで育成 効果を向上。今後はグループ企業への提供 拡大も計画 *本取り組みは日本最大級の人事ポータル HR プロの「第 9 回日本 HR チャレンジ大賞」を受賞しました。 https://www.hrpro.co.jp/challenge.php 参考事例
  • 39. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public アジェンダ 1 2 3 4 5 CML のおさらい DevNetについて CML 2.0 API DevNet における CML 活用例 まとめ
  • 40. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public DevNet における CML 活用例 デモ1)NETCONF/RESTCONFネットワークOSでのAPI デモ2)IOS XE on-box pythonネットワーク装置でのプログラマビリティ デモ3)Cisco DNA CenterSDNコントローラー API デモ4)AnsibleIaC/構成管理ツール DevNet/プログラマビリティの要素 CML活用例
  • 41. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public ネットワークOSでのAPI ネットワーク装置でのプログラマビリティ SDNコントローラー API IaC/構成管理ツール
  • 42. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public ネットワークOSでのAPI ネットワーク装置でのプログラマビリティ SDNコントローラー API IaC/構成管理ツール
  • 43. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public ネットワークOSでのAPI ネットワーク装置でのプログラマビリティ SDNコントローラー API IaC/構成管理ツール 複数の装置(OS)での Netconf/Restconfのテスト CML上でのLinux活用 複数の装置(OS)での On-boxプログラミング機能 外部接続を使った コントローラー接続 外部接続を使った IaCツール試験 CML上でのIaCツール構築
  • 44. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public デモ1 NETCONF/RESTCONF ネットワーク機器の情報取得, 設定変更 CML CML 実機 CSR1000V Postman Ubuntu デモ1.1 NETCONF/YANG (RFC6241) デモ1.2 RESTCONF/YANG (RFC8040)
  • 45. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public デモ2 IOS XE on-box Python 設定変更後に疎通確認&結果報告 event manager applet TestAfterConfig event syslog pattern "SYS-5-CONFIG_I" action 100 cli command "enable" action 110 syslog msg "## Testing after Configuration Change ...... ##" action 200 cli command "guestshell run python /home/guestshell/pingreport.py" IOS XE, NXOS, IOS XR.. CML on-box Python: pingreport.py IOS XE: EEM* *EEM … Embedded Event Manager 例)コンフィグ変更のsyslogを検知し、 On-box Pythonを実行 例)ルーター上のpythonスクリプトでは、 事前に指定されたIPアドレスに対してping を実行し、その結果をExcelファイルにまと め、Webex Teamsへ送信
  • 46. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public デモ3 SDNコントローラー API CML ネットワーク 実機 Cisco DNA CenterPC Cisco DNA CenterのAPIで機器情報取得 Cisco DNA Center API ドキュメント 例) • PC上で, DNAC Command Runner APIへアクセスする Pythonスクリプトを実行 • DNA Center経由で装置のCLIへアクセス
  • 47. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public デモ4 IaC/構成管理ツール Ansibleで複数機種に一括設定変更 例) • CML上で動作するUbuntu仮想マシンから、 Ansibleを実行 • IOSv, IOSv-L2, IOS XE, Nexus9000vといった 様々なモデルにVRFを設定するPlaybookを実行 VRF設定Playbook: vrf-test.yaml
  • 48. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public アジェンダ 1 2 3 4 5 CML のおさらい DevNetについて CML 2.0 API DevNet における CML 活用例 まとめ
  • 49. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public • CML環境を使ったネットワークのコンフィグや学習に加え、CML環境をAPIから操作すること で、環境の自動生成や共有が容易  ネットワークインフラのCI/CD, NetDevOps  カスタマイズされた学習システム – NTTフィールドテクノ様事例 • CML環境を使ったネットワークのコンフィグや学習に加え、仮想ノードのAPIやプログラミング 機能の学習に活用  装置のモデルドリブンインターフェース - Netconf, Restconf  On-box プログラマビリティ  SDN コントローラー API  構成管理/IaCツール • DevNet資格取得への近道 まとめ CML API 確認 インポート,起動 消去
  • 50. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public ・ CML 紹介ページ https://developer.cisco.com/modeling-labs/ • CMLのドキュメント一覧ページ https://developer.cisco.com/docs/modeling-labs/ • CML-Pのコミュニティサイト https://learningnetwork.cisco.com/s/topic/0TO3i00000094ZjGAI/cisco-modeling-labs-personal-community • DevNet ポータルサイト https://developer.cisco.com/ • DevNet コードリポジトリ検索ページ https://developer.cisco.com/codeexchange/ • CML – Personal(日本語) https://learningnetwork.cisco.com/s/article/jp-cisco-cml-personal • CML – Enterprise(日本語) https://learningnetwork.cisco.com/s/jp-modeling-labs 参考リンク
  • 52. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public • 102のラーニングモジュール(7/27現在) • テクノロジーごとにトラックとして分類された学習コース (DevNet Express) • PC環境セットアップ, プログラミング基礎, REST-API 基礎, AnsibleやPowerShellなどのシスコ以外の内 容もカバー • 概念/考え方, 必要性, プログラミング初歩, 実用コー ドまでステップ • サンドボックスのラボに対応 • 学習コードはすべてGitHubで公開 • DevNet 資格の勉強にも有用! DevNet Express Tracks https://developer.cisco.com/learning/devnet-express https://github.com/CiscoDevNet https://developer.cisco.com/site/sandbox/
  • 53. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public NETCONF/RESTCONF https://developer.cisco.com/learning/devnet-express/dnav3-track-jp 1. 複数の装置(OS)でのNetconf/Restconfのテスト 2. CML上でのLinux活用 CML CML 実機
  • 54. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public IOS XE on-box python https://developer.cisco.com/learning/devnet-express/dnav3-track-jp IOS XE, NXOS, IOS XR.. 複数の装置(OS)でのOn-boxプログラミング機能 CML
  • 55. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public SDNコントローラー API https://developer.cisco.com/learning/devnet-express/dnav4-track CML ネットワーク 実機 外部接続を使ったコントローラー接続 Cisco DNA CenterPC
  • 56. © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public IaC/構成管理ツール https://developer.cisco.com/learning/devnet-express/dnav4-track ネットワーク Ansible 1. 外部接続を使ったIaCツール試験 2. CML上でのIaCツール構築 CML CML 実機 各種ネットワークOS, 構成各種Ansibleモジュール

Editor's Notes

  1. CML環境を使ったネットワークのコンフィグや学習に加え、CML環境をAPIから操作することで、環境の自動生成や共有が容易 ネットワークインフラのCI/CD, NetDevOps カスタマイズされた学習システム – NTTフィールドテクノ様事例 CML環境を使ったネットワークのコンフィグや学習に加え、仮想ノードのAPIやプログラミング機能の学習に活用 仮想ノードのプログラマビリティ機能 CML環境内でのLinuxノード活用 CML外部接続環境のテスト対象としてのCML仮想ノード DevNet資格取得への近道