Skip to content

Commit 96ca70e

Browse files
author
Prachi Damle
committed
CLOUDSTACK-4259 Dedicated Resources: createAffinityGroup API should not allow admin to create the group of this type through API
Changes: - Block API from creating this type of group
1 parent 25cc9eb commit 96ca70e

4 files changed

Lines changed: 33 additions & 2 deletions

File tree

api/src/org/apache/cloudstack/affinity/AffinityGroupService.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,4 +79,7 @@ Pair<List<? extends AffinityGroup>, Integer> listAffinityGroups(Long affinityGro
7979

8080
boolean isAffinityGroupAvailableInDomain(long affinityGroupId, long domainId);
8181

82+
AffinityGroup createAffinityGroupInternal(String account, Long domainId, String affinityGroupName,
83+
String affinityGroupType, String description);
84+
8285
}

plugins/dedicated-resources/src/org/apache/cloudstack/dedicated/DedicatedResourceManagerImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -609,7 +609,7 @@ private AffinityGroup findOrCreateDedicatedAffinityGroup(Long domainId, Long acc
609609
}
610610

611611

612-
group = _affinityGroupService.createAffinityGroup(accountName, domainId, affinityGroupName,
612+
group = _affinityGroupService.createAffinityGroupInternal(accountName, domainId, affinityGroupName,
613613
"ExplicitDedication", "dedicated resources group");
614614

615615
return group;

server/src/com/cloud/configuration/ConfigurationManagerImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1852,7 +1852,7 @@ private AffinityGroup createDedicatedAffinityGroup(String affinityGroupName, Lon
18521852
}
18531853
}
18541854

1855-
group = _affinityGroupService.createAffinityGroup(accountName, domainId, affinityGroupName,
1855+
group = _affinityGroupService.createAffinityGroupInternal(accountName, domainId, affinityGroupName,
18561856
"ExplicitDedication", "dedicated resources group");
18571857

18581858
return group;

server/src/org/apache/cloudstack/affinity/AffinityGroupServiceImpl.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,34 @@ public AffinityGroup createAffinityGroup(String account, Long domainId, String a
134134

135135
AffinityGroupProcessor processor = typeProcessorMap.get(affinityGroupType);
136136

137+
if (processor.isAdminControlledGroup()) {
138+
throw new PermissionDeniedException("Cannot create the affinity group");
139+
}
140+
141+
return createAffinityGroupInternal(account, domainId, affinityGroupName, affinityGroupType, description);
142+
}
143+
144+
@DB
145+
@Override
146+
public AffinityGroup createAffinityGroupInternal(String account, Long domainId, String affinityGroupName,
147+
String affinityGroupType, String description) {
148+
149+
Account caller = UserContext.current().getCaller();
150+
151+
// validate the affinityGroupType
152+
Map<String, AffinityGroupProcessor> typeProcessorMap = getAffinityTypeToProcessorMap();
153+
if (typeProcessorMap != null && !typeProcessorMap.isEmpty()) {
154+
if (!typeProcessorMap.containsKey(affinityGroupType)) {
155+
throw new InvalidParameterValueException("Unable to create affinity group, invalid affinity group type"
156+
+ affinityGroupType);
157+
}
158+
} else {
159+
throw new InvalidParameterValueException(
160+
"Unable to create affinity group, no Affinity Group Types configured");
161+
}
162+
163+
AffinityGroupProcessor processor = typeProcessorMap.get(affinityGroupType);
164+
137165
if (processor.isAdminControlledGroup() && !_accountMgr.isRootAdmin(caller.getType())) {
138166
throw new PermissionDeniedException("Cannot create the affinity group");
139167
}

0 commit comments

Comments
 (0)