mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-11 07:17:44 +00:00
caps: Improve error if passed an unknown arch
Previously we would have: "os type 'hvm' & arch 'idontexist' combination is not supported" Now we get "No guest options available for arch 'idontexist'" or if options available but guest OS type not applicable: "No os type 'xen' available for arch 'x86_64'"
This commit is contained in:
parent
cb8b9963fe
commit
e1ecba4669
@ -497,6 +497,26 @@ virCapabilitiesAddGuestFeature(virCapsGuestPtr guest,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* virCapabilitiesSupportsGuestArch:
|
||||
* @caps: capabilities to query
|
||||
* @arch: Architecture to search for (eg, 'i686', 'x86_64')
|
||||
*
|
||||
* Returns non-zero if the capabilities support the
|
||||
* requested architecture
|
||||
*/
|
||||
extern int
|
||||
virCapabilitiesSupportsGuestArch(virCapsPtr caps,
|
||||
const char *arch)
|
||||
{
|
||||
int i;
|
||||
for (i = 0 ; i < caps->nguests ; i++) {
|
||||
if (STREQ(caps->guests[i]->arch.name, arch))
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* virCapabilitiesSupportsGuestOSType:
|
||||
@ -520,7 +540,7 @@ virCapabilitiesSupportsGuestOSType(virCapsPtr caps,
|
||||
|
||||
|
||||
/**
|
||||
* virCapabilitiesSupportsGuestOSType:
|
||||
* virCapabilitiesSupportsGuestOSTypeArch:
|
||||
* @caps: capabilities to query
|
||||
* @ostype: OS type to search for (eg 'hvm', 'xen')
|
||||
* @arch: Architecture to search for (eg, 'i686', 'x86_64')
|
||||
@ -529,9 +549,9 @@ virCapabilitiesSupportsGuestOSType(virCapsPtr caps,
|
||||
* requested operating system type
|
||||
*/
|
||||
extern int
|
||||
virCapabilitiesSupportsGuestArch(virCapsPtr caps,
|
||||
const char *ostype,
|
||||
const char *arch)
|
||||
virCapabilitiesSupportsGuestOSTypeArch(virCapsPtr caps,
|
||||
const char *ostype,
|
||||
const char *arch)
|
||||
{
|
||||
int i;
|
||||
for (i = 0 ; i < caps->nguests ; i++) {
|
||||
|
@ -237,12 +237,15 @@ virCapabilitiesAddGuestFeature(virCapsGuestPtr guest,
|
||||
int toggle);
|
||||
|
||||
extern int
|
||||
virCapabilitiesSupportsGuestArch(virCapsPtr caps,
|
||||
const char *arch);
|
||||
extern int
|
||||
virCapabilitiesSupportsGuestOSType(virCapsPtr caps,
|
||||
const char *ostype);
|
||||
extern int
|
||||
virCapabilitiesSupportsGuestArch(virCapsPtr caps,
|
||||
const char *ostype,
|
||||
const char *arch);
|
||||
virCapabilitiesSupportsGuestOSTypeArch(virCapsPtr caps,
|
||||
const char *ostype,
|
||||
const char *arch);
|
||||
|
||||
|
||||
extern const char *
|
||||
|
@ -7581,9 +7581,18 @@ static virDomainDefPtr virDomainDefParseXML(virCapsPtr caps,
|
||||
|
||||
def->os.arch = virXPathString("string(./os/type[1]/@arch)", ctxt);
|
||||
if (def->os.arch) {
|
||||
if (!virCapabilitiesSupportsGuestArch(caps, def->os.type, def->os.arch)) {
|
||||
if (!virCapabilitiesSupportsGuestArch(caps, def->os.arch)) {
|
||||
virDomainReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("os type '%s' & arch '%s' combination is not supported"),
|
||||
_("No guest options available for arch '%s'"),
|
||||
def->os.arch);
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (!virCapabilitiesSupportsGuestOSTypeArch(caps,
|
||||
def->os.type,
|
||||
def->os.arch)) {
|
||||
virDomainReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("No os type '%s' available for arch '%s'"),
|
||||
def->os.type, def->os.arch);
|
||||
goto error;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user