libvirt/src/vmx/vmx.h

99 lines
3.1 KiB
C
Raw Normal View History

/*
* vmx.h: VMware VMX parsing/formatting functions
*
* Copyright (C) 2009-2011, 2015 Matthias Bolte <matthias.bolte@googlemail.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see
* <http://www.gnu.org/licenses/>.
*
*/
#pragma once
#include "internal.h"
#include "virconf.h"
#include "domain_conf.h"
#define VMX_CONFIG_FORMAT_ARGV "vmware-vmx"
typedef struct _virVMXContext virVMXContext;
virDomainXMLOptionPtr virVMXDomainXMLConfInit(virCapsPtr caps);
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Context
*/
typedef char * (*virVMXParseFileName)(const char *fileName, void *opaque);
typedef char * (*virVMXFormatFileName)(const char *src, void *opaque);
typedef int (*virVMXAutodetectSCSIControllerModel)(virDomainDiskDefPtr def,
int *model, void *opaque);
/*
* parseFileName is only used by virVMXParseConfig.
* formatFileName is only used by virVMXFormatConfig.
* autodetectSCSIControllerModel is optionally used by virVMXFormatConfig.
* datacenterPath is only used by virVMXFormatConfig.
vmx: Expose VMware Managed Object Reference (moref) in XML. If you use the VDDK library to access virtual machines remotely, you really need to know the Managed Object Reference ("moref") of the VM. This must be passed each time you connect to the API. For example nbdkit's VDDK plugin requires a moref to be passed to mount up a VM's disk remotely: nbdkit vddk user=root password=+/tmp/rootpw \ server=esxi.example.com thumbprint=xx:xx:xx:... \ vm=moref=2 \ file="[datastore1] Fedora/Fedora.vmdk" Getting the moref is a huge pain. To get some idea of what it is, why it is needed, and how much trouble it is to get it, see: https://blogs.vmware.com/vsphere/2012/02/uniquely-identifying-virtual-machines-in-vsphere-and-vcloud-part-1-overview.html https://blogs.vmware.com/vsphere/2012/02/uniquely-identifying-virtual-machines-in-vsphere-and-vcloud-part-2-technical.html However the moref is available conveniently in the internals of the libvirt VMX driver. This patch exposes it as a custom XML element using the same "vmware:" namespace which was previously used for the datacenterpath (see libvirt commit 636a99058758a044). It appears in the XML like this: <domain type='vmware' xmlns:vmware='http://libvirt.org/schemas/domain/vmware/1.0'> <name>Fedora</name> ... <vmware:datacenterpath>ha-datacenter</vmware:datacenterpath> <vmware:moref>2</vmware:moref> </domain> Note that the moref can appear as either a simple ID (for esx:// connections) or as a "vm-<ID>" (for vpx:// connections). It should be treated by users as an opaque string. Signed-off-by: Richard W.M. Jones <rjones@redhat.com>
2017-08-25 13:36:58 +00:00
* moref is only used by virVMXFormatConfig.
*/
struct _virVMXContext {
void *opaque;
virVMXParseFileName parseFileName;
virVMXFormatFileName formatFileName;
virVMXAutodetectSCSIControllerModel autodetectSCSIControllerModel;
const char *datacenterPath; /* including folders */
vmx: Expose VMware Managed Object Reference (moref) in XML. If you use the VDDK library to access virtual machines remotely, you really need to know the Managed Object Reference ("moref") of the VM. This must be passed each time you connect to the API. For example nbdkit's VDDK plugin requires a moref to be passed to mount up a VM's disk remotely: nbdkit vddk user=root password=+/tmp/rootpw \ server=esxi.example.com thumbprint=xx:xx:xx:... \ vm=moref=2 \ file="[datastore1] Fedora/Fedora.vmdk" Getting the moref is a huge pain. To get some idea of what it is, why it is needed, and how much trouble it is to get it, see: https://blogs.vmware.com/vsphere/2012/02/uniquely-identifying-virtual-machines-in-vsphere-and-vcloud-part-1-overview.html https://blogs.vmware.com/vsphere/2012/02/uniquely-identifying-virtual-machines-in-vsphere-and-vcloud-part-2-technical.html However the moref is available conveniently in the internals of the libvirt VMX driver. This patch exposes it as a custom XML element using the same "vmware:" namespace which was previously used for the datacenterpath (see libvirt commit 636a99058758a044). It appears in the XML like this: <domain type='vmware' xmlns:vmware='http://libvirt.org/schemas/domain/vmware/1.0'> <name>Fedora</name> ... <vmware:datacenterpath>ha-datacenter</vmware:datacenterpath> <vmware:moref>2</vmware:moref> </domain> Note that the moref can appear as either a simple ID (for esx:// connections) or as a "vm-<ID>" (for vpx:// connections). It should be treated by users as an opaque string. Signed-off-by: Richard W.M. Jones <rjones@redhat.com>
2017-08-25 13:36:58 +00:00
const char *moref;
};
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Helpers
*/
char *virVMXEscapeHex(const char *string, char escape, const char *special);
#define virVMXEscapeHexPipe(_string) virVMXEscapeHex(_string, '|', "\"")
#define virVMXEscapeHexPercent(_string) virVMXEscapeHex(_string, '%', "/\\")
int virVMXUnescapeHex(char *string, char escape);
#define virVMXUnescapeHexPipe(_string) virVMXUnescapeHex(_string, '|')
#define virVMXUnescapeHexPercent(_string) virVMXUnescapeHex(_string, '%')
char *virVMXConvertToUTF8(const char *encoding, const char *string);
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* VMX -> Domain XML
*/
virDomainDefPtr virVMXParseConfig(virVMXContext *ctx,
virDomainXMLOptionPtr xmlopt,
virCapsPtr caps,
const char *vmx);
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Domain XML -> VMX
*/
char *virVMXFormatConfig(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt,
virDomainDefPtr def, int virtualHW_version);