Skip to content

Commit 5d9261e

Browse files
author
SadiJr
committed
Merge branch 'tag-as-rule-add-variables' into '4.20.0.0-scclouds'
Adição das variáveis de conta e domínio para _tags_ flexíveis Closes #2086, #2688, and #3140 See merge request scclouds/scclouds!918
2 parents 6feaadf + ba29757 commit 5d9261e

43 files changed

Lines changed: 1036 additions & 252 deletions

File tree

Some content is hidden

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

api/src/main/java/com/cloud/storage/VolumeApiService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ Volume updateVolume(long volumeId, String path, String state, Long storageId,
169169
* </body>
170170
* </table>
171171
*/
172-
boolean doesTargetStorageSupportDiskOffering(StoragePool destPool, String diskOfferingTags);
172+
boolean doesTargetStorageSupportDiskOffering(StoragePool destPool, String diskOfferingTags, long volumeOwner);
173173

174174
Volume destroyVolume(long volumeId, Account caller, boolean expunge, boolean forceExpunge);
175175

engine/schema/src/main/java/com/cloud/host/HostVO.java

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,11 @@
4545
import com.cloud.cpu.CPU;
4646
import org.apache.cloudstack.util.CPUArchConverter;
4747
import org.apache.cloudstack.util.HypervisorTypeConverter;
48-
import org.apache.cloudstack.utils.jsinterpreter.GenericRuleHelper;
4948
import org.apache.cloudstack.utils.reflectiontostringbuilderutils.ReflectionToStringBuilderUtils;
5049
import org.apache.commons.collections.CollectionUtils;
51-
import org.apache.commons.lang.BooleanUtils;
5250
import org.apache.commons.lang3.StringUtils;
5351

5452
import com.cloud.agent.api.VgpuTypesInfo;
55-
import com.cloud.host.dao.HostTagsDao;
5653
import com.cloud.hypervisor.Hypervisor.HypervisorType;
5754
import com.cloud.offering.ServiceOffering;
5855
import com.cloud.resource.ResourceState;
@@ -826,23 +823,6 @@ public Set<String> getHostServiceOfferingAndTemplateMissingTags(ServiceOffering
826823
return tags;
827824
}
828825

829-
public boolean checkHostServiceOfferingTags(ServiceOffering serviceOffering) {
830-
if (serviceOffering == null) {
831-
return false;
832-
}
833-
834-
if (BooleanUtils.isTrue(this.getIsTagARule())) {
835-
return GenericRuleHelper.interpretTagAsRule(this.getHostTags().get(0), serviceOffering.getHostTag(), HostTagsDao.hostTagRuleExecutionTimeout.value(),
836-
HostTagsDao.hostTagRuleExecutionTimeout.key());
837-
}
838-
839-
if (StringUtils.isEmpty(serviceOffering.getHostTag())) {
840-
return true;
841-
}
842-
List<String> serviceOfferingTags = Arrays.asList(serviceOffering.getHostTag().split(","));
843-
return this.getHostTags() != null && this.getHostTags().containsAll(serviceOfferingTags);
844-
}
845-
846826
@Override
847827
public PartitionType partitionType() {
848828
return PartitionType.Host;

engine/schema/src/main/java/com/cloud/host/dao/HostDao.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -172,10 +172,6 @@ public interface HostDao extends GenericDao<HostVO, Long>, StateDao<Status, Stat
172172
*/
173173
List<String> listOrderedHostsHypervisorVersionsInDatacenter(long datacenterId, HypervisorType hypervisorType);
174174

175-
List<HostVO> findHostsWithTagRuleThatMatchComputeOfferingTags(String computeOfferingTags);
176-
177-
List<Long> findClustersThatMatchHostTagRule(String computeOfferingTags);
178-
179175
List<Long> listSsvmHostsWithPendingMigrateJobsOrderedByJobCount();
180176

181177
Long findClusterIdByVolumeInfo(VolumeInfo volumeInfo);

engine/schema/src/main/java/com/cloud/host/dao/HostDaoImpl.java

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,9 @@
2222
import java.util.ArrayList;
2323
import java.util.Date;
2424
import java.util.HashMap;
25-
import java.util.HashSet;
2625
import java.util.List;
2726
import java.util.Map;
2827
import java.util.Objects;
29-
import java.util.Set;
3028
import java.util.TimeZone;
3129
import java.util.stream.Collectors;
3230

@@ -1355,20 +1353,6 @@ private List<Long> findHostByComputeOfferings(String computeOfferingTags){
13551353
}
13561354
}
13571355

1358-
@Override
1359-
public List<HostVO> findHostsWithTagRuleThatMatchComputeOfferingTags(String computeOfferingTags) {
1360-
List<HostTagVO> hostTagVOList = _hostTagsDao.findHostRuleTags();
1361-
List<HostVO> result = new ArrayList<>();
1362-
for (HostTagVO rule: hostTagVOList) {
1363-
if (GenericRuleHelper.interpretTagAsRule(rule.getTag(), computeOfferingTags, HostTagsDao.hostTagRuleExecutionTimeout.value(),
1364-
HostTagsDao.hostTagRuleExecutionTimeout.key())) {
1365-
result.add(findById(rule.getHostId()));
1366-
}
1367-
}
1368-
1369-
return result;
1370-
}
1371-
13721356
@Override
13731357
public List<HostVO> findHostsWithGuestOsRulesThatDidNotMatchOsOfGuestVm(String templateGuestOSName) {
13741358
List<DetailVO> hostIdsWithGuestOsRule = _detailsDao.findByName(Host.GUEST_OS_RULE);
@@ -1384,16 +1368,6 @@ public List<HostVO> findHostsWithGuestOsRulesThatDidNotMatchOsOfGuestVm(String t
13841368
return hostsWithIncompatibleRules;
13851369
}
13861370

1387-
@Override
1388-
public List<Long> findClustersThatMatchHostTagRule(String computeOfferingTags) {
1389-
Set<Long> result = new HashSet<>();
1390-
List<HostVO> hosts = findHostsWithTagRuleThatMatchComputeOfferingTags(computeOfferingTags);
1391-
for (HostVO host: hosts) {
1392-
result.add(host.getClusterId());
1393-
}
1394-
return new ArrayList<>(result);
1395-
}
1396-
13971371
@Override
13981372
public List<Long> listSsvmHostsWithPendingMigrateJobsOrderedByJobCount() {
13991373
String query = "SELECT cel.host_id, COUNT(*) " +

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,4 +163,6 @@ public interface VolumeDao extends GenericDao<VolumeVO, Long>, StateDao<Volume.S
163163
List<VolumeVO> searchRemovedByVms(List<Long> vmIds, Long batchSize);
164164

165165
VolumeVO findOneByIScsiName(String iScsiName);
166+
167+
List<VolumeVO> listByDiskOfferingIdAndPoolNotNull(long diskOfferingId);
166168
}

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ public class VolumeDaoImpl extends GenericDaoBase<VolumeVO, Long> implements Vol
7777
protected GenericSearchBuilder<VolumeVO, SumCount> primaryStorageSearch2;
7878
protected GenericSearchBuilder<VolumeVO, SumCount> secondaryStorageSearch;
7979
private final SearchBuilder<VolumeVO> poolAndPathSearch;
80+
protected SearchBuilder<VolumeVO> diskOfferingAndPoolSearch;
8081

8182
@Inject
8283
ReservationDao reservationDao;
@@ -512,6 +513,11 @@ public VolumeDaoImpl() {
512513
poolAndPathSearch.and("poolId", poolAndPathSearch.entity().getPoolId(), Op.EQ);
513514
poolAndPathSearch.and("path", poolAndPathSearch.entity().getPath(), Op.EQ);
514515
poolAndPathSearch.done();
516+
517+
diskOfferingAndPoolSearch = createSearchBuilder();
518+
diskOfferingAndPoolSearch.and("diskOfferingId", diskOfferingAndPoolSearch.entity().getDiskOfferingId(), Op.EQ);
519+
diskOfferingAndPoolSearch.and("poolId", diskOfferingAndPoolSearch.entity().getPoolId(), Op.NNULL);
520+
diskOfferingAndPoolSearch.done();
515521
}
516522

517523
@Override
@@ -918,4 +924,11 @@ public VolumeVO findOneByIScsiName(String iScsiName) {
918924
sc.setParameters("iScsiName", iScsiName);
919925
return findOneIncludingRemovedBy(sc);
920926
}
927+
928+
@Override
929+
public List<VolumeVO> listByDiskOfferingIdAndPoolNotNull(long diskOfferingId) {
930+
SearchCriteria<VolumeVO> sc = diskOfferingAndPoolSearch.create();
931+
sc.setParameters("diskOfferingId", diskOfferingId);
932+
return listBy(sc);
933+
}
921934
}

engine/schema/src/main/java/com/cloud/vm/dao/VMInstanceDao.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,4 +172,6 @@ List<VMInstanceVO> searchRemovedByRemoveDate(final Date startDate, final Date en
172172
Pair<List<VMInstanceVO>, Integer> listByVmsNotInClusterUsingPool(long clusterId, long poolId);
173173

174174
List<VMInstanceVO> listByZoneIdAndTypeIncludingRemoved(long zoneId, VirtualMachine.Type type);
175+
176+
List<VMInstanceVO> listByServiceOfferingIdAndHostNotNull(long serviceOfferingId);
175177
}

engine/schema/src/main/java/com/cloud/vm/dao/VMInstanceDaoImpl.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ public class VMInstanceDaoImpl extends GenericDaoBase<VMInstanceVO, Long> implem
101101
protected SearchBuilder<VMInstanceVO> BackupSearch;
102102
protected SearchBuilder<VMInstanceVO> LastHostAndStatesSearch;
103103
protected SearchBuilder<VMInstanceVO> VmsNotInClusterUsingPool;
104+
protected SearchBuilder<VMInstanceVO> ServiceOfferingAndHostSearch;
104105

105106
@Inject
106107
ResourceTagDao tagsDao;
@@ -325,6 +326,11 @@ protected void init() {
325326
VmsNotInClusterUsingPool.join("hostSearch2", hostSearch2, hostSearch2.entity().getId(), VmsNotInClusterUsingPool.entity().getHostId(), JoinType.INNER);
326327
VmsNotInClusterUsingPool.and("vmStates", VmsNotInClusterUsingPool.entity().getState(), Op.IN);
327328
VmsNotInClusterUsingPool.done();
329+
330+
ServiceOfferingAndHostSearch = createSearchBuilder();
331+
ServiceOfferingAndHostSearch.and("serviceOfferingId", ServiceOfferingAndHostSearch.entity().getServiceOfferingId(), Op.EQ);
332+
ServiceOfferingAndHostSearch.and("hostId", ServiceOfferingAndHostSearch.entity().getHostId(), Op.NNULL);
333+
ServiceOfferingAndHostSearch.done();
328334
}
329335

330336
@Override
@@ -1077,4 +1083,11 @@ public List<VMInstanceVO> listByZoneIdAndTypeIncludingRemoved(long zoneId, Virtu
10771083
sc.setParameters("type", type.toString());
10781084
return listIncludingRemovedBy(sc);
10791085
}
1086+
1087+
@Override
1088+
public List<VMInstanceVO> listByServiceOfferingIdAndHostNotNull(long serviceOfferingId) {
1089+
SearchCriteria<VMInstanceVO> sc = ServiceOfferingAndHostSearch.create();
1090+
sc.setParameters("serviceOfferingId", serviceOfferingId);
1091+
return listBy(sc);
1092+
}
10801093
}

engine/schema/src/test/java/com/cloud/host/HostVOTest.java

Lines changed: 0 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -44,51 +44,6 @@ public void setUp() throws Exception {
4444
false, "TestSO", false, VirtualMachine.Type.User, false);
4545
}
4646

47-
@Test
48-
public void testNoSO() {
49-
assertFalse(host.checkHostServiceOfferingTags(null));
50-
}
51-
52-
@Test
53-
public void testNoTag() {
54-
assertTrue(host.checkHostServiceOfferingTags(offering));
55-
}
56-
57-
@Test
58-
public void testRightTag() {
59-
host.setHostTags(Arrays.asList("tag1", "tag2"), false);
60-
offering.setHostTag("tag2,tag1");
61-
assertTrue(host.checkHostServiceOfferingTags(offering));
62-
}
63-
64-
@Test
65-
public void testWrongTag() {
66-
host.setHostTags(Arrays.asList("tag1", "tag2"), false);
67-
offering.setHostTag("tag2,tag4");
68-
assertFalse(host.checkHostServiceOfferingTags(offering));
69-
}
70-
71-
@Test
72-
public void checkHostServiceOfferingTagsTestRuleTagWithServiceTagThatMatches() {
73-
host.setHostTags(List.of("tags[0] == 'A'"), true);
74-
offering.setHostTag("A");
75-
assertTrue(host.checkHostServiceOfferingTags(offering));
76-
}
77-
78-
@Test
79-
public void checkHostServiceOfferingTagsTestRuleTagWithServiceTagThatDoesNotMatch() {
80-
host.setHostTags(List.of("tags[0] == 'A'"), true);
81-
offering.setHostTag("B");
82-
assertFalse(host.checkHostServiceOfferingTags(offering));
83-
}
84-
85-
@Test
86-
public void checkHostServiceOfferingTagsTestRuleTagWithNullServiceTag() {
87-
host.setHostTags(List.of("tags[0] == 'A'"), true);
88-
offering.setHostTag(null);
89-
assertFalse(host.checkHostServiceOfferingTags(offering));
90-
}
91-
9247
@Test
9348
public void testEitherNoSOOrTemplate() {
9449
assertFalse(host.checkHostServiceOfferingAndTemplateTags(null, Mockito.mock(VirtualMachineTemplate.class), null));

engine/storage/src/main/java/org/apache/cloudstack/storage/allocator/AbstractStoragePoolAllocator.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import org.apache.cloudstack.storage.datastore.db.StoragePoolDetailVO;
3636
import org.apache.cloudstack.storage.datastore.db.StoragePoolDetailsDao;
3737
import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
38+
import org.apache.cloudstack.tagasrule.TagAsRuleHelper;
3839
import org.apache.commons.lang3.StringUtils;
3940
import org.apache.cloudstack.utils.reflectiontostringbuilderutils.ReflectionToStringBuilderUtils;
4041
import org.apache.commons.collections.CollectionUtils;
@@ -78,6 +79,7 @@ public abstract class AbstractStoragePoolAllocator extends AdapterBase implement
7879
@Inject private StorageManager storageMgr;
7980
@Inject private StorageUtil storageUtil;
8081
@Inject private StoragePoolDetailsDao storagePoolDetailsDao;
82+
@Inject protected TagAsRuleHelper tagAsRuleHelper;
8183

8284
/**
8385
* make sure shuffled lists of Pools are really shuffled

0 commit comments

Comments
 (0)