More Related Content
Similar to GNS3上の仮想アプライアンス+GitLabRunner+BDDによるテスト自動化 (20)
GNS3上の仮想アプライアンス+GitLabRunner+BDDによるテスト自動化
- 1. ©APRESIA Systems all right reserved.
Rev.1
ネットワークプログラマビリティ勉強会
GNS3上の仮想アプライアンス+GitLabRunner+BDDによる
テスト自動化
ネットワークプログラマビリティ勉強会
第17回 ショートプログラム
次世代技術本部 技術開発部
次世代ソフトウェアグループ
坪田 繁
2019.6
- 2. 2ネットワークプログラマビリティ勉強会 Rev.1
JANOG41にて、実機上のL2リング設定 and 障害切替試験のテスト自動化をご説明
実機確保して配線してファーム更新大変
そもそも機材ないと話になんないし
そろそろ仮想化環境もほしいな・・・。
いうことで
仮想アプライアンスを試作!
現状NetConfで、正式にはCLIを作成予定
GNS3を触ってみて(初心者)、仮想ネットワーク(OSPFv2)を自動構築(設定)
正常時、障害時の経路切替確認を自動テストしてみましたっ!
そのときの知見やハマりポイントなどを、7分間でできる限り共有できればっ!
モチベーション
- 3. 3ネットワークプログラマビリティ勉強会 Rev.1
JANOG41にて、実機上のL2リング設定 and 障害切替試験のテスト自動化をご説明
実機確保は時期によっては結構大変
機材なくても試験したいっ!
いうことで
仮想アプライアンスを試作!
現状NetConfで、正式にはCLIを作成予定
GNS3を触ってみて(初心者)、仮想ネットワーク(OSPFv2)を自動構築(設定)
正常時、障害時の経路切替確認を自動テストしてみましたっ!
そのときの知見やハマりポイントなどを、7分間でできる限り共有できればっ!
モチベーション
- 8. 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はノード間のリンク等に使用
ノードの開始状態を別途確認
- 18. 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. 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. 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. 21ネットワークプログラマビリティ勉強会 Rev.1
Gitlab Runnerの作成
◊ runnerの登録/起動
ジョブの設定(.gitlab-ci.yml)
◊ YAMLで記述
− 仮想環境の構築
− behaveによるテスト実行
− テスト結果のHTML変換&Upload
◊ リポジトリのトップディレクトリにコミット
Runnerの設定(config.toml)
◊ コンテナの起動オプションを指定
docker networkのをL2にて作成
◊ 将来的にsyslogを取得するため
ーー
ーー
ーー
構築の流れ
docker network
behave
- 23. 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
Editor's Notes
- 外部からアクセス可能な必要があるので、ポートフォワーディングが必要ですが、その場合並列で扱えないので、フラットなネットワークが必要