Получение метаданных из гостевой ОС VMWare
Есть ли способ получить метаданные (например, имя виртуальной машины, аннотации и т. Д.) Из гостевой ОС? Я использую шаблон Ubuntu JeOS и хочу при запуске запустить скрипт, который настраивает новые виртуальные машины в соответствии с метаданными. Это на VMWare ESX.
7 ответов
Я полагаю, вы могли бы использовать vSphere SDK для Perl внутри вашей виртуальной машины для запроса этих элементов:
http://www.vmware.com/support/developer/viperltoolkit/
Вы можете спросить здесь:
http://communities.vmware.com/community/developer/forums/vsphere_sdk_perl
Вы можете установить виртуальную машинуguestinfo
имущество снаружи (например, сgovc
) и запросите его изнутри (требуются инструменты open-vm):
Снаружи:
govc vm.change -e 'guestinfo.foo=bar' <yourVM>
Внутри:
vmtoolsd --cmd "info-get guestinfo.foo"
Источник: https://www.virtuallyghetto.com/2011/01/how-to-extract-host-information-from.html, Руководство по установке RedHat OpenShift на vSphere.
Вы можете получить некоторую информацию (самую важную — UUID виртуальной машины), запустивdmidecode
изнутри гостевой ОС. Например:
[root@localhost ~]# dmidecode
...
Handle 0x0001, DMI type 1, 27 bytes
System Information
Manufacturer: VMware, Inc.
Product Name: VMware Virtual Platform
Version: None
Serial Number: VMware-42 [REDACTED]
UUID: [REDACTED]
Wake-up Type: Power Switch
SKU Number: Not Specified
Family: Not Specified
Вы можете установить ansible и pyvmomi, а затем использовать модуль vsphere_guest или Community.vmware.vmware_guest (предпочтительно).
https://docs.ansible.com/ansible/latest/collections/community/vmware/vmware_guest_module.html
или
https://docs.ansible.com/ansible/latest/collections/community/vmware/vmware_vm_info_module.html
---
- hosts: localhost
gather_facts: false
connection: local
vars_files:
- /etc/ansible/playbooks/vars/vmware_vars_dc1.yml
tasks:
- name: Gather VM info
community.vmware.vmware_vm_info:
hostname: "{{ vcenter_server }}"
username: "{{ vcenter_user }}"
password: "{{ vcenter_pass }}"
validate_certs: no
vm_type: all
register: vm_info
- debug:
msg: 'VM {{ vm_info }}'
Добавляя к ответу Фуэро, я ранее использовал ansible и rc.local для настройки виртуальных машин через гостевые факты.
ansible конфигурация виртуальной машины
guestinfo.hostname: "{{ inventory_hostname.split('.')[0] }}"
guestinfo.fqdn: "{{ inventory_hostname }}"
guestinfo.domain: "{{ domain }}"
guestinfo.ip4: "{{ vm_ip4 }}"
guestinfo.ip6: "{{ vm_ip6 | default(omit) }}"
rc.local
# Set host IP Address
nmcli con mod ens192 ipv4.method manual ipv4.addr "$(vmtoolsd --cmd 'info-get guestinfo.ip4')/24" ipv4.gateway "$(vmtoolsd --cmd 'info-get guestinfo.ip4' | sed 's/\.[0-9]*$/.1/')" ipv4.dns "$(vmtoolsd --cmd 'info-get guestinfo.ip4' | sed 's/\.[0-9]*$/.53/')" ipv4.dns-search $(vmtoolsd --cmd 'info-get guestinfo.domain')
# Set Hostname
nmcli general hostname $(vmtoolsd --cmd 'info-get guestinfo.fqdn')
Мне неизвестны какие-либо опубликованные API-интерфейсы, позволяющие вам делать это с ESX, но я также знаю, что у VMWare есть частные API-интерфейсы - скрестив пальцы, они скоро их откроют.
В настоящее время вместо vSphere SDK для Perl существует PowerCLI, основанный на Powershell от MS. Вы можете получить любую информацию и изменить настройки, касающиеся виртуальных машин, хостов, кластеров и всего остального, что связано с VMware.