Skip to content

Commit c108187

Browse files
author
utchoang
committed
Merge branch '4.15' into feature/create-zone-mobile-view
2 parents ac42194 + 83b568e commit c108187

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+586
-163
lines changed

api/src/main/java/org/apache/cloudstack/api/ApiConstants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,7 @@ public class ApiConstants {
256256
public static final String OLD_FORMAT = "oldformat";
257257
public static final String OP = "op";
258258
public static final String OS_CATEGORY_ID = "oscategoryid";
259+
public static final String OS_CATEGORY_NAME = "oscategoryname";
259260
public static final String OS_ID = "osid";
260261
public static final String OS_TYPE_ID = "ostypeid";
261262
public static final String OS_DISPLAY_NAME = "osdisplayname";

api/src/main/java/org/apache/cloudstack/api/command/admin/acl/CreateRoleCmd.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public class CreateRoleCmd extends RoleCmd {
4242
/////////////////////////////////////////////////////
4343

4444
@Parameter(name = ApiConstants.NAME, type = CommandType.STRING, required = true,
45-
description = "creates a role with this unique name", validations = {ApiArgValidator.NotNullOrEmpty})
45+
description = "Creates a role with this unique name", validations = {ApiArgValidator.NotNullOrEmpty})
4646
private String roleName;
4747

4848
@Parameter(name = ApiConstants.ROLE_ID, type = CommandType.UUID, entityType = RoleResponse.class,

api/src/main/java/org/apache/cloudstack/api/response/UsageRecordResponse.java

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,14 @@
1616
// under the License.
1717
package org.apache.cloudstack.api.response;
1818

19-
import com.google.gson.annotations.SerializedName;
19+
import java.util.LinkedHashSet;
20+
import java.util.Set;
2021

2122
import org.apache.cloudstack.api.ApiConstants;
22-
23-
import com.cloud.serializer.Param;
2423
import org.apache.cloudstack.api.BaseResponseWithTagInformation;
2524

26-
import java.util.LinkedHashSet;
27-
import java.util.Set;
25+
import com.cloud.serializer.Param;
26+
import com.google.gson.annotations.SerializedName;
2827

2928
@SuppressWarnings("unused")
3029
public class UsageRecordResponse extends BaseResponseWithTagInformation implements ControlledEntityResponse {
@@ -89,8 +88,20 @@ public class UsageRecordResponse extends BaseResponseWithTagInformation implemen
8988
private String templateId;
9089

9190
@SerializedName(ApiConstants.OS_TYPE_ID)
92-
@Param(description = "virtual machine os type id")
93-
private Long osTypeId;
91+
@Param(description = "virtual machine os type ID")
92+
private String osTypeId;
93+
94+
@SerializedName(ApiConstants.OS_DISPLAY_NAME)
95+
@Param(description = "virtual machine os display name")
96+
private String osDisplayName;
97+
98+
@SerializedName(ApiConstants.OS_CATEGORY_ID)
99+
@Param(description = "virtual machine guest os category ID")
100+
private String osCategoryId;
101+
102+
@SerializedName(ApiConstants.OS_CATEGORY_NAME)
103+
@Param(description = "virtual machine os category name")
104+
private String osCategoryName;
94105

95106
@SerializedName("usageid")
96107
@Param(description = "id of the resource")
@@ -206,10 +217,22 @@ public void setTemplateId(String templateId) {
206217
this.templateId = templateId;
207218
}
208219

209-
public void setOsTypeId(Long osTypeId) {
220+
public void setOsTypeId(String osTypeId) {
210221
this.osTypeId = osTypeId;
211222
}
212223

224+
public void setOsDisplayName(String osDisplayName) {
225+
this.osDisplayName = osDisplayName;
226+
}
227+
228+
public void setOsCategoryId(String osCategoryId) {
229+
this.osCategoryId = osCategoryId;
230+
}
231+
232+
public void setOsCategoryName(String osCategoryName) {
233+
this.osCategoryName = osCategoryName;
234+
}
235+
213236
public void setUsageId(String usageId) {
214237
this.usageId = usageId;
215238
}

engine/schema/src/main/java/com/cloud/projects/dao/ProjectAccountDaoImpl.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
import com.cloud.projects.ProjectAccount;
2525
import com.cloud.projects.ProjectAccountVO;
26+
import com.cloud.utils.db.Filter;
2627
import com.cloud.utils.db.GenericDaoBase;
2728
import com.cloud.utils.db.GenericSearchBuilder;
2829
import com.cloud.utils.db.SearchBuilder;
@@ -96,8 +97,8 @@ public List<ProjectAccountVO> getProjectOwners(long projectId) {
9697
public List<ProjectAccountVO> listByProjectId(long projectId) {
9798
SearchCriteria<ProjectAccountVO> sc = AllFieldsSearch.create();
9899
sc.setParameters("projectId", projectId);
99-
100-
return listBy(sc);
100+
Filter filter = new Filter(ProjectAccountVO.class, "id", Boolean.TRUE, null, null);
101+
return listBy(sc, filter);
101102
}
102103

103104
@Override

engine/schema/src/main/resources/META-INF/db/schema-41500to41510.sql

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,7 @@
1919
-- Schema upgrade from 4.15.0.0 to 4.15.1.0
2020
--;
2121

22+
-- Correct guest OS names
23+
UPDATE `cloud`.`guest_os` SET display_name='Fedora Linux (32 bit)' WHERE id=320;
24+
UPDATE `cloud`.`guest_os` SET display_name='Mandriva Linux (32 bit)' WHERE id=323;
25+
UPDATE `cloud`.`guest_os` SET display_name='OpenSUSE Linux (32 bit)' WHERE id=327;

python/lib/cloudutils/serviceConfig.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -535,6 +535,12 @@ def config(self):
535535
cfo.addEntry("export CGROUP_DAEMON", "'cpu:/virt'")
536536
cfo.addEntry("LIBVIRTD_ARGS", "-l")
537537
cfo.save()
538+
if os.path.exists("/lib/systemd/system/libvirtd.socket"):
539+
bash("/bin/systemctl mask libvirtd.socket");
540+
bash("/bin/systemctl mask libvirtd-ro.socket");
541+
bash("/bin/systemctl mask libvirtd-admin.socket");
542+
bash("/bin/systemctl mask libvirtd-tls.socket");
543+
bash("/bin/systemctl mask libvirtd-tcp.socket");
538544

539545
filename = "/etc/libvirt/qemu.conf"
540546

server/src/main/java/com/cloud/api/ApiResponseHelper.java

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,7 @@
306306
import com.cloud.storage.GuestOS;
307307
import com.cloud.storage.GuestOSCategoryVO;
308308
import com.cloud.storage.GuestOSHypervisor;
309+
import com.cloud.storage.GuestOsCategory;
309310
import com.cloud.storage.ImageStore;
310311
import com.cloud.storage.Snapshot;
311312
import com.cloud.storage.SnapshotVO;
@@ -315,6 +316,8 @@
315316
import com.cloud.storage.VMTemplateVO;
316317
import com.cloud.storage.Volume;
317318
import com.cloud.storage.VolumeVO;
319+
import com.cloud.storage.dao.GuestOSCategoryDao;
320+
import com.cloud.storage.dao.GuestOSDao;
318321
import com.cloud.storage.dao.VolumeDao;
319322
import com.cloud.storage.snapshot.SnapshotPolicy;
320323
import com.cloud.storage.snapshot.SnapshotSchedule;
@@ -394,6 +397,10 @@ public class ApiResponseHelper implements ResponseGenerator {
394397
private VMSnapshotDao vmSnapshotDao;
395398
@Inject
396399
private BackupOfferingDao backupOfferingDao;
400+
@Inject
401+
private GuestOSCategoryDao _guestOsCategoryDao;
402+
@Inject
403+
private GuestOSDao _guestOsDao;
397404

398405
@Override
399406
public UserResponse createUserResponse(User user) {
@@ -3395,7 +3402,16 @@ public UsageRecordResponse createUsageResponse(Usage usageRecord, Map<String, Se
33953402
resourceType = ResourceTag.ResourceObjectType.UserVm;
33963403
usageRecResponse.setUsageId(vm.getUuid());
33973404
resourceId = vm.getId();
3398-
usageRecResponse.setOsTypeId(vm.getGuestOSId());
3405+
final GuestOS guestOS = _guestOsDao.findById(vm.getGuestOSId());
3406+
if (guestOS != null) {
3407+
usageRecResponse.setOsTypeId(guestOS.getUuid());
3408+
usageRecResponse.setOsDisplayName(guestOS.getDisplayName());
3409+
final GuestOsCategory guestOsCategory = _guestOsCategoryDao.findById(guestOS.getCategoryId());
3410+
if (guestOsCategory != null) {
3411+
usageRecResponse.setOsCategoryId(guestOsCategory.getUuid());
3412+
usageRecResponse.setOsCategoryName(guestOsCategory.getName());
3413+
}
3414+
}
33993415
}
34003416
//Hypervisor Type
34013417
usageRecResponse.setType(usageRecord.getType());
@@ -3956,7 +3972,6 @@ public NicResponse createNicResponse(Nic result) {
39563972
NicResponse response = new NicResponse();
39573973
NetworkVO network = _entityMgr.findById(NetworkVO.class, result.getNetworkId());
39583974
VMInstanceVO vm = _entityMgr.findById(VMInstanceVO.class, result.getInstanceId());
3959-
UserVmJoinVO userVm = _entityMgr.findById(UserVmJoinVO.class, result.getInstanceId());
39603975
List<NicExtraDhcpOptionVO> nicExtraDhcpOptionVOs = _nicExtraDhcpOptionDao.listByNicId(result.getId());
39613976

39623977
// The numbered comments are to keep track of the data returned from here and UserVmJoinDaoImpl.setUserVmResponse()
@@ -3970,15 +3985,13 @@ public NicResponse createNicResponse(Nic result) {
39703985
response.setVmId(vm.getUuid());
39713986
}
39723987

3973-
if (userVm != null){
3974-
if (userVm.getTrafficType() != null) {
3975-
/*4: trafficType*/
3976-
response.setTrafficType(userVm.getTrafficType().toString());
3977-
}
3978-
if (userVm.getGuestType() != null) {
3979-
/*5: guestType*/
3980-
response.setType(userVm.getGuestType().toString());
3981-
}
3988+
if (network.getTrafficType() != null) {
3989+
/*4: trafficType*/
3990+
response.setTrafficType(network.getTrafficType().toString());
3991+
}
3992+
if (network.getGuestType() != null) {
3993+
/*5: guestType*/
3994+
response.setType(network.getGuestType().toString());
39823995
}
39833996
/*6: ipAddress*/
39843997
response.setIpaddress(result.getIPv4Address());
@@ -3987,9 +4000,7 @@ public NicResponse createNicResponse(Nic result) {
39874000
/*8: netmask*/
39884001
response.setNetmask(result.getIPv4Netmask());
39894002
/*9: networkName*/
3990-
if(userVm != null && userVm.getNetworkName() != null) {
3991-
response.setNetworkName(userVm.getNetworkName());
3992-
}
4003+
response.setNetworkName(network.getName());
39934004
/*10: macAddress*/
39944005
response.setMacAddress(result.getMacAddress());
39954006
/*11: IPv6Address*/

server/src/main/java/com/cloud/capacity/CapacityManagerImpl.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -665,11 +665,9 @@ public void updateCapacityForHost(final Host host, final Map<Long, ServiceOfferi
665665
Map<String, String> vmDetails = _userVmDetailsDao.listDetailsKeyPairs(vm.getId());
666666
String vmDetailCpu = vmDetails.get("cpuOvercommitRatio");
667667
String vmDetailRam = vmDetails.get("memoryOvercommitRatio");
668-
if (vmDetailCpu != null) {
669-
//if vmDetail_cpu is not null it means it is running in a overcommited cluster.
670-
cpuOvercommitRatio = Float.parseFloat(vmDetailCpu);
671-
ramOvercommitRatio = Float.parseFloat(vmDetailRam);
672-
}
668+
// if vmDetailCpu or vmDetailRam is not null it means it is running in a overcommitted cluster.
669+
cpuOvercommitRatio = (vmDetailCpu != null) ? Float.parseFloat(vmDetailCpu) : clusterCpuOvercommitRatio;
670+
ramOvercommitRatio = (vmDetailRam != null) ? Float.parseFloat(vmDetailRam) : clusterRamOvercommitRatio;
673671
ServiceOffering so = offeringsMap.get(vm.getServiceOfferingId());
674672
if (so == null) {
675673
so = _offeringsDao.findByIdIncludingRemoved(vm.getServiceOfferingId());

server/src/main/java/com/cloud/servlet/ConsoleProxyServlet.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -495,8 +495,10 @@ private String composeConsoleAccessUrl(String rootUrl, VirtualMachine vm, HostVO
495495
if (param.getHypervHost() != null || !ConsoleProxyManager.NoVncConsoleDefault.value()) {
496496
sb.append("/ajax?token=" + encryptor.encryptObject(ConsoleProxyClientParam.class, param));
497497
} else {
498-
sb.append("/resource/noVNC/vnc.html?port=" + ConsoleProxyManager.DEFAULT_NOVNC_PORT + "&token="
499-
+ encryptor.encryptObject(ConsoleProxyClientParam.class, param));
498+
sb.append("/resource/noVNC/vnc.html")
499+
.append("?autoconnect=true")
500+
.append("&port=" + ConsoleProxyManager.DEFAULT_NOVNC_PORT)
501+
.append("&token=" + encryptor.encryptObject(ConsoleProxyClientParam.class, param));
500502
}
501503

502504
// for console access, we need guest OS type to help implement keyboard

server/src/main/java/com/cloud/template/HypervisorTemplateAdapter.java

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,6 @@
2525

2626
import javax.inject.Inject;
2727

28-
import com.cloud.configuration.Config;
29-
import com.cloud.deployasis.dao.TemplateDeployAsIsDetailsDao;
30-
import com.cloud.storage.dao.VMTemplateDetailsDao;
31-
import com.cloud.utils.db.Transaction;
32-
import com.cloud.utils.db.TransactionCallback;
33-
import com.cloud.utils.db.TransactionStatus;
3428
import org.apache.cloudstack.agent.directdownload.CheckUrlAnswer;
3529
import org.apache.cloudstack.agent.directdownload.CheckUrlCommand;
3630
import org.apache.cloudstack.api.command.user.iso.DeleteIsoCmd;
@@ -61,14 +55,17 @@
6155
import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO;
6256
import org.apache.cloudstack.storage.image.datastore.ImageStoreEntity;
6357
import org.apache.cloudstack.utils.security.DigestHelper;
58+
import org.apache.commons.collections.CollectionUtils;
6459
import org.apache.log4j.Logger;
6560

6661
import com.cloud.agent.AgentManager;
6762
import com.cloud.agent.api.Answer;
6863
import com.cloud.alert.AlertManager;
64+
import com.cloud.configuration.Config;
6965
import com.cloud.configuration.Resource.ResourceType;
7066
import com.cloud.dc.DataCenterVO;
7167
import com.cloud.dc.dao.DataCenterDao;
68+
import com.cloud.deployasis.dao.TemplateDeployAsIsDetailsDao;
7269
import com.cloud.event.EventTypes;
7370
import com.cloud.event.UsageEventUtils;
7471
import com.cloud.exception.InvalidParameterValueException;
@@ -86,6 +83,7 @@
8683
import com.cloud.storage.VMTemplateVO;
8784
import com.cloud.storage.VMTemplateZoneVO;
8885
import com.cloud.storage.dao.VMTemplateDao;
86+
import com.cloud.storage.dao.VMTemplateDetailsDao;
8987
import com.cloud.storage.dao.VMTemplateZoneDao;
9088
import com.cloud.storage.download.DownloadMonitor;
9189
import com.cloud.template.VirtualMachineTemplate.State;
@@ -94,6 +92,9 @@
9492
import com.cloud.utils.UriUtils;
9593
import com.cloud.utils.db.DB;
9694
import com.cloud.utils.db.EntityManager;
95+
import com.cloud.utils.db.Transaction;
96+
import com.cloud.utils.db.TransactionCallback;
97+
import com.cloud.utils.db.TransactionStatus;
9798
import com.cloud.utils.exception.CloudRuntimeException;
9899

99100
public class HypervisorTemplateAdapter extends TemplateAdapterBase {
@@ -157,6 +158,12 @@ private Long performDirectDownloadUrlValidation(final String url) {
157158
return ans.getTemplateSize();
158159
}
159160

161+
private void checkZoneImageStores(final List<Long> zoneIdList) {
162+
if (zoneIdList != null && CollectionUtils.isEmpty(storeMgr.getImageStoresByScope(new ZoneScope(zoneIdList.get(0))))) {
163+
throw new InvalidParameterValueException("Failed to find a secondary storage in the specified zone.");
164+
}
165+
}
166+
160167
@Override
161168
public TemplateProfile prepare(RegisterIsoCmd cmd) throws ResourceAllocationException {
162169
TemplateProfile profile = super.prepare(cmd);
@@ -613,29 +620,17 @@ public boolean delete(TemplateProfile profile) {
613620
public TemplateProfile prepareDelete(DeleteTemplateCmd cmd) {
614621
TemplateProfile profile = super.prepareDelete(cmd);
615622
VMTemplateVO template = profile.getTemplate();
616-
List<Long> zoneIdList = profile.getZoneIdList();
617-
618623
if (template.getTemplateType() == TemplateType.SYSTEM) {
619624
throw new InvalidParameterValueException("The DomR template cannot be deleted.");
620625
}
621-
622-
if (zoneIdList != null && (storeMgr.getImageStoreWithFreeCapacity(zoneIdList.get(0)) == null)) {
623-
throw new InvalidParameterValueException("Failed to find a secondary storage in the specified zone.");
624-
}
625-
626+
checkZoneImageStores(profile.getZoneIdList());
626627
return profile;
627628
}
628629

629630
@Override
630631
public TemplateProfile prepareDelete(DeleteIsoCmd cmd) {
631632
TemplateProfile profile = super.prepareDelete(cmd);
632-
List<Long> zoneIdList = profile.getZoneIdList();
633-
634-
if (zoneIdList != null &&
635-
(storeMgr.getImageStoreWithFreeCapacity(zoneIdList.get(0)) == null)) {
636-
throw new InvalidParameterValueException("Failed to find a secondary storage in the specified zone.");
637-
}
638-
633+
checkZoneImageStores(profile.getZoneIdList());
639634
return profile;
640635
}
641636
}

0 commit comments

Comments
 (0)