Получение метаданных из гостевой ОС 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.

Командлеты виртуальных машин PowerCLI

Другие вопросы по тегам