🦁

AristaのeAPIを試してみたいが実物がないのでcEOSでやってみる

2021/03/10に公開

はじめに

世の中いろんなものがコンテナ化されて便利になりました。AristaのスイッチもcEOSというコンテナ版があるようです。

以下の二つのわかりやすいサイトをみながらAPIが使えるところまで試してみました。

https://changineer.info/network/arista_eos/arista_eos_ceos_basic.html
https://kakkotetsu.hatenablog.com/entry/2017/05/13/213612

コンテナを起動

ほとんど上のサイトのとおりなんですが、流れをまとめてみます。

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っぽいのもあるので、好きな言語で自動化できそうです。

脚注
  1. 参考サイトによると、HTTPSだと証明書がめんどくさいらしく ↩︎

Discussion