2013年5月26日日曜日

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

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

前回はこちら。

Oracle VM CLIのマニュアルのにあるサンプルスクリプト(list_server.exp)
についてのメモを残しておこうと思います。

Oracle VM
コマンド・ライン・インタフェース・ユーザーズ・ガイド リリース3.2.1
1.6 Expectスクリプトの使用
https://docs.oracle.com/cd/E40528_01/b72807/vmcli-script.html

サンプルスクリプト「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 件のコメント:

コメントを投稿