From 48899e4c815dc2db7c714db08577d253bd5e2a09 Mon Sep 17 00:00:00 2001 From: Wido den Hollander Date: Tue, 27 May 2014 16:18:25 +0200 Subject: [PATCH] CLOUDSTACK-6783: Return a proper LibvirtStoragePool object after creating the pool In situations where libvirt lost the storage pool the KVM Agent will re-create the storage pool in libvirt. This could be then libvirt is restarted for example. The object returned internally was missing essential information like the sourceDir aka the Ceph pool, the monitor IPs, cephx information and such. In this case the first operation on this newly created pool would fail. All operations afterwards would succeed. --- .../kvm/storage/LibvirtStorageAdaptor.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java index 0adad01e69c..b6564da6fa5 100644 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java @@ -546,6 +546,20 @@ public class LibvirtStorageAdaptor implements StorageAdaptor { pool.setLocalPath(""); } + if (pool.getType() == StoragePoolType.RBD + || pool.getType() == StoragePoolType.Gluster) { + pool.setSourceHost(spd.getSourceHost()); + pool.setSourcePort(spd.getSourcePort()); + pool.setSourceDir(spd.getSourceDir()); + String authUsername = spd.getAuthUserName(); + if (authUsername != null) { + Secret secret = conn.secretLookupByUUIDString(spd.getSecretUUID()); + String secretValue = new String(Base64.encodeBase64(secret.getByteValue())); + pool.setAuthUsername(authUsername); + pool.setAuthSecret(secretValue); + } + } + pool.setCapacity(sp.getInfo().capacity); pool.setUsed(sp.getInfo().allocation); pool.setAvailable(sp.getInfo().available);