SlideShare a Scribd company logo
©APRESIA Systems all right reserved.
Rev.1
ネットワークプログラマビリティ勉強会
GNS3上の仮想アプライアンス+GitLabRunner+BDDによる
テスト自動化
ネットワークプログラマビリティ勉強会
第17回 ショートプログラム
次世代技術本部 技術開発部
次世代ソフトウェアグループ
坪田 繁
2019.6
2ネットワークプログラマビリティ勉強会 Rev.1
JANOG41にて、実機上のL2リング設定 and 障害切替試験のテスト自動化をご説明
実機確保して配線してファーム更新大変
そもそも機材ないと話になんないし
そろそろ仮想化環境もほしいな・・・。
いうことで
仮想アプライアンスを試作!
現状NetConfで、正式にはCLIを作成予定
GNS3を触ってみて(初心者)、仮想ネットワーク(OSPFv2)を自動構築(設定)
正常時、障害時の経路切替確認を自動テストしてみましたっ!
そのときの知見やハマりポイントなどを、7分間でできる限り共有できればっ!
モチベーション
3ネットワークプログラマビリティ勉強会 Rev.1
JANOG41にて、実機上のL2リング設定 and 障害切替試験のテスト自動化をご説明
実機確保は時期によっては結構大変
機材なくても試験したいっ!
いうことで
仮想アプライアンスを試作!
現状NetConfで、正式にはCLIを作成予定
GNS3を触ってみて(初心者)、仮想ネットワーク(OSPFv2)を自動構築(設定)
正常時、障害時の経路切替確認を自動テストしてみましたっ!
そのときの知見やハマりポイントなどを、7分間でできる限り共有できればっ!
モチベーション
4ネットワークプログラマビリティ勉強会 Rev.1
JANOG41にて、実機上のL2リング設定 and 障害切替試験のテスト自動化をご説明
実機確保は時期によっては結構大変
機材なくても試験したいっ!
ということで
◊仮想アプライアンスを試作!
−現状NetConfで、CLI対応中
◊(初心者) GNS3上に仮想ネットワーク(OSPFv2)を自動構築し切替試験実施
◊そのときの知見やハマりポイントなどを、9分間でできる限り共有できればっ!
モチベーション
5ネットワークプログラマビリティ勉強会 Rev.1
システム構成
docker network
仮想環境
behave
6ネットワークプログラマビリティ勉強会 Rev.1
システム構成
仮想環境
7ネットワークプログラマビリティ勉強会 Rev.1
area 0
10.0.1.3
PC2
試験に用いたGNS3上の仮想ネットワーク構成
OSPF確認用
独自アプライアンス
PC1
仮想アプライアンスに
外部からアクセス可
AP-1
AP-2
AP-3
8ネットワークプログラマビリティ勉強会 Rev.1
下記サイトを参考
◊ https://gns3-server.readthedocs.io/en/latest/endpoints.html
RESTのPythonラッパー
◊ Requestsモジュールがあり、HTTPリクエスト発行が可能
− https://github.com/adosztal/gns3-automation
REST APIを用いてGNS3上の仮想ネットワークを構築
$ curl -X POST "10.249.29.244:3080/v2/projects" -d '{"name": "test"}’
応答(抜粋)
{ "name": "test",
"path": "/home/cgmame/GNS3/projects/f1324514-c0d5-43ba-ae97-4995d5f6abe8",
"project_id": "f1324514-c0d5-43ba-ae97-4995d5f6abe8“ }
$ curl -X POST "10.249.29.244:3080/v2/projects/f1324514-c0d5-43ba-ae97-
4995d5f6abe8/appliances/302a8ea7-ff14-4069-9df5-572c10707ed7" -d '{"x":-439, "y":-10}’
~応答抜粋~
{ "name": "AP-1",
"node_id": "997b546e-edbe-45d2-a0c7-bb36b220311f",
"status": "stopped",
"width": 150,
"x": -439,
"y": -10 }
①testプロジェクト作成
プロジェクトIDプロジェクトID
②testプロジェクト上にノード配置
ノードIDはノード間のリンク等に使用
ノードの開始状態を別途確認
9ネットワークプログラマビリティ勉強会 Rev.1
behave
システム構成
仮想環境
10ネットワークプログラマビリティ勉強会 Rev.1
AP-1
AP-2
AP-3
d
テスト内容:4パターン(19項目の試験を実施)
d
d
③リンク復旧→経路も復旧
ifconfig ethX up
AP-1
AP-2
AP-3
d
④コスト極大→SPF再計算し経路変更
コスト65000
AP-1
AP-2
AP-3
②経路断→SPF再計算し経路変更
ifconfig ethX down
AP-1
AP-2
AP-3
①全経路のコストが同一(デフォルト)
11
テストケースと具体的な実装を分けるための仕組み
◊Webの受け入れテストで、よく使われるフレームワーク
テストケース (Featureファイル)
ユーザ視点でのテスト項目を
書式ありの自然言語で記述
Scenario
Given: 事実(試験環境)
When: トリガーイベント
Then: 期待動作
実装 (Stepファイル)
Given/When/Thenの
内容をプログラム
Scenario
Given: 事実(試験環境)
When: トリガーイベント
Then: 期待動作
Featureから
Stepを実行
BDD (Behavior Driven Development) のイメージ
12ネットワークプログラマビリティ勉強会 Rev.1
BDD + Python でテスト実装し、GitLabでソース管理
テストケース
(Feature : Gherkin書式)
テスト実装
(Step : Python)
ncclientモジュール
の簡易ラッパ作成
behave
13ネットワークプログラマビリティ勉強会 Rev.1
システム構成
仮想環境
behave
14ネットワークプログラマビリティ勉強会 Rev.1
まず、継続的インテグレーションツールについて
◊アプリケーションのビルドや単体テストのオペレーションを自動化し、品質維持する
ためのツール
−Jenkins, Travis CI, Circle CI などが有名
◊メリット
−品質の維持
−作業コストの削減
−継続的な分析と改善
GitLabでは、GitLab CI/CDのジョブ機能を使うことで実現可能
◊Webインタフェース
継続インテグレーション(CI)とGitLab Runner
15ネットワークプログラマビリティ勉強会 Rev.1
GitLab CI/CD Webインタフェース
16ネットワークプログラマビリティ勉強会 Rev.1
GitLab Runner
◊GitLab CI/CDから指示されたスクリプトを実行したり、一時的にDockerコンテナを
制御してジョブを実行するプロセス
Exceutor
◊実際にジョブ(≒今回はテスト)を実行するプラットフォーム
−https://docs.gitlab.com/runner/executors/
−Dockerを利用
GitLab Runner (CI)
17ネットワークプログラマビリティ勉強会 Rev.1
システム構成
仮想環境
behave
18ネットワークプログラマビリティ勉強会 Rev.1
Gitlab Runnerの作成
◊ runnerの登録/起動
ジョブの設定(.gitlab-ci.yml)
YAMLで記述
仮想環境の構築
behaveによるテスト実行
テスト結果のHTML変換&Upload
リポジトリのトップディレクトリにコミット
Runnerの設定(config.toml)
コンテナの起動オプションを指定
docker networkのをL2にて作成
将来的にsyslogを取得するため
ーー
ーー
ーー
構築の流れ 〇runner登録イメージ
$ docker run --rm -t -i -v /srv/gitlab-runner-auto08/config:/etc/gitlab-runner
-v /var/run/docker.sock:/var/run/docker.soc 
--name gitlab-runner-auto08 gitlab/gitlab-runner register 
--non-interactive 
--executor "docker" 
--docker-image at_run:latest 
--url http://10.249.29.246 
--registration-token “xxxxxxxxxxxxxxxxxxxx" 
--description "TestAutomation08" 
--tag-list “auto08"
Settings→CI/CDの
Set up a specific Runner manually
〇runner起動イメージ
$ docker run -d --name gitlab-runner-auto08 --restart always 
-v /srv/gitlab-runner-auto08/config:/etc/gitlab-runner 
-v /var/run/docker.sock:/var/run/docker.sock 
gitlab/gitlab-runner:latest
behave
19ネットワークプログラマビリティ勉強会 Rev.1
Gitlab Runnerの作成
◊ runnerの登録/起動
ジョブの設定(.gitlab-ci.yml)
◊ YAMLで記述
− 仮想環境の構築
− behaveによるテスト実行
− テスト結果のHTML変換&Upload
◊ リポジトリのトップディレクトリにコミット
Runnerの設定(config.toml)
コンテナの起動オプションを指定
docker networkのをL2にて作成
将来的にsyslogを取得するため
ーー
ーー
ーー
構築の流れ
〇.gitlab-ci.yml設定(抜粋・加工)
job_run_test:
script:
- echo “${PWD}”
- wget http://xxx/api/files/${PARAMFILE} -O parameters.py
- cat ./parameters.py
- source ./run.sh || true
allow_failure: true
tags:
- auto08
only:
variables:
- $PARAMFILE
behave
20ネットワークプログラマビリティ勉強会 Rev.1
Gitlab Runnerの作成
◊ runnerの登録/起動
ジョブの設定(.gitlab-ci.yml)
◊ YAMLで記述
− 仮想環境の構築
− behaveによるテスト実行
− テスト結果のHTML変換&Upload
◊ リポジトリのトップディレクトリにコミット
Runnerの設定(config.toml)
◊ コンテナの起動オプションを指定
docker networkのをL2にて作成
将来的にsyslogを取得するため
ーー
ーー
ーー
構築の流れ
〇config.toml設定(抜粋・加工)
[[runners]]
name = "TestAutomation08"
url = "http://10.249.29.246"
token = “xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
executor = "docker"
[runners.custom_build_dir]
[runners.docker]
image = "at_run:latest"
allowed_images = ["at_run:latest"]
privileged = true
disable_entrypoint_overwrite = false
network_mode = "mcv"
pull_policy = "if-not-present"
behave
21ネットワークプログラマビリティ勉強会 Rev.1
Gitlab Runnerの作成
◊ runnerの登録/起動
ジョブの設定(.gitlab-ci.yml)
◊ YAMLで記述
− 仮想環境の構築
− behaveによるテスト実行
− テスト結果のHTML変換&Upload
◊ リポジトリのトップディレクトリにコミット
Runnerの設定(config.toml)
◊ コンテナの起動オプションを指定
docker networkのをL2にて作成
◊ 将来的にsyslogを取得するため
ーー
ーー
ーー
構築の流れ
docker network
behave
22ネットワークプログラマビリティ勉強会 Rev.1
前提:フラットなネットワークが必要&社内のIPリソースの制約⇒DockerのIPはDHCP
docker 1.13.1(以前に確認)では、bridgeによるdocker networkで問題なく動作
docker 18.09.5ではGWの外に出れず!
そこで、原因不明だがmacvlanを知ったので試してみたらOKになった!
https://docs.docker.com/network/macvlan/
ただ、
Docker Network 構築時にハマった箇所
〇bridgeによるdocker network構築
$ sudo docker network create 
--driver bridge 
--subnet=10.249.28.0/23 --opt "com.docker.network.bridge.name"=“docker4095" --gateway=10.249.29.246 $NAME
23ネットワークプログラマビリティ勉強会 Rev.1
前提:フラットなネットワークが必要&社内のIPリソースの制約⇒DockerのIPはDHCP
docker 1.13.1(以前に確認)では、bridgeによるdocker networkで問題なく動作
docker 18.09.5ではGWの外に出れず!
そこで、原因不明だがmacvlanを知ったので試してみたらOKになった!
−https://docs.docker.com/network/macvlan/
ただ、ホストと通信はできないためGitLab Runnerは別ホストに配置
Docker Network 構築時にハマった箇所
〇macvlanによるdocker network構築
$ docker network create -d macvlan --subnet=10.249.28.0/23 --gateway=10.249.28.1 -o parent=ens160 mcv
〇bridgeによるdocker network構築
$ sudo docker network create 
--driver bridge 
--subnet=10.249.28.0/23 --opt "com.docker.network.bridge.name"=“docker4095" --gateway=10.249.29.246 $NAME
24ネットワークプログラマビリティ勉強会 Rev.1
システム構成
docker network
仮想環境
装置IP/NAME等のparameterをPython dictionaryに
変換したスクリプトファイルを渡す
別ホスト
behave
25ネットワークプログラマビリティ勉強会 Rev.1
Thank you !
Rev.1
ネットワークプログラマビリティ勉強会
補助資料
27ネットワークプログラマビリティ勉強会 Rev.1
実行結果確認画面
28ネットワークプログラマビリティ勉強会 Rev.1
実行結果確認画面
29ネットワークプログラマビリティ勉強会 Rev.1
実行結果確認画面

More Related Content

PDF
LagopusとAzureとIPsecとDPDK
PDF
オーバーレイネットワークで実現するプライベートクラウド -OpenStack/OpenContrailを用いたプライベートクラウドの構築及び評価計画のご紹介-
PDF
OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenSta...
PPTX
サーバ脆弱性スキャナ Vuls を OpenStack 環境で使ってみた
PDF
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
PPTX
今さら聞けない人のためのDocker超入門 - KOF
DOC
Cloud founryインストール手順
PDF
OVS VXLAN Network Accelaration on OpenStack (VXLAN offload and DPDK) - OpenSt...
LagopusとAzureとIPsecとDPDK
オーバーレイネットワークで実現するプライベートクラウド -OpenStack/OpenContrailを用いたプライベートクラウドの構築及び評価計画のご紹介-
OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenSta...
サーバ脆弱性スキャナ Vuls を OpenStack 環境で使ってみた
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
今さら聞けない人のためのDocker超入門 - KOF
Cloud founryインストール手順
OVS VXLAN Network Accelaration on OpenStack (VXLAN offload and DPDK) - OpenSt...

What's hot (20)

PDF
OpenContrailのソースコードを探検しよう!
PPTX
Cloud Foundry varz
PDF
Router board勉強会vol2(配布用)
PDF
VyOSでMPLS
PDF
TripleOの光と闇
PDF
10GbE時代のネットワークI/O高速化
PPTX
さくらのクラウドでVyOS使ってみた
PDF
知っておくべきCephのIOアクセラレーション技術とその活用方法 - OpenStack最新情報セミナー 2015年9月
PDF
Router board勉強会vol2(ベンチマーク班まとめ)
PDF
DevStackで始めるCloud FoundryとBOSH
PPT
Pgcon2012 ori-20120224
PDF
サバフェスLT(元うなぎ屋)
PDF
H26第1回 沖縄オープンラボラトリ・ハンズオンセミナー:ボリューム操作編
PDF
Lagopus + DockerのDPDK接続
PDF
「さくらのクラウド」スタートアップスクリプトを作ってみよう! - concrete5を題材に -(オープンソースカンファレンス2014 Shimane)
PDF
CloudFoundry 2 on Apache CloudStack 4.2.1
PPTX
ベアメタルプロビジョニング
PDF
Node.jsv0.8からv4.xへのバージョンアップ ~大規模Push通知基盤の運用事例~
PDF
【さくらのクラウド】ローカルルータ導入ガイド
PPTX
Seastar in 歌舞伎座.tech#8「C++初心者会」
OpenContrailのソースコードを探検しよう!
Cloud Foundry varz
Router board勉強会vol2(配布用)
VyOSでMPLS
TripleOの光と闇
10GbE時代のネットワークI/O高速化
さくらのクラウドでVyOS使ってみた
知っておくべきCephのIOアクセラレーション技術とその活用方法 - OpenStack最新情報セミナー 2015年9月
Router board勉強会vol2(ベンチマーク班まとめ)
DevStackで始めるCloud FoundryとBOSH
Pgcon2012 ori-20120224
サバフェスLT(元うなぎ屋)
H26第1回 沖縄オープンラボラトリ・ハンズオンセミナー:ボリューム操作編
Lagopus + DockerのDPDK接続
「さくらのクラウド」スタートアップスクリプトを作ってみよう! - concrete5を題材に -(オープンソースカンファレンス2014 Shimane)
CloudFoundry 2 on Apache CloudStack 4.2.1
ベアメタルプロビジョニング
Node.jsv0.8からv4.xへのバージョンアップ ~大規模Push通知基盤の運用事例~
【さくらのクラウド】ローカルルータ導入ガイド
Seastar in 歌舞伎座.tech#8「C++初心者会」
Ad

Similar to GNS3上の仮想アプライアンス+GitLabRunner+BDDによるテスト自動化 (20)

PDF
今だからこそ知りたい Docker Compose/Swarm 入門
PDF
Gws 20130315 gradle_handson
PDF
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
PDF
The Next Generation for C# Developers
PDF
[DL Hacks]FPGA入門
PDF
Ansible ネットワーク自動化チュートリアル (JANOG42)
PDF
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
PPTX
Wasm blazor and wasi 2
PDF
Grailsのススメ(仮)
PDF
GCP & Gaming 〜平成最後のアップデート〜 | Google Cloud INSIDE Games & Apps
PDF
[Cloud OnAir] Google Networking Deep Dive ! その技術と設計の紹介 2018年8月9日 放送
PDF
OpenStackでも重要な役割を果たすPacemakerを知ろう!
PPTX
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
PDF
PDF
VirtualBox と Rocky Linux 8 で始める Pacemaker ~ VirtualBox でも STONITH 機能が試せる! Vi...
PDF
GoBGP活用によるSD-WANプラクティス
PDF
Building production server on docker
ODP
Building production server on docker
PDF
PostgreSQL v9.5の新機能~CustomScan/Join Interface
PDF
Node予備校 vol.1 名古屋
今だからこそ知りたい Docker Compose/Swarm 入門
Gws 20130315 gradle_handson
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
The Next Generation for C# Developers
[DL Hacks]FPGA入門
Ansible ネットワーク自動化チュートリアル (JANOG42)
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
Wasm blazor and wasi 2
Grailsのススメ(仮)
GCP & Gaming 〜平成最後のアップデート〜 | Google Cloud INSIDE Games & Apps
[Cloud OnAir] Google Networking Deep Dive ! その技術と設計の紹介 2018年8月9日 放送
OpenStackでも重要な役割を果たすPacemakerを知ろう!
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
VirtualBox と Rocky Linux 8 で始める Pacemaker ~ VirtualBox でも STONITH 機能が試せる! Vi...
GoBGP活用によるSD-WANプラクティス
Building production server on docker
Building production server on docker
PostgreSQL v9.5の新機能~CustomScan/Join Interface
Node予備校 vol.1 名古屋
Ad

GNS3上の仮想アプライアンス+GitLabRunner+BDDによるテスト自動化

Editor's Notes

  • #24: 外部からアクセス可能な必要があるので、ポートフォワーディングが必要ですが、その場合並列で扱えないので、フラットなネットワークが必要