qga: conditionalize schema for commands only supported on Windows

Rather than creating stubs for every command that just return
QERR_UNSUPPORTED, use 'if' conditions in the QAPI schema to
fully exclude generation of the commands on non-Windows.

The command will be rejected at QMP dispatch time instead,
avoiding reimplementing rejection by blocking the stub commands.
This changes the error message for affected commands from

    {"class": "CommandNotFound", "desc": "Command FOO has been disabled"}

to

    {"class": "CommandNotFound", "desc": "The command FOO has not been found"}

This has the additional benefit that the QGA protocol reference
now documents what conditions enable use of the command.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Konstantin Kostiuk <kkostiuk@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
Message-ID: <20240712132459.3974109-13-berrange@redhat.com>
Signed-off-by: Konstantin Kostiuk <kkostiuk@redhat.com>
This commit is contained in:
Daniel P. Berrangé 2024-07-12 14:24:49 +01:00 committed by Konstantin Kostiuk
parent 83a7a1ab9a
commit dedf99f303
2 changed files with 10 additions and 14 deletions

View File

@ -1207,8 +1207,6 @@ GList *ga_command_init_blockedrpcs(GList *blockedrpcs)
blockedrpcs = g_list_append(blockedrpcs, g_strdup("guest-fstrim")); blockedrpcs = g_list_append(blockedrpcs, g_strdup("guest-fstrim"));
#endif #endif
blockedrpcs = g_list_append(blockedrpcs, g_strdup("guest-get-devices"));
return blockedrpcs; return blockedrpcs;
} }
@ -1419,13 +1417,6 @@ GuestOSInfo *qmp_guest_get_osinfo(Error **errp)
return info; return info;
} }
GuestDeviceInfoList *qmp_guest_get_devices(Error **errp)
{
error_setg(errp, QERR_UNSUPPORTED);
return NULL;
}
#ifndef HOST_NAME_MAX #ifndef HOST_NAME_MAX
# ifdef _POSIX_HOST_NAME_MAX # ifdef _POSIX_HOST_NAME_MAX
# define HOST_NAME_MAX _POSIX_HOST_NAME_MAX # define HOST_NAME_MAX _POSIX_HOST_NAME_MAX

View File

@ -1527,7 +1527,8 @@
# @pci: PCI device # @pci: PCI device
## ##
{ 'enum': 'GuestDeviceType', { 'enum': 'GuestDeviceType',
'data': [ 'pci' ] } 'data': [ 'pci' ],
'if': 'CONFIG_WIN32' }
## ##
# @GuestDeviceIdPCI: # @GuestDeviceIdPCI:
@ -1539,7 +1540,8 @@
# Since: 5.2 # Since: 5.2
## ##
{ 'struct': 'GuestDeviceIdPCI', { 'struct': 'GuestDeviceIdPCI',
'data': { 'vendor-id': 'uint16', 'device-id': 'uint16' } } 'data': { 'vendor-id': 'uint16', 'device-id': 'uint16' },
'if': 'CONFIG_WIN32' }
## ##
# @GuestDeviceId: # @GuestDeviceId:
@ -1553,7 +1555,8 @@
{ 'union': 'GuestDeviceId', { 'union': 'GuestDeviceId',
'base': { 'type': 'GuestDeviceType' }, 'base': { 'type': 'GuestDeviceType' },
'discriminator': 'type', 'discriminator': 'type',
'data': { 'pci': 'GuestDeviceIdPCI' } } 'data': { 'pci': 'GuestDeviceIdPCI' },
'if': 'CONFIG_WIN32' }
## ##
# @GuestDeviceInfo: # @GuestDeviceInfo:
@ -1574,7 +1577,8 @@
'*driver-date': 'int', '*driver-date': 'int',
'*driver-version': 'str', '*driver-version': 'str',
'*id': 'GuestDeviceId' '*id': 'GuestDeviceId'
} } },
'if': 'CONFIG_WIN32' }
## ##
# @guest-get-devices: # @guest-get-devices:
@ -1586,7 +1590,8 @@
# Since: 5.2 # Since: 5.2
## ##
{ 'command': 'guest-get-devices', { 'command': 'guest-get-devices',
'returns': ['GuestDeviceInfo'] } 'returns': ['GuestDeviceInfo'],
'if': 'CONFIG_WIN32' }
## ##
# @GuestAuthorizedKeys: # @GuestAuthorizedKeys: