Introduce virDomainRename API

Also, among with this new API new ACL that restricts rename
capability is invented too.

Signed-off-by: Tomas Meszaros <exo@tty.sk>
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
Tomas Meszaros 2015-08-10 21:59:14 +02:00 committed by Michal Privoznik
parent 0e4972fe48
commit 9f7a559a6d
7 changed files with 77 additions and 1 deletions

View File

@ -3844,4 +3844,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__ */

View File

@ -649,6 +649,11 @@ typedef int
typedef int
(*virDrvDomainIsActive)(virDomainPtr dom);
typedef int
(*virDrvDomainRename)(virDomainPtr dom,
const char *new_name,
unsigned int flags);
typedef int
(*virDrvDomainIsPersistent)(virDomainPtr dom);
@ -1347,6 +1352,7 @@ struct _virHypervisorDriver {
virDrvConnectIsEncrypted connectIsEncrypted;
virDrvConnectIsSecure connectIsSecure;
virDrvDomainIsActive domainIsActive;
virDrvDomainRename domainRename;
virDrvDomainIsPersistent domainIsPersistent;
virDrvDomainIsUpdated domainIsUpdated;
virDrvConnectCompareCPU connectCompareCPU;

View File

@ -8774,6 +8774,41 @@ 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 successfully renamed, -1 on error
*/
int
virDomainRename(virDomainPtr dom,
const char *new_name,
unsigned int flags)
{
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:

View File

@ -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 ....

View File

@ -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 = {

View File

@ -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
};

View File

@ -2684,6 +2684,14 @@ 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;
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 +3050,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,
};