VMware ESXi 5.0 + vMA 5.0で電源管理 (4) – shutdownHostViaSOAPAPICall.pl 5

Facebooktwittergoogle_plusmail

vSphere Management Assistant 5からサーバーの物理シリアルポート経由でUPSの認識ができたので、次は電源喪失時のシャットダウンスクリプトshutdownHostViaSOAPAPICall.plの導入です

shutdownHostViaSOAPAPICall.pl for ESX(i) licensed and free version
http://communities.vmware.com/docs/DOC-11623

これはsshでshutdown命令を送るのではなくVI API(SOAP)を経由して外部PCやゲストOSからESXiにshutdown命令を送るもののようでPerlで作られたスクリプトです


まず、仮想OSがホストからのシャットダウン命令によってシャットダウン開始になるように設定します
[構成]-[ソフトウェア]-[仮想マシン起動/シャットダウン]-[プロパティ]
から[ゲスト シャットダウン]を選択します

  1. shutdownHostViaSOAPAPICall.plのDownload
  2. wgetでshutdownHostViaSOAPAPICall.plをダウンロードします

    vi-admin@vma5:~> wget http://communities.vmware.com/servlet/JiveServlet/download/11623-3-32693/shutdownHostViaSOAPAPICall.pl
    –2012-04-24 20:31:20– http://communities.vmware.com/servlet/JiveServlet/download/11623-3-32693/shutdownHostViaSOAPAPICall.pl
    Resolving communities.vmware.com… 118.155.230.73, 118.155.230.64
    Connecting to communities.vmware.com|118.155.230.73|:80… connected.
    HTTP request sent, awaiting response… 200 OK
    Length: 5248 (5.1K) [application/octet-stream]
    Saving to: shutdownHostViaSOAPAPICall.pl'

    100%[======================================>] 5,248 --.-K/s in 0.01s

    2012-04-24 20:31:20 (370 KB/s) - shutdownHostViaSOAPAPICall.pl’ saved [5248/5248]

    vi-admin@vma5:~> ls -l
    total 20
    -rw-r–r– 1 root root 1922 2012-04-24 20:13 apctest.output
    drwxr-xr-x 2 vi-admin root 4096 2012-03-06 23:06 bin
    -rw——- 1 vi-admin root 5248 2012-04-21 11:33 shutdownHostViaSOAPAPICall.pl
    drwx—— 2 vi-admin root 4096 2012-04-24 17:52 work

  3. shutdownHostViaSOAPAPICall.plの編集
  4. shutdownHostViaSOAPAPICall.plで2カ所編集を行います。my $host_usernameとmy $host_passwordにシャットダウンしたいESXiサーバのユーザー名とパスワードを設定します

    vi-admin@vma5:~> vi shutdownHostViaSOAPAPICall.pl

    #!/usr/bin/perl -w
    # William Lam
    # 12/10/2009
    # http://engineering.ucsb.edu/~duonglt/vmware/
    # http://communities.vmware.com/docs/DOC-9852

    use strict;
    use warnings;
    use Term::ANSIColor;
    use LWP::UserAgent;
    use HTTP::Request;
    use HTTP::Cookies;
    use Data::Dumper;

    # Please fill out the
    # username and password
    # for your ESX(i) host
    my $host_username = ‘fillmein’;
    my $host_password = ‘fillmein’;

    #### DO NOT EDIT PAST HERE ####
    (snip)

  5. shutdownHostViaSOAPAPICall.pl用ホストファイルの作成
  6. シャットダウンするホストの一覧を記載したリストを作成します。ホストリストはホスト名かIPで指定して複数台の記述ができます

    vi-admin@vma5:~> vi hostlist

    vma5.rootlinks.net

  7. /etc/apcupsd/apccontrolの編集
  8. 電源喪失時に一定時間経過してシャットダウン処理が開始される時に実行されるスクリプトapccontrolからshutdownHostViaSOAPAPICall.plを呼び出すように書き換えます

    vi-admin@vma5:~> cd /etc/apcupsd/
    vi-admin@vma5:/etc/apcupsd> sudo cp apccontrol apccontrol.org
    vi-admin’s password:
    vi-admin@vma5:/etc/apcupsd> ls
    apccontrol apcupsd.conf commfailure hid-ups offbattery
    apccontrol.org changeme commok make-hiddev onbattery

    vi-admin@vma5:/etc/apcupsd> sudo vi apccontrol
    # These variables are needed for set up the autoconf other variables.
    #
    prefix=/usr
    exec_prefix=/usr

    APCPID=/var/run/apcupsd.pid
    APCUPSD=/sbin/apcupsd
    SHUTDOWN=/sbin/shutdown
    SCRIPTSHELL=/usr/bin/sh
    SCRIPTDIR=/etc/apcupsd
    WALL=wall

    ESXiShutdown=/home/vi-admin/shutdownHostViaSOAPAPICall.pl
    ESXiHost=/home/vi-admin/hostlist

    (snip)
    doshutdown)
    echo “Esxi Host initiated Shutdown Sequence” | ${WALL}
    ${ESXiShutdown} ${ESXiHost}
    echo “UPS ${2} initiated Shutdown Sequence” | ${WALL}
    ${SHUTDOWN} -h now “apcupsd UPS ${2} initiated shutdown”
    ;;

取り敢えずこれで上手くいくのではないでしょうか…. 🙂 動作試験は週末にでもやってみます

5 thoughts on “VMware ESXi 5.0 + vMA 5.0で電源管理 (4) – shutdownHostViaSOAPAPICall.pl

  1. Reply kashiwa 5月 15,2012 17:00

    ルートリンクス様

    始めまして、柏と申します。
    当方も貴殿同様、ESXi5とvMAを使用してUPSの電源管理をしておりますので、大変参考になります。
    記載されているのとほぼ同等の方法で、ホストOSをシャットダウン仕様と思っておりますが、認証エラーになってしまいシャットダウンスクリプトが動作しない状況です。
    もし、何かお分かりになることがございましたら、ご教示いただきたくよろしくお願いいたします。
    下記に、当方の環境を記載します。

    サーバー:VMwareESXi5.0Update1
    vMA  :vMA5.0Update1
    ゲストOS:RedHat、WindowsServer2008など

    やり方は、同じで、UPSの状態を監視(ネットワークにて)を行い、停電が発生したら、vMAよりホストOSをシャットダウンします。
    ホストOSをシャットダウンするスクリプトは、perlで記述し管理ソフトから呼び出しを行います。
    ESXi5.0+vMA5.0の時は、上手く言っていたのですが、Update1にしてから、認証のエラー
    500 Can’t connect to http://www.???.co.jp (certificate verify failed)
    となってしまいます。

    ESXiにデフォルトで搭載されているSSL証明書は一意であるので、エラーになってもしょうがないと思い、GeoTrust社よりSSL証明書を購入しESXi5.0内にインストールをし再試行を実施しましたが、結果は一緒でした。
    vMA内のルート証明書が合っていないのかと思いますが、更新の仕方がわからないのです。(この辺がわかると助かります)

    ちなみに、ESXi5.0Update1にSSL証明書をインストールできたかどうかは、別なPCからアクセスしてSSL証明書を表示して正しくなっているので、大丈夫だと思います。

    幾つかのHPには同じようなエラーの事例が載っていますが、
    5.0のダウングレード
    SSL認証をしない設定
    などは、載っていましたが、正しくSSL認証を使用した方法が無かったのです。

    お忙しいとは思いますが、お分かりになる事がございましたら、よろしくお願いいたします。

  2. Reply matsuoka 5月 21,2012 12:03

    先日コメントを頂いたkashiwa様
    メールを送ったのですがエラーで返ってきました。
    当方からだとそちらのメールサーバに接続するとConnection closed by foreign host.になります。なんでしょうね?

  3. Reply hama 12月 17,2013 23:42

    初めまして、浜と申します。

    ESXi 5.5 + vMA 5.5 + apcupsd で電源管理をしたく、参考にさせて頂いて頂きました。

    上にある、kashiwaさんの書き込みにもあるように私の環境でも
      shutdownHostViaSOAPAPICall.pl
    を実行すると、
      An Error Occurred
      500 Can’t connect to 192.168.xxx.xxx:443 (certificate verify failed)
    の様にエラーが発生しました。

    私の場合、下記方法で解決しましたの書き込みさせて頂きます。

    ネットで検索したところ、perlスクリプトより正規のSSL証明書を利用しないSSL接続の際に
    制限があるそうです。

    解決策の一つとして私が選んだ方法は、
      shutdownHostViaSOAPAPICall.pl
    に、
      $ENV{PERL_LWP_SSL_VERIFY_HOSTNAME}=0;
    を追記する事で解決しました。

    既にFAQな情報であれば、お許し下さい。

    $ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;

  4. Reply matsuoka 12月 18,2013 09:30

    はじめまして、浜さん

    貴重な情報有難う御座います

    オヤジの健忘録的なBlogですが参考にして頂けるのは嬉しいです
    これからも宜しくお願い致します

  5. Reply hama 12月 19,2013 09:19

    matsuoka 様

    こんにちは、浜です。

    改めて自分が書いた文章を読むと誤字脱字だらけで、お恥ずかしい限りです。

Leave a Reply