从 VMWare Guest OS 获取元数据

从 VMWare Guest OS 获取元数据

有没有办法从客户操作系统中获取元数据(即虚拟机名称、注释等)?我正在使用 Ubuntu JeOS 模板,并希望在启动时运行一个脚本,该脚本根据元数据配置新虚拟机。这是在 VMWare ESX 上。

答案1

我想您可以在虚拟机中使用 vSphere SDK for Perl 来查询这些项目:

http://www.vmware.com/support/developer/viperltoolkit/

您可以在这里询问:

http://communities.vmware.com/community/developer/forums/vsphere_sdk_perl

答案2

guestinfo您可以从外部设置虚拟机的属性(例如使用govc)并从内部查询它(需要 open-vm-tools):

外部:

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.htmlRedHat 的 OpenShift on vSphere 安装指南

答案3

您可以通过在客户操作系统内部运行来获取一些信息(最重要的是虚拟机 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

答案4

除了 Fuero 的回答之外,我之前还使用过 ansible 和 rc.local 通过 guestfacts 配置虚拟机

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.本地

# 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')

相关内容