[libvirt] [PATCH v3 1/5] Introduce virDomainRename API
Michal Privoznik
mprivozn at redhat.com
Wed Aug 12 13:16:07 UTC 2015
On 10.08.2015 21:59, Tomas Meszaros wrote:
> Also, among with this new API new ACL that restricts rename capability
> is invented too.
>
> Signed-off-by: Tomas Meszaros <exo at tty.sk>
> ---
> include/libvirt/libvirt-domain.h | 4 ++++
> src/driver-hypervisor.h | 6 ++++++
> src/libvirt-domain.c | 34 ++++++++++++++++++++++++++++++++++
> src/libvirt_public.syms | 5 +++++
> src/remote/remote_driver.c | 1 +
> src/remote/remote_protocol.x | 18 +++++++++++++++++-
> src/remote_protocol-structs | 8 ++++++++
> 7 files changed, 75 insertions(+), 1 deletion(-)
>
> diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-domain.h
> index e8202cf..82f86bb 100644
> --- a/include/libvirt/libvirt-domain.h
> +++ b/include/libvirt/libvirt-domain.h
> @@ -3837,4 +3837,8 @@ int virDomainSetUserPassword(virDomainPtr dom,
> const char *password,
> unsigned int flags);
>
> +int virDomainRename(virDomainPtr dom,
> + const char *new_name,
> + unsigned int flags);
> +
> #endif /* __VIR_LIBVIRT_DOMAIN_H__ */
> diff --git a/src/driver-hypervisor.h b/src/driver-hypervisor.h
> index 3275343..ae2ec4d 100644
> --- a/src/driver-hypervisor.h
> +++ b/src/driver-hypervisor.h
> @@ -650,6 +650,11 @@ typedef int
> (*virDrvDomainIsActive)(virDomainPtr dom);
>
> typedef int
> +(*virDrvDomainRename)(virDomainPtr dom,
> + const char *new_name,
> + unsigned int flags);
> +
> +typedef int
> (*virDrvDomainIsPersistent)(virDomainPtr dom);
>
> typedef int
> @@ -1347,6 +1352,7 @@ struct _virHypervisorDriver {
> virDrvConnectIsEncrypted connectIsEncrypted;
> virDrvConnectIsSecure connectIsSecure;
> virDrvDomainIsActive domainIsActive;
> + virDrvDomainRename domainRename;
> virDrvDomainIsPersistent domainIsPersistent;
> virDrvDomainIsUpdated domainIsUpdated;
> virDrvConnectCompareCPU connectCompareCPU;
> diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c
> index 837933f..b8618d8 100644
> --- a/src/libvirt-domain.c
> +++ b/src/libvirt-domain.c
> @@ -8774,6 +8774,40 @@ virDomainIsPersistent(virDomainPtr dom)
> return -1;
> }
>
> +/**
> + * virDomainRename:
> + * @dom: pointer to the domain object
> + * @new_name: new domain name
> + * @flags: extra flags; not used yet, so callers should always pass 0
> + *
> + * Rename a domain. New domain name is specified in the second
> + * argument. Depending on each driver implementation it may be
> + * required that domain is in a specific state.
> + *
> + * Returns 0 if renamed, -1 on error
> + */
> +int
> +virDomainRename(virDomainPtr dom, const char *new_name,
> + unsigned int flags ATTRIBUTE_UNUSED)
Why? @flags are clearly used just a few lines below.
> +{
> + VIR_DEBUG("dom=%p, new_name=%s", dom, NULLSTR(new_name));
> +
> + virResetLastError();
> + virCheckDomainReturn(dom, -1);
> + virCheckNonNullArgGoto(new_name, error);
> +
> + if (dom->conn->driver->domainRename) {
> + int ret = dom->conn->driver->domainRename(dom, new_name, flags);
> + if (ret < 0)
> + goto error;
> + return ret;
> + }
> +
> + virReportUnsupportedError();
> + error:
> + virDispatchError(dom->conn);
> + return -1;
> +}
>
> /**
> * virDomainIsUpdated:
> diff --git a/src/libvirt_public.syms b/src/libvirt_public.syms
> index 2c653f2..dd94191 100644
> --- a/src/libvirt_public.syms
> +++ b/src/libvirt_public.syms
> @@ -720,4 +720,9 @@ LIBVIRT_1.2.17 {
> virTypedParamsAddStringList;
> } LIBVIRT_1.2.16;
>
> +LIBVIRT_1.2.19 {
> + global:
> + virDomainRename;
> +} LIBVIRT_1.2.17;
> +
> # .... define new API here using predicted next version number ....
> diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c
> index 5c4cf7c..ec26ebe 100644
> --- a/src/remote/remote_driver.c
> +++ b/src/remote/remote_driver.c
> @@ -8391,6 +8391,7 @@ static virHypervisorDriver hypervisor_driver = {
> .domainGetFSInfo = remoteDomainGetFSInfo, /* 1.2.11 */
> .domainInterfaceAddresses = remoteDomainInterfaceAddresses, /* 1.2.14 */
> .domainSetUserPassword = remoteDomainSetUserPassword, /* 1.2.16 */
> + .domainRename = remoteDomainRename, /* 1.2.19 */
> };
>
> static virNetworkDriver network_driver = {
> diff --git a/src/remote/remote_protocol.x b/src/remote/remote_protocol.x
> index 9f1be6b..770aa72 100644
> --- a/src/remote/remote_protocol.x
> +++ b/src/remote/remote_protocol.x
> @@ -3230,6 +3230,15 @@ struct remote_domain_set_user_password_args {
> unsigned int flags;
> };
>
> +struct remote_domain_rename_args {
> + remote_nonnull_domain dom;
> + remote_string new_name;
> + unsigned int flags;
> +};
> +
> +struct remote_domain_rename_ret {
> + int rename;
> +};
>
> /*----- Protocol. -----*/
>
> @@ -5696,5 +5705,12 @@ enum remote_procedure {
> * @generate:both
> * @acl: domain:set_password
> */
> - REMOTE_PROC_DOMAIN_SET_USER_PASSWORD = 357
> + REMOTE_PROC_DOMAIN_SET_USER_PASSWORD = 357,
> +
> + /**
> + * @generate: both
> + * @acl: domain:write
> + * @acl: domain:save
> + */
> + REMOTE_PROC_DOMAIN_RENAME = 358
> };
> diff --git a/src/remote_protocol-structs b/src/remote_protocol-structs
> index 48c3bd8..1fdaa55 100644
> --- a/src/remote_protocol-structs
> +++ b/src/remote_protocol-structs
> @@ -2684,6 +2684,13 @@ struct remote_domain_set_user_password_args {
> remote_string password;
> u_int flags;
> };
> +struct remote_domain_rename_args {
> + remote_nonnull_domain dom;
> + remote_string new_name;
need to add the flags:
u_int flags;
> +};
> +struct remote_domain_rename_ret {
> + int rename;
> +};
> enum remote_procedure {
> REMOTE_PROC_CONNECT_OPEN = 1,
> REMOTE_PROC_CONNECT_CLOSE = 2,
> @@ -3042,4 +3049,5 @@ enum remote_procedure {
> REMOTE_PROC_DOMAIN_ADD_IOTHREAD = 355,
> REMOTE_PROC_DOMAIN_DEL_IOTHREAD = 356,
> REMOTE_PROC_DOMAIN_SET_USER_PASSWORD = 357,
> + REMOTE_PROC_DOMAIN_RENAME = 358,
> };
Michal
More information about the libvir-list
mailing list