mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
Take domain type into account when looking up default machine
If one has e.g.
<guest>
<os_type>hvm</os_type>
<arch name='x86_64'>
<wordsize>64</wordsize>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
<machine>pc-0.11</machine>
<machine canonical='pc-0.11'>pc</machine>
<machine>pc-0.10</machine>
<machine>isapc</machine>
<domain type='qemu'>
</domain>
<domain type='kvm'>
<emulator>/usr/bin/kvm</emulator>
<machine>pc</machine>
<machine>isapc</machine>
</domain>
</arch>
</guest>
and start a guest with:
<domain type='kvm'>
...
<os>
<type arch='x86_64'>hvm</type>
...
</os>
</domain>
then the default machine type should be 'pc' and not 'pc-0.11'
Issue was reported by Anton Protopopov.
* src/capabilities.[ch]: pass the domain type to
virCapabilitiesDefaultGuestArch() and use it to look up the default
machine type from a specific guest domain if needed.
* src/conf/domain_conf.c, src/xen/xm_internal.c: update
* tests/qemuxml2argvdata/qemuxml2argv-machine-aliases2.xml: update
the domain type to 'kvm' and remove the machine type to check
that the default gets looked up correctly
This commit is contained in:
@@ -549,22 +549,43 @@ virCapabilitiesDefaultGuestArch(virCapsPtr caps,
|
||||
* @caps: capabilities to query
|
||||
* @ostype: OS type to search for
|
||||
* @arch: architecture to search for
|
||||
* @domain: domain type to search for
|
||||
*
|
||||
* Returns the first machine variant associated with
|
||||
* the requested operating system type and architecture
|
||||
* the requested operating system type, architecture
|
||||
* and domain type
|
||||
*/
|
||||
extern const char *
|
||||
virCapabilitiesDefaultGuestMachine(virCapsPtr caps,
|
||||
const char *ostype,
|
||||
const char *arch)
|
||||
const char *arch,
|
||||
const char *domain)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0 ; i < caps->nguests ; i++) {
|
||||
if (STREQ(caps->guests[i]->ostype, ostype) &&
|
||||
STREQ(caps->guests[i]->arch.name, arch) &&
|
||||
caps->guests[i]->arch.defaultInfo.nmachines)
|
||||
virCapsGuestPtr guest = caps->guests[i];
|
||||
int j;
|
||||
|
||||
if (!STREQ(guest->ostype, ostype) || !STREQ(guest->arch.name, arch))
|
||||
continue;
|
||||
|
||||
for (j = 0; j < guest->arch.ndomains; j++) {
|
||||
virCapsGuestDomainPtr dom= guest->arch.domains[j];
|
||||
|
||||
if (!STREQ(dom->type, domain))
|
||||
continue;
|
||||
|
||||
if (!dom->info.nmachines)
|
||||
break;
|
||||
|
||||
return dom->info.machines[0]->name;
|
||||
}
|
||||
|
||||
if (guest->arch.defaultInfo.nmachines)
|
||||
return caps->guests[i]->arch.defaultInfo.machines[0]->name;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
@@ -207,7 +207,8 @@ virCapabilitiesDefaultGuestArch(virCapsPtr caps,
|
||||
extern const char *
|
||||
virCapabilitiesDefaultGuestMachine(virCapsPtr caps,
|
||||
const char *ostype,
|
||||
const char *arch);
|
||||
const char *arch,
|
||||
const char *domain);
|
||||
extern const char *
|
||||
virCapabilitiesDefaultGuestEmulator(virCapsPtr caps,
|
||||
const char *ostype,
|
||||
|
||||
@@ -2669,7 +2669,8 @@ static virDomainDefPtr virDomainDefParseXML(virConnectPtr conn,
|
||||
if (!def->os.machine) {
|
||||
const char *defaultMachine = virCapabilitiesDefaultGuestMachine(caps,
|
||||
def->os.type,
|
||||
def->os.arch);
|
||||
def->os.arch,
|
||||
virDomainVirtTypeToString(def->virtType));
|
||||
if (defaultMachine != NULL) {
|
||||
if (!(def->os.machine = strdup(defaultMachine))) {
|
||||
virReportOOMError(conn);
|
||||
|
||||
@@ -720,7 +720,8 @@ xenXMDomainConfigParse(virConnectPtr conn, virConfPtr conf) {
|
||||
|
||||
defaultMachine = virCapabilitiesDefaultGuestMachine(priv->caps,
|
||||
def->os.type,
|
||||
def->os.arch);
|
||||
def->os.arch,
|
||||
virDomainVirtTypeToString(def->virtType));
|
||||
if (defaultMachine != NULL) {
|
||||
if (!(def->os.machine = strdup(defaultMachine)))
|
||||
goto no_memory;
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
<domain type='qemu'>
|
||||
<domain type='kvm'>
|
||||
<name>QEMUGuest1</name>
|
||||
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||
<memory>219200</memory>
|
||||
<currentMemory>219200</currentMemory>
|
||||
<vcpu>1</vcpu>
|
||||
<os>
|
||||
<type arch='x86_64' machine='pc'>hvm</type>
|
||||
<type arch='x86_64'>hvm</type>
|
||||
<boot dev='hd'/>
|
||||
</os>
|
||||
<clock offset='utc'/>
|
||||
|
||||
Reference in New Issue
Block a user