diff mbox series

[v2,12/22] qga: conditionalize schema for commands only supported on Windows

Message ID 20240613154406.1365469-7-berrange@redhat.com (mailing list archive)
State New, archived
Headers show
Series qga: clean up command source locations and conditionals | expand

Commit Message

Daniel P. Berrangé June 13, 2024, 3:43 p.m. UTC
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.

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---
 qga/commands-posix.c |  9 ---------
 qga/qapi-schema.json | 15 ++++++++++-----
 2 files changed, 10 insertions(+), 14 deletions(-)

Comments

Philippe Mathieu-Daudé July 3, 2024, 8:35 a.m. UTC | #1
On 13/6/24 17:43, Daniel P. Berrangé wrote:
> 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.
> 
> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
> ---
>   qga/commands-posix.c |  9 ---------
>   qga/qapi-schema.json | 15 ++++++++++-----
>   2 files changed, 10 insertions(+), 14 deletions(-)

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Konstantin Kostiuk July 12, 2024, 8:37 a.m. UTC | #2
Reviewed-by: Konstantin Kostiuk <kkostiuk@redhat.com>

On Thu, Jun 13, 2024 at 6:44 PM Daniel P. Berrangé <berrange@redhat.com>
wrote:

> 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.
>
> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
> ---
>  qga/commands-posix.c |  9 ---------
>  qga/qapi-schema.json | 15 ++++++++++-----
>  2 files changed, 10 insertions(+), 14 deletions(-)
>
> diff --git a/qga/commands-posix.c b/qga/commands-posix.c
> index 838dc3cf98..b7f96aa005 100644
> --- a/qga/commands-posix.c
> +++ b/qga/commands-posix.c
> @@ -1207,8 +1207,6 @@ GList *ga_command_init_blockedrpcs(GList
> *blockedrpcs)
>      blockedrpcs = g_list_append(blockedrpcs, g_strdup("guest-fstrim"));
>  #endif
>
> -    blockedrpcs = g_list_append(blockedrpcs,
> g_strdup("guest-get-devices"));
> -
>      return blockedrpcs;
>  }
>
> @@ -1419,13 +1417,6 @@ GuestOSInfo *qmp_guest_get_osinfo(Error **errp)
>      return info;
>  }
>
> -GuestDeviceInfoList *qmp_guest_get_devices(Error **errp)
> -{
> -    error_setg(errp, QERR_UNSUPPORTED);
> -
> -    return NULL;
> -}
> -
>  #ifndef HOST_NAME_MAX
>  # ifdef _POSIX_HOST_NAME_MAX
>  #  define HOST_NAME_MAX _POSIX_HOST_NAME_MAX
> diff --git a/qga/qapi-schema.json b/qga/qapi-schema.json
> index 700c5baa5a..2704b814ab 100644
> --- a/qga/qapi-schema.json
> +++ b/qga/qapi-schema.json
> @@ -1527,7 +1527,8 @@
>  # @pci: PCI device
>  ##
>  { 'enum': 'GuestDeviceType',
> -  'data': [ 'pci' ] }
> +  'data': [ 'pci' ],
> +  'if': 'CONFIG_WIN32' }
>
>  ##
>  # @GuestDeviceIdPCI:
> @@ -1539,7 +1540,8 @@
>  # Since: 5.2
>  ##
>  { 'struct': 'GuestDeviceIdPCI',
> -  'data': { 'vendor-id': 'uint16', 'device-id': 'uint16' } }
> +  'data': { 'vendor-id': 'uint16', 'device-id': 'uint16' },
> +  'if': 'CONFIG_WIN32' }
>
>  ##
>  # @GuestDeviceId:
> @@ -1553,7 +1555,8 @@
>  { 'union': 'GuestDeviceId',
>    'base': { 'type': 'GuestDeviceType' },
>    'discriminator': 'type',
> -  'data': { 'pci': 'GuestDeviceIdPCI' } }
> +  'data': { 'pci': 'GuestDeviceIdPCI' },
> +  'if': 'CONFIG_WIN32' }
>
>  ##
>  # @GuestDeviceInfo:
> @@ -1574,7 +1577,8 @@
>        '*driver-date': 'int',
>        '*driver-version': 'str',
>        '*id': 'GuestDeviceId'
> -  } }
> +  },
> +  'if': 'CONFIG_WIN32' }
>
>  ##
>  # @guest-get-devices:
> @@ -1586,7 +1590,8 @@
>  # Since: 5.2
>  ##
>  { 'command': 'guest-get-devices',
> -  'returns': ['GuestDeviceInfo'] }
> +  'returns': ['GuestDeviceInfo'],
> +  'if': 'CONFIG_WIN32' }
>
>  ##
>  # @GuestAuthorizedKeys:
> --
> 2.45.1
>
>
diff mbox series

Patch

diff --git a/qga/commands-posix.c b/qga/commands-posix.c
index 838dc3cf98..b7f96aa005 100644
--- a/qga/commands-posix.c
+++ b/qga/commands-posix.c
@@ -1207,8 +1207,6 @@  GList *ga_command_init_blockedrpcs(GList *blockedrpcs)
     blockedrpcs = g_list_append(blockedrpcs, g_strdup("guest-fstrim"));
 #endif
 
-    blockedrpcs = g_list_append(blockedrpcs, g_strdup("guest-get-devices"));
-
     return blockedrpcs;
 }
 
@@ -1419,13 +1417,6 @@  GuestOSInfo *qmp_guest_get_osinfo(Error **errp)
     return info;
 }
 
-GuestDeviceInfoList *qmp_guest_get_devices(Error **errp)
-{
-    error_setg(errp, QERR_UNSUPPORTED);
-
-    return NULL;
-}
-
 #ifndef HOST_NAME_MAX
 # ifdef _POSIX_HOST_NAME_MAX
 #  define HOST_NAME_MAX _POSIX_HOST_NAME_MAX
diff --git a/qga/qapi-schema.json b/qga/qapi-schema.json
index 700c5baa5a..2704b814ab 100644
--- a/qga/qapi-schema.json
+++ b/qga/qapi-schema.json
@@ -1527,7 +1527,8 @@ 
 # @pci: PCI device
 ##
 { 'enum': 'GuestDeviceType',
-  'data': [ 'pci' ] }
+  'data': [ 'pci' ],
+  'if': 'CONFIG_WIN32' }
 
 ##
 # @GuestDeviceIdPCI:
@@ -1539,7 +1540,8 @@ 
 # Since: 5.2
 ##
 { 'struct': 'GuestDeviceIdPCI',
-  'data': { 'vendor-id': 'uint16', 'device-id': 'uint16' } }
+  'data': { 'vendor-id': 'uint16', 'device-id': 'uint16' },
+  'if': 'CONFIG_WIN32' }
 
 ##
 # @GuestDeviceId:
@@ -1553,7 +1555,8 @@ 
 { 'union': 'GuestDeviceId',
   'base': { 'type': 'GuestDeviceType' },
   'discriminator': 'type',
-  'data': { 'pci': 'GuestDeviceIdPCI' } }
+  'data': { 'pci': 'GuestDeviceIdPCI' },
+  'if': 'CONFIG_WIN32' }
 
 ##
 # @GuestDeviceInfo:
@@ -1574,7 +1577,8 @@ 
       '*driver-date': 'int',
       '*driver-version': 'str',
       '*id': 'GuestDeviceId'
-  } }
+  },
+  'if': 'CONFIG_WIN32' }
 
 ##
 # @guest-get-devices:
@@ -1586,7 +1590,8 @@ 
 # Since: 5.2
 ##
 { 'command': 'guest-get-devices',
-  'returns': ['GuestDeviceInfo'] }
+  'returns': ['GuestDeviceInfo'],
+  'if': 'CONFIG_WIN32' }
 
 ##
 # @GuestAuthorizedKeys: