提交 a873b496 编写于 作者: J John Ferlan

storage: Add connection for autostart storage pool

Add a privileged field to storageDriverState

Use the privileged value in order to generate a connection which could
be passed to the various storage backend drivers.

In particular, the iSCSI driver will need a connect in order to perform
pool authentication using the 'chap' secrets and the RBD driver utilizes
the connection during pool refresh for pools using 'ceph' secrets.

For now that connection will be to be to qemu driver until a mechanism
is devised to get a connection to just the secret driver without qemu.
上级 c2257d2e
...@@ -354,6 +354,7 @@ struct _virStorageDriverState { ...@@ -354,6 +354,7 @@ struct _virStorageDriverState {
char *configDir; char *configDir;
char *autostartDir; char *autostartDir;
bool privileged;
}; };
typedef struct _virStoragePoolSourceList virStoragePoolSourceList; typedef struct _virStoragePoolSourceList virStoragePoolSourceList;
......
...@@ -68,6 +68,14 @@ static void storageDriverUnlock(virStorageDriverStatePtr driver) ...@@ -68,6 +68,14 @@ static void storageDriverUnlock(virStorageDriverStatePtr driver)
static void static void
storageDriverAutostart(virStorageDriverStatePtr driver) { storageDriverAutostart(virStorageDriverStatePtr driver) {
size_t i; size_t i;
virConnectPtr conn = NULL;
/* XXX Remove hardcoding of QEMU URI */
if (driverState->privileged)
conn = virConnectOpen("qemu:///system");
else
conn = virConnectOpen("qemu:///session");
/* Ignoring NULL conn - let backends decide */
for (i = 0; i < driver->pools.count; i++) { for (i = 0; i < driver->pools.count; i++) {
virStoragePoolObjPtr pool = driver->pools.objs[i]; virStoragePoolObjPtr pool = driver->pools.objs[i];
...@@ -82,7 +90,7 @@ storageDriverAutostart(virStorageDriverStatePtr driver) { ...@@ -82,7 +90,7 @@ storageDriverAutostart(virStorageDriverStatePtr driver) {
} }
if (backend->checkPool && if (backend->checkPool &&
backend->checkPool(NULL, pool, &started) < 0) { backend->checkPool(conn, pool, &started) < 0) {
virErrorPtr err = virGetLastError(); virErrorPtr err = virGetLastError();
VIR_ERROR(_("Failed to initialize storage pool '%s': %s"), VIR_ERROR(_("Failed to initialize storage pool '%s': %s"),
pool->def->name, err ? err->message : pool->def->name, err ? err->message :
...@@ -95,7 +103,7 @@ storageDriverAutostart(virStorageDriverStatePtr driver) { ...@@ -95,7 +103,7 @@ storageDriverAutostart(virStorageDriverStatePtr driver) {
pool->autostart && pool->autostart &&
!virStoragePoolObjIsActive(pool)) { !virStoragePoolObjIsActive(pool)) {
if (backend->startPool && if (backend->startPool &&
backend->startPool(NULL, pool) < 0) { backend->startPool(conn, pool) < 0) {
virErrorPtr err = virGetLastError(); virErrorPtr err = virGetLastError();
VIR_ERROR(_("Failed to autostart storage pool '%s': %s"), VIR_ERROR(_("Failed to autostart storage pool '%s': %s"),
pool->def->name, err ? err->message : pool->def->name, err ? err->message :
...@@ -107,10 +115,10 @@ storageDriverAutostart(virStorageDriverStatePtr driver) { ...@@ -107,10 +115,10 @@ storageDriverAutostart(virStorageDriverStatePtr driver) {
} }
if (started) { if (started) {
if (backend->refreshPool(NULL, pool) < 0) { if (backend->refreshPool(conn, pool) < 0) {
virErrorPtr err = virGetLastError(); virErrorPtr err = virGetLastError();
if (backend->stopPool) if (backend->stopPool)
backend->stopPool(NULL, pool); backend->stopPool(conn, pool);
VIR_ERROR(_("Failed to autostart storage pool '%s': %s"), VIR_ERROR(_("Failed to autostart storage pool '%s': %s"),
pool->def->name, err ? err->message : pool->def->name, err ? err->message :
_("no error message found")); _("no error message found"));
...@@ -121,6 +129,9 @@ storageDriverAutostart(virStorageDriverStatePtr driver) { ...@@ -121,6 +129,9 @@ storageDriverAutostart(virStorageDriverStatePtr driver) {
} }
virStoragePoolObjUnlock(pool); virStoragePoolObjUnlock(pool);
} }
if (conn)
virConnectClose(conn);
} }
/** /**
...@@ -152,6 +163,7 @@ storageStateInitialize(bool privileged, ...@@ -152,6 +163,7 @@ storageStateInitialize(bool privileged,
if (!base) if (!base)
goto error; goto error;
} }
driverState->privileged = privileged;
/* Configuration paths are either $USER_CONFIG_HOME/libvirt/storage/... (session) or /* Configuration paths are either $USER_CONFIG_HOME/libvirt/storage/... (session) or
* /etc/libvirt/storage/... (system). * /etc/libvirt/storage/... (system).
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册