SlideShare a Scribd company logo
1 of 46
VIRLとpyATSで実現するネットワークCI
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
• サービスイン前に導入する機器でテストを実施
• サービスイン後に使えるテスト環境がない
• テストはサービスイン前に手動で実施
• システム変更した場合、同様のテストを実行するのが事実上難しい
ネットワークが塩漬けになる理由
VIRLでテスト環境を構築
pyATSでテストの自動化
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
• Continuous Integration
• 開発者が自分のコード変更を頻繁に(Git等の)共有リポジトリに
マージし、その都度、自動化されたビルドとテストを実行するソフ
トウェア開発の手法
• エクストリーム・プログラミング (XP) のプラクティスの一つ
継続的インテグレーション(CI)とは
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
• Extreme Programming
• 従来のウォーターフォール型開発の
問題点を克服するために、1990年
代後半にケント・ベックらによって
考案
• 5つの価値と19のプラクティス(実
践)を定義
• 5つの価値
• コミュニケーション、シンプル、フィー
ドバック、勇気、尊重
• 19のプラクティス(右図)
(参考) XP カテゴリ プラクティス
共同のプラクティス
反復
共通の用語
オープンな作業空間
回顧(頻繁な振り返り)
開発のプラクティス
テスト駆動開発
ペアプログラミング
リファクタリング
ソースコードの共同所有
継続的インテグレーション
YAGNI
管理者のプラクティス
責任の受け入れ
援護
四半期ごとの見直し
ミラー
適切なペースの仕事
顧客のプラクティス
ストーリーの作成
リリース計画
受け入れテスト
短期リリース
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
ネットワークにおけるCI
ネットワークをコードとして管理
• トポロジ
• 構成情報
• テスト
Gitリポジトリへ
Push / Pull Request
CIツールが検知し、
CIジョブを実行
チャットツールで
テスト結果を通知
仮想テスト環境を
セットアップ
ネットワークの
テスト
構成管理ツールで
ネットワーク設定
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
• ネットワーク変更の履歴
• ネットワーク変更のレビュー
• テストが十分にカバーされていれば、安心して以下のことができる
• 機器の追加、リプレース
• 機能の追加、拡張
• サービスの追加、拡張
• リファクタリング(コンフィグの最適化)
ネットワークにおけるCI
期待される効果
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
VIRL
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
What is VIRL?
パワフルで、使いやすく、拡張可能なネットワークシミュレー
ション環境
 既存または計画されたネットワークの高精度モデルを構築
 Ciscoのネットワークオペレーティングシステムの正規バージョンを使用してネッ
トワークを設計、設定、および運用
 IOSv、IOSv Layer-2、IOS-XRv、NX-OSv、CSR1000v、ASAvなどの共通プ
ラットフォームを使用して構築
 サードパーティの仮想マシン、アプライアンス、VNF、およびサーバーを統合
 実ネットワークと仮想ネットワークを接続して、再現性の高い開発環境とテスト環
境を構築
 どこでもデザインやテストが可能 - VIRLはポータブル
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
CML vs. VIRL PE
CML(Cisco Modeling Lab)
コーポレートユース
マルチユーザー
TACサポート
300ノード(最大)
Ciscoパートナーから購入
インターネット接続不要
VIRL PE(Personal Edition)
個人ユース
シングルユーザー
コミュニティサポート
20ノード(最大)
Cisco Learning Network Storeから購入
要インターネット接続
(ライセンスチェックのため)
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
Keystone (Identity Services)
Glance (Image / Repository Services)
Nova
(Compute Services)
Neutron
(Networking Services)
Swift
(Object
Services)
Cinder
(Block
Storage
Services)
Horizon(Dashboard)
APIs/CLI
IaaS / cloud orchestration software – creates, manages, and deletes virtual
resources according to API- or CLI-based instructions
VIRL – Built on OpenStack
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
VM Maestro
• グラフィカルなトポロジ編
集ツール
• ネットワーク要素を定義
 ルータ
 接続
 コンフィグ
 サーバ
• 複雑なトポロジをサポート
• シミュレーションを管理
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
VIRL – ネットワークインターフェイス
VIRL
X
マネジメント
SNAT
FLAT
eth0
eth2
eth4
R
R
R
eth1
eth3
FLAT1
Cluster
Gateway
Router
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
• 5つのネットワークインターフェイス:
• eth0 – マネジメントアクセスに利用。IPアドレスはDHCP割り当て、もしくは、手
動で静的に設定
• eth1 (FLAT) – 外部からのL2接続(マネジメントアクセスもしくはデータプレーン
アクセス)に利用。 デフォルトで172.16.1.254/24が割り当てられる
• eth2 (FLAT1) -外部からのL2接続(マネジメントアクセスもしくはデータプレーン
アクセス)に利用。 デフォルトで172.16.2.254/24が割り当てられる
• eth3 – SNATによる外部L3接続(マネジメントアクセスおよびデータプレーンアク
セス)に利用。デフォルトで172.16.3.254/24が割り当てられる
• eth4 – OpenStackサービスとホスト間通信にシステム内部で利用(設定不可)。デ
フォルトで172.16.10.250/24が割り当てられる
VIRL – ネットワーク接続
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
• 1.6.55に同梱されるイメージ
VIRLイメージ
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
• 本家サイト
• http://virl.cisco.com/
• チュートリアル
• http://virl.cisco.com/tutorials.php
• Youtubeチャンネル
• https://www.youtube.com/c/ciscovirl
• コミュニティサポート
• https://learningnetwork.cisco.com/groups/virl
(参考) VIRLレファレンス
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
virlutils
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
• Cisco VIRLを便利に使うコマンドラインツール
• VagrantっぽいフィーリングでVIRLを操作できる(virl up, virl down, virl ssh, virl
console, etc.)
Virlutils
https://github.com/CiscoDevNet/virlutils
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
デモ①
virlutils
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
• VIRLシミュレーションを起動する
• topology.virlのあるディレクトリにて
• virl up
• もしくは、topology.virlを含むGithubプロジェクトを指定して
• virl up virlfiles/2-ios-router
virl up
$ virl up
Creating default environment from topology.virl
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
(参考) topology.virl の作成
VM Maestroのデザインパースペクティブから
編集して、「File」-> 「Export」からエクスポート
するのが手っ取り早い
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
• VIRLシミュレーションの状態を確認
virl ls
$ virl ls
Running Simulations
╒═══════════════════════════════════╤══════════╤════════════════════════════╤═══════════╕
│ Simulation │ Status │ Launched │ Expires │
╞═══════════════════════════════════╪══════════╪════════════════════════════╪═══════════╡
│ network-ci-handson_default_R1gGHs │ ACTIVE │ 2018-11-20T02:30:55.887350 │ │
╘═══════════════════════════════════╧══════════╧════════════════════════════╧═══════════╛
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
• VIRLノードの状態を確認
virl nodes
$ virl nodes
Here is a list of all the running nodes
╒═══════════╤══════════╤═════════╤═════════════╤════════════╤══════════════════════╤════════════════════╕
│ Node │ Type │ State │ Reachable │ Protocol │ Management Address │ External Address │
╞═══════════╪══════════╪═════════╪═════════════╪════════════╪══════════════════════╪════════════════════╡
│ iosv-2 │ IOSv │ ACTIVE │ REACHABLE │ telnet │ 172.16.30.61 │ N/A │
├───────────┼──────────┼─────────┼─────────────┼────────────┼──────────────────────┼────────────────────┤
│ iosv-1 │ IOSv │ ACTIVE │ REACHABLE │ telnet │ 172.16.30.60 │ N/A │
╘═══════════╧══════════╧═════════╧═════════════╧════════════╧══════════════════════╧════════════════════╛
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
• Ansibleインベントリファイル、pyATSテストベットファイル、NSOインベン
トリファイルを生成
virl generate
$ virl generate ansible
Placing iosv-2 into ansible group routers
Placing iosv-1 into ansible group routers
Writing default_inventory.yaml
all:
children:
routers:
hosts:
iosv-1:
ansible_host: 172.16.30.60
console_server: 10.10.20.160
console_port: 17000
iosv-2:
ansible_host: 172.16.30.61
console_server: 10.10.20.160
console_port: 17002
Ansibleインベントリファイルの生成 生成されたAnsibleインベントリファイル
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
• 以下の方法でVIRL環境(IPアドレス、クレデンシャル情報)の設定
(優先順)
• ワーキングディレクトリの.virlrcファイル
• 環境変数
• ユーザーのホームディレクトリの.virlrcファイル
virlutils設定
VIRL_HOST=192.0.2.1
VIRL_USERNAME=guest
VIRL_PASSWORD=guest
$ export VIRL_HOST=192.0.2.1
$ export VIRL_USERNAME=guest
$ export VIRL_PASSWORD=guest
.virlrcの例 環境変数の例
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
PyATS
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
• Python3ベースのテスト自動化フレームワーク
• Cisco社内のテストフレームワークとして長年培われてきたノウハウ
を凝縮
• DevNetを通じてユーザーに提供
• 製品開発時にCisco内部で使用されているのと同じテスト環境をあな
たの環境で利用できる!
pyATS
https://developer.cisco.com/site/pyats
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
Cisco pyATS テスト自動化ソリューション
• ネットワークOSに依存しない自動化ライブラリ
• イベントベースの自動化
Genie Library Framework
• トポロジ & テストケースの定義
• 実行 & レポート
pyATS Core Test Infrastructure
• 機能モデル実装
• トリガー、検証、パース、コネクタ等
Genie Libs
• キーワード駆動テスト自動化
• テストスクリプトを宣言的な記述
Robot
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
• フレームワークの第一の重要な特徴は、フレームワークに合わせて利用者が定義したメソッドが、
アプリケーションコードからは呼ばれず、フレームワークから呼び出されるという点だ
Ralph Johnson and Brian Foote
• フレームワークを呼び出すのではなく、フレームワークに呼び出されるのだ。この現象を「制御の
反転」と呼ぶ(ハリウッド原則とも呼ばれる、「私を呼ぶな。私から呼ぶ」)
Martin Fowler
フレームワークとは
制御の反転あるいはハリウッドの原則
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!“
if __name__ == "__main__":
app.run(debug=True)
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
pyATSテストスクリプト構造
COMMON
SETUP
TESTCASE(S) COMMON
CLEANUP
Subsection 2
Setup
Test 1
Test 2
Cleanup
Subsection 1
Subsection 2
Subsection 1
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
pyATS
from ats import aetest
...
class Testcase_One(aetest.Testcase):
@aetest.setup
def setup(self, section):
log.info("%s testcase setup/preparation" % self.uid)
self.a = 1
self.b = 2
@aetest.test
def test_1(self, section):
log.info("test section: %s in testcase %s" % (section.uid, self.uid))
assert self.a == 1
@aetest.test
def test_2(self, section):
log.info("test section: %s in testcase %s" % (section.uid, self.uid))
assert self.b == 2
@aetest.cleanup
def cleanup(self):
log.info("%s testcase cleanup/teardown" % self.uid)
...
フレームワークのお作法にした
がって、クラスとメソッドを用意
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
pyATS
フレームワークが適切にメソッドを
呼び出してくれる
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
• 機能セントリックなオブジェクトモデルを提供
• オブジェクトはプラットフォーム、OSに依存しない
• テスト自動化を加速し単純化
Genie
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
• showコマンドを実行し、結果の文字列をPythonの
ディクショナリ形式にマッピング(便利!)
Genie
オペレーショナルデータを取得
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
a - application route
+ - replicated route, % - next hop override, p - overrides from PfR
Gateway of last resort is not set
2.0.0.0/32 is subnetted, 1 subnets
B 2.2.2.2 [200/0] via 192.168.12.2, 00:01:27
{'vrf': {
'default': {
'address_family': {
'ipv4 unicast': {
'ip': {
'2.2.2.2/32': {
'nexthop': {
'192.168.12.2': {
'protocol': {
'bgp': {
'metric': '0',
'preference': '200',
'uptime': '00:01:27‘
}
}
}
}
}
}
}
}
}
}
}
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
Genie 使い方
Genie単体での利用 pyATSでの利用
from genie.conf import Genie
from genie.libs.parser.iosxe.show_interface import ShowInterfaces
testbed = Genie.init('default_testbed.yaml')
ios1 = testbed.devices['iosv-1']
ios1.connect()
parsed = ShowInterfaces(ios1).parse()
# parsed にはディクショナリ形式のshow interfaceの結果
ios1.disconnect()
from ats.topology import loader
from genie.libs.parser.iosxe.show_interface import ShowInterfaces
testbed = loader.load("default_testbed.yaml")
ios1 = testbed.devices['iosv-1']
ios1.connect()
parsed = ShowInterfaces(ios1).parse()
# parsed にはディクショナリ形式のshow interfaceの結果
ios1.disconnect()
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
pyATSとGenieを組み合わせる
class BgpTestcase(aetest.Testcase):
…
@aetest.test
def check_ip_route(self):
ios1 = self.parameters['ios1']
route = ShowIpRoute(ios1).parse(protocol='bgp', ip='ip')
assert '2.2.2.2/32' in route['vrf']['default']['address_family']['ipv4 unicast']['ip'], 'route missing...'
@aetest.test.loop(device=('ios1','ios2'), prefix=('2.2.2.2/32', '1.1.1.1/32'))
def check_ip_route_loop(self, device, prefix):
ios = self.parameters[device]
route = ShowIpRoute(ios).parse(protocol='bgp', ip='ip')
assert prefix in route['vrf']['default']['address_family']['ipv4 unicast']['ip'], 'route missing...‘
…
iosv-1で2.2.2.2/32の
BGP経路があることを確認
ループ処理も書ける
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
ネットワークCI
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
デモ③
ネットワークCI
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
ネットワークCIテスト
ネットワークをコードとして管理
• トポロジ(VIRL)
• 構成情報(Ansible)
• テスト(pyATS)
Gitリポジトリへ
Push
CIツールが検知し、
CIジョブを実行
仮想テスト環境を
セットアップ
ネットワークの
テスト
構成管理ツールで
ネットワーク設定
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
• その状態をデータベースに保
存するAPIを備えたWebアプ
リケーションであるGitLab
サーバの機能の一部
• プロジェクトの更新に応じて
CIパイプラインの実行
• CIパイプラインのスタータス
や結果のレポート
Gitlab CI/CD
• (ビルドやテスト等の)CIジョ
ブを実行するアプリケーション
• GitLabサーバと別サーバに配備
され、APIを介してGitLab
CI/CDと連携
• Shell、Dockerコンテナなど
様々なExecutor
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
実行結果(成功時)
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
実行結果(失敗時)
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
(参考) .gitlab-ci.yml
image: tetsusat/network-ci-demo
cache:
untracked: true
key: "$CI_PIPELINE_ID"
stages:
- setup
- deploy
- test
- cleanup
virl_setup:
stage: setup
script:
- virl up
- sleep 120
- virl generate ansible
- virl generate pyats
tags:
- network-ci
ansible:
stage: deploy
script:
- ansible-playbook -i ./default_inventory.yaml
playbooks/config_motd.yaml
- ansible-playbook -i ./default_inventory.yaml
playbooks/config_bgp.yaml
- sleep 60
tags:
- network-ci
pyats:
stage: test
script:
- python3 pyats/bgp.py --testbed=./default_testbed.yaml
tags:
- network-ci
virl_cleanup:
stage: cleanup
script:
- virl down
tags:
- network-ci
VIRLの
セットアップ
Ansibleによる
設定
pyATSによる
テスト
VIRLの
クリーンアップ
パイプライン毎に
キャッシュを有効化
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
• 「Settings」→「CI/CD」→「Runners settings」
(参考) GitLabプロジェクトとGitLab Runnerの連携
GitLabプロジェクト側の設定
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
(参考) GitLabプロジェクトとGitLab Runnerの連携
GitLab Runner側の設定
$ sudo gitlab-runner register
Runtime platform arch=amd64 os=linux pid=25942 revision=8af42251 version=11.4.0
Running in system-mode.
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
https://gitlab.example.com/
Please enter the gitlab-ci token for this runner:
********************
Please enter the gitlab-ci description for this runner:
[ubuntu]: network ci demo
Please enter the gitlab-ci tags for this runner (comma separated):
network-ci
Registering runner... succeeded runner=seR7B9LU
Please enter the executor: shell, ssh, virtualbox, docker-ssh+machine, kubernetes, docker, docker-ssh, parallels,
docker+machine:
docker
Please enter the default Docker image (e.g. ruby:2.1):
tetsusat/network-ci-demo
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically
reloaded!
gitlabのURL
Gitlab runnerのタグ
Executorのタイプ
CI Job実行するDockerイメージ
Registrationトークン
© 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public
(参考) 環境変数の設定
VIRLとPyATSで実現するネットワークCI

More Related Content

What's hot

【解説】IKE(IIJ Kubernetes Engine):= Vanilla Kubernetes + 何?
【解説】IKE(IIJ Kubernetes Engine):= Vanilla Kubernetes + 何?【解説】IKE(IIJ Kubernetes Engine):= Vanilla Kubernetes + 何?
【解説】IKE(IIJ Kubernetes Engine):= Vanilla Kubernetes + 何?IIJ
 
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)NTT DATA Technology & Innovation
 
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(DevNet編)
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(DevNet編)Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(DevNet編)
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(DevNet編)シスコシステムズ合同会社
 
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48Preferred Networks
 
CDNの仕組み(JANOG36)
CDNの仕組み(JANOG36)CDNの仕組み(JANOG36)
CDNの仕組み(JANOG36)J-Stream Inc.
 
Linux KVMではじめるカンタン仮想化入門
Linux KVMではじめるカンタン仮想化入門Linux KVMではじめるカンタン仮想化入門
Linux KVMではじめるカンタン仮想化入門VirtualTech Japan Inc.
 
急速に進化を続けるCNIプラグイン Antrea
急速に進化を続けるCNIプラグイン Antrea 急速に進化を続けるCNIプラグイン Antrea
急速に進化を続けるCNIプラグイン Antrea Motonori Shindo
 
initとプロセス再起動
initとプロセス再起動initとプロセス再起動
initとプロセス再起動Takashi Takizawa
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線Motonori Shindo
 
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)NTT DATA Technology & Innovation
 
containerdの概要と最近の機能
containerdの概要と最近の機能containerdの概要と最近の機能
containerdの概要と最近の機能Kohei Tokunaga
 
最近のOpenStackを振り返ってみよう
最近のOpenStackを振り返ってみよう最近のOpenStackを振り返ってみよう
最近のOpenStackを振り返ってみようTakashi Kajinami
 
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能BuildKitの概要と最近の機能
BuildKitの概要と最近の機能Kohei Tokunaga
 
CloudStack再入門!15分でおさらいするCloudStackの基礎
CloudStack再入門!15分でおさらいするCloudStackの基礎CloudStack再入門!15分でおさらいするCloudStackの基礎
CloudStack再入門!15分でおさらいするCloudStackの基礎Satoshi Shimazaki
 
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会ShuheiUda
 
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)NTT DATA Technology & Innovation
 
"SRv6の現状と展望" ENOG53@上越
"SRv6の現状と展望" ENOG53@上越"SRv6の現状と展望" ENOG53@上越
"SRv6の現状と展望" ENOG53@上越Kentaro Ebisawa
 
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!kwatch
 

What's hot (20)

eBPFを用いたトレーシングについて
eBPFを用いたトレーシングについてeBPFを用いたトレーシングについて
eBPFを用いたトレーシングについて
 
LXC入門 - Osc2011 nagoya
LXC入門 - Osc2011 nagoyaLXC入門 - Osc2011 nagoya
LXC入門 - Osc2011 nagoya
 
【解説】IKE(IIJ Kubernetes Engine):= Vanilla Kubernetes + 何?
【解説】IKE(IIJ Kubernetes Engine):= Vanilla Kubernetes + 何?【解説】IKE(IIJ Kubernetes Engine):= Vanilla Kubernetes + 何?
【解説】IKE(IIJ Kubernetes Engine):= Vanilla Kubernetes + 何?
 
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
 
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(DevNet編)
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(DevNet編)Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(DevNet編)
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(DevNet編)
 
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
 
CDNの仕組み(JANOG36)
CDNの仕組み(JANOG36)CDNの仕組み(JANOG36)
CDNの仕組み(JANOG36)
 
Linux KVMではじめるカンタン仮想化入門
Linux KVMではじめるカンタン仮想化入門Linux KVMではじめるカンタン仮想化入門
Linux KVMではじめるカンタン仮想化入門
 
急速に進化を続けるCNIプラグイン Antrea
急速に進化を続けるCNIプラグイン Antrea 急速に進化を続けるCNIプラグイン Antrea
急速に進化を続けるCNIプラグイン Antrea
 
initとプロセス再起動
initとプロセス再起動initとプロセス再起動
initとプロセス再起動
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
 
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
 
containerdの概要と最近の機能
containerdの概要と最近の機能containerdの概要と最近の機能
containerdの概要と最近の機能
 
最近のOpenStackを振り返ってみよう
最近のOpenStackを振り返ってみよう最近のOpenStackを振り返ってみよう
最近のOpenStackを振り返ってみよう
 
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
 
CloudStack再入門!15分でおさらいするCloudStackの基礎
CloudStack再入門!15分でおさらいするCloudStackの基礎CloudStack再入門!15分でおさらいするCloudStackの基礎
CloudStack再入門!15分でおさらいするCloudStackの基礎
 
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
 
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
 
"SRv6の現状と展望" ENOG53@上越
"SRv6の現状と展望" ENOG53@上越"SRv6の現状と展望" ENOG53@上越
"SRv6の現状と展望" ENOG53@上越
 
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
 

Similar to VIRLとPyATSで実現するネットワークCI

20170804 IOS/IOS-XE運用管理機能アップデート
20170804 IOS/IOS-XE運用管理機能アップデート20170804 IOS/IOS-XE運用管理機能アップデート
20170804 IOS/IOS-XE運用管理機能アップデートKazumasa Ikuta
 
Cisco Connect Japan 2014: 実践 Cisco ACI (Application Centric Infrastructure)
Cisco Connect Japan 2014: 実践 Cisco ACI (Application Centric Infrastructure)Cisco Connect Japan 2014: 実践 Cisco ACI (Application Centric Infrastructure)
Cisco Connect Japan 2014: 実践 Cisco ACI (Application Centric Infrastructure)シスコシステムズ合同会社
 
CleanArchitecture with AssemblyDefinition in unity
CleanArchitecture with AssemblyDefinition in unityCleanArchitecture with AssemblyDefinition in unity
CleanArchitecture with AssemblyDefinition in unityNakanoYosuke1
 
1891件以上のカーネルの不具合修正に貢献した再現用プログラムを自動生成するsyzkallerのテスト自動化技術(NTT Tech Conference ...
1891件以上のカーネルの不具合修正に貢献した再現用プログラムを自動生成するsyzkallerのテスト自動化技術(NTT Tech Conference ...1891件以上のカーネルの不具合修正に貢献した再現用プログラムを自動生成するsyzkallerのテスト自動化技術(NTT Tech Conference ...
1891件以上のカーネルの不具合修正に貢献した再現用プログラムを自動生成するsyzkallerのテスト自動化技術(NTT Tech Conference ...NTT DATA Technology & Innovation
 
ITpro EXPO 2014: Cisco ACI  ~データセンター運用の効率化と迅速なアプリケーション展開~
ITpro EXPO 2014: Cisco ACI  ~データセンター運用の効率化と迅速なアプリケーション展開~ITpro EXPO 2014: Cisco ACI  ~データセンター運用の効率化と迅速なアプリケーション展開~
ITpro EXPO 2014: Cisco ACI  ~データセンター運用の効率化と迅速なアプリケーション展開~シスコシステムズ合同会社
 
OSSで作るOpenStack監視システム
OSSで作るOpenStack監視システムOSSで作るOpenStack監視システム
OSSで作るOpenStack監視システムsatsuki fukazu
 
HeapStats: Introduction and Technical Preview
HeapStats: Introduction and Technical PreviewHeapStats: Introduction and Technical Preview
HeapStats: Introduction and Technical PreviewYuji Kubota
 
シスコ装置を使い倒す!組込み機能による可視化からセキュリティ強化
シスコ装置を使い倒す!組込み機能による可視化からセキュリティ強化シスコ装置を使い倒す!組込み機能による可視化からセキュリティ強化
シスコ装置を使い倒す!組込み機能による可視化からセキュリティ強化シスコシステムズ合同会社
 
Data Factory V2 新機能徹底活用入門
Data Factory V2 新機能徹底活用入門Data Factory V2 新機能徹底活用入門
Data Factory V2 新機能徹底活用入門Keisuke Fujikawa
 
OpenVINOとAzure こう連携できるのでは?
OpenVINOとAzure こう連携できるのでは?OpenVINOとAzure こう連携できるのでは?
OpenVINOとAzure こう連携できるのでは?Hiroshi Ouchiyama
 
【Interop tokyo 2014】 “FlexPod” Cisco ACI とUCS Director により 実現される自動化 クラウド基盤
【Interop tokyo 2014】 “FlexPod” Cisco ACI とUCS Director により 実現される自動化 クラウド基盤【Interop tokyo 2014】 “FlexPod” Cisco ACI とUCS Director により 実現される自動化 クラウド基盤
【Interop tokyo 2014】 “FlexPod” Cisco ACI とUCS Director により 実現される自動化 クラウド基盤シスコシステムズ合同会社
 
【Interop tokyo 2014】 “FlexPod” Cisco ACIとUCS Directorにより実現される自動化 クラウド基盤
【Interop tokyo 2014】 “FlexPod” Cisco ACIとUCS Directorにより実現される自動化 クラウド基盤【Interop tokyo 2014】 “FlexPod” Cisco ACIとUCS Directorにより実現される自動化 クラウド基盤
【Interop tokyo 2014】 “FlexPod” Cisco ACIとUCS Directorにより実現される自動化 クラウド基盤シスコシステムズ合同会社
 
Cloudstack user group meeting in osaka
Cloudstack user group meeting in osakaCloudstack user group meeting in osaka
Cloudstack user group meeting in osakaNaotaka Jay HOTTA
 
ExcelとPythonによる社会インフラシステムの設定ファイルの自動生成
ExcelとPythonによる社会インフラシステムの設定ファイルの自動生成ExcelとPythonによる社会インフラシステムの設定ファイルの自動生成
ExcelとPythonによる社会インフラシステムの設定ファイルの自動生成Fuminobu TAKEYAMA
 
CSCJ_Webcast_20180626_ACI.pdf
CSCJ_Webcast_20180626_ACI.pdfCSCJ_Webcast_20180626_ACI.pdf
CSCJ_Webcast_20180626_ACI.pdfyojitanaka2
 
Vitisのご紹介とAmazon EC2 F1体験デモ
Vitisのご紹介とAmazon EC2 F1体験デモVitisのご紹介とAmazon EC2 F1体験デモ
Vitisのご紹介とAmazon EC2 F1体験デモJun Ando
 
MySQL 5.7 & 最新開発状況 @ オープンソースカンファレンス20
MySQL 5.7 & 最新開発状況 @ オープンソースカンファレンス20MySQL 5.7 & 最新開発状況 @ オープンソースカンファレンス20
MySQL 5.7 & 最新開発状況 @ オープンソースカンファレンス20Ryusuke Kajiyama
 
【de:code 2020】 AI on IA 最新情報 ~ CPU で AI を上手に動かすための 5 つのヒント ~
【de:code 2020】 AI on IA 最新情報 ~ CPU で AI を上手に動かすための 5 つのヒント ~【de:code 2020】 AI on IA 最新情報 ~ CPU で AI を上手に動かすための 5 つのヒント ~
【de:code 2020】 AI on IA 最新情報 ~ CPU で AI を上手に動かすための 5 つのヒント ~日本マイクロソフト株式会社
 

Similar to VIRLとPyATSで実現するネットワークCI (20)

20170804 IOS/IOS-XE運用管理機能アップデート
20170804 IOS/IOS-XE運用管理機能アップデート20170804 IOS/IOS-XE運用管理機能アップデート
20170804 IOS/IOS-XE運用管理機能アップデート
 
IOS/IOS-XE 運用管理機能アップデート
IOS/IOS-XE 運用管理機能アップデートIOS/IOS-XE 運用管理機能アップデート
IOS/IOS-XE 運用管理機能アップデート
 
ACI Kubernetes Integration
ACI Kubernetes IntegrationACI Kubernetes Integration
ACI Kubernetes Integration
 
Cisco Connect Japan 2014: 実践 Cisco ACI (Application Centric Infrastructure)
Cisco Connect Japan 2014: 実践 Cisco ACI (Application Centric Infrastructure)Cisco Connect Japan 2014: 実践 Cisco ACI (Application Centric Infrastructure)
Cisco Connect Japan 2014: 実践 Cisco ACI (Application Centric Infrastructure)
 
CleanArchitecture with AssemblyDefinition in unity
CleanArchitecture with AssemblyDefinition in unityCleanArchitecture with AssemblyDefinition in unity
CleanArchitecture with AssemblyDefinition in unity
 
1891件以上のカーネルの不具合修正に貢献した再現用プログラムを自動生成するsyzkallerのテスト自動化技術(NTT Tech Conference ...
1891件以上のカーネルの不具合修正に貢献した再現用プログラムを自動生成するsyzkallerのテスト自動化技術(NTT Tech Conference ...1891件以上のカーネルの不具合修正に貢献した再現用プログラムを自動生成するsyzkallerのテスト自動化技術(NTT Tech Conference ...
1891件以上のカーネルの不具合修正に貢献した再現用プログラムを自動生成するsyzkallerのテスト自動化技術(NTT Tech Conference ...
 
ITpro EXPO 2014: Cisco ACI  ~データセンター運用の効率化と迅速なアプリケーション展開~
ITpro EXPO 2014: Cisco ACI  ~データセンター運用の効率化と迅速なアプリケーション展開~ITpro EXPO 2014: Cisco ACI  ~データセンター運用の効率化と迅速なアプリケーション展開~
ITpro EXPO 2014: Cisco ACI  ~データセンター運用の効率化と迅速なアプリケーション展開~
 
OSSで作るOpenStack監視システム
OSSで作るOpenStack監視システムOSSで作るOpenStack監視システム
OSSで作るOpenStack監視システム
 
HeapStats: Introduction and Technical Preview
HeapStats: Introduction and Technical PreviewHeapStats: Introduction and Technical Preview
HeapStats: Introduction and Technical Preview
 
シスコ装置を使い倒す!組込み機能による可視化からセキュリティ強化
シスコ装置を使い倒す!組込み機能による可視化からセキュリティ強化シスコ装置を使い倒す!組込み機能による可視化からセキュリティ強化
シスコ装置を使い倒す!組込み機能による可視化からセキュリティ強化
 
Data Factory V2 新機能徹底活用入門
Data Factory V2 新機能徹底活用入門Data Factory V2 新機能徹底活用入門
Data Factory V2 新機能徹底活用入門
 
OpenVINOとAzure こう連携できるのでは?
OpenVINOとAzure こう連携できるのでは?OpenVINOとAzure こう連携できるのでは?
OpenVINOとAzure こう連携できるのでは?
 
【Interop tokyo 2014】 “FlexPod” Cisco ACI とUCS Director により 実現される自動化 クラウド基盤
【Interop tokyo 2014】 “FlexPod” Cisco ACI とUCS Director により 実現される自動化 クラウド基盤【Interop tokyo 2014】 “FlexPod” Cisco ACI とUCS Director により 実現される自動化 クラウド基盤
【Interop tokyo 2014】 “FlexPod” Cisco ACI とUCS Director により 実現される自動化 クラウド基盤
 
【Interop tokyo 2014】 “FlexPod” Cisco ACIとUCS Directorにより実現される自動化 クラウド基盤
【Interop tokyo 2014】 “FlexPod” Cisco ACIとUCS Directorにより実現される自動化 クラウド基盤【Interop tokyo 2014】 “FlexPod” Cisco ACIとUCS Directorにより実現される自動化 クラウド基盤
【Interop tokyo 2014】 “FlexPod” Cisco ACIとUCS Directorにより実現される自動化 クラウド基盤
 
Cloudstack user group meeting in osaka
Cloudstack user group meeting in osakaCloudstack user group meeting in osaka
Cloudstack user group meeting in osaka
 
ExcelとPythonによる社会インフラシステムの設定ファイルの自動生成
ExcelとPythonによる社会インフラシステムの設定ファイルの自動生成ExcelとPythonによる社会インフラシステムの設定ファイルの自動生成
ExcelとPythonによる社会インフラシステムの設定ファイルの自動生成
 
CSCJ_Webcast_20180626_ACI.pdf
CSCJ_Webcast_20180626_ACI.pdfCSCJ_Webcast_20180626_ACI.pdf
CSCJ_Webcast_20180626_ACI.pdf
 
Vitisのご紹介とAmazon EC2 F1体験デモ
Vitisのご紹介とAmazon EC2 F1体験デモVitisのご紹介とAmazon EC2 F1体験デモ
Vitisのご紹介とAmazon EC2 F1体験デモ
 
MySQL 5.7 & 最新開発状況 @ オープンソースカンファレンス20
MySQL 5.7 & 最新開発状況 @ オープンソースカンファレンス20MySQL 5.7 & 最新開発状況 @ オープンソースカンファレンス20
MySQL 5.7 & 最新開発状況 @ オープンソースカンファレンス20
 
【de:code 2020】 AI on IA 最新情報 ~ CPU で AI を上手に動かすための 5 つのヒント ~
【de:code 2020】 AI on IA 最新情報 ~ CPU で AI を上手に動かすための 5 つのヒント ~【de:code 2020】 AI on IA 最新情報 ~ CPU で AI を上手に動かすための 5 つのヒント ~
【de:code 2020】 AI on IA 最新情報 ~ CPU で AI を上手に動かすための 5 つのヒント ~
 

Recently uploaded

論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 

Recently uploaded (10)

論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 

VIRLとPyATSで実現するネットワークCI

  • 2. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public • サービスイン前に導入する機器でテストを実施 • サービスイン後に使えるテスト環境がない • テストはサービスイン前に手動で実施 • システム変更した場合、同様のテストを実行するのが事実上難しい ネットワークが塩漬けになる理由 VIRLでテスト環境を構築 pyATSでテストの自動化
  • 3. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public • Continuous Integration • 開発者が自分のコード変更を頻繁に(Git等の)共有リポジトリに マージし、その都度、自動化されたビルドとテストを実行するソフ トウェア開発の手法 • エクストリーム・プログラミング (XP) のプラクティスの一つ 継続的インテグレーション(CI)とは
  • 4. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public • Extreme Programming • 従来のウォーターフォール型開発の 問題点を克服するために、1990年 代後半にケント・ベックらによって 考案 • 5つの価値と19のプラクティス(実 践)を定義 • 5つの価値 • コミュニケーション、シンプル、フィー ドバック、勇気、尊重 • 19のプラクティス(右図) (参考) XP カテゴリ プラクティス 共同のプラクティス 反復 共通の用語 オープンな作業空間 回顧(頻繁な振り返り) 開発のプラクティス テスト駆動開発 ペアプログラミング リファクタリング ソースコードの共同所有 継続的インテグレーション YAGNI 管理者のプラクティス 責任の受け入れ 援護 四半期ごとの見直し ミラー 適切なペースの仕事 顧客のプラクティス ストーリーの作成 リリース計画 受け入れテスト 短期リリース
  • 5. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public ネットワークにおけるCI ネットワークをコードとして管理 • トポロジ • 構成情報 • テスト Gitリポジトリへ Push / Pull Request CIツールが検知し、 CIジョブを実行 チャットツールで テスト結果を通知 仮想テスト環境を セットアップ ネットワークの テスト 構成管理ツールで ネットワーク設定
  • 6. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public • ネットワーク変更の履歴 • ネットワーク変更のレビュー • テストが十分にカバーされていれば、安心して以下のことができる • 機器の追加、リプレース • 機能の追加、拡張 • サービスの追加、拡張 • リファクタリング(コンフィグの最適化) ネットワークにおけるCI 期待される効果
  • 7. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public VIRL
  • 8. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public What is VIRL? パワフルで、使いやすく、拡張可能なネットワークシミュレー ション環境  既存または計画されたネットワークの高精度モデルを構築  Ciscoのネットワークオペレーティングシステムの正規バージョンを使用してネッ トワークを設計、設定、および運用  IOSv、IOSv Layer-2、IOS-XRv、NX-OSv、CSR1000v、ASAvなどの共通プ ラットフォームを使用して構築  サードパーティの仮想マシン、アプライアンス、VNF、およびサーバーを統合  実ネットワークと仮想ネットワークを接続して、再現性の高い開発環境とテスト環 境を構築  どこでもデザインやテストが可能 - VIRLはポータブル
  • 9. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public CML vs. VIRL PE CML(Cisco Modeling Lab) コーポレートユース マルチユーザー TACサポート 300ノード(最大) Ciscoパートナーから購入 インターネット接続不要 VIRL PE(Personal Edition) 個人ユース シングルユーザー コミュニティサポート 20ノード(最大) Cisco Learning Network Storeから購入 要インターネット接続 (ライセンスチェックのため)
  • 10. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public Keystone (Identity Services) Glance (Image / Repository Services) Nova (Compute Services) Neutron (Networking Services) Swift (Object Services) Cinder (Block Storage Services) Horizon(Dashboard) APIs/CLI IaaS / cloud orchestration software – creates, manages, and deletes virtual resources according to API- or CLI-based instructions VIRL – Built on OpenStack
  • 11. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public VM Maestro • グラフィカルなトポロジ編 集ツール • ネットワーク要素を定義  ルータ  接続  コンフィグ  サーバ • 複雑なトポロジをサポート • シミュレーションを管理
  • 12. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public VIRL – ネットワークインターフェイス VIRL X マネジメント SNAT FLAT eth0 eth2 eth4 R R R eth1 eth3 FLAT1 Cluster Gateway Router
  • 13. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public • 5つのネットワークインターフェイス: • eth0 – マネジメントアクセスに利用。IPアドレスはDHCP割り当て、もしくは、手 動で静的に設定 • eth1 (FLAT) – 外部からのL2接続(マネジメントアクセスもしくはデータプレーン アクセス)に利用。 デフォルトで172.16.1.254/24が割り当てられる • eth2 (FLAT1) -外部からのL2接続(マネジメントアクセスもしくはデータプレーン アクセス)に利用。 デフォルトで172.16.2.254/24が割り当てられる • eth3 – SNATによる外部L3接続(マネジメントアクセスおよびデータプレーンアク セス)に利用。デフォルトで172.16.3.254/24が割り当てられる • eth4 – OpenStackサービスとホスト間通信にシステム内部で利用(設定不可)。デ フォルトで172.16.10.250/24が割り当てられる VIRL – ネットワーク接続
  • 14. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public • 1.6.55に同梱されるイメージ VIRLイメージ
  • 15. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public • 本家サイト • http://virl.cisco.com/ • チュートリアル • http://virl.cisco.com/tutorials.php • Youtubeチャンネル • https://www.youtube.com/c/ciscovirl • コミュニティサポート • https://learningnetwork.cisco.com/groups/virl (参考) VIRLレファレンス
  • 16. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public virlutils
  • 17. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public • Cisco VIRLを便利に使うコマンドラインツール • VagrantっぽいフィーリングでVIRLを操作できる(virl up, virl down, virl ssh, virl console, etc.) Virlutils https://github.com/CiscoDevNet/virlutils
  • 18. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public デモ① virlutils
  • 19. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public • VIRLシミュレーションを起動する • topology.virlのあるディレクトリにて • virl up • もしくは、topology.virlを含むGithubプロジェクトを指定して • virl up virlfiles/2-ios-router virl up $ virl up Creating default environment from topology.virl
  • 20. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public (参考) topology.virl の作成 VM Maestroのデザインパースペクティブから 編集して、「File」-> 「Export」からエクスポート するのが手っ取り早い
  • 21. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public • VIRLシミュレーションの状態を確認 virl ls $ virl ls Running Simulations ╒═══════════════════════════════════╤══════════╤════════════════════════════╤═══════════╕ │ Simulation │ Status │ Launched │ Expires │ ╞═══════════════════════════════════╪══════════╪════════════════════════════╪═══════════╡ │ network-ci-handson_default_R1gGHs │ ACTIVE │ 2018-11-20T02:30:55.887350 │ │ ╘═══════════════════════════════════╧══════════╧════════════════════════════╧═══════════╛
  • 22. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public • VIRLノードの状態を確認 virl nodes $ virl nodes Here is a list of all the running nodes ╒═══════════╤══════════╤═════════╤═════════════╤════════════╤══════════════════════╤════════════════════╕ │ Node │ Type │ State │ Reachable │ Protocol │ Management Address │ External Address │ ╞═══════════╪══════════╪═════════╪═════════════╪════════════╪══════════════════════╪════════════════════╡ │ iosv-2 │ IOSv │ ACTIVE │ REACHABLE │ telnet │ 172.16.30.61 │ N/A │ ├───────────┼──────────┼─────────┼─────────────┼────────────┼──────────────────────┼────────────────────┤ │ iosv-1 │ IOSv │ ACTIVE │ REACHABLE │ telnet │ 172.16.30.60 │ N/A │ ╘═══════════╧══════════╧═════════╧═════════════╧════════════╧══════════════════════╧════════════════════╛
  • 23. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public • Ansibleインベントリファイル、pyATSテストベットファイル、NSOインベン トリファイルを生成 virl generate $ virl generate ansible Placing iosv-2 into ansible group routers Placing iosv-1 into ansible group routers Writing default_inventory.yaml all: children: routers: hosts: iosv-1: ansible_host: 172.16.30.60 console_server: 10.10.20.160 console_port: 17000 iosv-2: ansible_host: 172.16.30.61 console_server: 10.10.20.160 console_port: 17002 Ansibleインベントリファイルの生成 生成されたAnsibleインベントリファイル
  • 24. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public • 以下の方法でVIRL環境(IPアドレス、クレデンシャル情報)の設定 (優先順) • ワーキングディレクトリの.virlrcファイル • 環境変数 • ユーザーのホームディレクトリの.virlrcファイル virlutils設定 VIRL_HOST=192.0.2.1 VIRL_USERNAME=guest VIRL_PASSWORD=guest $ export VIRL_HOST=192.0.2.1 $ export VIRL_USERNAME=guest $ export VIRL_PASSWORD=guest .virlrcの例 環境変数の例
  • 25. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public PyATS
  • 26. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public • Python3ベースのテスト自動化フレームワーク • Cisco社内のテストフレームワークとして長年培われてきたノウハウ を凝縮 • DevNetを通じてユーザーに提供 • 製品開発時にCisco内部で使用されているのと同じテスト環境をあな たの環境で利用できる! pyATS https://developer.cisco.com/site/pyats
  • 27. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public Cisco pyATS テスト自動化ソリューション • ネットワークOSに依存しない自動化ライブラリ • イベントベースの自動化 Genie Library Framework • トポロジ & テストケースの定義 • 実行 & レポート pyATS Core Test Infrastructure • 機能モデル実装 • トリガー、検証、パース、コネクタ等 Genie Libs • キーワード駆動テスト自動化 • テストスクリプトを宣言的な記述 Robot
  • 28. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public • フレームワークの第一の重要な特徴は、フレームワークに合わせて利用者が定義したメソッドが、 アプリケーションコードからは呼ばれず、フレームワークから呼び出されるという点だ Ralph Johnson and Brian Foote • フレームワークを呼び出すのではなく、フレームワークに呼び出されるのだ。この現象を「制御の 反転」と呼ぶ(ハリウッド原則とも呼ばれる、「私を呼ぶな。私から呼ぶ」) Martin Fowler フレームワークとは 制御の反転あるいはハリウッドの原則 from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello World!“ if __name__ == "__main__": app.run(debug=True)
  • 29. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public pyATSテストスクリプト構造 COMMON SETUP TESTCASE(S) COMMON CLEANUP Subsection 2 Setup Test 1 Test 2 Cleanup Subsection 1 Subsection 2 Subsection 1
  • 30. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public pyATS from ats import aetest ... class Testcase_One(aetest.Testcase): @aetest.setup def setup(self, section): log.info("%s testcase setup/preparation" % self.uid) self.a = 1 self.b = 2 @aetest.test def test_1(self, section): log.info("test section: %s in testcase %s" % (section.uid, self.uid)) assert self.a == 1 @aetest.test def test_2(self, section): log.info("test section: %s in testcase %s" % (section.uid, self.uid)) assert self.b == 2 @aetest.cleanup def cleanup(self): log.info("%s testcase cleanup/teardown" % self.uid) ... フレームワークのお作法にした がって、クラスとメソッドを用意
  • 31. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public pyATS フレームワークが適切にメソッドを 呼び出してくれる
  • 32. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public • 機能セントリックなオブジェクトモデルを提供 • オブジェクトはプラットフォーム、OSに依存しない • テスト自動化を加速し単純化 Genie
  • 33. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public • showコマンドを実行し、結果の文字列をPythonの ディクショナリ形式にマッピング(便利!) Genie オペレーショナルデータを取得 Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2 E1 - OSPF external type 1, E2 - OSPF external type 2 i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2 ia - IS-IS inter area, * - candidate default, U - per-user static route o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP a - application route + - replicated route, % - next hop override, p - overrides from PfR Gateway of last resort is not set 2.0.0.0/32 is subnetted, 1 subnets B 2.2.2.2 [200/0] via 192.168.12.2, 00:01:27 {'vrf': { 'default': { 'address_family': { 'ipv4 unicast': { 'ip': { '2.2.2.2/32': { 'nexthop': { '192.168.12.2': { 'protocol': { 'bgp': { 'metric': '0', 'preference': '200', 'uptime': '00:01:27‘ } } } } } } } } } } }
  • 34. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public Genie 使い方 Genie単体での利用 pyATSでの利用 from genie.conf import Genie from genie.libs.parser.iosxe.show_interface import ShowInterfaces testbed = Genie.init('default_testbed.yaml') ios1 = testbed.devices['iosv-1'] ios1.connect() parsed = ShowInterfaces(ios1).parse() # parsed にはディクショナリ形式のshow interfaceの結果 ios1.disconnect() from ats.topology import loader from genie.libs.parser.iosxe.show_interface import ShowInterfaces testbed = loader.load("default_testbed.yaml") ios1 = testbed.devices['iosv-1'] ios1.connect() parsed = ShowInterfaces(ios1).parse() # parsed にはディクショナリ形式のshow interfaceの結果 ios1.disconnect()
  • 35. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public pyATSとGenieを組み合わせる class BgpTestcase(aetest.Testcase): … @aetest.test def check_ip_route(self): ios1 = self.parameters['ios1'] route = ShowIpRoute(ios1).parse(protocol='bgp', ip='ip') assert '2.2.2.2/32' in route['vrf']['default']['address_family']['ipv4 unicast']['ip'], 'route missing...' @aetest.test.loop(device=('ios1','ios2'), prefix=('2.2.2.2/32', '1.1.1.1/32')) def check_ip_route_loop(self, device, prefix): ios = self.parameters[device] route = ShowIpRoute(ios).parse(protocol='bgp', ip='ip') assert prefix in route['vrf']['default']['address_family']['ipv4 unicast']['ip'], 'route missing...‘ … iosv-1で2.2.2.2/32の BGP経路があることを確認 ループ処理も書ける
  • 36. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public ネットワークCI
  • 37. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public デモ③ ネットワークCI
  • 38. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public ネットワークCIテスト ネットワークをコードとして管理 • トポロジ(VIRL) • 構成情報(Ansible) • テスト(pyATS) Gitリポジトリへ Push CIツールが検知し、 CIジョブを実行 仮想テスト環境を セットアップ ネットワークの テスト 構成管理ツールで ネットワーク設定
  • 39. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public • その状態をデータベースに保 存するAPIを備えたWebアプ リケーションであるGitLab サーバの機能の一部 • プロジェクトの更新に応じて CIパイプラインの実行 • CIパイプラインのスタータス や結果のレポート Gitlab CI/CD • (ビルドやテスト等の)CIジョ ブを実行するアプリケーション • GitLabサーバと別サーバに配備 され、APIを介してGitLab CI/CDと連携 • Shell、Dockerコンテナなど 様々なExecutor
  • 40. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public 実行結果(成功時)
  • 41. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public 実行結果(失敗時)
  • 42. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public (参考) .gitlab-ci.yml image: tetsusat/network-ci-demo cache: untracked: true key: "$CI_PIPELINE_ID" stages: - setup - deploy - test - cleanup virl_setup: stage: setup script: - virl up - sleep 120 - virl generate ansible - virl generate pyats tags: - network-ci ansible: stage: deploy script: - ansible-playbook -i ./default_inventory.yaml playbooks/config_motd.yaml - ansible-playbook -i ./default_inventory.yaml playbooks/config_bgp.yaml - sleep 60 tags: - network-ci pyats: stage: test script: - python3 pyats/bgp.py --testbed=./default_testbed.yaml tags: - network-ci virl_cleanup: stage: cleanup script: - virl down tags: - network-ci VIRLの セットアップ Ansibleによる 設定 pyATSによる テスト VIRLの クリーンアップ パイプライン毎に キャッシュを有効化
  • 43. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public • 「Settings」→「CI/CD」→「Runners settings」 (参考) GitLabプロジェクトとGitLab Runnerの連携 GitLabプロジェクト側の設定
  • 44. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public (参考) GitLabプロジェクトとGitLab Runnerの連携 GitLab Runner側の設定 $ sudo gitlab-runner register Runtime platform arch=amd64 os=linux pid=25942 revision=8af42251 version=11.4.0 Running in system-mode. Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/): https://gitlab.example.com/ Please enter the gitlab-ci token for this runner: ******************** Please enter the gitlab-ci description for this runner: [ubuntu]: network ci demo Please enter the gitlab-ci tags for this runner (comma separated): network-ci Registering runner... succeeded runner=seR7B9LU Please enter the executor: shell, ssh, virtualbox, docker-ssh+machine, kubernetes, docker, docker-ssh, parallels, docker+machine: docker Please enter the default Docker image (e.g. ruby:2.1): tetsusat/network-ci-demo Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded! gitlabのURL Gitlab runnerのタグ Executorのタイプ CI Job実行するDockerイメージ Registrationトークン
  • 45. © 2018 Cisco and/or its affiliates. All rights reserved. Cisco Public (参考) 環境変数の設定

Editor's Notes

  1. pyATS - Core Test Framework Testbed/topology definition Test suite definition Device connections Execution, Reporting Base classes, data structures, etc Genie – Library Framework OS/Platform agnostic design YANG-inspired objects models Configurational state Operational status Stateful, event-based test automation methodology Data-driven, reusable testcases