PDUの制御部分を書いてみた。

動作に必要なパッケージ:expect

動作確認したVer

Installed Packages
Name : expect
Arch : i386
Version : 5.43.0
Release : 5.1
Size : 269 k
Repo : installed
Summary : プログラムスクリプト相互作用とテストユーティリティ
URL : http://expect.nist.gov/
License : Public Domain
Description: Expect は、telnetftp、passwd、fsck、rlogin、tip などの対話式
: アプリケーションの自動化とテストを行うための tcl アプリケーションです。
: expectを使用すると、スクリプトによる別プログラムの制御と対話が簡単に
: なります。
:
: このパッケージには expect 及びこれを使用するスクリプトが含まれています。

動作に関しての情報:PDUにTelnetの設定がされていること。

対象製品
APC製ラックマウントPDU AP7932J

PDU側のバージョン等

American Power Conversion Network Management Card AOS v3.5.8
(c) Copyright 2007 All Rights Reserved Rack PDU APP v3.5.7

使い方
pductl PDUのIP ユーザー名 パスワード 制御したいoutlet番号 操作

操作
1:ON
2:OFF
3:REBOOT

実行例 

  • ip:192.168.170.101のPDUを制御
  • ユーザ:apc
  • password:apc
  • outletNo:4
  • SW:OFF

./pductl 192.168.170.101 apc apc 4 2


免責

動作に関しての保証は一切行いません。
このスクリプトを実行して、いかなる損害を被っても私は保証いたしません。
すべて実行者の責任で行ってください。
PDUなんて使っているんだから、テスト環境でやってからにしてくださいね。



著作権
著作権は放棄しません。
個人利用に関しては、ご自由にどうぞ。(連絡もらえると励みになります)
営利目的の利用に関しては、コメント欄でご連絡ください。

Blog等の掲載、リンクはトラックバックください。

コード
ごめんなさい、いろいろと内部情報が載っていたので、修正中 修正終わりました。 マイナーVerUP+0.1

1.0 -> 1.1(ログイン処理時に環境依存コードにip直で記入されていた点を修正しました。)

/usr/bin/pductl にでも設置して、権限を設定しておけば一般ユーザでも使えます。

#!/usr/bin/expect --

###########################################
#pductl ver 1.1
#Copyright (C) 2009 earthlab. All rights reserved.
#
##########################################

set force_conservative 0 ;# set to 1 to force conservative mode even if
;# script wasn't run conservatively originally
if {$force_conservative} {
set send_slow {1 .1}
proc send {ignore arg} {
sleep .1
exp_send -s -- $arg
}
}


set timeout -1
puts $argc


set host [lindex $argv 0]
set user [lindex $argv 1]
set passwd [lindex $argv 2]
set targetou [lindex $argv 3]
set ousw [lindex $argv 4]


set timeout -1
spawn $env(SHELL)
match_max 100000

send -- "telnet $host\r"
expect -exact "
\rUser Name : "

send -- "$user\r"
expect -exact "
\rPassword : "
send -- "$passwd\r"
expect -exact "
- Main Menu, - Refresh, - Event Log\r
> "
send -- "1\r"
expect -exact "

\r------- Device Manager --------------------------------------------------------\r
\r
1- Bank Management\r
2- Outlet Management\r
3- Power Supply Status\r
\r
- Back, - Refresh, - Event Log\r
> "
send -- "2\r"
expect -exact "
\r------- Outlet Management -----------------------------------------------------\r
"
send -- "1\r"

expect -exact "
\r------- Outlet Control/Configuration ------------------------------------------\r
"
send -- "\r"

#control target outlet NUMBER
send -- "$targetou\r"

expect -exact "
\r-------"

send -- "1\r"

expect -exact "
\r------- Control Outlet --------------------------------------------------------\r
"

# on 1
# off 2
# reboot 3

send -- "$ousw\r"

expect -exact "YES"

send -- "YES\r"

expect -exact "continue"
send -- "\r"

expect -exact "-------"
send -- "
xpect -exact "-------"
send -- "
xpect -exact "-------"
send -- "^["
expect -exact "-------"
send -- "^["
expect -exact "-------"
send -- "^["
expect -exact "-------"
send -- "^["


send -- "4\r"
expect eof