Skip to content

Commit 8b9f5fd

Browse files
Merge branch '4.20'
2 parents 0e8b0b8 + 03a4b9f commit 8b9f5fd

File tree

36 files changed

+623
-203
lines changed

36 files changed

+623
-203
lines changed

agent/src/main/java/com/cloud/agent/Agent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -613,7 +613,7 @@ protected void setupStartupCommand(final StartupCommand startup) {
613613
}
614614

615615
protected String getAgentArch() {
616-
String arch = Script.runSimpleBashScript(Script.getExecutableAbsolutePath("arch"), 1000);
616+
String arch = Script.runSimpleBashScript(Script.getExecutableAbsolutePath("arch"), 2000);
617617
logger.debug("Arch for agent: {} found: {}", _name, arch);
618618
return arch;
619619
}

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

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import java.util.List;
2121
import java.util.Map;
2222

23-
import com.cloud.user.UserData;
2423
import org.apache.cloudstack.api.command.admin.cluster.ListClustersCmd;
2524
import org.apache.cloudstack.api.command.admin.config.ListCfgGroupsByCmd;
2625
import org.apache.cloudstack.api.command.admin.config.ListCfgsByCmd;
@@ -72,6 +71,7 @@
7271
import org.apache.cloudstack.api.command.user.vmgroup.UpdateVMGroupCmd;
7372
import org.apache.cloudstack.config.Configuration;
7473
import org.apache.cloudstack.config.ConfigurationGroup;
74+
import org.apache.cloudstack.framework.config.ConfigKey;
7575

7676
import com.cloud.alert.Alert;
7777
import com.cloud.capacity.Capacity;
@@ -91,6 +91,7 @@
9191
import com.cloud.storage.GuestOsCategory;
9292
import com.cloud.storage.StoragePool;
9393
import com.cloud.user.SSHKeyPair;
94+
import com.cloud.user.UserData;
9495
import com.cloud.utils.Pair;
9596
import com.cloud.utils.Ternary;
9697
import com.cloud.vm.InstanceGroup;
@@ -104,6 +105,14 @@
104105
public interface ManagementService {
105106
static final String Name = "management-server";
106107

108+
ConfigKey<Boolean> JsInterpretationEnabled = new ConfigKey<>("Hidden"
109+
, Boolean.class
110+
, "js.interpretation.enabled"
111+
, "false"
112+
, "Enable/Disable all JavaScript interpretation related functionalities to create or update Javascript rules."
113+
, false
114+
, ConfigKey.Scope.Global);
115+
107116
/**
108117
* returns the a map of the names/values in the configuration table
109118
*
@@ -509,4 +518,6 @@ VirtualMachine upgradeSystemVM(ScaleSystemVMCmd cmd) throws ResourceUnavailableE
509518

510519
boolean removeManagementServer(RemoveManagementServerCmd cmd);
511520

521+
void checkJsInterpretationAllowedIfNeededForParameterValue(String paramName, boolean paramValue);
522+
512523
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
public interface ResourceManagerUtil {
2020
long getResourceId(String resourceId, ResourceTag.ResourceObjectType resourceType);
21+
long getResourceId(String resourceId, ResourceTag.ResourceObjectType resourceType, boolean checkAccess);
2122
String getUuid(String resourceId, ResourceTag.ResourceObjectType resourceType);
2223
ResourceTag.ResourceObjectType getResourceType(String resourceTypeStr);
2324
void checkResourceAccessible(Long accountId, Long domainId, String exceptionMessage);

engine/components-api/src/main/java/com/cloud/template/TemplateManager.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,13 @@ public interface TemplateManager {
5757
+ "will validate if the provided URL is resolvable during the register of templates/ISOs before persisting them in the database.",
5858
true);
5959

60+
ConfigKey<Boolean> TemplateDeleteFromPrimaryStorage = new ConfigKey<Boolean>("Advanced",
61+
Boolean.class,
62+
"template.delete.from.primary.storage", "true",
63+
"Template when deleted will be instantly deleted from the Primary Storage",
64+
true,
65+
ConfigKey.Scope.Global);
66+
6067
static final String VMWARE_TOOLS_ISO = "vmware-tools.iso";
6168
static final String XS_TOOLS_ISO = "xs-tools.iso";
6269

@@ -104,6 +111,8 @@ public interface TemplateManager {
104111
*/
105112
List<VMTemplateStoragePoolVO> getUnusedTemplatesInPool(StoragePoolVO pool);
106113

114+
void evictTemplateFromStoragePoolsForZones(Long templateId, List<Long> zoneId);
115+
107116
/**
108117
* Deletes a template in the specified storage pool.
109118
*

engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4799,6 +4799,18 @@ public NicVO doInTransaction(TransactionStatus status) {
47994799
}
48004800
});
48014801

4802+
if (selectedIp != null && GuestType.Shared.equals(network.getGuestType())) {
4803+
IPAddressVO ipAddressVO = _ipAddressDao.findByIpAndSourceNetworkId(network.getId(), selectedIp);
4804+
if (ipAddressVO != null && IpAddress.State.Free.equals(ipAddressVO.getState())) {
4805+
ipAddressVO.setState(IPAddressVO.State.Allocated);
4806+
ipAddressVO.setAllocatedTime(new Date());
4807+
Account account = _accountDao.findById(vm.getAccountId());
4808+
ipAddressVO.setAllocatedInDomainId(account.getDomainId());
4809+
ipAddressVO.setAllocatedToAccountId(account.getId());
4810+
_ipAddressDao.update(ipAddressVO.getId(), ipAddressVO);
4811+
}
4812+
}
4813+
48024814
final Integer networkRate = _networkModel.getNetworkRate(network.getId(), vm.getId());
48034815
final NicProfile vmNic = new NicProfile(vo, network, vo.getBroadcastUri(), vo.getIsolationUri(), networkRate, _networkModel.isSecurityGroupSupportedInNetwork(network),
48044816
_networkModel.getNetworkTag(vm.getHypervisorType(), network));
@@ -4810,15 +4822,15 @@ protected String getSelectedIpForNicImport(Network network, DataCenter dataCente
48104822
if (network.getGuestType() == GuestType.L2) {
48114823
return null;
48124824
}
4813-
return dataCenter.getNetworkType() == NetworkType.Basic ?
4814-
getSelectedIpForNicImportOnBasicZone(ipAddresses.getIp4Address(), network, dataCenter):
4825+
return GuestType.Shared.equals(network.getGuestType()) ?
4826+
getSelectedIpForNicImportOnSharedNetwork(ipAddresses.getIp4Address(), network, dataCenter):
48154827
_ipAddrMgr.acquireGuestIpAddress(network, ipAddresses.getIp4Address());
48164828
}
48174829

4818-
protected String getSelectedIpForNicImportOnBasicZone(String requestedIp, Network network, DataCenter dataCenter) {
4830+
protected String getSelectedIpForNicImportOnSharedNetwork(String requestedIp, Network network, DataCenter dataCenter) {
48194831
IPAddressVO ipAddressVO = StringUtils.isBlank(requestedIp) ?
48204832
_ipAddressDao.findBySourceNetworkIdAndDatacenterIdAndState(network.getId(), dataCenter.getId(), IpAddress.State.Free):
4821-
_ipAddressDao.findByIp(requestedIp);
4833+
_ipAddressDao.findByIpAndSourceNetworkId(network.getId(), requestedIp);
48224834
if (ipAddressVO == null || ipAddressVO.getState() != IpAddress.State.Free) {
48234835
String msg = String.format("Cannot find a free IP to assign to VM NIC on network %s", network.getName());
48244836
logger.error(msg);

engine/orchestration/src/test/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestratorTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -822,7 +822,7 @@ public void testGetGuestIpForNicImportBasicZoneManualIP() {
822822
Mockito.when(network.getId()).thenReturn(networkId);
823823
Mockito.when(dataCenter.getId()).thenReturn(dataCenterId);
824824
Mockito.when(ipAddresses.getIp4Address()).thenReturn(requestedIp);
825-
Mockito.when(testOrchestrator._ipAddressDao.findByIp(requestedIp)).thenReturn(ipAddressVO);
825+
Mockito.when(testOrchestrator._ipAddressDao.findByIpAndSourceNetworkId(networkId, requestedIp)).thenReturn(ipAddressVO);
826826
String ipAddress = testOrchestrator.getSelectedIpForNicImport(network, dataCenter, ipAddresses);
827827
Assert.assertEquals(requestedIp, ipAddress);
828828
}

engine/schema/src/main/java/com/cloud/storage/dao/VMTemplatePoolDao.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ public interface VMTemplatePoolDao extends GenericDao<VMTemplateStoragePoolVO, L
3535

3636
List<VMTemplateStoragePoolVO> listByPoolIdAndState(long poolId, ObjectInDataStoreStateMachine.State state);
3737

38+
List<VMTemplateStoragePoolVO> listByPoolIdsAndTemplate(List<Long> poolIds, Long templateId);
39+
3840
List<VMTemplateStoragePoolVO> listByTemplateStatus(long templateId, VMTemplateStoragePoolVO.Status downloadState);
3941

4042
List<VMTemplateStoragePoolVO> listByTemplateStatus(long templateId, VMTemplateStoragePoolVO.Status downloadState, long poolId);

engine/schema/src/main/java/com/cloud/storage/dao/VMTemplatePoolDaoImpl.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,16 @@ public VMTemplateStoragePoolVO findByPoolTemplate(long poolId, long templateId,
150150
return findOneIncludingRemovedBy(sc);
151151
}
152152

153+
@Override
154+
public List<VMTemplateStoragePoolVO> listByPoolIdsAndTemplate(List<Long> poolIds, Long templateId) {
155+
SearchCriteria<VMTemplateStoragePoolVO> sc = PoolTemplateSearch.create();
156+
if (CollectionUtils.isNotEmpty(poolIds)) {
157+
sc.setParameters("pool_id", poolIds.toArray());
158+
}
159+
sc.setParameters("template_id", templateId);
160+
return listBy(sc);
161+
}
162+
153163
@Override
154164
public List<VMTemplateStoragePoolVO> listByTemplateStatus(long templateId, VMTemplateStoragePoolVO.Status downloadState) {
155165
SearchCriteria<VMTemplateStoragePoolVO> sc = TemplateStatusSearch.create();

engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDao.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,4 +171,5 @@ Pair<List<Long>, Integer> searchForIdsAndCount(Long storagePoolId, String storag
171171

172172
List<StoragePoolVO> findPoolsByStorageTypeAndZone(Storage.StoragePoolType storageType, Long zoneId);
173173

174+
List<StoragePoolVO> listByDataCenterIds(List<Long> dataCenterIds);
174175
}

engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ public class PrimaryDataStoreDaoImpl extends GenericDaoBase<StoragePoolVO, Long>
6565
private final GenericSearchBuilder<StoragePoolVO, Long> StatusCountSearch;
6666
private final SearchBuilder<StoragePoolVO> ClustersSearch;
6767
private final SearchBuilder<StoragePoolVO> IdsSearch;
68+
private final SearchBuilder<StoragePoolVO> DcsSearch;
6869

6970
@Inject
7071
private StoragePoolDetailsDao _detailsDao;
@@ -167,6 +168,9 @@ public PrimaryDataStoreDaoImpl() {
167168
IdsSearch.and("ids", IdsSearch.entity().getId(), SearchCriteria.Op.IN);
168169
IdsSearch.done();
169170

171+
DcsSearch = createSearchBuilder();
172+
DcsSearch.and("dataCenterId", DcsSearch.entity().getDataCenterId(), SearchCriteria.Op.IN);
173+
DcsSearch.done();
170174
}
171175

172176
@Override
@@ -927,6 +931,16 @@ public List<StoragePoolVO> findPoolsByStorageTypeAndZone(Storage.StoragePoolType
927931
return listBy(sc);
928932
}
929933

934+
@Override
935+
public List<StoragePoolVO> listByDataCenterIds(List<Long> dataCenterIds) {
936+
if (CollectionUtils.isEmpty(dataCenterIds)) {
937+
return Collections.emptyList();
938+
}
939+
SearchCriteria<StoragePoolVO> sc = DcsSearch.create();
940+
sc.setParameters("dataCenterId", dataCenterIds.toArray());
941+
return listBy(sc);
942+
}
943+
930944
private SearchCriteria<StoragePoolVO> createStoragePoolSearchCriteria(Long storagePoolId, String storagePoolName,
931945
Long zoneId, String path, Long podId, Long clusterId, Long hostId, String address, ScopeType scopeType,
932946
StoragePoolStatus status, String keyword, String storageAccessGroup) {

0 commit comments

Comments
 (0)