2013年5月26日日曜日

Oracle VM CLI の自動化はexpectで。(その3)

今回は、Expectスクリプトの書き方についてです。

Oracle VM CLIのマニュアル
Oracle VM Command Line Interface User's Guide for Release 3.2.1


1.6.2. Writing Expect Scripts
http://docs.oracle.com/cd/E40528_01/E35336/html/vmcli-script.html#vmcli-script-write

にあるサンプルスクリプト(下記)についてのメモを残しておこうと思います。

サンプルスクリプト「list_server.exp」
#!/usr/bin/expect

## Access CLI
set loginUser "admin"
set loginPassword "password"
#★↑OVMMのadminユーザのパスワード。OSユーザではない。
#  Expectではsetコマンドで変数に代入できる。
set mgmtServerAddress manager_host
#★ここは、OVMMのサーバのアドレスを指定している。
# IPアドレス or ホスト名を指定する。OVMM自身で実行するなら「localhost」でもOK。

## Expect Parameters
set timeout 20
set successMsg "Status: Success"
set failureMsg "Status: Failure"

spawn ssh -l $loginUser $mgmtServerAddress -p 10000
#★ここで、SSHで10000番ポートに接続。(OracleVM CLIにアクセス)
expect_after eof {exit 0}
#★EOF(ファイルの終わり)を検知したら、正常終了(exit 0)

set timeout 10

##interact with SSH
##expect "yes/no" {send "yes\r"}
expect "password:" {send "$loginPassword\r"}
puts "\n## Starting Generated OVMCLI Script... ##\n"
set timeout 600
#★途中で「yes(Enterキー)」したい時は「send "yes\r"」とする。
#  [\r]は改行(Enterキーを押すかわりになる)。

expect "OVM> "
send "set OutputMode=Verbose\r"
expect $successMsg {} \
    timeout { puts "\n\nTest Failure: \n\r"; exit}
#★OracleVM CLIはプロンプトが「OVM> 」なので、
#  "OVM> " を検知した時に コマンドを実行(send ~)するようにしている。
#
#★「timeout{}」は、expect想定した結果がなくタイムアウトしたときに実行される。
#  処理時間がかかることが想定される場合は、
#  「set timeout 600」(600秒)のように、タイムアウトを長く変更できる。
#  ここでは「puts」で文字列を表示するようにしている。
#  「\n」を入れることで、空行を1行入れられる。(\n\nなら2行。)

expect "OVM> "
  send  "list Server\r"
  expect $successMsg {} \
   timeout { puts "\n\nScript Failure: \n\r"; exit}

ちなみに、マニュアルでは
# expect /myscripts/list_server.exp
と、expectコマンドの引数としてスクリプトファイル指定して実行していますが、
Expectでは行頭のシェバン(shebang。「#!」)表記にも対応しています。
1行目にexpectコマンドのフルパスを「#!/usr/bin/expect」と記載してあるので
下記のようにスクリプトを実行することもできます。
[root@ovmm31 cli]# chmod +x list_server.exp
[root@ovmm31 cli]# ./list_server.exp
spawn ssh -l admin localhost -p 10000
admin@localhost's password:
## Starting Generated OVMCLI Script... ##

OVM> set OutputMode=Verbose
Command: set OutputMode=Verbose
Status: Success
Time: 2013-05-26 22:48:39,995 JST
OVM> list Server
Command: list Server
Status: Success
Time: 2013-05-26 22:48:40,029 JST
Data:
  id:00:04:fb:00:00:06:00:00:a5:65:18:eb:94:97:96:f8  name:ovs321-2
  id:44:45:4c:4c:58:00:10:46:80:42:ca:c0:4f:51:42:58  name:ovs2
  id:00:04:fb:00:00:06:00:00:f6:c4:d0:45:9c:0d:08:5f  name:ovs321-3
  id:00:04:fb:00:00:06:00:00:55:b6:f6:fe:47:e6:a8:c9  name:ovs321-4
  id:00:04:fb:00:00:06:00:00:4c:99:5b:54:66:7d:00:05  name:ovs321-1

サンプルスクリプトでは、SSHでOracleVM CLIに自動接続して下記のコマンドを実行します。
OVM> set OutputMode=Verbose
OVM> list Server

以上、Expectスクリプトのメモでした。

0 件のコメント:

コメントを投稿