らくがきちょう

なんとなく

pyvmomi を使って Python スクリプトで vSphere を操作する

vSphere を Python から操作するには pyvmomi を使うのが簡単です。 今回はインストール方法をメモしておきます。

pyvmomi は pip で手軽にインストールすることが出来ます。 pip が未インストールであればインストールし、続けて pip install で pyvmomi をインストールします。

yum -y install gcc python-devel
curl -L https://bootstrap.pypa.io/get-pip.py | python
pip install pyvmomi

現時点ではバージョン 6.5.0.2017.5 がインストールされました。

# pip show pyvmomi
Name: pyvmomi
Version: 6.5.0.2017.5.post1
Summary: VMware vSphere Python SDK
Home-page: https://github.com/vmware/pyvmomi
Author: VMware, Inc.
Author-email: jhu@vmware.com
License: License :: OSI Approved :: Apache Software License
Location: /usr/lib/python2.7/site-packages
Requires: requests, six

pyvmomi のサンプルスクリプトGitHub で公開されているので、クローンします。

git clone https://github.com/vmware/pyvmomi-community-samples.git

以下のサンプルスクリプトが同梱されています。

# ls pyvmomi-community-samples/samples/
add_disk_to_vm.py               filter_vms.py                              renamer.py
add_nic_to_vm.py                find_by_uuid.py                            scheduled_poweroff.py
add_portgroup_to_vswitch.py     generate_html5_console.py                  service_manager_esxtop_in_vc.py
add_vm_extra_config_tags.py     getallvms.py                               service_manager_vscsistats_in_vc.py
add_vm_nic_to_dvs.py            get_hosts_vswitch.py                       sessions_list.py
add_vswitch_to_host.py          getorphanedvms.py                          set_note.py
cdrom_vm.py                     get_vm_names.py                            set_vcenter_motd.py
change_disk_mode.py             getvmsbycluster.py                         snapshot_operations.py
change_vm_cd_backend.py         getvnicinfo.py                             soft_reboot.py
change_vm_nic_state.py          hello_world_vcenter.py                     suds-to-pyvmomi.py
change_vm_vif.py                hello_world_vcenter_with_yaml_recorder.py  tests
clone_vm.py                     __init__.py                                tools
create_folder_in_datacenter.py  linked_clone.py                            update_esxi_advanced_settings.py
create_random_marvel_vms.py     list_datastore_cluster.py                  update_vm_storage_policy.py
create_snapshot.py              list_datastore_info.py                     upgrade_vm.py
delete_disk_from_vm.py          list_dc_datastore_info.py                  upload_file_to_datastore.py
delete_nic_from_vm.py           list_host_alarms.py                        upload_file_to_vm.py
del_portgroup_from_vswitch.py   list_vm_storage_policy.py                  vcenter_details.py
del_vswitch_from_host.py        list_vmwaretools_status.py                 virtual_machine_device_info.py
deploy_ova.py                   make_dc_and_cluster.py                     virtual_machine_power_cycle_and_question.py
deploy_ovf.py                   pyvmomi-to-suds.py                         vminfo_quick.py
destroy_vm.py                   README.md                                  vm_perf_example.py
esxi_perf_sample.py             reboot_vm.py                               vSphereAutoRestartManager.py
execute_program_in_vm.py        reconfigure_host_for_ha.py                 waitforupdates.py
export_vm.py                    relocate_events.py

例えば「全ての仮想マシンの状態を取得するサンプル」(getallvms.py) を実行するには以下のように指定します。 ADDRESS には ESXi または vCenter のアドレスを指定します。

python pyvmomi-community-samples/samples/getallvms.py -s [ADDRESS] -u [USERNAME] -p [PASSWORD]

サンプルスクリプトによっては PEP 476 で定義された内容に基づき、自己証明書を利用しているとエラーになってしまい、実行出来ないものがあります。 こういったスクリプトは以下を追記し、証明書の検証をオフにすることで(勿論、セキュリティレベルは下がりますが)スクリプトを実行することは出来るようになります。

import ssl
ssl._create_default_https_context = ssl._create_unverified_context