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スクリプトのメモでした。

2013年5月19日日曜日

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

Oracle VM CLI のexpectサンプルスクリプトについてです。

Oracle VM CLIにかかわるファイルは、主に
Oracle VM Managerをインストールしたサーバの
/u01/app/oracle/ovm-manager-3/ovm_cli/ ディレクトリに配置されています。
[root@ovmm31 ~]# cd /u01/app/oracle/ovm-manager-3/ovm_cli/
[root@ovmm31 ovm_cli]# ls -l
合計 36
drwxr-xr-x 2 oracle dba      4096  1月  8 13:22 bin
drwxr-xr-x 3 oracle dba      4096  1月  8 13:22 classes
drwxr-xr-x 2 oracle dba      4096  1月  8 13:22 config
drwxr-xr-x 2 oracle dba      4096  1月  8 13:22 docs
drwxr-xr-x 3 oracle dba      4096  1月  8 13:22 expectscripts
-rw-r--r-- 1 oracle oinstall 1201  3月 24 07:50 hostkey.ser
drwxr-xr-x 2 oracle dba      4096  1月  8 13:22 lib
-rw-r--r-- 1 oracle dba      2464  1月  8 13:22 log4j.properties
drwxr-xr-x 2 oracle dba      4096  2月 18 00:52 logs

この中の、expectscripts ディレクトリには、
Oracle VM CLI のために作成された expect スクリプトが入っています。
さらに下の階層にある createdeletescripts ディレクトリには、
オブジェクト作成/削除するようなスクリプトが入っています。
[root@ovmm31 ovm_cli]# cd expectscripts/
[root@ovmm31 expectscripts]# pwd
/u01/app/oracle/ovm-manager-3/ovm_cli/expectscripts
[root@ovmm31 expectscripts]# ls -l
合計 20
-rwxr-xr-x 1 oracle dba 2900  1月  8 13:22 ackAllEvents
drwxr-xr-x 2 oracle dba 4096  1月  8 13:22 createdeletescripts
-rwxr-xr-x 1 oracle dba 1816  1月  8 13:22 eovmcli
-rwxr-xr-x 1 oracle dba 1719  1月  8 13:22 eovmclixml
-rwxr-xr-x 1 oracle dba 1568  1月  8 13:22 inventory

[root@ovmm31 expectscripts]# ls -l createdeletescripts
合計 88
-rwxr-xr-x 1 oracle dba 4318  1月  8 13:22 README ★使い方はこのファイルも参考に。
-rwxr-xr-x 1 oracle dba 9001  1月  8 13:22 commonExpectDef.cli
-rwxr-xr-x 1 oracle dba 5140  1月  8 13:22 create-fc-based-VM.cli
-rwxr-xr-x 1 oracle dba 5292  1月  8 13:22 create-iscsi-based-VM.cli
-rwxr-xr-x 1 oracle dba 6086  1月  8 13:22 create-nfs-based-VM.cli
-rwxr-xr-x 1 oracle dba 1536  1月  8 13:22 delete-fc-based-VM.cli
-rwxr-xr-x 1 oracle dba 1820  1月  8 13:22 delete-iscsi-based-VM.cli
-rwxr-xr-x 1 oracle dba 1819  1月  8 13:22 delete-nfs-based-VM.cli
-rwxr-xr-x 1 oracle dba  511  1月  8 13:22 fc-based-VM.properties
-rwxr-xr-x 1 oracle dba  611  1月  8 13:22 iscsi-based-VM.properties
-rwxr-xr-x 1 oracle dba  544  1月  8 13:22 nfs-based-VM.properties
-rwxr-xr-x 1 oracle dba  497  1月  8 13:22 runAllCreateDeleteTests.sh
-rwxr-xr-x 1 oracle dba 9385  1月  8 13:22 runCLI.py
-rwxr-xr-x 1 oracle dba 1239  1月  8 13:22 runOVMCLITest

これらのスクリプトの説明は、Oracle VM CLI のマニュアル
(Oracle VM Command Line Interface User's Guide for Release 3.2.1)
にも記載されています。

1.7. Sample Scripts
http://docs.oracle.com/cd/E40528_01/E35336/html/vmcli-script-samples.html

これらのスクリプトはサンプルとして提供されているようで、
平文のパスワードを使用します。
商用環境などでは、スクリプトをこのまま使用するのではなく、
SSH 鍵ファイルによる認証などで、セキュリティ対策も考慮する必要があります。

ただ、あまり expectスクリプトを見る機会がないので、
とても勉強になります。


親切なことに、Oracle VM CLI のマニュアルには
expectスクリプトの書き方まで書いてあります。

1.6. Using Expect Scripts
http://docs.oracle.com/cd/E40528_01/E35336/html/vmcli-script.html

以上、Oracle VM CLIのサンプルスクリプトについてでした。

2013年5月1日水曜日

Oracle VM CLI の自動化はexpectで。

Oracle VM CLI で処理を自動化するときは、
expect コマンドを使用します。

expect は、コマンド実行を自動化することができるツールで、
Linuxでは標準的に使用されます。
RPMは、Oracle Linux のインストールDVD(もしくはISOイメージ)に同梱されています。

Oracle VM のマニュアルでも、expectによるスクリプト化を説明しています。
Oracle VM
Command Line Interface User's Guide for Release 3.2.1
1.6. Using Expect Scripts
http://docs.oracle.com/cd/E35328_01/E35336/html/vmcli-script.html

今回は、とりあえず expect をインストールします。
導入先のOSは、Oracle Linux 5.9 です。
[root@ovmm31 ~]# cat /etc/oracle-release
Oracle Linux Server release 5.9

まず、OracleLinuxのインストールDVDをマウントしておきます。
[root@ovmm31 ~]# mount /dev/cdrom /media/
mount: ブロックデバイス /dev/cdrom は書き込み禁止です、読込み専用でマウントします

Yumリポジトリの登録ファイルを作成し、
YumコマンドがマウントしたDVDからRPMをインストールできるようにします。
既にファイルがある場合は、一時的にリネームして退避しておきます。
[root@ovmm31 ~]# cd /etc/yum.repos.d/
[root@ovmm31 yum.repos.d]# mv public-yum-el5.repo public-yum-el5.repo_bk
[root@ovmm31 yum.repos.d]# vi dvd.repo

(記載例)
[OEL59-dvd-Server]
name=OEL59-dvd-Server
baseurl=file:///media/Server
gpgcheck=0
enabled=1

Yumコマンドで expect をインストールします。
[root@ovmm31 ~]# yum install expect
Loaded plugins: rhnplugin, security
This system is not registered with ULN.
You can use up2date --register to register.
ULN support will be disabled.
OEL59-dvd-Server                                                    | 1.1 kB     00:00
OEL59-dvd-Server/primary                                            | 1.5 MB     00:00
OEL59-dvd-Server                                                                 3344/3344
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package expect.i386 0:5.43.0-8.el5 set to be updated
--> Processing Dependency: libtcl8.4.so for package: expect
---> Package expect.x86_64 0:5.43.0-8.el5 set to be updated
--> Running transaction check
---> Package tcl.i386 0:8.4.13-6.el5 set to be updated
--> Finished Dependency Resolution
Dependencies Resolved
==================================================================
 Package          Arch             Version                Repository                  Size
==================================================================
Installing:
 expect           i386             5.43.0-8.el5           OEL59-dvd-Server           158 k
 expect           x86_64           5.43.0-8.el5           OEL59-dvd-Server           161 k
Installing for dependencies:
 tcl              i386             8.4.13-6.el5           OEL59-dvd-Server           1.3 M
Transaction Summary
==================================================================
Install       3 Package(s)
Upgrade       0 Package(s)
Total download size: 1.6 M
Is this ok [y/N]: y
Downloading Packages:
------------------------------------------------------------------
Total                                                       27 MB/s | 1.6 MB     00:00
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : expect                                                              1/3
  Installing     : tcl                                                                 2/3
  Installing     : expect                                                              3/3
Installed:
  expect.i386 0:5.43.0-8.el5                  expect.x86_64 0:5.43.0-8.el5
Dependency Installed:
  tcl.i386 0:8.4.13-6.el5
Complete!
[root@ovmm31 ~]#

インストールされました。
root@ovmm31 ~]# expect -v
expect version 5.43.0

以上、とりあえず expect をインストールしました。つづく…