🦁
AristaのeAPIを試してみたいが実物がないのでcEOSでやってみる
はじめに
世の中いろんなものがコンテナ化されて便利になりました。AristaのスイッチもcEOSというコンテナ版があるようです。
以下の二つのわかりやすいサイトをみながらAPIが使えるところまで試してみました。
コンテナを起動
ほとんど上のサイトのとおりなんですが、流れをまとめてみます。
Aristaのサイトからコンテナのイメージを入手
Arista公式サイトに上のLogin
からサインナップしたらすぐに落とせます。
今回は、最新っぽい4.25.1F
をダウンロード
イメージをdockerにインポート
$ docker import cEOS-lab-4.25.1F.tar ceos:4.25.1F
sha256:cfc9238775466cd246a24a213852cb235d2c36256c81e9969f89d431a49b4649
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ceos 4.25.1F cfc923877546 6 minutes ago 1.69GB
起動
docker create \
--name=ceos6 \
-p 8080:80 \
--privileged \
-e INTFTYPE=eth \
-e ETBA=1 \
-e SKIP_ZEROTOUCH_BARRIER_IN_SYSDBINIT=1 \
-e CEOS=1 -e EOS_PLATFORM=ceoslab \
-e container=docker \
-i -t ceos:4.25.1F /sbin/init \
systemd.setenv=INTFTYPE=eth \
systemd.setenv=ETBA=1 \
systemd.setenv=SKIP_ZEROTOUCH_BARRIER_IN_SYSDBINIT=1 \
systemd.setenv=CEOS=1 \
systemd.setenv=EOS_PLATFORM=ceoslab \
systemd.setenv=container=docker
参考サイトそのままですが、ホストからコンテナ(マネージメントポート)にAPIアクセスするので -p 8080:80
を追加
$ docker start ceos6
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3a61f13b3761 ceos:4.25.1F "/sbin/init systemd.…" 18 seconds ago Up 1 second 0.0.0.0:8080->80/tcp ceos6
ポートマッピングできています。
$ docker port ceos6 80
0.0.0.0:8080
cEOSのCLIを使う
コンテナに接続する時に Cli
を渡すと、あとはEOSの世界
$ docker exec -i -t ceos6 Cli
localhost>en
localhost#conf t
localhost(config)#show run
! Command: show running-config
! device: localhost (cEOSLab, EOS-4.25.1F-20001546.4251F (engineering build))
!
transceiver qsfp default-mode 4x10G
!
service routing protocols model ribd
!
agent Bfd shutdown
agent PowerManager shutdown
agent LedPolicy shutdown
agent Thermostat shutdown
agent PowerFuse shutdown
agent StandbyCpld shutdown
agent LicenseManager shutdown
!
spanning-tree mode mstp
!
no aaa root
!
no ip routing
!
management api http-commands
protocol http
no shutdown
!
end
APIの設定
マネジメントポートでHTTPでAPIアクセスできるようにしていきます[1]
デフォルトだとマネジメントはこんな感じ
localhost#show management api http-commands
Enabled: No
HTTPS server: enabled, set to use port 443
HTTP server: shutdown, set to use port 80
Local HTTP server: shutdown, no authentication, set to use port 8080
Unix Socket server: shutdown, no authentication
VRFs: None
Hits: 0
Last hit: never
Bytes in: 0
Bytes out: 0
Requests: 0
Commands: 0
Duration: 0.000 seconds
SSL Profile: none
FIPS Mode: No
QoS DSCP: 0
Log Level: none
CSP Frame Ancestor: None
TLS Protocols: 1.0 1.1 1.2
設定をいれる
localhost#conf t
localhost(config)#management api http-commands
localhost(config-mgmt-api-http-cmds)#no protocol http
localhost(config-mgmt-api-http-cmds)#protocol http
localhost(config-mgmt-api-http-cmds)#no shutdown
localhost(config-mgmt-api-http-cmds)#wr mem
Copy completed successfully.
すると... 動いている感
localhost(config)#show management api http-commands
Enabled: Yes
HTTPS server: running, set to use port 443
HTTP server: running, set to use port 80
Local HTTP server: shutdown, no authentication, set to use port 8080
Unix Socket server: shutdown, no authentication
VRFs: default
Hits: 0
Last hit: never
Bytes in: 0
Bytes out: 0
Requests: 0
Commands: 0
Duration: 0.000 seconds
SSL Profile: none
FIPS Mode: No
QoS DSCP: 0
Log Level: none
CSP Frame Ancestor: None
TLS Protocols: 1.0 1.1 1.2
ここでブラウザでアクセス
ログインにユーザが必要みたいです
ユーザを作る
localhost#conf t
localhost(config)#username me secret 0 imyme
show run
でみると作られてることがわかります
GUI
あとは、GUIにログインしていろいろできます。
タブが二つあって、Simple Request
はEOSのCLIそのままをJSONリクエストにできる感じ。Script Editor
はJavaScript SDKっぽいのでかける感じです。
GitHubには go
とかpython
とかruby
のSDKっぽいのもあるので、好きな言語で自動化できそうです。
-
参考サイトによると、HTTPSだと証明書がめんどくさいらしく ↩︎
Discussion