[libvirt] [PATCH v2 1/5] Introduce virDomainRename API

Michal Privoznik mprivozn at redhat.com
Mon Aug 10 14:57:38 UTC 2015


On 06.08.2015 12:21, 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 |  2 ++
>  src/access/viraccessperm.c       |  3 ++-
>  src/access/viraccessperm.h       |  6 ++++++
>  src/driver-hypervisor.h          |  5 +++++
>  src/libvirt-domain.c             | 31 +++++++++++++++++++++++++++++++
>  src/libvirt_public.syms          |  5 +++++
>  src/remote/remote_driver.c       |  1 +
>  src/remote/remote_protocol.x     | 17 ++++++++++++++++-
>  src/remote_protocol-structs      |  8 ++++++++
>  9 files changed, 76 insertions(+), 2 deletions(-)
> 
> diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-domain.h
> index e8202cf..2ddc47d 100644
> --- a/include/libvirt/libvirt-domain.h
> +++ b/include/libvirt/libvirt-domain.h
> @@ -3837,4 +3837,6 @@ int virDomainSetUserPassword(virDomainPtr dom,
>                               const char *password,
>                               unsigned int flags);
> 
> +int virDomainRename(virDomainPtr dom, const char *new_name);
> +
>  #endif /* __VIR_LIBVIRT_DOMAIN_H__ */
> diff --git a/src/access/viraccessperm.c b/src/access/viraccessperm.c
> index 0f58290..bdc7f60 100644
> --- a/src/access/viraccessperm.c
> +++ b/src/access/viraccessperm.c
> @@ -43,7 +43,8 @@ VIR_ENUM_IMPL(virAccessPermDomain,
>                "fs_trim", "fs_freeze",
>                "block_read", "block_write", "mem_read",
>                "open_graphics", "open_device", "screenshot",
> -              "open_namespace", "set_time", "set_password");
> +              "open_namespace", "set_time", "set_password",
> +              "rename");
> 

This ^^ ..

>  VIR_ENUM_IMPL(virAccessPermInterface,
>                VIR_ACCESS_PERM_INTERFACE_LAST,
> diff --git a/src/access/viraccessperm.h b/src/access/viraccessperm.h
> index 1817da7..6ae4ee7 100644
> --- a/src/access/viraccessperm.h
> +++ b/src/access/viraccessperm.h
> @@ -306,6 +306,12 @@ typedef enum {
>       */
>      VIR_ACCESS_PERM_DOMAIN_SET_PASSWORD,
> 
> +    /**
> +     * @desc: Rename domain
> +     * @message: Renaming the domain requires authorization
> +     */
> +    VIR_ACCESS_PERM_DOMAIN_RENAME,
> +

.. and this change ^^ are not required since the new perm is not used
anywhere.

>      VIR_ACCESS_PERM_DOMAIN_LAST,
>  } virAccessPermDomain;
> 
> diff --git a/src/driver-hypervisor.h b/src/driver-hypervisor.h
> index 3275343..e8c8c2a 100644
> --- a/src/driver-hypervisor.h
> +++ b/src/driver-hypervisor.h
> @@ -650,6 +650,10 @@ typedef int
>  (*virDrvDomainIsActive)(virDomainPtr dom);
> 
>  typedef int
> +(*virDrvDomainRename)(virDomainPtr dom,
> +                      const char *new_name);
> +
> +typedef int
>  (*virDrvDomainIsPersistent)(virDomainPtr dom);
> 
>  typedef int
> @@ -1347,6 +1351,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..c200965 100644
> --- a/src/libvirt-domain.c
> +++ b/src/libvirt-domain.c
> @@ -8774,6 +8774,37 @@ virDomainIsPersistent(virDomainPtr dom)
>      return -1;
>  }
> 
> +/**
> + * virDomainRename:
> + * @dom: pointer to the domain object
> + * @new_name: new domain name
> + *
> + * Rename an inactive domain. New domain name is specified in the second
> + * argument.

I wouldn't state here that only an inactive domain can be renamed. It's
just a limitation of current implementation which may change in the
future. If you want to be more verbose (and I guess it's desirable here)
you may say that 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)

We really, really need to have 'unsigned int flags' here. Even though it
is not currently needed, it may be in the future. Every new API should
have it.

> +{
> +    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);
> +        if (ret < 0)
> +            goto error;
> +        return ret;
> +    }
> +
> +    virReportUnsupportedError();
> + error:
> +    virDispatchError(dom->conn);
> +    return -1;
> +}
> 

Michal




More information about the libvir-list mailing list