(verified 2010 May. / EOS 4.3.0 / DCS-7120T-4S 03.01)
Extension
Arista には機能拡張のために Extension 機構が用意されている。具体 的には show extensions あるいは extension コマンドによってコントロールする。ここでは非常にシンプルな hello コマンドをEOS CLI に追加する Hello World extension を例に Extension の管理操作について説明する。
例に用いる Hello World extension は Extension のために用意されたフォーマットである SWIX (software image extension) フォーマット、すなわち hello.swix ファイルとして提供されいてる。SWIX フォーマットについては SWIX format 、EOS CLI コマンドの作り方については コマンドの追加 を参照。
Extension の管理
例として利用した Hello World extension は Resources に置いてあるので利用されたい。
ファイル名:hello.swix
MD5 checksum:8d0c2f040f741566925842abe768eee6
Extension のライフサイクルは以下のような順をたどる。
- copy コマンドによる設置
- extension コマンドによるインストール
- no extension コマンドによるアンインストール
- delete コマンドによる削除
以下に順を追って説明する。
実体
なお、Extension ファイルの実体は /mnt/flash/.extensions/ 以下にある。以下のように bash からアクセスして確認することもできる。
bash-3.2# ls -l .extensions/
total 4
-rwxrwx--- 1 root eosadmin 3246 May 13 19:59 hello.swix
bash-3.2#
以下、EOS CLI による操作と bash による操作が混在している。特に記載がない場合はコマンドプロンプトによってそのどちらかを判定されたい。(つまり localhost# であれば EOS CLI、bash-3.2# であれば bashである。)
なお、EOS CLI はすべて enable モードでテストしているが、show extensions コマンドなどは非特権モードでも動作する。
Extension の設置
SHOW EXTENSIONS コマンド
show extensions コマンドによって Extensions の設置あるいはインストール状態が確認できる。まず初期状態(全く Extensions が導入されていない状態)では以下のように表示される。
localhost#show extensions
No extensions are available
localhost#show installed-extensions
No extensions are installed
localhost#
show extensions コマンドは現在 /mnt/flash/.extensions ディレクトリ以下に設置されている Extension 群の状態を表示する。
show installed-extensions コマンドはシステムにインストールされている Extension を表示する。もちろん初期状態では空である。
COPY コマンド
まずHello World extension を extension ディレクトリにコピーする。外部からファイルをコピーする方法は幾つかあるが、今回は USB メモリ経由で行った。下記のように EOSのCOPYコマンドで extension: ディレクトリ(最後のコロンが重要)にコピーする。
localhost#copy usb1:hello.swix extension:
localhost#
この状態で、show extensionsコマンドで SWIX ファイルの存在を確認することができる。
localhost#show extensions
Name Version/Release Status RPMs
------------------------------------------ ------------------------- ------ ----
hello.swix 1.0/0 A, NI 1
A: available | NA: not available | I: installed | NI: not installed | F: forced
localhost#
上記 Statusの項目がA(available)とNI(not installed)である点に注目。また、show extensions detail コマンドで SWIX パッケージのより詳細な情報が得られる。
localhost#show extensions detail
Name: hello.swix
Version: 1.0
Release: 0
Presence: available
Status: not installed
Vendor:
Summary: Hello is a minimum example of EOS command
RPMS: hello-1.0-0.noarch.rpm 1.0/0
Total size: 1255 bytes
Description:
Hello is a minimum example of EOS command.
It will be installed as HogeCli.py file under CliPlugin directory.
localhost#
実体
この状態で /mnt/flash/.extensions/ ディレクトリに hello.swi ファイルがコピーされたことが確認できる。
bash-3.2# ls -l .extensions/
total 4
-rwxrwx--- 1 root eosadmin 3246 May 13 19:59 hello.swix
bash-3.2#
インストール
EXTENSION コマンド
EOS の extension コマンドによって設置された SWIX ファイルをシステムにインストールする。
localhost#extension hello.swix
localhost#
インストール後は show extensions コマンドによって状態確認を行う。
localhost#show extensions
Name Version/Release Status RPMs
------------------------------------------ ------------------------- ------ ----
hello.swix 1.0/0 A, I 1
A: available | NA: not available | I: installed | NI: not installed | F: forced
localhost#
ここで Status が NI (not installed) から I (installed) に変わっていることがわかる。また、show installed-extensions コマンドの結果も以下のようになる。
localhost#show installed-extensions
hello.swix
localhost#
実体
Hello World extension は /usr/lib/python2.5/site-packages/CliPlugin 以下に Python ファイルをインストールする。
bash-3.2# pwd
/usr/lib/python2.5/site-packages/CliPlugin
bash-3.2# ls -l Hello*
-rw-r--r-- 1 root root 321 May 13 2010 HelloCli.py
-rw-r--r-- 1 root root 467 May 13 2010 HelloCli.pyc
-rw-r--r-- 1 root root 467 May 13 2010 HelloCli.pyo
bash-3.2#
実行確認
Hello World extension は hello コマンドを追加する。試しに実行してみると良い。ただし Extension によって追加されたコマンドは、それ以後に起動された EOS CLI でしか有効にならない。つまりインストールより後に login したセッションでだけ有効である。
localhost#hello
World.
localhost#
恒久化
これだけでは再起動によって消えてしまう。EOS はシステム起動時に Flashメモリの中にある SWI (Software Image) ファイルを元にメモリ上にファイルシステムを展開する。しかし上に示した SWIX ファイルによる Extension のインストールはメモリ上に展開されたファイルシステムに対して一時的に行われただけで、Flashメモリの中にある EOS のイメージファイルは更新されない。つまり再起動によって Flash メモリからファイルシステムがロードされ、再展開された時、そこには何も残っていない。
ただし Extensions ディレクトリ /mnt/flash/.extensions 以下の内容はそのまま残っている。そのため Extension の恒久化は再起動時に自動的に Extensions ディレクトリから再インストールを行うことによって実現する。
具体的な操作は以下のように COPY コマンドによって行う。
localhost#copy installed-extensions boot-extensions
localhost#
その効果は show boot-extensions コマンドによって確認できる。
localhost#show boot-extensions
hello.swix
localhost#
実体
boot-extensions 情報の実体は /mnt/flash/boot-extensions ファイルである。bash からアクセスしてその中身を確認することが出来る。
bash-3.2# cat boot-extensions
hello.swix
bash-3.2#
アンインストール
NO EXTENSIONS コマンド
no extensions コマンドによってインストールした extension をアンインストールすることができる。
localhost#no extension
localhost#
この状態で show extensions コマンドによって状態確認を行うと以下のようになる。
localhost#show extensions
Name Version/Release Status RPMs
------------------------------------------ ------------------------- ------ ----
hello.swix 1.0/0 A, NI 1
A: available | NA: not available | I: installed | NI: not installed | F: forced
localhost#
注目すべきは Status が I (installed) から NI (not installed) に変化したことである。この状態でも A (available) となっているが、これは hello.swix ファイルがまだ Extensions ディレクトリ以下に設置されている状態であることを示している。逆に show installed-extensions コマンドによって確認すると、現在インストールされている Extension はない、と表示されるだろう。
localhost#show installed-extensions
No extensions are installed
localhost#
恒久化の後始末
もしboot-extensionsファイルによる恒久化を行っていた場合は忘れずにそれを解除しておく。
localhost#copy installed-extensions boot-extensions
localhost#
この操作によって /mnt/flash/boot-extensions ファイルの中身は空となる。(もちろん何か他にインストールされている Extension があればその一覧がファイルの中身となる。)
削除
DELETE コマンド
copyコマンドと対をなすのが delete コマンドであり、これによって Extensions ディレクトリ(その実体は /mnt/flash/.extensions/)以下に残っている SWIX ファイルを削除する。
localhost#delete extension:hello.swix
localhost#
実行後に Extension の状態確認をすると以下のように表示されるだろう。
localhost#show extensions
No extensions are available
localhost#
実体である .extensions ディレクトリはこの時点で空になっている。
bash-3.2# ls -l
/mnt/flash/.extensions/
total 0
bash-3.2#
なおアンインストールしていない Extension を DELETE することもできる。その場合 show extensions コマンドは以下のように Status を NA (not available) だが I (installed) として表示する。
localhost#show extensions
Name Version/Release Status RPMs
------------------------------------------ ------------------------- ------ ----
hello.swix 1.0/0 NA, I 1
A: available | NA: not available | I: installed | NI: not installed | F: forced
localhost#
恒久化の後始末
もし boot-extensions ファイルによる恒久化を行っており、その対処を忘れて削除した場合は、結果として次回再起動時にその不整合が以下のような表示として現れるので注意されたい。
localhost#show extensions
Name Version/Release Status RPMs
------------------------------------------ ------------------------- ------ ----
hello.swix Error: extension is not available
A: available | NA: not available | I: installed | NI: not installed | F: forced
localhost#
つまり再起動時にこの extension があるはずなのだが、無い、というエラー報告である。その原因は boot-extensions 情報に hello.swix が残っているためである。つまりこの状態で、show boot-extensions コマンドは以下のように hello.swix を表示する。
localhost#show boot-extensions
hello.swix
localhost#
(私感だが、この不整合を起こさないようにするために、delete した Extension に関しては boot-extensions 情報から外してしまう方が良いように思える。)