Skip to content

Commit 12b05cf

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 a6c9d69 commit 12b05cf

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
@@ -608,7 +608,7 @@ private AffinityGroup findOrCreateDedicatedAffinityGroup(Long domainId, Long acc
608608
}
609609

610610

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

614614
return group;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2021,7 +2021,7 @@ private AffinityGroup createDedicatedAffinityGroup(String affinityGroupName, Lon
20212021
}
20222022
}
20232023

2024-
group = _affinityGroupService.createAffinityGroup(accountName, domainId, affinityGroupName,
2024+
group = _affinityGroupService.createAffinityGroupInternal(accountName, domainId, affinityGroupName,
20252025
"ExplicitDedication", "dedicated resources group");
20262026

20272027
return group;

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

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

132132
AffinityGroupProcessor processor = typeProcessorMap.get(affinityGroupType);
133133

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

0 commit comments

Comments
 (0)