有没有办法从客户操作系统中获取元数据(即虚拟机名称、注释等)?我正在使用 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.html,RedHat 的 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')