govcsimにvmware_guestを叩いてみた
はじめに
vccimなるvCenterシミュレータがあると聞いたので、こいつに対してAnsibleのVMwareモジュールを叩いてみました。
vcsimのインストール
vcsimと、動作確認用にgovcをインストールします。
sudo yum install epel-release sudo yum install golang go get -u github.com/vmware/govmomi/govc go get -u github.com/vmware/govmomi/vcsim
$ govc version govc 0.23.0
vcsimの起動と動作確認
必要な環境変数を設定して、vcsimをバックグラウンドで起動します。
export PATH=${PATH}:${HOME}/go/bin
export GOVC_URL=https://user:pass@127.0.0.1:8989 GOVC_INSECURE=1
vcsim &
ちなみに、上記でGOVC_INSECURE=1を設定しないと、govcで下記のようなTLSエラーが出ます。
$ govc find -l govc: Post https://127.0.0.1:8989/sdk: x509: certificate signed by unknown authority 2020/08/08 07:01:17 http: TLS handshake error from 127.0.0.1:38494: remote error: tls: bad certificate
$ govc find -l Folder / Datacenter /DC0 Folder /DC0/vm VirtualMachine /DC0/vm/DC0_H0_VM0 VirtualMachine /DC0/vm/DC0_H0_VM1 VirtualMachine /DC0/vm/DC0_C0_RP0_VM0 VirtualMachine /DC0/vm/DC0_C0_RP0_VM1 Folder /DC0/host ComputeResource /DC0/host/DC0_H0 HostSystem /DC0/host/DC0_H0/DC0_H0 ResourcePool /DC0/host/DC0_H0/Resources ClusterComputeResource /DC0/host/DC0_C0 HostSystem /DC0/host/DC0_C0/DC0_C0_H0 HostSystem /DC0/host/DC0_C0/DC0_C0_H1 HostSystem /DC0/host/DC0_C0/DC0_C0_H2 ResourcePool /DC0/host/DC0_C0/Resources Folder /DC0/datastore Datastore /DC0/datastore/LocalDS_0 Folder /DC0/network Network /DC0/network/VM Network DistributedVirtualSwitch /DC0/network/DVS0 DistributedVirtualPortgroup /DC0/network/DVS0-DVUplinks-9 DistributedVirtualPortgroup /DC0/network/DC0_DVPG0
無事govcで構成情報が取得できました。
Playbookの実行
手順は割愛しますが、ansible 2.10.0rc4で検証したので、community.vmwareコレクションを別途インストールしています。
inventory.ini
[vcsim] 127.0.0.1 [vcsim:vars] vcenter_username = user vcenter_password = pass vcenter_port = 8989
vmware_guest.yml
- hosts: vcsim gather_facts: false connection: local collections: - community.vmware tasks: - name: Create a virtual machine vmware_guest: hostname: "{{ inventory_hostname }}" username: "{{ vcenter_username }}" password: "{{ vcenter_password }}" port: '{{ vcenter_port }}' validate_certs: no datacenter: DC0 folder: /DC0/vm/ name: created_by_ansible state: poweredon guest_id: centos64Guest esxi_hostname: DC0_H0 disk: - size_gb: 10 type: thin datastore: LocalDS_0 hardware: memory_mb: 512 num_cpus: 4 scsi: paravirtual networks: - name: VM Network device_type: vmxnet3 - name: Gather info from vcsim vmware_guest_info: hostname: "{{ inventory_hostname }}" username: "{{ vcenter_username }}" password: "{{ vcenter_password }}" port: '{{ vcenter_port }}' datacenter: DC0 name: created_by_ansible validate_certs: no register: info - name: debug debug: var: info
実行結果
$ ansible-playbook -i inventory.ini vmware_guest.yml
PLAY [vcsim] ************************************************************************************************************
TASK [Create a virtual machine] *****************************************************************************************
changed: [127.0.0.1]
TASK [Gather info from vcsim] *******************************************************************************************
ok: [127.0.0.1]
TASK [debug] ************************************************************************************************************
ok: [127.0.0.1] =>
info:
changed: false
failed: false
instance:
annotation: null
current_snapshot: null
customvalues: {}
guest_consolidation_needed: false
guest_question: null
guest_tools_status: guestToolsNotRunning
guest_tools_version: '0'
hw_cluster: null
hw_cores_per_socket: 1
hw_datastores:
- LocalDS_0
hw_esxi_host: DC0_H0
hw_eth0:
addresstype: generated
ipaddresses: []
label: Network Adapter 1
macaddress: 00:0c:29:33:31:38
macaddress_dash: 00-0c-29-33-31-38
portgroup_key: null
portgroup_portkey: null
summary: VM Network
hw_files:
- '[LocalDS_0] created_by_ansible/created_by_ansible.vmx'
- '[LocalDS_0] created_by_ansible/created_by_ansible.nvram'
- '[LocalDS_0] created_by_ansible/vmware.log'
- '[LocalDS_0] created_by_ansible/created_by_ansible.vmdk'
hw_folder: /DC0/vm
hw_guest_full_name: null
hw_guest_ha_state: null
hw_guest_id: centos64Guest
hw_interfaces:
- eth0
hw_is_template: false
hw_memtotal_mb: 512
hw_name: created_by_ansible
hw_power_status: poweredOn
hw_processor_count: 4
hw_product_uuid: ddb07137-d11d-5ab8-8b1a-7813e1933918
hw_version: vmx-13
instance_uuid: 546d0d69-d972-5fed-81f1-6e98c69313d0
ipv4: null
ipv6: null
module_hw: true
moid: vm-191
snapshots: []
vimref: vim.VirtualMachine:vm-191
vnc: {}
PLAY RECAP **************************************************************************************************************
127.0.0.1 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
$ govc find -l Folder / Datacenter /DC0 Folder /DC0/vm VirtualMachine /DC0/vm/DC0_H0_VM0 VirtualMachine /DC0/vm/DC0_H0_VM1 VirtualMachine /DC0/vm/DC0_C0_RP0_VM0 VirtualMachine /DC0/vm/DC0_C0_RP0_VM1 VirtualMachine /DC0/vm/created_by_ansible★ Folder /DC0/host ComputeResource /DC0/host/DC0_H0 HostSystem /DC0/host/DC0_H0/DC0_H0 ResourcePool /DC0/host/DC0_H0/Resources ClusterComputeResource /DC0/host/DC0_C0 HostSystem /DC0/host/DC0_C0/DC0_C0_H0 HostSystem /DC0/host/DC0_C0/DC0_C0_H1 HostSystem /DC0/host/DC0_C0/DC0_C0_H2 ResourcePool /DC0/host/DC0_C0/Resources Folder /DC0/datastore Datastore /DC0/datastore/LocalDS_0 Folder /DC0/network Network /DC0/network/VM Network DistributedVirtualSwitch /DC0/network/DVS0 DistributedVirtualPortgroup /DC0/network/DVS0-DVUplinks-9 DistributedVirtualPortgroup /DC0/network/DC0_DVPG0
補足
- 上記のPlaybookを再実行すると、
created_by_ansibleが実行した分だけ作成されます。 - 作成済みの仮想マシンを特定するには、
use_instance_uuid: yes、uuid: ****で、UUIDを指定する必要があります。 - 上記で仮想マシンを誤って量産した場合、
govc vm.destroy created_by_ansibleでcreated_by_ansibleという名前の仮想マシンがまとめて消えます。
おわりに
vcsim、非常に便利です。飽くまでシミュレータなので限界はありますが、vCenter、EXSiがなくても、モジュールの動作確認が可能なのは嬉しいですね。