.visdkrc と --config オプションの存在を知らない方にオススメ

vSphere SDK for Perl のコマンド実行時に必ず指定しなければならないのが以下のオプションですよね?

  • --url <ESX-IP or vCenter-IP>
  • --username <ID>
  • --password <PW>

シェルスクリプトの中で実行する場合には、この情報を変数にセットしてから hoge.pl --url $URL --username $ID --password $PW ・・・ みたいな感じで実行すれば出来なくもないですが、なんだかいまいちな気がします。

ですが、気付いてないかもしれませんが、実は SDK for Perl にもシェルの .bashrc のように、.visdkrc というのがあって、このファイルに認証情報を記述しておけば、SDK for Perl コマンドを実行する度に、url / username / password オプションを指定する必要がなくなります。

さらに、.visdkrc じゃなくても、--config オプションを使えば、認証情報を使い分けて複数環境に接続できるようになるので使い道が広がります。

  • [例] vminfo.pl --config location-1.conf --vmname hoge-vm
  • [例] vminfo.pl --config location-2.conf --vmname hoge-vm

.bash_profile にパス登録はお済みでしょうか

本題に入る前に、前提として .bash_profile に SDK for Perl のパスが登録されていることとします。

前回連載のインストール関連記事にも書きましたが、念のため追記しておきますので、まだの方は事前に設定を入れてください。

SDK for Perl のアプリケーションが入っているディレクトリパスを環境変数に登録し、コマンド実行時に絶対パスを指定しなくてもいいようにしておきます。 (大体、参考用のサンプルが入ってるので本番では使えないですが、何かを軽く試したいときには便利です)

それに加えて、vmware-cmd 実行時に、SSL 証明書のホスト名チェックを無効 (PERL_LWP_SSL_VERIFY_HOSTNAME=0) にする必要があるので、その設定もします。

以下のパスを /root/.bash_profile に追加し、現在、開いているターミナルに設定を適用します。

SDK for Perl 環境変数設定
01
02
03
04
05
06
07
08
09
10
11
12
# vi /root/.bash_profile
        ・・・
export PATH=$PATH:/usr/lib/vmware-vcli/apps/general
export PATH=$PATH:/usr/lib/vmware-vcli/apps/host
export PATH=$PATH:/usr/lib/vmware-vcli/apps/performance
export PATH=$PATH:/usr/lib/vmware-vcli/apps/session
export PATH=$PATH:/usr/lib/vmware-vcli/apps/vm

export PERL_LWP_SSL_VERIFY_HOSTNAME=0
        ・・・

# source /root/.bash_profile
設定前 : 絶対パス省略不可
1
2
3
4
5
# /usr/lib/vmware-vcli/apps/vm/vminfo.pl \
--url https://ESXi-IP-or-VCENTER-IP/sdk/webService \
--username <ID> \
--password <PW> \
--vmname <VM>
設定後 : 絶対パス省略可能
1
2
3
4
5
# vminfo.pl \
--url https://ESXi-IP-or-VCENTER-IP/sdk/webService \
--username <ID> \
--password <PW> \
--vmname  <VM>

SDK for Perl をさらに使いやすくする

それでは本題に戻ります。

その1. 「.visdkrc」に認証情報を登録する

まずは、.visdkrc に ESXi または vCenter の認証情報を登録する方法です。

SDK for Perl の接続先が一つだけならこれで十分です。

VI_SERVER には、FQDN のみセットしてください。 (最初の htts:// と 最後の /sdk/webService はデフォルト値によってセットされるので設定しなくても構いませんが、明示的に指定する場合は別の環境変数にセットする必要があります : 記事最後の「オマケ」を参照のこと)

また、コマンドラインのオプションとして指定する場合は、特殊文字をエスケープする必要がありますが (エスケープした方が確実)、.visdkrc にはそのままセットしても構いません。(ダメだったら特殊文字の前にバックスラッシュを付けてください)

/root/.visdkrc
1
2
3
4
5
6
#### vCenter の場合 : --url https://vcenter.example.com/sdk/webService --username SDK\-User@vsphere.local --password SDK\-User123
VI_SERVER=vcenter.example.com
VI_USERNAME=SDK-User@vsphere.local    #### SSO ドメインの場合は「@sso.domain」をお忘れなく
VI_PASSWORD=SDK-User123
VI_PROTOCOL=https
VI_PORTNUMBER=443
/root/.visdkrc
1
2
3
4
5
6
#### ESX ホストの場合 : --url https://esx01.example.com/sdk/webService --username root --password h\@af\$gjxRxp
VI_SERVER=esx01.example.com
VI_USERNAME=root                         #### ESX ホストへ接続する場合は、root 固定
VI_PASSWORD=h@af$gjxRxp
VI_PROTOCOL=https
VI_PORTNUMBER=443

以下は設定前・後の実行例です。

.visdkrc : 設定前
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# vminfo.pl \
--url https://vcenter.example.com/sdk/webService \
--username vSphere\-SDK@vsphere.local \
--password vSphere\-SDK123 \
--vmname VM-01

Information of Virtual Machine VM-01

Name:            VM-01
No. of CPU(s):           2
Memory Size:             4096
Virtual Disks:           1
Template:                0
vmPathName:              [DataStore-01] VM-01/VM-01.vmx
Guest OS:                CentOS 4/5/6 (64 ビット)
guestId:                 centos64Guest
Host name:               VM-01
IP Address:              10.10.10.11
VMware Tools:            VMware Tools is running and the version is current
Cpu usage:               337 MHz
Host memory usage:               4000 MB
Guest memory usage:              614 MB
Overall Status:          The entity is OK
.visdkrc : 設定後
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
# vminfo.pl --vmname VM-01

Information of Virtual Machine VM-01

Name:            VM-01
No. of CPU(s):           2
Memory Size:             4096
Virtual Disks:           1
Template:                0
vmPathName:              [DataStore-01] VM-01/VM-01.vmx
Guest OS:                CentOS 4/5/6 (64 ビット)
guestId:                 centos64Guest
Host name:               VM-01
IP Address:              10.10.10.11
VMware Tools:            VMware Tools is running and the version is current
Cpu usage:               337 MHz
Host memory usage:               4000 MB
Guest memory usage:              614 MB
Overall Status:          The entity is OK

だいぶシンプルで使いやすくなりました。

その2. 「--config」オプションで複数の認証情報を使い分ける

しかし、場合によってはターゲットが 1つの vCenter だけでなく、環境によっては複数の vCenter に分かれていたり、ESXi ホスト (root ユーザ) を直接指定したい時もあるでしょう。

ということで、今度は SDK for Perl コマンド実行時に --config <AUTH-FILE> のように、明示的に認証情報ファイルを指定できるようにします。

特に、管理している vCenter Server が 2つ、ないし 3つ以上ならこのやり方がオススメです。

書き方は、先ほど その1 でご紹介した .visdkrc と同じ。 拡張子は .conf でなくても構いません。

/root/vcenter.conf
1
2
3
4
5
VI_SERVER=vcenter.example.com
VI_USERNAME=SDK-User@vsphere.local
VI_PASSWORD=SDK-User123
VI_PROTOCOL=https
VI_PORTNUMBER=443
/root/esxi.conf
1
2
3
4
5
VI_SERVER=esx01.example.com
VI_USERNAME=root
VI_PASSWORD=h@af$gjxRxp
VI_PROTOCOL=https
VI_PORTNUMBER=443

以下は --config オプション指定時の実行例です。

--config /root/vcenter.conf
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
# vminfo.pl --config /root/vcenter.conf --vmname VM-01

Information of Virtual Machine VM-01

Name:            VM-01
No. of CPU(s):           2
Memory Size:             4096
Virtual Disks:           1
Template:                0
vmPathName:              [DataStore-01] VM-01/VM-01.vmx
Guest OS:                CentOS 4/5/6 (64 ビット)
guestId:                 centos64Guest
Host name:               VM-01
IP Address:              10.10.10.11
VMware Tools:            VMware Tools is running and the version is current
Cpu usage:               337 MHz
Host memory usage:               4000 MB
Guest memory usage:              614 MB
Overall Status:          The entity is OK
--config /root/esxi.conf
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
# vminfo.pl --config /root/esxi.conf --vmname VM-02

Information of Virtual Machine afs-web

Name:            VM-02
No. of CPU(s):           4
Memory Size:             4096
Virtual Disks:           1
Template:                0
vmPathName:              [DataStore-02] VM-02/VM-02.vmx
Guest OS:                Microsoft Windows Server 2016 (64-bit)
guestId:                 windows9Server64Guest
Host name:               VM-02
IP Address:              10.10.10.11
VMware Tools:            VMware Tools is running and the version is current
Cpu usage:               33 MHz
Host memory usage:               4126 MB
Guest memory usage:              81 MB
Overall Status:          The entity is OK

注意点. 「--config」を指定すると「.visdkrc」は無視される

注意点として、--config オプションが指定された場合は .visdkrc は無視されます。 (読み込まれない)

また、認証情報が入ってるファイルは覗かれると困るので、所有権 / 実行権限を適宜変更してください。

認証ファイル権限設定
1
2
3
4
# chmod 600 /root/.visdkrc

# chmod 600 /root/vcenter.conf
# chmod 600 /root/esxi.conf

オマケ. 「visdkrc」と「--config」に指定できる環境変数

ファイルに認証情報をセットする際に、基本的には以下で十分ですが、

  • VI_SERVER
  • VI_USERNAME
  • VI_PASSWORD
  • VI_PROTOCOL
  • VI_PORTNUMBER

さらにオプション指定が必要な場合は、SDK for Perl のコマンドなら何でもいいので、そのコマンドに --help 付けて実行してください。

variable VI_HOGEHOGE みたいな感じで出てくるので、ここの VI_HOGEHOGE が環境変数名にあたります。

vminfo.pl --help
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# vminfo.pl --help
・・・
Common VI options:
   --config (variable VI_CONFIG)
      Location of the VI Perl configuration file
   --credstore (variable VI_CREDSTORE)
      Name of the credential store file defaults to <HOME>/.vmware/credstore/vicredentials.xml on Linux and <APPDATA>/VMware/credstore/vicredentials.xml on Windows
   --encoding (variable VI_ENCODING, default 'utf8')
      Encoding: utf8, cp936 (Simplified Chinese), iso-8859-1 (German), shiftjis (Japanese)
   --help
      Display usage information for the script
   --passthroughauth (variable VI_PASSTHROUGHAUTH)
      Attempt to use pass-through authentication
   --passthroughauthpackage (variable VI_PASSTHROUGHAUTHPACKAGE, default 'Negotiate')
      Pass-through authentication negotiation package
   --password (variable VI_PASSWORD)
      Password
   --portnumber (variable VI_PORTNUMBER)
      Port used to connect to server
   --protocol (variable VI_PROTOCOL, default 'https')
      Protocol used to connect to server
   --psc (variable VI_PSC)
      Platform services controller's hostname or IP
   --savesessionfile (variable VI_SAVESESSIONFILE)
      File to save session ID/cookie to utilize
   --server (variable VI_SERVER, default 'localhost')
      VI server to connect to. Required if url is not present
   --servicepath (variable VI_SERVICEPATH, default '/sdk/webService')
      Service path used to connect to server
   --sessionfile (variable VI_SESSIONFILE)
      File containing session ID/cookie to utilize
   --url (variable VI_URL)
      VI SDK URL to connect to. Required if server is not present
   --username (variable VI_USERNAME)
      Username
   --verbose (variable VI_VERBOSE)
      Display additional debugging information
   --version
      Display version information for the script

デフォルト値とかもあるので、軽く目を通してみるのも良いかもしれません。

以上、認証情報使い分けて SDK for Perl をさらに使いやすくする でした。