diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java index 903695307bbe..a30426f714c6 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java @@ -65,6 +65,42 @@ public class UpdateDiskOfferingCmd extends BaseCmd { description = "an optional field, whether to display the offering to the end user or not.") private Boolean displayOffering; + @Parameter(name = ApiConstants.BYTES_READ_RATE, type = CommandType.LONG, required = false, description = "bytes read rate of the disk offering, long") + private Long diskBytesReadRate; + + @Parameter(name = ApiConstants.BYTES_READ_RATE_MAX, type = CommandType.LONG, required = false, description = "maximum bytes read rate of the disk offering, long") + private Long diskBytesReadRateMax; + + @Parameter(name = ApiConstants.BYTES_READ_RATE_MAX_LENGTH, type = CommandType.LONG, required = false, description = "maximum bytes read rate length of the disk offering, long") + private Long diskBytesReadRateMaxLength; + + @Parameter(name = ApiConstants.BYTES_WRITE_RATE, type = CommandType.LONG, required = false, description = "bytes write rate of the disk offering, long") + private Long diskBytesWriteRate; + + @Parameter(name = ApiConstants.BYTES_WRITE_RATE_MAX, type = CommandType.LONG, required = false, description = "maximum bytes write rate of the disk offering, long") + private Long diskBytesWriteRateMax; + + @Parameter(name = ApiConstants.BYTES_WRITE_RATE_MAX_LENGTH, type = CommandType.LONG, required = false, description = "maximum bytes write rate length of the disk offering, long") + private Long diskBytesWriteRateMaxLength; + + @Parameter(name = ApiConstants.IOPS_READ_RATE, type = CommandType.LONG, required = false, description = "iops read rate of the disk offering, long") + private Long diskIopsReadRate; + + @Parameter(name = ApiConstants.IOPS_READ_RATE_MAX, type = CommandType.LONG, required = false, description = "maximum iops read rate of the disk offering, long") + private Long diskIopsReadRateMax; + + @Parameter(name = ApiConstants.IOPS_READ_RATE_MAX_LENGTH, type = CommandType.LONG, required = false, description = "maximum iops read rate length of the disk offering, long") + private Long diskIopsReadRateMaxLength; + + @Parameter(name = ApiConstants.IOPS_WRITE_RATE, type = CommandType.LONG, required = false, description = "iops write rate of the disk offering, long") + private Long diskIopsWriteRate; + + @Parameter(name = ApiConstants.IOPS_WRITE_RATE_MAX, type = CommandType.LONG, required = false, description = "maximum iops write rate of the disk offering, long") + private Long diskIopsWriteRateMax; + + @Parameter(name = ApiConstants.IOPS_WRITE_RATE_MAX_LENGTH, type = CommandType.LONG, required = false, description = "maximum iops write rate length of the disk offering, long") + private Long diskIopsWriteRateMaxLength; + @Parameter(name = ApiConstants.DOMAIN_ID, type = CommandType.STRING, description = "the ID of the containing domain(s) as comma separated string, public for public offerings", @@ -101,6 +137,54 @@ public Boolean getDisplayOffering() { return displayOffering; } + public Long getDiskBytesReadRate() { + return diskBytesReadRate; + } + + public Long getDiskBytesReadRateMax() { + return diskBytesReadRateMax; + } + + public Long getDiskBytesReadRateMaxLength() { + return diskBytesReadRateMaxLength; + } + + public Long getDiskBytesWriteRate() { + return diskBytesWriteRate; + } + + public Long getDiskBytesWriteRateMax() { + return diskBytesWriteRateMax; + } + + public Long getDiskBytesWriteRateMaxLength() { + return diskBytesWriteRateMaxLength; + } + + public Long getDiskIopsReadRate() { + return diskIopsReadRate; + } + + public Long getDiskIopsReadRateMax() { + return diskIopsReadRateMax; + } + + public Long getDiskIopsReadRateMaxLength() { + return diskIopsReadRateMaxLength; + } + + public Long getDiskIopsWriteRate() { + return diskIopsWriteRate; + } + + public Long getDiskIopsWriteRateMax() { + return diskIopsWriteRateMax; + } + + public Long getDiskIopsWriteRateMaxLength() { + return diskIopsWriteRateMaxLength; + } + public List getDomainIds() { List validDomainIds = new ArrayList<>(); if (!Strings.isNullOrEmpty(domainIds)) { diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java index 43a0666e934a..09a887a12999 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java @@ -60,6 +60,42 @@ public class UpdateServiceOfferingCmd extends BaseCmd { @Parameter(name = ApiConstants.SORT_KEY, type = CommandType.INTEGER, description = "sort key of the service offering, integer") private Integer sortKey; + @Parameter(name = ApiConstants.BYTES_READ_RATE, type = CommandType.LONG, required = false, description = "bytes read rate of the disk offering, long") + private Long diskBytesReadRate; + + @Parameter(name = ApiConstants.BYTES_READ_RATE_MAX, type = CommandType.LONG, required = false, description = "maximum bytes read rate of the disk offering, long") + private Long diskBytesReadRateMax; + + @Parameter(name = ApiConstants.BYTES_READ_RATE_MAX_LENGTH, type = CommandType.LONG, required = false, description = "maximum bytes read rate length of the disk offering, long") + private Long diskBytesReadRateMaxLength; + + @Parameter(name = ApiConstants.BYTES_WRITE_RATE, type = CommandType.LONG, required = false, description = "bytes write rate of the disk offering, long") + private Long diskBytesWriteRate; + + @Parameter(name = ApiConstants.BYTES_WRITE_RATE_MAX, type = CommandType.LONG, required = false, description = "maximum bytes write rate of the disk offering, long") + private Long diskBytesWriteRateMax; + + @Parameter(name = ApiConstants.BYTES_WRITE_RATE_MAX_LENGTH, type = CommandType.LONG, required = false, description = "maximum bytes write rate length of the disk offering, long") + private Long diskBytesWriteRateMaxLength; + + @Parameter(name = ApiConstants.IOPS_READ_RATE, type = CommandType.LONG, required = false, description = "iops read rate of the disk offering, long") + private Long diskIopsReadRate; + + @Parameter(name = ApiConstants.IOPS_READ_RATE_MAX, type = CommandType.LONG, required = false, description = "maximum iops read rate of the disk offering, long") + private Long diskIopsReadRateMax; + + @Parameter(name = ApiConstants.IOPS_READ_RATE_MAX_LENGTH, type = CommandType.LONG, required = false, description = "maximum iops read rate length of the disk offering, long") + private Long diskIopsReadRateMaxLength; + + @Parameter(name = ApiConstants.IOPS_WRITE_RATE, type = CommandType.LONG, required = false, description = "iops write rate of the disk offering, long") + private Long diskIopsWriteRate; + + @Parameter(name = ApiConstants.IOPS_WRITE_RATE_MAX, type = CommandType.LONG, required = false, description = "maximum iops write rate of the disk offering, long") + private Long diskIopsWriteRateMax; + + @Parameter(name = ApiConstants.IOPS_WRITE_RATE_MAX_LENGTH, type = CommandType.LONG, required = false, description = "maximum iops write rate length of the disk offering, long") + private Long diskIopsWriteRateMaxLength; + @Parameter(name = ApiConstants.DOMAIN_ID, type = CommandType.STRING, description = "the ID of the containing domain(s) as comma separated string, public for public offerings") @@ -91,6 +127,54 @@ public Integer getSortKey() { return sortKey; } + public Long getDiskBytesReadRate() { + return diskBytesReadRate; + } + + public Long getDiskBytesReadRateMax() { + return diskBytesReadRateMax; + } + + public Long getDiskBytesReadRateMaxLength() { + return diskBytesReadRateMaxLength; + } + + public Long getDiskBytesWriteRate() { + return diskBytesWriteRate; + } + + public Long getDiskBytesWriteRateMax() { + return diskBytesWriteRateMax; + } + + public Long getDiskBytesWriteRateMaxLength() { + return diskBytesWriteRateMaxLength; + } + + public Long getDiskIopsReadRate() { + return diskIopsReadRate; + } + + public Long getDiskIopsReadRateMax() { + return diskIopsReadRateMax; + } + + public Long getDiskIopsReadRateMaxLength() { + return diskIopsReadRateMaxLength; + } + + public Long getDiskIopsWriteRate() { + return diskIopsWriteRate; + } + + public Long getDiskIopsWriteRateMax() { + return diskIopsWriteRateMax; + } + + public Long getDiskIopsWriteRateMaxLength() { + return diskIopsWriteRateMaxLength; + } + public List getDomainIds() { List validDomainIds = new ArrayList<>(); if (!Strings.isNullOrEmpty(domainIds)) { diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java index 34439fc6e702..fad395605451 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java @@ -2661,6 +2661,9 @@ public synchronized String attachOrDetachDisk(final Connect conn, if (iopsWriteRateMax != null && iopsWriteRateMax > 0) { diskdef.setIopsWriteRateMax(iopsWriteRateMax); } + if(iopsWriteRateMaxLength != null && iopsWriteRateMaxLength >0){ + diskdef.setIopsWriteRateMaxLength(iopsWriteRateMaxLength); + } if (cacheMode != null) { diskdef.setCacheMode(DiskDef.DiskCacheMode.valueOf(cacheMode.toUpperCase())); diff --git a/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java index 1f8655d40c93..2cbb1d929cd4 100755 --- a/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java @@ -2659,7 +2659,24 @@ public ServiceOffering updateServiceOffering(final UpdateServiceOfferingCmd cmd) throw new InvalidParameterValueException(String.format("Unable to update service offering: %s by id user: %s because it is not root-admin or domain-admin", offeringHandle.getUuid(), user.getUuid())); } - final boolean updateNeeded = name != null || displayText != null || sortKey != null; + final Long diskBytesReadRate = cmd.getDiskBytesReadRate(); + final Long diskBytesReadRateMax = cmd.getDiskBytesReadRateMax(); + final Long diskBytesReadRateMaxLength = cmd.getDiskBytesReadRateMaxLength(); + final Long diskBytesWriteRate = cmd.getDiskBytesWriteRate(); + final Long diskBytesWriteRateMax = cmd.getDiskBytesWriteRateMax(); + final Long diskBytesWriteRateMaxLength = cmd.getDiskBytesWriteRateMaxLength(); + final Long diskIopsReadRate = cmd.getDiskIopsReadRate(); + final Long diskIopsReadRateMax = cmd.getDiskIopsReadRateMax(); + final Long diskIopsReadRateMaxLength = cmd.getDiskIopsReadRateMaxLength(); + final Long diskIopsWriteRate = cmd.getDiskIopsWriteRate(); + final Long diskIopsWriteRateMax = cmd.getDiskIopsWriteRateMax(); + final Long diskIopsWriteRateMaxLength = cmd.getDiskIopsWriteRateMaxLength(); + + final boolean updateNeeded = name != null || displayText != null || sortKey != null + || diskBytesReadRate != null || diskBytesReadRateMax != null || diskBytesReadRateMaxLength != null + || diskBytesWriteRate != null || diskBytesWriteRateMax != null || diskBytesWriteRateMaxLength != null + || diskIopsReadRate != null || diskIopsReadRateMax != null || diskIopsReadRateMaxLength != null + || diskIopsWriteRate != null || diskIopsWriteRateMax != null || diskIopsWriteRateMaxLength != null; final boolean detailsUpdateNeeded = !filteredDomainIds.equals(existingDomainIds) || !filteredZoneIds.equals(existingZoneIds); if (!updateNeeded && !detailsUpdateNeeded) { return _serviceOfferingDao.findById(id); @@ -2679,6 +2696,23 @@ public ServiceOffering updateServiceOffering(final UpdateServiceOfferingCmd cmd) offering.setSortKey(sortKey); } + // BPS Read Rate + offering.setBytesReadRate(checkValue(offeringHandle.getBytesReadRate(), diskBytesReadRate)); + offering.setBytesReadRateMax(checkValue(offeringHandle.getBytesReadRateMax(), diskBytesReadRateMax)); + offering.setBytesReadRateMaxLength(checkValue(offeringHandle.getBytesReadRateMaxLength(), diskBytesReadRateMaxLength)); + // BPS Write Rate + offering.setBytesWriteRate(checkValue(offeringHandle.getBytesWriteRate(), diskBytesWriteRate)); + offering.setBytesWriteRateMax(checkValue(offeringHandle.getBytesWriteRateMax(), diskBytesWriteRateMax)); + offering.setBytesWriteRateMaxLength(checkValue(offeringHandle.getBytesWriteRateMaxLength(), diskBytesWriteRateMaxLength)); + // IOPS Read Rate + offering.setIopsReadRate(checkValue(offeringHandle.getIopsReadRate(), diskIopsReadRate)); + offering.setIopsReadRateMax(checkValue(offeringHandle.getIopsReadRateMax(), diskIopsReadRateMax)); + offering.setIopsReadRateMaxLength(checkValue(offeringHandle.getIopsReadRateMaxLength(), diskIopsReadRateMaxLength)); + // IOPS Write Rate + offering.setIopsWriteRate(checkValue(offeringHandle.getIopsWriteRate(), diskIopsWriteRate)); + offering.setIopsWriteRateMax(checkValue(offeringHandle.getIopsWriteRateMax(), diskIopsWriteRateMax)); + offering.setIopsWriteRateMaxLength(checkValue(offeringHandle.getIopsWriteRateMaxLength(), diskIopsWriteRateMaxLength)); + // Note: tag editing commented out for now; keeping the code intact, // might need to re-enable in next releases // if (tags != null) @@ -3062,8 +3096,26 @@ public DiskOffering updateDiskOffering(final UpdateDiskOfferingCmd cmd) { throw new InvalidParameterValueException(String.format("Unable to update disk offering: %s by id user: %s because it is not root-admin or domain-admin", diskOfferingHandle.getUuid(), user.getUuid())); } - final boolean updateNeeded = name != null || displayText != null || sortKey != null || displayDiskOffering != null; + final Long diskBytesReadRate = cmd.getDiskBytesReadRate(); + final Long diskBytesReadRateMax = cmd.getDiskBytesReadRateMax(); + final Long diskBytesReadRateMaxLength = cmd.getDiskBytesReadRateMaxLength(); + final Long diskBytesWriteRate = cmd.getDiskBytesWriteRate(); + final Long diskBytesWriteRateMax = cmd.getDiskBytesWriteRateMax(); + final Long diskBytesWriteRateMaxLength = cmd.getDiskBytesWriteRateMaxLength(); + final Long diskIopsReadRate = cmd.getDiskIopsReadRate(); + final Long diskIopsReadRateMax = cmd.getDiskIopsReadRateMax(); + final Long diskIopsReadRateMaxLength = cmd.getDiskIopsReadRateMaxLength(); + final Long diskIopsWriteRate = cmd.getDiskIopsWriteRate(); + final Long diskIopsWriteRateMax = cmd.getDiskIopsWriteRateMax(); + final Long diskIopsWriteRateMaxLength = cmd.getDiskIopsWriteRateMaxLength(); + + final boolean updateNeeded = name != null || displayText != null || sortKey != null || displayDiskOffering != null + || diskBytesReadRate != null || diskBytesReadRateMax != null || diskBytesReadRateMaxLength != null + || diskBytesWriteRate != null || diskBytesWriteRateMax != null || diskBytesWriteRateMaxLength != null + || diskIopsReadRate != null || diskIopsReadRateMax != null || diskIopsReadRateMaxLength != null + || diskIopsWriteRate != null || diskIopsWriteRateMax != null || diskIopsWriteRateMaxLength != null; final boolean detailsUpdateNeeded = !filteredDomainIds.equals(existingDomainIds) || !filteredZoneIds.equals(existingZoneIds); + if (!updateNeeded && !detailsUpdateNeeded) { return _diskOfferingDao.findById(diskOfferingId); } @@ -3086,6 +3138,23 @@ public DiskOffering updateDiskOffering(final UpdateDiskOfferingCmd cmd) { diskOffering.setDisplayOffering(displayDiskOffering); } + // BPS Read Rate + diskOffering.setBytesReadRate(checkValue(diskOfferingHandle.getBytesReadRate(), diskBytesReadRate)); + diskOffering.setBytesReadRateMax(checkValue(diskOfferingHandle.getBytesReadRateMax(), diskBytesReadRateMax)); + diskOffering.setBytesReadRateMaxLength(checkValue(diskOfferingHandle.getBytesReadRateMaxLength(), diskBytesReadRateMaxLength)); + // BPS Write Rate + diskOffering.setBytesWriteRate(checkValue(diskOfferingHandle.getBytesWriteRate(), diskBytesWriteRate)); + diskOffering.setBytesWriteRateMax(checkValue(diskOfferingHandle.getBytesWriteRateMax(), diskBytesWriteRateMax)); + diskOffering.setBytesWriteRateMaxLength(checkValue(diskOfferingHandle.getBytesWriteRateMaxLength(), diskBytesWriteRateMaxLength)); + // IOPS Read Rate + diskOffering.setIopsReadRate(checkValue(diskOfferingHandle.getIopsReadRate(), diskIopsReadRate)); + diskOffering.setIopsReadRateMax(checkValue(diskOfferingHandle.getIopsReadRateMax(), diskIopsReadRateMax)); + diskOffering.setIopsReadRateMaxLength(checkValue(diskOfferingHandle.getIopsReadRateMaxLength(), diskIopsReadRateMaxLength)); + // IOPS Write Rate + diskOffering.setIopsWriteRate(checkValue(diskOfferingHandle.getIopsWriteRate(), diskIopsWriteRate)); + diskOffering.setIopsWriteRateMax(checkValue(diskOfferingHandle.getIopsWriteRateMax(), diskIopsWriteRateMax)); + diskOffering.setIopsWriteRateMaxLength(checkValue(diskOfferingHandle.getIopsWriteRateMaxLength(), diskIopsWriteRateMaxLength)); + // Note: tag editing commented out for now;keeping the code intact, // might need to re-enable in next releases // if (tags != null) @@ -6250,4 +6319,26 @@ public String getConfigComponentName() { public ConfigKey[] getConfigKeys() { return new ConfigKey[] {SystemVMUseLocalStorage}; } + + /** + * Check if newValue is different than oldValue + * If true return newValue. Else return oldValue + * @param oldValue + * @param newValue + * @return + */ + public Long checkValue(Long oldValue, Long newValue){ + //negative value + if(newValue != null && newValue < 0) + throw new InvalidParameterValueException("Negative values are not allowed for disk read/write parameters."); + //the value has been changed to null + else if(newValue != null && newValue == 0) + return null; + //the value has not been changed + else if(newValue == null) + return oldValue; + //the value has been changed + else + return newValue; + } } diff --git a/test/integration/smoke/test_disk_offerings.py b/test/integration/smoke/test_disk_offerings.py index af7ba6a2ccc4..20756a5b7723 100644 --- a/test/integration/smoke/test_disk_offerings.py +++ b/test/integration/smoke/test_disk_offerings.py @@ -278,6 +278,18 @@ def test_02_edit_disk_offering(self): """ random_displaytext = random_gen() random_name = random_gen() + bytes_read_rate = 1L + bytes_read_rate_max = 2L + bytes_read_rate_max_length = 3L + bytes_write_rate = 4L + bytes_write_rate_max = 5L + bytes_write_rate_max_length = 6L + iops_read_rate = 7L + iops_read_rate_max = 8L + iops_read_rate_max_length = 9L + iops_write_rate = 10L + iops_write_rate_max = 11L + iops_write_rate_max_length = 12L self.debug("Updating Disk offering with ID: %s" % self.disk_offering_1.id) @@ -287,6 +299,22 @@ def test_02_edit_disk_offering(self): cmd.displaytext = random_displaytext cmd.name = random_name + cmd.bytesreadrate = bytes_read_rate + cmd.bytesreadratemax = bytes_read_rate_max + cmd.bytesreadratemaxlength = bytes_read_rate_max_length + + cmd.byteswriterate = bytes_write_rate + cmd.byteswriteratemax = bytes_write_rate_max + cmd.byteswriteratemaxlength = bytes_write_rate_max_length + + cmd.iopsreadrate = iops_read_rate + cmd.iopsreadratemax = iops_read_rate_max + cmd.iopsreadratemaxlength = iops_read_rate_max_length + + cmd.iopswriterate = iops_write_rate + cmd.iopswriteratemax = iops_write_rate_max + cmd.iopswriteratemaxlength = iops_write_rate_max_length + self.apiclient.updateDiskOffering(cmd) list_disk_response = list_disk_offering( @@ -316,6 +344,66 @@ def test_02_edit_disk_offering(self): random_name, "Check service name in updateServiceOffering" ) + self.assertEqual( + disk_response.diskBytesReadRate, + bytes_read_rate, + "Check service diskBytesReadRate in updateServiceOffering" + ) + self.assertEqual( + disk_response.diskBytesReadRateMax, + bytes_read_rate_max, + "Check service diskBytesReadRateMax in updateServiceOffering" + ) + self.assertEqual( + disk_response.diskBytesReadRateMaxLength, + bytes_read_rate_max_length, + "Check service diskBytesReadRateMaxLength in updateServiceOffering" + ) + self.assertEqual( + disk_response.diskBytesWriteRate, + bytes_write_rate, + "Check service diskBytesWriteRate in updateServiceOffering" + ) + self.assertEqual( + disk_response.diskBytesWriteRateMax, + bytes_write_rate_max, + "Check service diskBytesWriteRateMax in updateServiceOffering" + ) + self.assertEqual( + disk_response.diskBytesWriteRateMaxLength, + bytes_write_rate_max_length, + "Check service diskBytesWriteRateMaxLength in updateServiceOffering" + ) + self.assertEqual( + disk_response.diskIopsReadRate, + iops_read_rate, + "Check service diskIopsReadRate in updateServiceOffering" + ) + self.assertEqual( + disk_response.diskIopsReadRateMax, + iops_read_rate_max, + "Check service diskIopsReadRateMax in updateServiceOffering" + ) + self.assertEqual( + disk_response.diskIopsReadRateMaxLength, + iops_read_rate_max_length, + "Check service diskIopsReadRateMaxLength in updateServiceOffering" + ) + self.assertEqual( + disk_response.diskIopsWriteRate, + iops_write_rate, + "Check service diskIopsWriteRate in updateServiceOffering" + ) + self.assertEqual( + disk_response.diskIopsWriteRateMax, + iops_write_rate_max, + "Check service diskIopsWriteRateMax in updateServiceOffering" + ) + self.assertEqual( + disk_response.diskIopsWriteRateMaxLength, + iops_write_rate_max_length, + "Check service diskIopsWriteRateMaxLength in updateServiceOffering" + ) return @attr(tags=["advanced", "basic", "eip", "sg", "advancedns", "smoke"], required_hardware="false") diff --git a/test/integration/smoke/test_service_offerings.py b/test/integration/smoke/test_service_offerings.py index 61d83b902820..328c12d62229 100644 --- a/test/integration/smoke/test_service_offerings.py +++ b/test/integration/smoke/test_service_offerings.py @@ -310,6 +310,18 @@ def test_02_edit_service_offering(self): # Generate new name & displaytext from random data random_displaytext = random_gen() random_name = random_gen() + bytes_read_rate = 1L + bytes_read_rate_max = 2L + bytes_read_rate_max_length = 3L + bytes_write_rate = 4L + bytes_write_rate_max = 5L + bytes_write_rate_max_length = 6L + iops_read_rate = 7L + iops_read_rate_max = 8L + iops_read_rate_max_length = 9L + iops_write_rate = 10L + iops_write_rate_max = 11L + iops_write_rate_max_length = 12L self.debug("Updating service offering with ID: %s" % self.service_offering_1.id) @@ -319,6 +331,23 @@ def test_02_edit_service_offering(self): cmd.id = self.service_offering_1.id cmd.displaytext = random_displaytext cmd.name = random_name + + cmd.bytesreadrate = bytes_read_rate + cmd.bytesreadratemax = bytes_read_rate_max + cmd.bytesreadratemaxlength = bytes_read_rate_max_length + + cmd.byteswriterate = bytes_write_rate + cmd.byteswriteratemax = bytes_write_rate_max + cmd.byteswriteratemaxlength = bytes_write_rate_max_length + + cmd.iopsreadrate = iops_read_rate + cmd.iopsreadratemax = iops_read_rate_max + cmd.iopsreadratemaxlength = iops_read_rate_max_length + + cmd.iopswriterate = iops_write_rate + cmd.iopswriteratemax = iops_write_rate_max + cmd.iopswriteratemaxlength = iops_write_rate_max_length + self.apiclient.updateServiceOffering(cmd) list_service_response = list_service_offering( @@ -337,16 +366,78 @@ def test_02_edit_service_offering(self): "Check Service offering is updated" ) + service_response = list_service_response[0] + self.assertEqual( - list_service_response[0].displaytext, + service_response.displaytext, random_displaytext, "Check server displaytext in updateServiceOffering" ) self.assertEqual( - list_service_response[0].name, + service_response.name, random_name, "Check server name in updateServiceOffering" ) + self.assertEqual( + service_response.diskBytesReadRate, + bytes_read_rate, + "Check service diskBytesReadRate in updateServiceOffering" + ) + self.assertEqual( + service_response.diskBytesReadRateMax, + bytes_read_rate_max, + "Check service diskBytesReadRateMax in updateServiceOffering" + ) + self.assertEqual( + service_response.diskBytesReadRateMaxLength, + bytes_read_rate_max_length, + "Check service diskBytesReadRateMaxLength in updateServiceOffering" + ) + self.assertEqual( + service_response.diskBytesWriteRate, + bytes_write_rate, + "Check service diskBytesWriteRate in updateServiceOffering" + ) + self.assertEqual( + service_response.diskBytesWriteRateMax, + bytes_write_rate_max, + "Check service diskBytesWriteRateMax in updateServiceOffering" + ) + self.assertEqual( + service_response.diskBytesWriteRateMaxLength, + bytes_write_rate_max_length, + "Check service diskBytesWriteRateMaxLength in updateServiceOffering" + ) + self.assertEqual( + service_response.diskIopsReadRate, + iops_read_rate, + "Check service diskIopsReadRate in updateServiceOffering" + ) + self.assertEqual( + service_response.diskIopsReadRateMax, + iops_read_rate_max, + "Check service diskIopsReadRateMax in updateServiceOffering" + ) + self.assertEqual( + service_response.diskIopsReadRateMaxLength, + iops_read_rate_max_length, + "Check service diskIopsReadRateMaxLength in updateServiceOffering" + ) + self.assertEqual( + service_response.diskIopsWriteRate, + iops_write_rate, + "Check service diskIopsWriteRate in updateServiceOffering" + ) + self.assertEqual( + service_response.diskIopsWriteRateMax, + iops_write_rate_max, + "Check service diskIopsWriteRateMax in updateServiceOffering" + ) + self.assertEqual( + service_response.diskIopsWriteRateMaxLength, + iops_write_rate_max_length, + "Check service diskIopsWriteRateMaxLength in updateServiceOffering" + ) return diff --git a/ui/l10n/en.js b/ui/l10n/en.js index 6412a6732fc7..4a99d31bfa88 100644 --- a/ui/l10n/en.js +++ b/ui/l10n/en.js @@ -687,13 +687,21 @@ var dictionary = { "label.disbale.vnmc.device":"Disable VNMC device", "label.disk.allocated":"Disk Allocated", "label.disk.bytes.read.rate":"Disk Read Rate (BPS)", +"label.disk.bytes.read.rate.max":"Maximum Disk Read Rate (BPS)", +"label.disk.bytes.read.rate.max.length":"Maximum Disk Read Rate (BPS) length", "label.disk.bytes.write.rate":"Disk Write Rate (BPS)", +"label.disk.bytes.write.rate.max":"Maximum Disk Write Rate (BPS)", +"label.disk.bytes.write.rate.max.length":"Maximum Disk Write Rate (BPS) length", "label.disk.iops.max":"Max IOPS", "label.disk.iops.min":"Min IOPS", "label.disk.iops.read.rate":"Disk Read Rate (IOPS)", +"label.disk.iops.read.rate.max":"Maximum Disk Read Rate (IOPS)", +"label.disk.iops.read.rate.max.length":"Maximum Disk Read Rate (IOPS) length", "label.disk.iops.total":"IOPS Total", "label.disk.iops.allocated":"IOPS Allocated", "label.disk.iops.write.rate":"Disk Write Rate (IOPS)", +"label.disk.iops.write.rate.max":"Maximum Disk Write Rate (IOPS)", +"label.disk.iops.write.rate.max.length":"Maximum Disk Write Rate (IOPS) length", "label.disk.offering":"Disk Offering", "label.disk.offering.access":"Disk offering access", "label.disk.offering.details":"Disk offering details", diff --git a/ui/scripts/configuration.js b/ui/scripts/configuration.js index 62a602263f44..1f5cdb3e0654 100644 --- a/ui/scripts/configuration.js +++ b/ui/scripts/configuration.js @@ -298,17 +298,33 @@ var $maxIops = $form.find('.form-item[rel=maxIops]'); var $hypervisorSnapshotReserve = $form.find('.form-item[rel=hypervisorSnapshotReserve]'); var $diskBytesReadRate = $form.find('.form-item[rel=diskBytesReadRate]'); + var $diskBytesReadRateMax = $form.find('.form-item[rel=diskBytesReadRateMax]'); + var $diskBytesReadRateMaxLength = $form.find('.form-item[rel=diskBytesReadRateMaxLength]'); var $diskBytesWriteRate = $form.find('.form-item[rel=diskBytesWriteRate]'); + var $diskBytesWriteRateMax = $form.find('.form-item[rel=diskBytesWriteRateMax]'); + var $diskBytesWriteRateMaxLength = $form.find('.form-item[rel=diskBytesWriteRateMaxLength]'); var $diskIopsReadRate = $form.find('.form-item[rel=diskIopsReadRate]'); + var $diskIopsReadRateMax = $form.find('.form-item[rel=diskIopsReadRateMax]'); + var $diskIopsReadRateMaxLength = $form.find('.form-item[rel=diskIopsReadRateMaxLength]'); var $diskIopsWriteRate = $form.find('.form-item[rel=diskIopsWriteRate]'); + var $diskIopsWriteRateMax = $form.find('.form-item[rel=diskIopsWriteRateMax]'); + var $diskIopsWriteRateMaxLength = $form.find('.form-item[rel=diskIopsWriteRateMaxLength]'); var qosId = $(this).val(); if (qosId == 'storage') { // Storage QoS $diskBytesReadRate.hide(); + $diskBytesReadRateMax.hide(); + $diskBytesReadRateMaxLength.hide(); $diskBytesWriteRate.hide(); + $diskBytesWriteRateMax.hide(); + $diskBytesWriteRateMaxLength.hide(); $diskIopsReadRate.hide(); + $diskIopsReadRateMax.hide(); + $diskIopsReadRateMaxLength.hide(); $diskIopsWriteRate.hide(); + $diskIopsWriteRateMax.hide(); + $diskIopsWriteRateMaxLength.hide(); $isCustomizedIops.css('display', 'inline-block'); @@ -328,14 +344,30 @@ $hypervisorSnapshotReserve.hide(); $diskBytesReadRate.css('display', 'inline-block'); + $diskBytesReadRateMax.css('display', 'inline-block'); + $diskBytesReadRateMaxLength.css('display', 'inline-block'); $diskBytesWriteRate.css('display', 'inline-block'); + $diskBytesWriteRateMax.css('display', 'inline-block'); + $diskBytesWriteRateMaxLength.css('display', 'inline-block'); $diskIopsReadRate.css('display', 'inline-block'); + $diskIopsReadRateMax.css('display', 'inline-block'); + $diskIopsReadRateMaxLength.css('display', 'inline-block'); $diskIopsWriteRate.css('display', 'inline-block'); + $diskIopsWriteRateMax.css('display', 'inline-block'); + $diskIopsWriteRateMaxLength.css('display', 'inline-block'); } else { // No Qos $diskBytesReadRate.hide(); + $diskBytesReadRateMax.hide(); + $diskBytesReadRateMaxLength.hide(); $diskBytesWriteRate.hide(); + $diskBytesWriteRateMax.hide(); + $diskBytesWriteRateMaxLength.hide() $diskIopsReadRate.hide(); + $diskIopsReadRateMax.hide(); + $diskIopsReadRateMaxLength.hide(); $diskIopsWriteRate.hide(); + $diskIopsWriteRateMax.hide(); + $diskIopsWriteRateMaxLength.hide(); $isCustomizedIops.hide(); $minIops.hide(); $maxIops.hide(); @@ -385,6 +417,22 @@ number: true } }, + diskBytesReadRateMax: { + label: 'label.disk.bytes.read.rate.max', + docID: 'helpComputeOfferingDiskBytesReadRateMax', + validation: { + required: false, //optional + number: true + } + }, + diskBytesReadRateMaxLength: { + label: 'label.disk.bytes.read.rate.max.length', + docID: 'helpComputeOfferingDiskBytesReadRateMaxLength', + validation: { + required: false, //optional + number: true + } + }, diskBytesWriteRate: { label: 'label.disk.bytes.write.rate', docID: 'helpComputeOfferingDiskBytesWriteRate', @@ -393,6 +441,22 @@ number: true } }, + diskBytesWriteRateMax: { + label: 'label.disk.bytes.write.rate.max', + docID: 'helpComputeOfferingDiskBytesWriteRateMax', + validation: { + required: false, //optional + number: true + } + }, + diskBytesWriteRateMaxLength: { + label: 'label.disk.bytes.write.rate.max.length', + docID: 'helpComputeOfferingDiskBytesWriteRateMaxLength', + validation: { + required: false, //optional + number: true + } + }, diskIopsReadRate: { label: 'label.disk.iops.read.rate', docID: 'helpComputeOfferingDiskIopsReadRate', @@ -401,6 +465,22 @@ number: true } }, + diskIopsReadRateMax: { + label: 'label.disk.iops.read.rate.max', + docID: 'helpComputeOfferingDiskIopsReadRateMax', + validation: { + required: false, //optional + number: true + } + }, + diskIopsReadRateMaxLength: { + label: 'label.disk.iops.read.rate.max.length', + docID: 'helpComputeOfferingDiskIopsReadRateMaxLength', + validation: { + required: false, //optional + number: true + } + }, diskIopsWriteRate: { label: 'label.disk.iops.write.rate', docID: 'helpComputeOfferingDiskIopsWriteRate', @@ -409,6 +489,22 @@ number: true } }, + diskIopsWriteRateMax: { + label: 'label.disk.iops.write.rate.max', + docID: 'helpComputeOfferingDiskIopsWriteRateMax', + validation: { + required: false, //optional + number: true + } + }, + diskIopsWriteRateMaxLength: { + label: 'label.disk.iops.write.rate.max.length', + docID: 'helpComputeOfferingDiskIopsWriteRateMaxLength', + validation: { + required: false, //optional + number: true + } + }, offerHA: { label: 'label.offer.ha', docID: 'helpComputeOfferingHA', @@ -825,24 +921,56 @@ $.extend(data, { bytesreadrate: args.data.diskBytesReadRate }); + }if (args.data.diskBytesReadRateMax != null && args.data.diskBytesReadRateMax.length > 0) { + $.extend(data, { + bytesreadratemax: args.data.diskBytesReadRateMax + }); + }if (args.data.diskBytesReadRateMaxLength != null && args.data.diskBytesReadRateMaxLength.length > 0) { + $.extend(data, { + bytesreadratemaxlength: args.data.diskBytesReadRateMaxLength + }); } if (args.data.diskBytesWriteRate != null && args.data.diskBytesWriteRate.length > 0) { $.extend(data, { byteswriterate: args.data.diskBytesWriteRate }); + }if (args.data.diskBytesWriteRateMax != null && args.data.diskBytesWriteRateMax.length > 0) { + $.extend(data, { + byteswriteratemax: args.data.diskBytesWriteRateMax + }); + }if (args.data.diskBytesWriteRateMaxLength != null && args.data.diskBytesWriteRateMaxLength.length > 0) { + $.extend(data, { + byteswriteratemaxlength: args.data.diskBytesWriteRateMaxLength + }); } if (args.data.diskIopsReadRate != null && args.data.diskIopsReadRate.length > 0) { $.extend(data, { iopsreadrate: args.data.diskIopsReadRate }); + }if (args.data.diskIopsReadRateMax != null && args.data.diskIopsReadRateMax.length > 0) { + $.extend(data, { + iopsreadratemax: args.data.diskIopsReadRateMax + }); + }if (args.data.diskIopsReadRateMaxLength != null && args.data.diskIopsReadRateMaxLength.length > 0) { + $.extend(data, { + iopsreadratemaxlength: args.data.diskIopsReadRateMaxLength + }); } if (args.data.diskIopsWriteRate != null && args.data.diskIopsWriteRate.length > 0) { $.extend(data, { iopswriterate: args.data.diskIopsWriteRate }); + }if (args.data.diskIopsWriteRateMax != null && args.data.diskIopsWriteRateMax.length > 0) { + $.extend(data, { + iopswriteratemax: args.data.diskIopsWriteRateMax + }); + }if (args.data.diskIopsWriteRateMaxLength != null && args.data.diskIopsWriteRateMaxLength.length > 0) { + $.extend(data, { + iopswriteratemaxlength: args.data.diskIopsWriteRateMaxLength + }); } } @@ -939,11 +1067,178 @@ edit: { label: 'label.edit', action: function(args) { + var oldServiceDetails = args.context.serviceOfferings[0]; var data = { - id: args.context.serviceOfferings[0].id, - name: args.data.name, - displaytext: args.data.displaytext + id: args.context.serviceOfferings[0].id }; + if (oldServiceDetails.name !== args.data.name){ + $.extend(data, { + name: args.data.name + }); + } + if (oldServiceDetails.displayText !== args.data.displayText){ + $.extend(data, { + displaytext: args.data.displaytext + }); + } + //Disk Bytes Read Rate + if(oldServiceDetails.diskBytesReadRate == null && args.data.diskBytesReadRate.length > 0) { + $.extend(data, { + bytesreadrate: args.data.diskBytesReadRate + }); + } + else + { + if (oldServiceDetails.diskBytesReadRate != args.data.diskBytesReadRate && oldServiceDetails.diskBytesReadRate != null) + { + $.extend(data, { + bytesreadrate: args.data.diskBytesReadRate == "" ? "0" : args.data.diskBytesReadRate + }); + } + } + //Disk Bytes Read Rate Max + if(oldServiceDetails.diskBytesReadRateMax == null && args.data.diskBytesReadRateMax.length > 0){ + $.extend(data, { + bytesreadratemax: args.data.diskBytesReadRateMax + }); + } + else { + if (oldServiceDetails.diskBytesReadRateMax != args.data.diskBytesReadRateMax && oldServiceDetails.diskBytesReadRateMax != null) { + $.extend(data, { + bytesreadratemax: args.data.diskBytesReadRateMax == "" ? "0" : args.data.diskBytesReadRateMax + }); + } + } + //Disk Bytes Read Rate Max Length + if(oldServiceDetails.diskBytesReadRateMaxLength == null && args.data.diskBytesReadRateMaxLength.length > 0){ + $.extend(data, { + bytesreadratemaxlength: args.data.diskBytesReadRateMaxLength + }); + } + else { + if (oldServiceDetails.diskBytesReadRateMaxLength != args.data.diskBytesReadRateMaxLength && oldServiceDetails.diskBytesReadRateMaxLength != null) { + $.extend(data, { + bytesreadratemaxlength: args.data.diskBytesReadRateMaxLength == "" ? "0" : args.data.diskBytesReadRateMaxLength + }); + } + } + //Disk Bytes Write Rate + if(oldServiceDetails.diskBytesWriteRate == null && args.data.diskBytesWriteRate.length > 0){ + $.extend(data, { + byteswriterate: args.data.diskBytesWriteRate + }); + } + else { + if (oldServiceDetails.diskBytesWriteRate != args.data.diskBytesWriteRate && oldServiceDetails.diskBytesWriteRate != null) { + $.extend(data, { + byteswriterate: args.data.diskBytesWriteRate == "" ? "0" : args.data.diskBytesWriteRate + }); + } + } + //Disk Bytes Write Rate Max + if(oldServiceDetails.diskBytesWriteRateMax == null && args.data.diskBytesWriteRateMax.length > 0){ + $.extend(data, { + byteswriteratemax: args.data.diskBytesWriteRateMax + }); + } + else { + if (oldServiceDetails.diskBytesWriteRateMax != args.data.diskBytesWriteRateMax && oldServiceDetails.diskBytesWriteRateMax != null) { + $.extend(data, { + byteswriteratemax: args.data.diskBytesWriteRateMax == "" ? "0" : args.data.diskBytesWriteRateMax + }); + } + } + // Disk Bytes Write Rate Max Length + if(oldServiceDetails.diskBytesWriteRateMaxLength == null && args.data.diskBytesWriteRateMaxLength.length > 0){ + $.extend(data, { + byteswriteratemaxlength: args.data.diskBytesWriteRateMaxLength + }); + } + else { + if (oldServiceDetails.diskBytesWriteRateMaxLength != args.data.diskBytesWriteRateMaxLength && oldServiceDetails.diskBytesWriteRateMaxLength != null) { + $.extend(data, { + byteswriteratemaxlength: args.data.diskBytesWriteRateMaxLength == "" ? "0" : args.data.diskBytesWriteRateMaxLength + }); + } + } + //Disk IOPS Read Rate + if(oldServiceDetails.diskIopsReadRate == null && args.data.diskIopsReadRate.length > 0){ + $.extend(data, { + iopsreadrate: args.data.diskIopsReadRate + }); + } + else { + if (oldServiceDetails.diskIopsReadRate != args.data.diskIopsReadRate && oldServiceDetails.diskIopsReadRate != null) { + $.extend(data, { + iopsreadrate: args.data.diskIopsReadRate == "" ? "0" : args.data.diskIopsReadRate + }); + } + } + //Disk IOPS Read Rate Max + if(oldServiceDetails.diskIopsReadRateMax == null && args.data.diskIopsReadRateMax.length > 0){ + $.extend(data, { + iopsreadratemax: args.data.diskIopsReadRateMax + }); + } + else { + if (oldServiceDetails.diskIopsReadRateMax != args.data.diskIopsReadRateMax && oldServiceDetails.diskIopsReadRateMax != null) { + $.extend(data, { + iopsreadratemax: args.data.diskIopsReadRateMax == "" ? "0" : args.data.diskIopsReadRateMax + }); + } + } + //Disk IOPS Read Rate Max Length + if(oldServiceDetails.diskIopsReadRateMaxLength == null && args.data.diskIopsReadRateMaxLength.length > 0){ + $.extend(data, { + iopsreadratemaxlength: args.data.diskIopsReadRateMaxLength + }); + } + else { + if (oldServiceDetails.diskIopsReadRateMaxLength != args.data.diskIopsReadRateMaxLength && oldServiceDetails.diskIopsReadRateMaxLength != null) { + $.extend(data, { + iopsreadratemaxlength: args.data.diskIopsReadRateMaxLength == "" ? "0" : args.data.diskIopsReadRateMaxLength + }); + } + } + //Disk IOPS Write Rate + if(oldServiceDetails.diskIopsWriteRate == null && args.data.diskIopsWriteRate.length > 0){ + $.extend(data, { + iopswriterate: args.data.diskIopsWriteRate + }); + } + else { + if (oldServiceDetails.diskIopsWriteRate != args.data.diskIopsWriteRate && oldServiceDetails.diskIopsWriteRate != null) { + $.extend(data, { + iopswriterate: args.data.diskIopsWriteRate == "" ? "0" : args.data.diskIopsWriteRate + }); + } + } + //Disk IOPS Write Rate Max + if(oldServiceDetails.diskIopsWriteRateMax == null && args.data.diskIopsWriteRateMax.length > 0){ + $.extend(data, { + iopswriteratemax: args.data.diskIopsWriteRateMax + }); + } + else { + if (oldServiceDetails.diskIopsWriteRateMax != args.data.diskIopsWriteRateMax && oldServiceDetails.diskIopsWriteRateMax != null) { + $.extend(data, { + iopswriteratemax: args.data.diskIopsWriteRateMax == "" ? "0" : args.data.diskIopsWriteRateMax + }); + } + } + //Disk IOPS Write Rate Max Length + if(oldServiceDetails.diskIopsWriteRateMaxLength == null && args.data.diskIopsWriteRateMaxLength.length > 0){ + $.extend(data, { + iopswriteratemaxlength: args.data.diskIopsWriteRateMaxLength + }); + } + else { + if (oldServiceDetails.diskIopsWriteRateMaxLength != args.data.diskIopsWriteRateMaxLength && oldServiceDetails.diskIopsWriteRateMaxLength != null) { + $.extend(data, { + iopswriteratemaxlength: args.data.diskIopsWriteRateMaxLength == "" ? "0" : args.data.diskIopsWriteRateMaxLength + }); + } + } $.ajax({ url: createURL('updateServiceOffering'), data: data, @@ -1274,16 +1569,88 @@ } }, diskBytesReadRate: { - label: 'label.disk.bytes.read.rate' + label: 'label.disk.bytes.read.rate', + isEditable: true, + validation: { + number: true + } + }, + diskBytesReadRateMax: { + label: 'label.disk.bytes.read.rate.max', + isEditable: true, + validation: { + number: true + } + }, + diskBytesReadRateMaxLength: { + label: 'label.disk.bytes.read.rate.max.length', + isEditable: true, + validation: { + number: true + } }, diskBytesWriteRate: { - label: 'label.disk.bytes.write.rate' + label: 'label.disk.bytes.write.rate', + isEditable: true, + validation: { + number: true + } + }, + diskBytesWriteRateMax: { + label: 'label.disk.bytes.write.rate.max', + isEditable: true, + validation: { + number: true + } + }, + diskBytesWriteRateMaxLength: { + label: 'label.disk.bytes.write.rate.max.length', + isEditable: true, + validation: { + number: true + } }, diskIopsReadRate: { - label: 'label.disk.iops.read.rate' + label: 'label.disk.iops.read.rate', + isEditable: true, + validation: { + number: true + } + }, + diskIopsReadRateMax: { + label: 'label.disk.iops.read.rate.max', + isEditable: true, + validation: { + number: true + } + }, + diskIopsReadRateMaxLength: { + label: 'label.disk.iops.read.rate.max.length', + isEditable: true, + validation: { + number: true + } }, diskIopsWriteRate: { - label: 'label.disk.iops.write.rate' + label: 'label.disk.iops.write.rate', + isEditable: true, + validation: { + number: true + } + }, + diskIopsWriteRateMax: { + label: 'label.disk.iops.write.rate.max', + isEditable: true, + validation: { + number: true + } + }, + diskIopsWriteRateMaxLength: { + label: 'label.disk.iops.write.rate.max.length', + isEditable: true, + validation: { + number: true + } }, offerha: { label: 'label.offer.ha', @@ -1824,6 +2191,55 @@ name: args.data.name, displaytext: args.data.displaytext }; + if (args.data.diskBytesReadRate != null && args.data.diskBytesReadRate.length > 0) { + $.extend(data, { + bytesreadrate: args.data.diskBytesReadRate + }); + }if (args.data.diskBytesReadRateMax != null && args.data.diskBytesReadRateMax.length > 0) { + $.extend(data, { + bytesreadratemax: args.data.diskBytesReadRateMax + }); + }if (args.data.diskBytesReadRateMaxLength != null && args.data.diskBytesReadRateMaxLength.length > 0) { + $.extend(data, { + bytesreadratemaxlength: args.data.diskBytesReadRateMaxLength + }); + }if (args.data.diskBytesWriteRate != null && args.data.diskBytesWriteRate.length > 0) { + $.extend(data, { + byteswriterate: args.data.diskBytesWriteRate + }); + }if (args.data.diskBytesWriteRateMax != null && args.data.diskBytesWriteRateMax.length > 0) { + $.extend(data, { + byteswriteratemax: args.data.diskBytesWriteRateMax + }); + }if (args.data.diskBytesWriteRateMaxLength != null && args.data.diskBytesWriteRateMaxLength.length > 0) { + $.extend(data, { + byteswriteratemaxlength: args.data.diskBytesWriteRateMaxLength + }); + }if (args.data.diskIopsReadRate != null && args.data.diskIopsReadRate.length > 0) { + $.extend(data, { + iopsreadrate: args.data.diskIopsReadRate + }); + }if (args.data.diskIopsReadRateMax != null && args.data.diskIopsReadRateMax.length > 0) { + $.extend(data, { + iopsreadratemax: args.data.diskIopsReadRateMax + }); + }if (args.data.diskIopsReadRateMaxLength != null && args.data.diskIopsReadRateMaxLength.length > 0) { + $.extend(data, { + iopsreadratemaxlength: args.data.diskIopsReadRateMaxLength + }); + }if (args.data.diskIopsWriteRate != null && args.data.diskIopsWriteRate.length > 0) { + $.extend(data, { + iopswriterate: args.data.diskIopsWriteRate + }); + }if (args.data.diskIopsWriteRateMax != null && args.data.diskIopsWriteRateMax.length > 0) { + $.extend(data, { + iopswriteratemax: args.data.diskIopsWriteRateMax + }); + }if (args.data.diskIopsWriteRateMaxLength != null && args.data.diskIopsWriteRateMaxLength.length > 0) { + $.extend(data, { + iopswriteratemaxlength: args.data.diskIopsWriteRateMaxLength + }); + } $.ajax({ url: createURL('updateServiceOffering'), data: data, @@ -2186,17 +2602,33 @@ var $maxIops = $form.find('.form-item[rel=maxIops]'); var $hypervisorSnapshotReserve = $form.find('.form-item[rel=hypervisorSnapshotReserve]'); var $diskBytesReadRate = $form.find('.form-item[rel=diskBytesReadRate]'); + var $diskBytesReadRateMax = $form.find('.form-item[rel=diskBytesReadRateMax]'); + var $diskBytesReadRateMaxLength = $form.find('.form-item[rel=diskBytesReadRateMaxLength]'); var $diskBytesWriteRate = $form.find('.form-item[rel=diskBytesWriteRate]'); + var $diskBytesWriteRateMax = $form.find('.form-item[rel=diskBytesWriteRateMax]'); + var $diskBytesWriteRateMaxLength = $form.find('.form-item[rel=diskBytesWriteRateMaxLength]'); var $diskIopsReadRate = $form.find('.form-item[rel=diskIopsReadRate]'); + var $diskIopsReadRateMax = $form.find('.form-item[rel=diskIopsReadRateMax]'); + var $diskIopsReadRateMaxLength = $form.find('.form-item[rel=diskIopsReadRateMaxLength]'); var $diskIopsWriteRate = $form.find('.form-item[rel=diskIopsWriteRate]'); + var $diskIopsWriteRateMax = $form.find('.form-item[rel=diskIopsWriteRateMax]'); + var $diskIopsWriteRateMaxLength = $form.find('.form-item[rel=diskIopsWriteRateMaxLength]'); var qosId = $(this).val(); if (qosId == 'storage') { // Storage QoS $diskBytesReadRate.hide(); + $diskBytesReadRateMax.hide(); + $diskBytesReadRateMaxLength.hide(); $diskBytesWriteRate.hide(); + $diskBytesWriteRateMax.hide(); + $diskBytesWriteRateMaxLength.hide(); $diskIopsReadRate.hide(); + $diskIopsReadRateMax.hide(); + $diskIopsReadRateMaxLength.hide(); $diskIopsWriteRate.hide(); + $diskIopsWriteRateMax.hide(); + $diskIopsWriteRateMaxLength.hide(); $isCustomizedIops.css('display', 'inline-block'); @@ -2216,14 +2648,30 @@ $hypervisorSnapshotReserve.hide(); $diskBytesReadRate.css('display', 'inline-block'); + $diskBytesReadRateMax.css('display', 'inline-block'); + $diskBytesReadRateMaxLength.css('display', 'inline-block'); $diskBytesWriteRate.css('display', 'inline-block'); + $diskBytesWriteRateMax.css('display', 'inline-block'); + $diskBytesWriteRateMaxLength.css('display', 'inline-block'); $diskIopsReadRate.css('display', 'inline-block'); + $diskIopsReadRateMax.css('display', 'inline-block'); + $diskIopsReadRateMaxLength.css('display', 'inline-block'); $diskIopsWriteRate.css('display', 'inline-block'); + $diskIopsWriteRateMax.css('display', 'inline-block'); + $diskIopsWriteRateMaxLength.css('display', 'inline-block'); } else { // No Qos $diskBytesReadRate.hide(); + $diskBytesReadRateMax.hide(); + $diskBytesReadRateMaxLength.hide(); $diskBytesWriteRate.hide(); + $diskBytesWriteRateMax.hide(); + $diskBytesWriteRateMaxLength.hide(); $diskIopsReadRate.hide(); + $diskIopsReadRateMax.hide(); + $diskIopsReadRateMaxLength.hide(); $diskIopsWriteRate.hide(); + $diskIopsWriteRateMax.hide(); + $diskIopsWriteRateMaxLength.hide(); $isCustomizedIops.hide(); $minIops.hide(); $maxIops.hide(); @@ -2273,6 +2721,22 @@ number: true } }, + diskBytesReadRateMax: { + label: 'label.disk.bytes.read.rate.max', + docID: 'helpDiskOfferingDiskBytesReadRateMax', + validation: { + required: false, //optional + number: true + } + }, + diskBytesReadRateMaxLength: { + label: 'label.disk.bytes.read.rate.max.length', + docID: 'helpDiskOfferingDiskBytesReadRateMaxLength', + validation: { + required: false, //optional + number: true + } + }, diskBytesWriteRate: { label: 'label.disk.bytes.write.rate', docID: 'helpDiskOfferingDiskBytesWriteRate', @@ -2281,6 +2745,22 @@ number: true } }, + diskBytesWriteRateMax: { + label: 'label.disk.bytes.write.rate.max', + docID: 'helpDiskOfferingDiskBytesWriteRateMax', + validation: { + required: false, //optional + number: true + } + }, + diskBytesWriteRateMaxLength: { + label: 'label.disk.bytes.write.rate.max.length', + docID: 'helpDiskOfferingDiskBytesWriteRateMaxLength', + validation: { + required: false, //optional + number: true + } + }, diskIopsReadRate: { label: 'label.disk.iops.read.rate', docID: 'helpDiskOfferingDiskIopsReadRate', @@ -2289,6 +2769,22 @@ number: true } }, + diskIopsReadRateMax: { + label: 'label.disk.iops.read.rate.max', + docID: 'helpDiskOfferingDiskIopsReadRateMax', + validation: { + required: false, //optional + number: true + } + }, + diskIopsReadRateMaxLength: { + label: 'label.disk.iops.read.rate.max.length', + docID: 'helpDiskOfferingDiskIopsReadRateMaxLength', + validation: { + required: false, //optional + number: true + } + }, diskIopsWriteRate: { label: 'label.disk.iops.write.rate', docID: 'helpDiskOfferingDiskIopsWriteRate', @@ -2297,6 +2793,22 @@ number: true } }, + diskIopsWriteRateMax: { + label: 'label.disk.iops.write.rate.max', + docID: 'helpDiskOfferingDiskIopsWriteRateMax', + validation: { + required: false, //optional + number: true + } + }, + diskIopsWriteRateMaxLength: { + label: 'label.disk.iops.write.rate.max.length', + docID: 'helpDiskOfferingDiskIopsWriteRateMaxLength', + validation: { + required: false, //optional + number: true + } + }, cacheMode: { label: 'label.cache.mode', docID: 'helpDiskOfferingCacheMode', @@ -2486,24 +2998,56 @@ $.extend(data, { bytesreadrate: args.data.diskBytesReadRate }); + }if (args.data.diskBytesReadRateMax != null && args.data.diskBytesReadRateMax.length > 0) { + $.extend(data, { + bytesreadratemax: args.data.diskBytesReadRateMax + }); + }if (args.data.diskBytesReadRateMaxLength != null && args.data.diskBytesReadRateMaxLength.length > 0) { + $.extend(data, { + bytesreadratemaxlength: args.data.diskBytesReadRateMaxLength + }); } if (args.data.diskBytesWriteRate != null && args.data.diskBytesWriteRate.length > 0) { $.extend(data, { byteswriterate: args.data.diskBytesWriteRate }); + }if (args.data.diskBytesWriteRateMax != null && args.data.diskBytesWriteRateMax.length > 0) { + $.extend(data, { + byteswriteratemax: args.data.diskBytesWriteRateMax + }); + }if (args.data.diskBytesWriteRateMaxLength != null && args.data.diskBytesWriteRateMaxLength.length > 0) { + $.extend(data, { + byteswriteratemaxlength: args.data.diskBytesWriteRateMaxLength + }); } if (args.data.diskIopsReadRate != null && args.data.diskIopsReadRate.length > 0) { $.extend(data, { iopsreadrate: args.data.diskIopsReadRate }); + }if (args.data.diskIopsReadRateMax != null && args.data.diskIopsReadRateMax.length > 0) { + $.extend(data, { + iopsreadratemax: args.data.diskIopsReadRateMax + }); + }if (args.data.diskIopsReadRateMaxLength != null && args.data.diskIopsReadRateMaxLength.length > 0) { + $.extend(data, { + iopsreadratemaxlength: args.data.diskIopsReadRateMaxLength + }); } if (args.data.diskIopsWriteRate != null && args.data.diskIopsWriteRate.length > 0) { $.extend(data, { iopswriterate: args.data.diskIopsWriteRate }); + }if (args.data.diskIopsWriteRateMax != null && args.data.diskIopsWriteRateMax.length > 0) { + $.extend(data, { + iopswriteratemax: args.data.diskIopsWriteRateMax + }); + }if (args.data.diskIopsWriteRateMaxLength != null && args.data.diskIopsWriteRateMaxLength.length > 0) { + $.extend(data, { + iopswriteratemaxlength: args.data.diskIopsWriteRateMaxLength + }); } } @@ -2558,12 +3102,179 @@ edit: { label: 'label.edit', action: function(args) { + var oldDiskDetails = args.context.diskOfferings[0]; var data = { - id: args.context.diskOfferings[0].id, - name: args.data.name, - displaytext: args.data.displaytext + id: args.context.diskOfferings[0].id }; - $.ajax({ + if (oldDiskDetails.name !== args.data.name){ + $.extend(data, { + name: args.data.name + }); + } + if (oldDiskDetails.displayText !== args.data.displayText){ + $.extend(data, { + displaytext: args.data.displayText + }); + } + //Disk Bytes Read Rate + if(oldDiskDetails.diskBytesReadRate == null && args.data.diskBytesReadRate.length > 0){ + $.extend(data, { + bytesreadrate: args.data.diskBytesReadRate + }); + } + else + { + if (oldDiskDetails.diskBytesReadRate != args.data.diskBytesReadRate && oldDiskDetails.diskBytesReadRate != null) + { + $.extend(data, { + bytesreadrate: args.data.diskBytesReadRate == "" ? "0" : args.data.diskBytesReadRate + }); + } + } + //Disk Bytes Read Rate Max + if(oldDiskDetails.diskBytesReadRateMax == null && args.data.diskBytesReadRateMax.length > 0){ + $.extend(data, { + bytesreadratemax: args.data.diskBytesReadRateMax + }); + } + else { + if (oldDiskDetails.diskBytesReadRateMax != args.data.diskBytesReadRateMax && oldDiskDetails.diskBytesReadRateMax != null) { + $.extend(data, { + bytesreadratemax: args.data.diskBytesReadRateMax == "" ? "0" : args.data.diskBytesReadRateMax + }); + } + } + //Disk Bytes Read Rate Max Length + if(oldDiskDetails.diskBytesReadRateMaxLength == null && args.data.diskBytesReadRateMaxLength.length > 0){ + $.extend(data, { + bytesreadratemaxlength: args.data.diskBytesReadRateMaxLength + }); + } + else { + if (oldDiskDetails.diskBytesReadRateMaxLength != args.data.diskBytesReadRateMaxLength && oldDiskDetails.diskBytesReadRateMaxLength != null) { + $.extend(data, { + bytesreadratemaxlength: args.data.diskBytesReadRateMaxLength == "" ? "0" : args.data.diskBytesReadRateMaxLength + }); + } + } + //Disk Bytes Write Rate + if(oldDiskDetails.diskBytesWriteRate == null && args.data.diskBytesWriteRate.length > 0){ + $.extend(data, { + byteswriterate: args.data.diskBytesWriteRate + }); + } + else { + if (oldDiskDetails.diskBytesWriteRate != args.data.diskBytesWriteRate && oldDiskDetails.diskBytesWriteRate != null) { + $.extend(data, { + byteswriterate: args.data.diskBytesWriteRate == "" ? "0" : args.data.diskBytesWriteRate + }); + } + } + //Disk Bytes Write Rate Max + if(oldDiskDetails.diskBytesWriteRateMax == null && args.data.diskBytesWriteRateMax.length > 0){ + $.extend(data, { + byteswriteratemax: args.data.diskBytesWriteRateMax + }); + } + else { + if (oldDiskDetails.diskBytesWriteRateMax != args.data.diskBytesWriteRateMax && oldDiskDetails.diskBytesWriteRateMax != null) { + $.extend(data, { + byteswriteratemax: args.data.diskBytesWriteRateMax == "" ? "0" : args.data.diskBytesWriteRateMax + }); + } + } + // Disk Bytes Write Rate Max Length + if(oldDiskDetails.diskBytesWriteRateMaxLength == null && args.data.diskBytesWriteRateMaxLength.length > 0){ + $.extend(data, { + byteswriteratemaxlength: args.data.diskBytesWriteRateMaxLength + }); + } + else { + if (oldDiskDetails.diskBytesWriteRateMaxLength != args.data.diskBytesWriteRateMaxLength && oldDiskDetails.diskBytesWriteRateMaxLength != null) { + $.extend(data, { + byteswriteratemaxlength: args.data.diskBytesWriteRateMaxLength == "" ? "0" : args.data.diskBytesWriteRateMaxLength + }); + } + } + //Disk IOPS Read Rate + if(oldDiskDetails.diskIopsReadRate == null && args.data.diskIopsReadRate.length > 0){ + $.extend(data, { + iopsreadrate: args.data.diskIopsReadRate + }); + } + else { + if (oldDiskDetails.diskIopsReadRate != args.data.diskIopsReadRate && oldDiskDetails.diskIopsReadRate != null) { + $.extend(data, { + iopsreadrate: args.data.diskIopsReadRate == "" ? "0" : args.data.diskIopsReadRate + }); + } + } + //Disk IOPS Read Rate Max + if(oldDiskDetails.diskIopsReadRateMax == null && args.data.diskIopsReadRateMax.length > 0){ + $.extend(data, { + iopsreadratemax: args.data.diskIopsReadRateMax + }); + } + else { + if (oldDiskDetails.diskIopsReadRateMax != args.data.diskIopsReadRateMax && oldDiskDetails.diskIopsReadRateMax != null) { + $.extend(data, { + iopsreadratemax: args.data.diskIopsReadRateMax == "" ? "0" : args.data.diskIopsReadRateMax + }); + } + } + //Disk IOPS Read Rate Max Length + if(oldDiskDetails.diskIopsReadRateMaxLength == null && args.data.diskIopsReadRateMaxLength.length > 0){ + $.extend(data, { + iopsreadratemaxlength: args.data.diskIopsReadRateMaxLength + }); + } + else { + if (oldDiskDetails.diskIopsReadRateMaxLength != args.data.diskIopsReadRateMaxLength && oldDiskDetails.diskIopsReadRateMaxLength != null) { + $.extend(data, { + iopsreadratemaxlength: args.data.diskIopsReadRateMaxLength == "" ? "0" : args.data.diskIopsReadRateMaxLength + }); + } + } + //Disk IOPS Write Rate + if(oldDiskDetails.diskIopsWriteRate == null && args.data.diskIopsWriteRate.length > 0){ + $.extend(data, { + iopswriterate: args.data.diskIopsWriteRate + }); + } + else { + if (oldDiskDetails.diskIopsWriteRate != args.data.diskIopsWriteRate && oldDiskDetails.diskIopsWriteRate != null) { + $.extend(data, { + iopswriterate: args.data.diskIopsWriteRate == "" ? "0" : args.data.diskIopsWriteRate + }); + } + } + //Disk IOPS Write Rate Max + if(oldDiskDetails.diskIopsWriteRateMax == null && args.data.diskIopsWriteRateMax.length > 0){ + $.extend(data, { + iopswriteratemax: args.data.diskIopsWriteRateMax + }); + } + else { + if (oldDiskDetails.diskIopsWriteRateMax != args.data.diskIopsWriteRateMax && oldDiskDetails.diskIopsWriteRateMax != null) { + $.extend(data, { + iopswriteratemax: args.data.diskIopsWriteRateMax == "" ? "0" : args.data.diskIopsWriteRateMax + }); + } + } + //Disk IOPS Write Rate Max Length + if(oldDiskDetails.diskIopsWriteRateMaxLength == null && args.data.diskIopsWriteRateMaxLength.length > 0){ + $.extend(data, { + iopswriteratemaxlength: args.data.diskIopsWriteRateMaxLength + }); + } + else { + if (oldDiskDetails.diskIopsWriteRateMaxLength != args.data.diskIopsWriteRateMaxLength && oldDiskDetails.diskIopsWriteRateMaxLength != null) { + $.extend(data, { + iopswriteratemaxlength: args.data.diskIopsWriteRateMaxLength == "" ? "0" : args.data.diskIopsWriteRateMaxLength + }); + } + } + $.ajax({ url: createURL('updateDiskOffering'), data: data, success: function(json) { @@ -2872,16 +3583,88 @@ } }, diskBytesReadRate: { - label: 'label.disk.bytes.read.rate' + label: 'label.disk.bytes.read.rate', + isEditable: true, + validation: { + number: true + } + }, + diskBytesReadRateMax: { + label: 'label.disk.bytes.read.rate.max', + isEditable: true, + validation: { + number: true + } + }, + diskBytesReadRateMaxLength: { + label: 'label.disk.bytes.read.rate.max.length', + isEditable: true, + validation: { + number: true + } }, diskBytesWriteRate: { - label: 'label.disk.bytes.write.rate' + label: 'label.disk.bytes.write.rate', + isEditable: true, + validation: { + number: true + } + }, + diskBytesWriteRateMax: { + label: 'label.disk.bytes.write.rate.max', + isEditable: true, + validation: { + number: true + } + }, + diskBytesWriteRateMaxLength: { + label: 'label.disk.bytes.write.rate.max.length', + isEditable: true, + validation: { + number: true + } }, diskIopsReadRate: { - label: 'label.disk.iops.read.rate' + label: 'label.disk.iops.read.rate', + isEditable: true, + validation: { + number: true + } + }, + diskIopsReadRateMax: { + label: 'label.disk.iops.read.rate.max', + isEditable: true, + validation: { + number: true + } + }, + diskIopsReadRateMaxLength: { + label: 'label.disk.iops.read.rate.max.length', + isEditable: true, + validation: { + number: true + } }, diskIopsWriteRate: { - label: 'label.disk.iops.write.rate' + label: 'label.disk.iops.write.rate', + isEditable: true, + validation: { + number: true + } + }, + diskIopsWriteRateMax: { + label: 'label.disk.iops.write.rate.max', + isEditable: true, + validation: { + number: true + } + }, + diskIopsWriteRateMaxLength: { + label: 'label.disk.iops.write.rate.max.length', + isEditable: true, + validation: { + number: true + } }, cacheMode: { label: 'label.cache.mode' @@ -2904,12 +3687,61 @@ }], dataProvider: function(args) { + var diskData = args.context.diskOfferings[0]; var data = { - isrecursive: true, id: args.context.diskOfferings[0].id }; + if (diskData.diskBytesReadRate != null && diskData.diskBytesReadRate.length > 0) { + $.extend(data, { + bytesreadrate: diskData.diskBytesReadRate + }); + }if (diskData.diskBytesReadRateMax != null && diskData.diskBytesReadRateMax.length > 0) { + $.extend(data, { + bytesreadratemax: diskData.diskBytesReadRateMax + }); + }if (diskData.diskBytesReadRateMaxLength != null && diskData.diskBytesReadRateMaxLength.length > 0) { + $.extend(data, { + bytesreadratemaxlength: diskData.diskBytesReadRateMaxLength + }); + }if (diskData.diskBytesWriteRate != null && diskData.diskBytesWriteRate.length > 0) { + $.extend(data, { + byteswriterate: diskData.diskBytesWriteRate + }); + }if (diskData.diskBytesWriteRateMax != null && diskData.diskBytesWriteRateMax.length > 0) { + $.extend(data, { + byteswriteratemax: diskData.diskBytesWriteRateMax + }); + }if (diskData.diskBytesWriteRateMaxLength != null && diskData.diskBytesWriteRateMaxLength.length > 0) { + $.extend(data, { + byteswriteratemaxlength: diskData.diskBytesWriteRateMaxLength + }); + }if (diskData.diskIopsReadRate != null && diskData.diskIopsReadRate.length > 0) { + $.extend(data, { + iopsreadrate: diskData.diskIopsReadRate + }); + }if (diskData.diskIopsReadRateMax != null && diskData.diskIopsReadRateMax.length > 0) { + $.extend(data, { + iopsreadratemax: diskData.diskIopsReadRateMax + }); + }if (diskData.diskIopsReadRateMaxLength != null && diskData.diskIopsReadRateMaxLength.length > 0) { + $.extend(data, { + iopsreadratemaxlength: diskData.diskIopsReadRateMaxLength + }); + }if (diskData.diskIopsWriteRate != null && diskData.diskIopsWriteRate.length > 0) { + $.extend(data, { + iopswriterate: diskData.diskIopsWriteRate + }); + }if (diskData.diskIopsWriteRateMax != null && diskData.diskIopsWriteRateMax.length > 0) { + $.extend(data, { + iopswriteratemax: diskData.diskIopsWriteRateMax + }); + }if (diskData.diskIopsWriteRateMaxLength != null && diskData.diskIopsWriteRateMaxLength.length > 0) { + $.extend(data, { + iopswriteratemaxlength: diskData.diskIopsWriteRateMaxLength + }); + } $.ajax({ - url: createURL('listDiskOfferings'), + url: createURL('listDiskOfferings&isrecursive=true'), dataType: "json", data: data, success: function(json) { diff --git a/ui/scripts/docs.js b/ui/scripts/docs.js index 7f29f2b3ac2d..08df0f441d42 100755 --- a/ui/scripts/docs.js +++ b/ui/scripts/docs.js @@ -270,18 +270,50 @@ cloudStack.docs = { desc: 'Allowed disk read rate in bytes per second', externalLink: '' }, + helpComputeOfferingDiskBytesReadRateMax: { + desc: 'Maximum allowed disk read rate in bytes per second', + externalLink: '' + }, + helpComputeOfferingDiskBytesReadRateMaxLength: { + desc: 'Maximum allowed disk read rate in bytes per second length', + externalLink: '' + }, helpComputeOfferingDiskBytesWriteRate: { desc: 'Allowed disk write rate in bytes per second', externalLink: '' }, + helpComputeOfferingDiskBytesWriteRateMax: { + desc: 'Maximum allowed disk write rate in bytes per second', + externalLink: '' + }, + helpComputeOfferingDiskBytesWriteRateMaxLength: { + desc: 'Maximum allowed disk write rate in bytes per second length', + externalLink: '' + }, helpComputeOfferingDiskIopsReadRate: { desc: 'Allowed disk read rate in I/O requests per second', externalLink: '' }, + helpComputeOfferingDiskIopsReadRateMax: { + desc: 'Maximum allowed disk read rate in I/O requests per second', + externalLink: '' + }, + helpComputeOfferingDiskIopsReadRateMaxLength: { + desc: 'Maximum allowed disk read rate in I/O requests per second length', + externalLink: '' + }, helpComputeOfferingDiskIopsWriteRate: { desc: 'Allowed disk write rate in I/O requests per second', externalLink: '' }, + helpComputeOfferingDiskIopsWriteRateMax: { + desc: 'Maximum allowed disk write rate in I/O requests per second', + externalLink: '' + }, + helpComputeOfferingDiskIopsWriteRateMaxLength: { + desc: 'Maximum allowed disk write rate in I/O requests per second length', + externalLink: '' + }, helpComputeOfferingHA: { desc: 'If yes, the administrator can choose to have the VM be monitored and as highly available as possible', externalLink: '' @@ -359,18 +391,50 @@ cloudStack.docs = { desc: 'Allowed disk read rate in bytes per second', externalLink: '' }, + helpDiskOfferingDiskBytesReadRateMax: { + desc: 'Maximum allowed disk read rate in bytes per second', + externalLink: '' + }, + helpDiskOfferingDiskBytesReadRateMaxLength: { + desc: 'Maximum allowed disk read rate in bytes per second length', + externalLink: '' + }, helpDiskOfferingDiskBytesWriteRate: { desc: 'Allowed disk write rate in bytes per second', externalLink: '' }, + helpDiskOfferingDiskBytesWriteRateMax: { + desc: 'Maximum allowed disk write rate in bytes per second', + externalLink: '' + }, + helpDiskOfferingDiskBytesWriteRateMaxLength: { + desc: 'Maximum allowed disk write rate in bytes per second length', + externalLink: '' + }, helpDiskOfferingDiskIopsReadRate: { desc: 'Allowed disk read rate in I/O requests per second', externalLink: '' }, + helpDiskOfferingDiskIopsReadRateMax: { + desc: 'Maximum allowed disk read rate in I/O requests per second', + externalLink: '' + }, + helpDiskOfferingDiskIopsReadRateMaxLength: { + desc: 'Maximum allowed disk read rate in I/O requests per second length', + externalLink: '' + }, helpDiskOfferingDiskIopsWriteRate: { desc: 'Allowed disk write rate in I/O requests per second', externalLink: '' }, + helpDiskOfferingDiskIopsWriteRateMax: { + desc: 'Maximum allowed disk write rate in I/O requests per second', + externalLink: '' + }, + helpDiskOfferingDiskIopsWriteRateMaxLength: { + desc: 'Maximum allowed disk write rate in I/O requests per second length', + externalLink: '' + }, helpDiskOfferingCustomDiskIops: { desc: 'If checked, the user can set Min and Max IOPS. If not checked, the root administrator can define such values.', externalLink: '' diff --git a/ui/scripts/storage.js b/ui/scripts/storage.js index 6cb45faf1e83..fda97f873605 100644 --- a/ui/scripts/storage.js +++ b/ui/scripts/storage.js @@ -302,7 +302,7 @@ var diskOfferings = cloudStack.listDiskOfferings({}); diskOfferingsObjList = diskOfferings; var items = []; - $(diskOfferings).each(function() { + $(diskOfferingsObjList).each(function() { items.push({ id: this.id, description: this.displaytext