From 403addc59d128862468e41130bfb7eacdb083df1 Mon Sep 17 00:00:00 2001 From: Edison Su Date: Tue, 15 May 2012 13:04:10 -0700 Subject: [PATCH 01/13] bug CS-14833: if iso is xen/vmware tools, attach it to vm; status CS-14833: resolved fixed --- .../xen/resource/CitrixResourceBase.java | 23 +++++++++++++++---- .../src/com/cloud/vm/UserVmManagerImpl.java | 12 ++++++---- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java index 4741d6a9b78..f055ef6f6e6 100644 --- a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java +++ b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java @@ -821,11 +821,26 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe protected VDI mount(Connection conn, String vmName, VolumeTO volume) throws XmlRpcException, XenAPIException { if (volume.getType() == Volume.Type.ISO) { + String isopath = volume.getPath(); + if (isopath == null) { + return null; + } + if (isopath.startsWith("xs-tools")) { + try { + Set vdis = VDI.getByNameLabel(conn, isopath); + if (vdis.isEmpty()) { + throw new CloudRuntimeException("Could not find ISO with URL: " + isopath); + } + return vdis.iterator().next(); - String isopath = volume.getPath(); - if (isopath == null) { - return null; - } + } catch (XenAPIException e) { + throw new CloudRuntimeException("Unable to get pv iso: " + isopath + " due to " + e.toString()); + } catch (Exception e) { + throw new CloudRuntimeException("Unable to get pv iso: " + isopath + " due to " + e.toString()); + } + } + + int index = isopath.lastIndexOf("/"); String mountpoint = isopath.substring(0, index); diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index 5d8bcc84642..b35a94da26c 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -2549,11 +2549,15 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager Pair isoPathPair = _storageMgr.getAbsoluteIsoPath(template.getId(), vm.getDataCenterIdToDeployIn()); - if (isoPathPair == null) { - s_logger.warn("Couldn't get absolute iso path"); - return false; + if (template.getTemplateType() == TemplateType.PERHOST) { + isoPath = template.getName(); } else { - isoPath = isoPathPair.first(); + if (isoPathPair == null) { + s_logger.warn("Couldn't get absolute iso path"); + return false; + } else { + isoPath = isoPathPair.first(); + } } if (template.isBootable()) { From 9fa63cfe6173e0ea94fe657e064b47c9d005a679 Mon Sep 17 00:00:00 2001 From: Edison Su Date: Tue, 15 May 2012 14:41:47 -0700 Subject: [PATCH 02/13] CS-14609 turn on debug log, if zone is not ready to start ssvm/cpvm. "Zone host is ready, but console proxy template" means system vm template is not in "Downloaded" state on secondary storage "Primary storage is not ready" means the template is not been downloaded to primary storage, possible reasons: haven't add primary storage, or primary storage download is not finished/failed. --- .../com/cloud/consoleproxy/ConsoleProxyManagerImpl.java | 8 ++++---- .../storage/secondary/SecondaryStorageManagerImpl.java | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java index 612d2b69797..088be6296ce 100755 --- a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java +++ b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java @@ -1123,13 +1123,13 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx if (l != null && l.size() > 0 && l.get(0).second().intValue() > 0) { return true; } else { - if (s_logger.isTraceEnabled()) { - s_logger.trace("Primary storage is not ready, wait until it is ready to launch console proxy"); + if (s_logger.isDebugEnabled()) { + s_logger.debug("Primary storage is not ready, wait until it is ready to launch console proxy"); } } } else { - if (s_logger.isTraceEnabled()) { - s_logger.trace("Zone host is ready, but console proxy template is not ready"); + if (s_logger.isDebugEnabled()) { + s_logger.debug("Zone host is ready, but console proxy template: " + template.getId() + " is not ready on secondary storage: " + secondaryStorageHost.getId()); } } } diff --git a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java index 6accab99594..a8bc143e0c6 100755 --- a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java +++ b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java @@ -727,8 +727,8 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V } } } else { - if (s_logger.isTraceEnabled()) { - s_logger.trace("Zone host is ready, but secondary storage vm template is not ready"); + if (s_logger.isDebugEnabled()) { + s_logger.debug("Zone host is ready, but secondary storage vm template: " + template.getId() + " is not ready on secondary storage: " + secHost.getId()); } } } From bafc3f2a5af771d543f081164d7af4b323012f24 Mon Sep 17 00:00:00 2001 From: Edison Su Date: Tue, 15 May 2012 15:12:18 -0700 Subject: [PATCH 03/13] CS-14521 Remove CLVM, due to license issue --- .../computing/LibvirtComputingResource.java | 29 +++---- .../agent/storage/KVMStoragePoolManager.java | 12 +-- .../agent/storage/LibvirtStorageAdaptor.java | 20 +---- .../agent/storage/LibvirtStoragePool.java | 6 +- api/src/com/cloud/storage/Storage.java | 1 - scripts/storage/qcow2/managesnapshot.sh | 87 +------------------ .../com/cloud/storage/StorageManagerImpl.java | 4 +- ui/scripts/system.js | 1 - ui/scripts/zoneWizard.js | 1 - 9 files changed, 23 insertions(+), 138 deletions(-) diff --git a/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java b/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java index c7f24619c91..d4e24fd6147 100755 --- a/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java +++ b/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java @@ -2618,19 +2618,16 @@ public class LibvirtComputingResource extends ServerResourceBase implements } } else { int devId = (int) volume.getDeviceId(); - if (pool.getType() == StoragePoolType.CLVM) { - disk.defBlockBasedDisk(physicalDisk.getPath(), devId, - diskBusType); + + if (volume.getType() == Volume.Type.DATADISK) { + disk.defFileBasedDisk(physicalDisk.getPath(), devId, + DiskDef.diskBus.VIRTIO, + DiskDef.diskFmtType.QCOW2); } else { - if (volume.getType() == Volume.Type.DATADISK) { - disk.defFileBasedDisk(physicalDisk.getPath(), devId, - DiskDef.diskBus.VIRTIO, - DiskDef.diskFmtType.QCOW2); - } else { - disk.defFileBasedDisk(physicalDisk.getPath(), devId, - diskBusType, DiskDef.diskFmtType.QCOW2); - } + disk.defFileBasedDisk(physicalDisk.getPath(), devId, + diskBusType, DiskDef.diskFmtType.QCOW2); } + } vm.getDevices().addDevice(disk); @@ -2682,12 +2679,10 @@ public class LibvirtComputingResource extends ServerResourceBase implements /* add patch disk */ DiskDef patchDisk = new DiskDef(); - if (pool.getType() == StoragePoolType.CLVM) { - patchDisk.defBlockBasedDisk(datadiskPath, 1, rootDisk.getBusType()); - } else { - patchDisk.defFileBasedDisk(datadiskPath, 1, rootDisk.getBusType(), - DiskDef.diskFmtType.RAW); - } + + patchDisk.defFileBasedDisk(datadiskPath, 1, rootDisk.getBusType(), + DiskDef.diskFmtType.RAW); + disks.add(patchDisk); String bootArgs = vmSpec.getBootArgs(); diff --git a/agent/src/com/cloud/agent/storage/KVMStoragePoolManager.java b/agent/src/com/cloud/agent/storage/KVMStoragePoolManager.java index 337bd3aab96..d4cc0c25321 100644 --- a/agent/src/com/cloud/agent/storage/KVMStoragePoolManager.java +++ b/agent/src/com/cloud/agent/storage/KVMStoragePoolManager.java @@ -71,15 +71,9 @@ public class KVMStoragePoolManager { public KVMPhysicalDisk createDiskFromTemplate(KVMPhysicalDisk template, String name, KVMStoragePool destPool) { - if (destPool.getType() == StoragePoolType.CLVM) { - return this._storageAdaptor.createDiskFromTemplate(template, name, - KVMPhysicalDisk.PhysicalDiskFormat.RAW, template.getSize(), - destPool); - } else { - return this._storageAdaptor.createDiskFromTemplate(template, name, - KVMPhysicalDisk.PhysicalDiskFormat.QCOW2, - template.getSize(), destPool); - } + return this._storageAdaptor.createDiskFromTemplate(template, name, + KVMPhysicalDisk.PhysicalDiskFormat.QCOW2, + template.getSize(), destPool); } public KVMPhysicalDisk createTemplateFromDisk(KVMPhysicalDisk disk, diff --git a/agent/src/com/cloud/agent/storage/LibvirtStorageAdaptor.java b/agent/src/com/cloud/agent/storage/LibvirtStorageAdaptor.java index f0115395308..bf0bcda05aa 100644 --- a/agent/src/com/cloud/agent/storage/LibvirtStorageAdaptor.java +++ b/agent/src/com/cloud/agent/storage/LibvirtStorageAdaptor.java @@ -418,19 +418,11 @@ public class LibvirtStorageAdaptor implements StorageAdaptor { if (spd.getPoolType() == LibvirtStoragePoolDef.poolType.NETFS || spd.getPoolType() == LibvirtStoragePoolDef.poolType.DIR) { type = StoragePoolType.Filesystem; - } else if (spd.getPoolType() == LibvirtStoragePoolDef.poolType.LOGICAL) { - type = StoragePoolType.CLVM; } LibvirtStoragePool pool = new LibvirtStoragePool(uuid, storage.getName(), type, this, storage); pool.setLocalPath(spd.getTargetPath()); - - if (pool.getType() == StoragePoolType.CLVM) { - pool.setCapacity(storage.getInfo().capacity); - pool.setUsed(storage.getInfo().allocation); - } else { - getStats(pool); - } + getStats(pool); return pool; } catch (LibvirtException e) { throw new CloudRuntimeException(e.toString()); @@ -491,8 +483,6 @@ public class LibvirtStorageAdaptor implements StorageAdaptor { } else if (type == StoragePoolType.SharedMountPoint || type == StoragePoolType.Filesystem) { sp = CreateSharedStoragePool(conn, name, host, path); - } else if (type == StoragePoolType.CLVM) { - sp = createCLVMStoragePool(conn, name, host, path); } } @@ -507,12 +497,8 @@ public class LibvirtStorageAdaptor implements StorageAdaptor { sp.getName(), type, this, sp); pool.setLocalPath(spd.getTargetPath()); - if (pool.getType() == StoragePoolType.CLVM) { - pool.setCapacity(sp.getInfo().capacity); - pool.setUsed(sp.getInfo().allocation); - } else { - getStats(pool); - } + getStats(pool); + return pool; } catch (LibvirtException e) { throw new CloudRuntimeException(e.toString()); diff --git a/agent/src/com/cloud/agent/storage/LibvirtStoragePool.java b/agent/src/com/cloud/agent/storage/LibvirtStoragePool.java index 35b2989c959..1722732e153 100644 --- a/agent/src/com/cloud/agent/storage/LibvirtStoragePool.java +++ b/agent/src/com/cloud/agent/storage/LibvirtStoragePool.java @@ -79,11 +79,7 @@ public class LibvirtStoragePool implements KVMStoragePool { @Override public PhysicalDiskFormat getDefaultFormat() { - if (getStoragePoolType() == StoragePoolType.CLVM) { - return PhysicalDiskFormat.RAW; - } else { - return PhysicalDiskFormat.QCOW2; - } + return PhysicalDiskFormat.QCOW2; } @Override diff --git a/api/src/com/cloud/storage/Storage.java b/api/src/com/cloud/storage/Storage.java index b683b9edfdf..428fc7d2f7a 100755 --- a/api/src/com/cloud/storage/Storage.java +++ b/api/src/com/cloud/storage/Storage.java @@ -92,7 +92,6 @@ public class Storage { Iscsi(true), // for e.g., ZFS Comstar ISO(false), // for iso image LVM(false), // XenServer local LVM SR - CLVM(true), SharedMountPoint(true), VMFS(true), // VMware VMFS storage PreSetup(true), // for XenServer, Storage Pool is set up by customers. diff --git a/scripts/storage/qcow2/managesnapshot.sh b/scripts/storage/qcow2/managesnapshot.sh index 57243e85f24..273b8dc9990 100755 --- a/scripts/storage/qcow2/managesnapshot.sh +++ b/scripts/storage/qcow2/managesnapshot.sh @@ -43,61 +43,7 @@ create_snapshot() { local snapshotname="$2" local failed=0 - if [ -b "${disk}" ] && lvm lvs "${disk}" >/dev/null 2>&1; then - local lv=$( lvm lvs --noheadings --unbuffered --separator=/ "${disk}" 2>/dev/null | sed 's|^[[:space:]]\+||' ) - local lvname=$( echo "${lv}" | awk -F/ '{ print $1 }' ) - local vgname=$( echo "${lv}" | awk -F/ '{ print $2 }' ) - local lvdmname=$( echo "${lvname}" | sed 's|-|--|g' ) - local vgdmname=$( echo "${vgname}" | sed 's|-|--|g' ) - local blockdevname="/dev/mapper/${vgdmname}-${lvdmname}" - local blockdevsnap="/dev/mapper/${vgdmname}-${snapshotname}" - local blockdevsize=$( blockdev --getsz "${blockdevname}" ) - - lvm lvcreate --name "${snapshotname}-cow" --size "$(blockdev --getsize64 ${blockdevname})b" "${vgname}" >&2 || return 1 - dmsetup suspend "${vgdmname}-${lvdmname}" >&2 - [ $? -ne 0 ] && destroy_snapshot "${disk}" "${snapshotname}" && return 1 - if dmsetup table | awk -v e=1 -v tbl="${vgdmname}-${lvdmname}-real:" '$1 == tbl { e=0 }; END { exit e }'; then - dmsetup create "${vgdmname}-${snapshotname}" --notable >&2 - [ $? -ne 0 ] && destroy_snapshot "${disk}" "${snapshotname}" && return 1 - - echo "0 ${blockdevsize} snapshot ${blockdevname}-real ${blockdevsnap}--cow p 64" | \ - dmsetup load "${vgdmname}-${snapshotname}" >&2 - [ $? -ne 0 ] && destroy_snapshot "${disk}" "${snapshotname}" && return 1 - - dmsetup resume "${vgdmname}-${snapshotname}" >&2 - [ $? -ne 0 ] && destroy_snapshot "${disk}" "${snapshotname}" && return 1 - - else - - dmsetup create "${vgdmname}-${lvdmname}-real" --notable >&2 - [ $? -ne 0 ] && destroy_snapshot "${disk}" "${snapshotname}" && return 1 - - dmsetup table "${vgdmname}-${lvdmname}" | dmsetup load "${vgdmname}-${lvdmname}-real" >&2 - [ $? -ne 0 ] && destroy_snapshot "${disk}" "${snapshotname}" && return 1 - - dmsetup resume "${vgdmname}-${lvdmname}-real" >&2 - [ $? -ne 0 ] && destroy_snapshot "${disk}" "${snapshotname}" && return 1 - - dmsetup create "${vgdmname}-${snapshotname}" --notable >&2 - [ $? -ne 0 ] && destroy_snapshot "${disk}" "${snapshotname}" && return 1 - - echo "0 ${blockdevsize} snapshot ${blockdevname}-real ${blockdevsnap}--cow p 64" | \ - dmsetup load "${vgdmname}-${snapshotname}" >&2 - [ $? -ne 0 ] && destroy_snapshot "${disk}" "${snapshotname}" && return 1 - - echo "0 ${blockdevsize} snapshot-origin ${blockdevname}-real" | \ - dmsetup load "${vgdmname}-${lvdmname}" - [ $? -ne 0 ] && destroy_snapshot "${disk}" "${snapshotname}" && return 1 - - dmsetup resume "${vgdmname}-${snapshotname}" >&2 - [ $? -ne 0 ] && destroy_snapshot "${disk}" "${snapshotname}" && return 1 - - fi - - dmsetup resume "${vgdmname}-${lvdmname}" >&2 - [ $? -ne 0 ] && destroy_snapshot "${disk}" "${snapshotname}" && return 1 - - elif [ -f "${disk}" ]; then + if [ -f "${disk}" ]; then $qemu_img snapshot -c "$snapshotname" $disk @@ -124,24 +70,8 @@ destroy_snapshot() { local disk=$1 local snapshotname=$2 local failed=0 - if [ -b ${disk} ]; then - local lvname=$( echo "${disk}" | awk -F/ '{ print $(NF) }' ) # ' - local vgname=$( echo "${disk}" | awk -F/ '{ print $(NF-1) }' ) # ' - local lvdmname=$( echo "${lvname}" | sed 's|-|--|g' ) - local vgdmname=$( echo "${vgname}" | sed 's|-|--|g' ) - if [ $( dmsetup --columns --noheadings --separator=: info "${vgdmname}-${lvdmname}-real" | awk -F: '{ print $5 }' ) -le 2 ]; then - dmsetup suspend "${vgdmname}-${lvdmname}" >&2 - dmsetup table "${vgdmname}-${lvdmname}-real" | dmsetup load "${vgdmname}-${lvdmname}" >&2 - dmsetup resume "${vgdmname}-${lvdmname}" >&2 - dmsetup remove "${vgdmname}-${snapshotname}" >&2 - dmsetup remove "${vgdmname}-${lvdmname}-real" >&2 - else - dmsetup remove "${vgdmname}-${snapshotname}" >&2 - fi - lvm lvremove -f "${vgname}/${snapshotname}-cow" >&2 - - elif [ -f $disk ]; then + if [ -f $disk ]; then $qemu_img snapshot -d "$snapshotname" $disk if [ $? -gt 0 ] then @@ -186,18 +116,7 @@ backup_snapshot() { fi fi - if [ -b ${disk} ] && lvm lvs "${disk}" >/dev/null 2>&1; then - local lv=$( lvm lvs --noheadings --unbuffered --separator=/ "${disk}" 2>/dev/null | sed 's|^[[:space:]]\+||' ) - local vgname=$( echo "${lv}" | awk -F/ '{ print $2 }' ) - local vgdmname=$( echo "${vgname}" | sed 's|-|--|g' ) - - if [ -x "$( dirname $0 )/raw2qcow2.sh" ]; then - "$( dirname $0 )/raw2qcow2.sh" "/dev/mapper/${vgdmname}-${snapshotname}" "${destPath}/${destName}" - else - $qemu_img convert -f raw -O qcow2 "/dev/mapper/${vgdmname}-${snapshotname}" "${destPath}/${destName}" - fi - return 0 - elif [ -f ${disk} ]; then + if [ -f ${disk} ]; then # Does the snapshot exist? $qemu_img snapshot -l $disk|grep -w "$snapshotname" >& /dev/null if [ $? -gt 0 ] diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java index df7e95b2008..777f17eef73 100755 --- a/server/src/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/com/cloud/storage/StorageManagerImpl.java @@ -1294,8 +1294,6 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag pool = new StoragePoolVO(StoragePoolType.Filesystem, "localhost", 0, hostPath); } else if (scheme.equalsIgnoreCase("sharedMountPoint")) { pool = new StoragePoolVO(StoragePoolType.SharedMountPoint, storageHost, 0, hostPath); - } else if (scheme.equalsIgnoreCase("clvm")) { - pool = new StoragePoolVO(StoragePoolType.CLVM, storageHost, 0, hostPath.replaceFirst("/", "")); } else if (scheme.equalsIgnoreCase("PreSetup")) { pool = new StoragePoolVO(StoragePoolType.PreSetup, storageHost, 0, hostPath); } else if (scheme.equalsIgnoreCase("iscsi")) { @@ -1594,7 +1592,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag s_logger.debug("creating pool " + pool.getName() + " on host " + hostId); if (pool.getPoolType() != StoragePoolType.NetworkFilesystem && pool.getPoolType() != StoragePoolType.Filesystem && pool.getPoolType() != StoragePoolType.IscsiLUN && pool.getPoolType() != StoragePoolType.Iscsi && pool.getPoolType() != StoragePoolType.VMFS && pool.getPoolType() != StoragePoolType.SharedMountPoint - && pool.getPoolType() != StoragePoolType.PreSetup && pool.getPoolType() != StoragePoolType.OCFS2 && pool.getPoolType() != StoragePoolType.CLVM) { + && pool.getPoolType() != StoragePoolType.PreSetup && pool.getPoolType() != StoragePoolType.OCFS2) { s_logger.warn(" Doesn't support storage pool type " + pool.getPoolType()); return false; } diff --git a/ui/scripts/system.js b/ui/scripts/system.js index 8217bd923b9..6d0b14490d6 100644 --- a/ui/scripts/system.js +++ b/ui/scripts/system.js @@ -7261,7 +7261,6 @@ var items = []; items.push({id: "nfs", description: "nfs"}); items.push({id: "SharedMountPoint", description: "SharedMountPoint"}); - items.push({id: "clvm", description: "CLVM"}); args.response.success({data: items}); } else if(selectedClusterObj.hypervisortype == "XenServer") { diff --git a/ui/scripts/zoneWizard.js b/ui/scripts/zoneWizard.js index 025542e0816..c616ffe33bb 100644 --- a/ui/scripts/zoneWizard.js +++ b/ui/scripts/zoneWizard.js @@ -885,7 +885,6 @@ var items = []; items.push({id: "nfs", description: "nfs"}); items.push({id: "SharedMountPoint", description: "SharedMountPoint"}); - items.push({id: "clvm", description: "CLVM"}); args.response.success({data: items}); } else if(selectedClusterObj.hypervisortype == "XenServer") { From 1347b2218c58a9430aaee2b56d8d7f633604092e Mon Sep 17 00:00:00 2001 From: Jessica Wang Date: Tue, 15 May 2012 15:19:15 -0700 Subject: [PATCH 04/13] CS-14905: volume page - Attach Disk action - Instance dropdown - populate only instances whose hypervisor matches this volume's hypervisor. --- ui/scripts/storage.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ui/scripts/storage.js b/ui/scripts/storage.js index fbc96a3d8fa..7d357e20a5e 100644 --- a/ui/scripts/storage.js +++ b/ui/scripts/storage.js @@ -602,7 +602,8 @@ $.ajax({ url: createURL('listVirtualMachines'), data: $.extend(data, { - state: this.toString() + state: this.toString(), + hypervisor: args.context.volumes[0].hypervisor }), async: false, success: function(json) { From 6ab317b60f0459870db3c23c15557a688214dc34 Mon Sep 17 00:00:00 2001 From: Jessica Wang Date: Tue, 15 May 2012 15:43:43 -0700 Subject: [PATCH 05/13] cloudstack 3.0 UI - IP Address page - action filter - optimize status handling. --- ui/scripts/network.js | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/ui/scripts/network.js b/ui/scripts/network.js index 95ed548a3ea..9b52ff0e5db 100644 --- a/ui/scripts/network.js +++ b/ui/scripts/network.js @@ -33,11 +33,7 @@ var allowedActions = args.context.actions; var disallowedActions = []; var item = args.context.item; - var status = item.state; - - if (status == 'Released') { - return []; - } + var status = item.state; if (status == 'Destroyed' || status == 'Releasing' || @@ -46,7 +42,7 @@ status == 'Allocating' || item.account == 'system' || item.issystem == true ) { - disallowedActions = allowedActions; + return []; } if (item.isstaticnat) { From e1f6b1b12542d5cf8b117095f98c72af02f70d9c Mon Sep 17 00:00:00 2001 From: Jessica Wang Date: Tue, 15 May 2012 16:03:38 -0700 Subject: [PATCH 06/13] cloudstack 3.0 UI - IP Address page - args.id is obsolete. Use args.context.ipAddresses[0].id instead. --- ui/scripts/network.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/scripts/network.js b/ui/scripts/network.js index 9b52ff0e5db..097145db6ec 100644 --- a/ui/scripts/network.js +++ b/ui/scripts/network.js @@ -1395,7 +1395,7 @@ $.ajax({ url: createURL('listPublicIpAddresses'), data: { - id: args.id + id: args.context.ipAddresses[0].id }, dataType: "json", async: true, From 93d6b668a24694fd0857b21d726820ea9ed51964 Mon Sep 17 00:00:00 2001 From: Jessica Wang Date: Tue, 15 May 2012 16:19:41 -0700 Subject: [PATCH 07/13] CS-14901: cloudstack 3.0 UI - IP Address page - SourceNAT IP - when network offering's Conserve Mode is off, hide Enable Static NAT, Enable VPN action. --- ui/scripts/network.js | 78 ++++++++++++++++++++++++++++++------------- 1 file changed, 55 insertions(+), 23 deletions(-) diff --git a/ui/scripts/network.js b/ui/scripts/network.js index 097145db6ec..0d7250c7652 100644 --- a/ui/scripts/network.js +++ b/ui/scripts/network.js @@ -44,7 +44,26 @@ item.issystem == true ) { return []; } - + + if(item.networkOfferingConserveMode == false) { + /* + (1) If IP is SourceNat, no LoadBalancer/PortForwarding/VPN/StaticNat can be added/enabled. + */ + if (item.issourcenat){ + disallowedActions.push('enableStaticNAT'); + disallowedActions.push('enableVPN'); + } + + /* + (2) If IP is non-SourceNat, show LoadBalancer/PortForwarding/VPN/StaticNat. + 1. Once a LoadBalancer rule is added, hide PortForwarding/VPN/StaticNat. + 2. Once a PortForwarding rule is added, hide LoadBalancer/VPN/StaticNat. + 3. Once VPN is enabled, hide LoadBalancer/PortForwarding/StaticNat. + 4. Once StaticNat is enabled, hide LoadBalancer/PortForwarding/VPN. + */ + + } + if (item.isstaticnat) { disallowedActions.push('enableStaticNAT'); } else { @@ -1400,28 +1419,41 @@ dataType: "json", async: true, success: function(json) { - var item = items[0]; - // Get VPN data - $.ajax({ - url: createURL('listRemoteAccessVpns'), - data: { - listAll: true, - publicipid: item.id - }, - dataType: 'json', - async: true, - success: function(vpnResponse) { - var isVPNEnabled = vpnResponse.listremoteaccessvpnsresponse.count; - if (isVPNEnabled) { - item.vpnenabled = true; - item.remoteaccessvpn = vpnResponse.listremoteaccessvpnsresponse.remoteaccessvpn[0]; - }; - args.response.success({ - actionFilter: actionFilters.ipAddress, - data: item - }); - } - }); + var ipObj = items[0]; + $.ajax({ + url: createURL('listNetworkOfferings'), + data: { + id: args.context.networks[0].networkofferingid + }, + dataType: 'json', + async: true, + success: function(json) { + var networkOfferingObj = json.listnetworkofferingsresponse.networkoffering[0]; + ipObj.networkOfferingConserveMode= networkOfferingObj.conservemode; + + // Get VPN data + $.ajax({ + url: createURL('listRemoteAccessVpns'), + data: { + listAll: true, + publicipid: ipObj.id + }, + dataType: 'json', + async: true, + success: function(vpnResponse) { + var isVPNEnabled = vpnResponse.listremoteaccessvpnsresponse.count; + if (isVPNEnabled) { + ipObj.vpnenabled = true; + ipObj.remoteaccessvpn = vpnResponse.listremoteaccessvpnsresponse.remoteaccessvpn[0]; + }; + args.response.success({ + actionFilter: actionFilters.ipAddress, + data: ipObj + }); + } + }); + } + }); }, error: function(data) { args.response.error(parseXMLHttpResponse(data)); From 09b711b13195ac986829ba8f00708c4b8062fcef Mon Sep 17 00:00:00 2001 From: Nitin Mehta Date: Wed, 16 May 2012 18:46:52 +0530 Subject: [PATCH 08/13] bug CS-14931: Put in 'Disk' during upgrade for putting in disk offerring --- setup/db/db/schema-302to303.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/setup/db/db/schema-302to303.sql b/setup/db/db/schema-302to303.sql index 15f8fb89500..668d03e3fe7 100755 --- a/setup/db/db/schema-302to303.sql +++ b/setup/db/db/schema-302to303.sql @@ -59,7 +59,7 @@ CREATE TABLE `cloud`.`volume_host_ref` ( INDEX `i_volume_host_ref__volume_id`(`volume_id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; -INSERT IGNORE INTO `cloud`.`disk_offering` (name, display_text, customized, unique_name, disk_size, system_use) VALUES ( 'Custom', 'Custom Disk', 1, 'Cloud.com-Custom', 0, 0); +INSERT IGNORE INTO `cloud`.`disk_offering` (name, display_text, customized, unique_name, disk_size, system_use, type) VALUES ( 'Custom', 'Custom Disk', 1, 'Cloud.com-Custom', 0, 0, 'Disk'); INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Storage', 'DEFAULT', 'management-server', 'storage.max.volume.upload.size', 500, 'The maximum size for a uploaded volume(in GB).'); # Changes for OVS tunnel manager @@ -116,4 +116,4 @@ DELETE FROM `cloud`.`configuration` WHERE name='xen.max.version'; DELETE FROM `cloud`.`configuration` WHERE name='xen.max.xapi.version'; DELETE FROM `cloud`.`configuration` WHERE name='xen.min.product.version'; DELETE FROM `cloud`.`configuration` WHERE name='xen.min.version'; -DELETE FROM `cloud`.`configuration` WHERE name='xen.min.xapi.version'; \ No newline at end of file +DELETE FROM `cloud`.`configuration` WHERE name='xen.min.xapi.version'; From 2153ce96f703efb2b5e3c396836f3ee43f12c660 Mon Sep 17 00:00:00 2001 From: Nitin Mehta Date: Wed, 16 May 2012 21:45:48 +0530 Subject: [PATCH 09/13] bug CS-14321: Correcting listVolumes API call to return valid value for isExtractable for ISO derived disk and DATA disk. --- server/src/com/cloud/api/ApiResponseHelper.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 9cc1a8844d7..53fbaaf1481 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -114,6 +114,7 @@ import com.cloud.dc.VlanVO; import com.cloud.domain.Domain; import com.cloud.event.Event; import com.cloud.exception.InvalidParameterValueException; +import com.cloud.exception.PermissionDeniedException; import com.cloud.host.Host; import com.cloud.host.HostStats; import com.cloud.host.HostVO; @@ -158,6 +159,7 @@ import com.cloud.storage.Snapshot; import com.cloud.storage.Storage.ImageFormat; import com.cloud.storage.Storage.StoragePoolType; import com.cloud.storage.Storage.TemplateType; +import com.cloud.storage.Storage; import com.cloud.storage.StoragePool; import com.cloud.storage.StoragePoolVO; import com.cloud.storage.StorageStats; @@ -1099,9 +1101,15 @@ public class ApiResponseHelper implements ResponseGenerator { } volResponse.setAttached(volume.getAttached()); - volResponse.setDestroyed(volume.getState() == Volume.State.Destroy); - VMTemplateVO template = ApiDBUtils.findTemplateById(volume.getTemplateId()); - boolean isExtractable = template != null && template.isExtractable() && !(template.getTemplateType() == TemplateType.SYSTEM); + volResponse.setDestroyed(volume.getState() == Volume.State.Destroy); + boolean isExtractable = true; + if (volume.getVolumeType() != Volume.Type.DATADISK) { // Datadisk dont have any template dependence. + VMTemplateVO template = ApiDBUtils.findTemplateById(volume.getTemplateId()); + if (template != null) { // For ISO based volumes template = null and we allow extraction of all ISO based volumes + isExtractable = template.isExtractable() && template.getTemplateType() != Storage.TemplateType.SYSTEM; + } + } + volResponse.setExtractable(isExtractable); volResponse.setObjectName("volume"); return volResponse; From e323a4f72576cda8ed0032cbb7aab74e0c6601bd Mon Sep 17 00:00:00 2001 From: Edison Su Date: Wed, 16 May 2012 10:24:07 -0700 Subject: [PATCH 10/13] CS-14871 return hostip in getvncportcommand --- .../agent/resource/computing/LibvirtComputingResource.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java b/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java index d4e24fd6147..659306ee303 100755 --- a/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java +++ b/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java @@ -299,7 +299,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements protected String _linkLocalBridgeName; protected String _publicBridgeName; protected String _guestBridgeName; - protected String _privateBridgeIp; + protected String _privateIp; protected String _pool; protected String _localGateway; private boolean _can_bridge_firewall; @@ -1805,7 +1805,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements try { Connect conn = LibvirtConnection.getConnection(); Integer vncPort = getVncPort(conn, cmd.getName()); - return new GetVncPortAnswer(cmd, 5900 + vncPort); + return new GetVncPortAnswer(cmd, _privateIp, 5900 + vncPort); } catch (Exception e) { return new GetVncPortAnswer(cmd, e.toString()); } @@ -2967,6 +2967,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements RouterPrivateIpStrategy.HostLocal); cmd.setStateChanges(changes); fillNetworkInformation(cmd); + _privateIp = cmd.getPrivateIpAddress(); cmd.getHostDetails().putAll(getVersionStrings()); cmd.setPool(_pool); cmd.setCluster(_clusterId); From f3a73d722f2c26fb8288b44fdd3dd5eab8043a30 Mon Sep 17 00:00:00 2001 From: Brian Federle Date: Wed, 16 May 2012 10:43:36 -0700 Subject: [PATCH 11/13] UI proprietary build: rename 'CloudStack' -> 'CloudPlatform' When EULA is present for a proprietary build, show 'CloudPlatform' instead of 'CloudStack' in the logo for the login form and top header. --- ui/css/cloudstack3.css | 9 +++++++++ ui/images/logo-cloudplatform.png | Bin 0 -> 1726 bytes ui/images/logo-login.png | Bin 7460 -> 8923 bytes ui/scripts/ui/core.js | 2 +- 4 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 ui/images/logo-cloudplatform.png diff --git a/ui/css/cloudstack3.css b/ui/css/cloudstack3.css index b0d8f33fe73..b1b16d8afcc 100644 --- a/ui/css/cloudstack3.css +++ b/ui/css/cloudstack3.css @@ -1680,6 +1680,15 @@ div.detail-group.actions td { } #header div.logo { + width: 170px; + height: 47px; + position: relative; + float: left; + margin: 4px 0 0 19px; + background: url(../images/logo-cloudplatform.png) no-repeat 0 center; +} + +#header.nologo div.logo { width: 170px; height: 47px; position: relative; diff --git a/ui/images/logo-cloudplatform.png b/ui/images/logo-cloudplatform.png new file mode 100644 index 0000000000000000000000000000000000000000..f749ec74d6a891f633ed587f4f99beccce1517fb GIT binary patch literal 1726 zcmeAS@N?(olHy`uVBq!ia0vp^AAneagAGXPWPjZYq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~;1Ffc1+hD4M^`1)8S=jZArg4F0$^BXQ!4Z zB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT6rXh3di zNuokUZcbjYRfVk**jy_h8zii+qySb@l5ML5aa4qFfP!;=QL2Keo`G(%fti7VnW3Jc zv5C34xsHO7fuVuEfswwUk*=Y+m9dePfq?=PC;@FNN=dT{a&d#&1?1T(Wt5Z@Sn2DR zmzV368|&p4rRy77T3Uk4Ff!5ws?aU2%qvN((9J7WhMC}!TAW;zSx}OhpQivaF)=B> zw8T~k=u(Imatq+b<`qMO2^e7d6^RAXA5U@OLIpfLqk_XCnHBU3rkmHH&+u2 zS7Renm|mCsATTyALtl;P{bldG)xGXdO%EgvITPB2|qOtnA(eg$$DAI^HyMPG4gbA45_&F zW=`Y8O$Gw3AD`tbOlwdr0Kx>$Af{;wsvev{O;Z$9Wq^!-MxV>>oK{g-vAq2IzL{q@ zl01xlZ_;lmEVG)+B4ptwIg$kmb34fpE%my^H7x+x-dvS(*?t-+KNn_2fXIanJmc~zr+@9EAfKkogRuv~zY&Y0h$Q zO5W+0^Yh~7o`{E4_b(lO@JB3J`Fr;V%gw*`IL|K+o7=X~drO1!lwHqnN!`3Tz0_%| z*qp;rVjO=oul;Uth+VKQ%gKz_Q1j=ntK}yX@7(CY1I?V>oxsXD*JG(`xg4D`fXZG?xsxH z<6AB~>28RgIyJ9y#pQ1-50snFeHE#?sC@50)b({C(U&>Dzn9+r{)PR|#eag0>t%V~ zzf7C<_p;-w(>&idJnvUr-uQ45`d`8$fgc<#4QijLQG?zM?Jpma#Y z@%mccr&EvgJv}gMlkkc?6IJ$4eJk{Lx5y*Q71=RgPYK7|)bCv%ak=m8tjvO&%~Pw_ zto6B*;B@kW*!`$&1y|G`hZ$Zup*-Vbye8*QTge#$PK?4%8VOFIgp5ebpo9!WHl6>O aco+nXUg`00009a7bBm000XU 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 diff --git a/ui/scripts/ui/core.js b/ui/scripts/ui/core.js index 3f658049e3f..5a1b2293612 100644 --- a/ui/scripts/ui/core.js +++ b/ui/scripts/ui/core.js @@ -315,7 +315,7 @@ } // Hide logo conditionally - if (!args.hasLogo) $('#header .controls').addClass('nologo'); + if (!args.hasLogo) $('#header, #header .controls').addClass('nologo'); return this; }; From 3715d1aef202f40a3213746a3e9643d7810b3d1a Mon Sep 17 00:00:00 2001 From: Jessica Wang Date: Wed, 16 May 2012 11:30:52 -0700 Subject: [PATCH 12/13] CS-14901: cloudstack 3.0 UI - IP Address page - SourceNAT IP - when network offering's Conserve Mode is off, hide LoadBalancer, PortForwarding action in Configuration tab. --- ui/scripts/network.js | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/ui/scripts/network.js b/ui/scripts/network.js index 0d7250c7652..f855401c39f 100644 --- a/ui/scripts/network.js +++ b/ui/scripts/network.js @@ -49,19 +49,21 @@ /* (1) If IP is SourceNat, no LoadBalancer/PortForwarding/VPN/StaticNat can be added/enabled. */ - if (item.issourcenat){ + if (item.issourcenat == true){ disallowedActions.push('enableStaticNAT'); disallowedActions.push('enableVPN'); - } + } /* - (2) If IP is non-SourceNat, show LoadBalancer/PortForwarding/VPN/StaticNat. + (2) If IP is non-SourceNat, show LoadBalancer/PortForwarding/VPN/StaticNat at first. 1. Once a LoadBalancer rule is added, hide PortForwarding/VPN/StaticNat. 2. Once a PortForwarding rule is added, hide LoadBalancer/VPN/StaticNat. 3. Once VPN is enabled, hide LoadBalancer/PortForwarding/StaticNat. 4. Once StaticNat is enabled, hide LoadBalancer/PortForwarding/VPN. */ - + else { //item.issourcenat == false + //??? + } } if (item.isstaticnat) { @@ -1461,7 +1463,8 @@ }); } }, - ipRules: { + + ipRules: { //Configuration tab title: 'label.configuration', custom: cloudStack.ipRules({ preFilter: function(args) { @@ -1490,6 +1493,17 @@ }); } }); + + if(args.context.ipAddresses[0].networkOfferingConserveMode == false) { + /* + (1) If IP is SourceNat, no LoadBalancer/PortForwarding/VPN/StaticNat can be added/enabled. + */ + if (args.context.ipAddresses[0].issourcenat){ + disallowedActions.push("loadBalancing"); + disallowedActions.push("portForwarding"); + } + } + if(networkOfferingHavingFirewallService == false) disallowedActions.push("firewall"); if(networkOfferingHavingPortForwardingService == false) From d2b3ec84e9c941c02b488537453cfb2d199c99e8 Mon Sep 17 00:00:00 2001 From: frank Date: Wed, 16 May 2012 11:51:44 -0700 Subject: [PATCH 13/13] CS-13853 secstorage.allowed.internal.sites is not allowed to be 0.0.0.0 resolved fixed --- server/src/com/cloud/configuration/Config.java | 2 +- .../cloud/storage/secondary/SecondaryStorageManagerImpl.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/server/src/com/cloud/configuration/Config.java b/server/src/com/cloud/configuration/Config.java index e87ef338ce7..5f2d5e4f312 100755 --- a/server/src/com/cloud/configuration/Config.java +++ b/server/src/com/cloud/configuration/Config.java @@ -186,7 +186,7 @@ public enum Config { UseLocalStorage("Advanced", ManagementServer.class, Boolean.class, "use.local.storage", "false", "Should we use the local storage if it's available?", null), SecStorageVmMTUSize("Advanced", AgentManager.class, Integer.class, "secstorage.vm.mtu.size", String.valueOf(SecondaryStorageVmManager.DEFAULT_SS_VM_MTUSIZE), "MTU size (in Byte) of storage network in secondary storage vms", null), MaxTemplateAndIsoSize("Advanced", ManagementServer.class, Long.class, "max.template.iso.size", "50", "The maximum size for a downloaded template or ISO (in GB).", null), - SecStorageAllowedInternalDownloadSites("Advanced", ManagementServer.class, String.class, "secstorage.allowed.internal.sites", null, "Comma separated list of cidrs internal to the datacenter that can host template download servers", null), + SecStorageAllowedInternalDownloadSites("Advanced", ManagementServer.class, String.class, "secstorage.allowed.internal.sites", null, "Comma separated list of cidrs internal to the datacenter that can host template download servers, please note 0.0.0.0 is not a valid site", null), SecStorageEncryptCopy("Advanced", ManagementServer.class, Boolean.class, "secstorage.encrypt.copy", "false", "Use SSL method used to encrypt copy traffic between zones", "true,false"), SecStorageSecureCopyCert("Advanced", ManagementServer.class, String.class, "secstorage.ssl.cert.domain", "realhostip.com", "SSL certificate used to encrypt copy traffic between zones", null), SecStorageCapacityStandby("Advanced", AgentManager.class, Integer.class, "secstorage.capacity.standby", "10", "The minimal number of command execution sessions that system is able to serve immediately(standby capacity)", null), diff --git a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java index a8bc143e0c6..e6bb237bedf 100755 --- a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java +++ b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java @@ -362,7 +362,7 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V List allowedCidrs = new ArrayList(); String[] cidrs = _allowedInternalSites.split(","); for (String cidr : cidrs) { - if (NetUtils.isValidCIDR(cidr) || NetUtils.isValidIp(cidr)) { + if (NetUtils.isValidCIDR(cidr) || NetUtils.isValidIp(cidr) || !cidr.startsWith("0.0.0.0")) { allowedCidrs.add(cidr); } }