From 651bd7df9820851e3fe2153e14108f5bd21b9cb1 Mon Sep 17 00:00:00 2001 From: Avgustin Marinov Date: Wed, 18 Jun 2025 15:13:25 +0300 Subject: [PATCH] Deprecate PUT target tag multi-assignment (#2468) * Deprecate PUT /rest/v1/targettags/{targetTagId}/assigned -> use new POST method with same endpoint and params * Remove deprecated DS tag mulit-assigned PUT method /rest/v1/distributionsettags/{distributionsetTagId}/assigned -> use already existing POST method with same endpoint and params Signed-off-by: Avgustin Marinov Co-authored-by: github-actions[bot] --- .../api/MgmtDistributionSetTagRestApi.java | 11 ----------- .../mgmt/rest/api/MgmtTargetTagRestApi.java | 18 +++++++++++++++--- .../MgmtDistributionSetTagResource.java | 9 --------- .../rest/resource/MgmtTargetTagResource.java | 11 ++++++++++- .../MgmtDistributionSetTagResourceTest.java | 2 +- .../resource/MgmtTargetTagResourceTest.java | 8 ++++---- 6 files changed, 30 insertions(+), 29 deletions(-) diff --git a/hawkbit-mgmt/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDistributionSetTagRestApi.java b/hawkbit-mgmt/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDistributionSetTagRestApi.java index 269965d07..42f4e18ba 100644 --- a/hawkbit-mgmt/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDistributionSetTagRestApi.java +++ b/hawkbit-mgmt/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDistributionSetTagRestApi.java @@ -391,17 +391,6 @@ public interface MgmtDistributionSetTagRestApi { @PathVariable("distributionsetTagId") Long distributionsetTagId, @RequestBody List distributionsetIds); - /** - * @deprecated since 0.8.0, use {@link #assignDistributionSet(Long, Long)} (POST) instead. - */ - @Deprecated(forRemoval = true, since = "0.8.0") - @PutMapping(value = MgmtRestConstants.DISTRIBUTIONSET_TAG_V1_REQUEST_MAPPING + MgmtRestConstants.DISTRIBUTIONSET_TAG_DISTRIBUTIONSETS_REQUEST_MAPPING, - consumes = { MediaTypes.HAL_JSON_VALUE, MediaType.APPLICATION_JSON_VALUE }, - produces = { MediaTypes.HAL_JSON_VALUE, MediaType.APPLICATION_JSON_VALUE }) - ResponseEntity assignDistributionSetsPut( - @PathVariable("distributionsetTagId") Long distributionsetTagId, - @RequestBody List distributionsetIds); - /** * Handles the DELETE request to unassign one distribution set from the given tag id. * diff --git a/hawkbit-mgmt/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtTargetTagRestApi.java b/hawkbit-mgmt/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtTargetTagRestApi.java index 640f7c4fd..36645f351 100644 --- a/hawkbit-mgmt/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtTargetTagRestApi.java +++ b/hawkbit-mgmt/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtTargetTagRestApi.java @@ -322,14 +322,26 @@ public interface MgmtTargetTagRestApi { @ApiResponse(responseCode = "429", description = "Too many requests. The server will refuse further attempts " + "and the client has to wait another second.") }) - @PutMapping( + @PostMapping( value = MgmtRestConstants.TARGET_TAG_V1_REQUEST_MAPPING + MgmtRestConstants.TARGET_TAG_TARGETS_REQUEST_MAPPING, consumes = { MediaTypes.HAL_JSON_VALUE, MediaType.APPLICATION_JSON_VALUE }) ResponseEntity assignTargets( @PathVariable("targetTagId") Long targetTagId, - @RequestParam(value = "onNotFoundPolicy", required = false, defaultValue = "FAIL") OnNotFoundPolicy onNotFoundPolicy, @Schema(description = "List of controller ids to be assigned", example = "[\"controllerId1\", \"controllerId2\"]") - @RequestBody List controllerIds); + @RequestBody List controllerIds, + @RequestParam(value = "onNotFoundPolicy", required = false, defaultValue = "FAIL") OnNotFoundPolicy onNotFoundPolicy); + + /** + * @deprecated since 0.9.0, use {@link #assignTargets(Long, List, OnNotFoundPolicy)} (POST) instead. + */ + @Deprecated(forRemoval = true, since = "0.9.0") + @PutMapping( + value = MgmtRestConstants.TARGET_TAG_V1_REQUEST_MAPPING + MgmtRestConstants.TARGET_TAG_TARGETS_REQUEST_MAPPING, + consumes = { MediaTypes.HAL_JSON_VALUE, MediaType.APPLICATION_JSON_VALUE }) + ResponseEntity assignTargetsPut( + @PathVariable("targetTagId") Long targetTagId, + @RequestBody List controllerIds, + @RequestParam(value = "onNotFoundPolicy", required = false, defaultValue = "FAIL") OnNotFoundPolicy onNotFoundPolicy); /** * Handles the DELETE request to unassign one target from the given tag id. diff --git a/hawkbit-mgmt/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTagResource.java b/hawkbit-mgmt/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTagResource.java index df0b6bc55..e08444d55 100644 --- a/hawkbit-mgmt/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTagResource.java +++ b/hawkbit-mgmt/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTagResource.java @@ -29,8 +29,6 @@ import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.exception.EntityNotFoundException; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetTag; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; @@ -150,13 +148,6 @@ public class MgmtDistributionSetTagResource implements MgmtDistributionSetTagRes return ResponseEntity.ok().build(); } - private static final Logger LOGGER = LoggerFactory.getLogger("DEPRECATED_USAGE"); - @Override - public ResponseEntity assignDistributionSetsPut(final Long distributionsetTagId, final List distributionsetIds) { - LOGGER.debug("[DEPRECATED] Deprecated usage of assignDistributionSetsPut. Use assignDistributionSets (POST) instead."); - return assignDistributionSets(distributionsetTagId, distributionsetIds); - } - @Override @AuditLog(entity = "DistributionSetTag", type = AuditLog.Type.UPDATE, description = "Unassign Distribution Set From Tag") public ResponseEntity unassignDistributionSet(final Long distributionsetTagId, final Long distributionsetId) { diff --git a/hawkbit-mgmt/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetTagResource.java b/hawkbit-mgmt/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetTagResource.java index 6bce77868..9ca906433 100644 --- a/hawkbit-mgmt/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetTagResource.java +++ b/hawkbit-mgmt/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetTagResource.java @@ -34,6 +34,8 @@ import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetTag; import org.eclipse.hawkbit.security.SystemSecurityContext; import org.eclipse.hawkbit.utils.TenantConfigHelper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.http.HttpStatus; @@ -146,7 +148,7 @@ public class MgmtTargetTagResource implements MgmtTargetTagRestApi { @Override public ResponseEntity assignTargets( - final Long targetTagId, final OnNotFoundPolicy onNotFoundPolicy, final List controllerIds) { + final Long targetTagId, final List controllerIds, final OnNotFoundPolicy onNotFoundPolicy) { log.debug("Assign {} targets for target tag {}", controllerIds.size(), targetTagId); if (onNotFoundPolicy == OnNotFoundPolicy.FAIL) { this.targetManagement.assignTag(controllerIds, targetTagId); @@ -161,6 +163,13 @@ public class MgmtTargetTagResource implements MgmtTargetTagRestApi { return ResponseEntity.ok().build(); } + private static final Logger LOGGER = LoggerFactory.getLogger("DEPRECATED_USAGE"); + @Override + public ResponseEntity assignTargetsPut(final Long targetTagId, final List controllerIds, final OnNotFoundPolicy onNotFoundPolicy) { + LOGGER.debug("[DEPRECATED] Deprecated usage of assignTargetsPut. Use assignTargetsPut (POST) instead."); + return assignTargets(targetTagId, controllerIds, onNotFoundPolicy); + } + @Override @AuditLog(entity = "TargetTag", type = AuditLog.Type.UPDATE, description = "Unassign Target From Target Tag") public ResponseEntity unassignTarget(final Long targetTagId, final String controllerId) { diff --git a/hawkbit-mgmt/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTagResourceTest.java b/hawkbit-mgmt/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTagResourceTest.java index dfbeaa96c..46ae4940f 100644 --- a/hawkbit-mgmt/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTagResourceTest.java +++ b/hawkbit-mgmt/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTagResourceTest.java @@ -429,7 +429,7 @@ class MgmtDistributionSetTagResourceTest extends AbstractManagementApiIntegratio withMissing.addAll(missing); mvc.perform( - put(MgmtRestConstants.DISTRIBUTIONSET_TAG_V1_REQUEST_MAPPING + "/" + tag.getId() + "/assigned") + post(MgmtRestConstants.DISTRIBUTIONSET_TAG_V1_REQUEST_MAPPING + "/" + tag.getId() + "/assigned") .content(JsonBuilder.toArray(withMissing)) .contentType(MediaType.APPLICATION_JSON)) .andDo(MockMvcResultPrinter.print()) diff --git a/hawkbit-mgmt/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetTagResourceTest.java b/hawkbit-mgmt/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetTagResourceTest.java index e5ea7b55a..20a292abb 100644 --- a/hawkbit-mgmt/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetTagResourceTest.java +++ b/hawkbit-mgmt/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetTagResourceTest.java @@ -314,7 +314,7 @@ public class MgmtTargetTagResourceTest extends AbstractManagementApiIntegrationT final Target assigned0 = targets.get(0); final Target assigned1 = targets.get(1); - mvc.perform(put(MgmtRestConstants.TARGET_TAG_V1_REQUEST_MAPPING + "/" + tag.getId() + "/assigned") + mvc.perform(post(MgmtRestConstants.TARGET_TAG_V1_REQUEST_MAPPING + "/" + tag.getId() + "/assigned") .content(JsonBuilder.toArray(Arrays.asList(assigned0.getControllerId(), assigned1.getControllerId()))) .contentType(MediaType.APPLICATION_JSON)) .andDo(MockMvcResultPrinter.print()) @@ -347,7 +347,7 @@ public class MgmtTargetTagResourceTest extends AbstractManagementApiIntegrationT final List withMissing = new ArrayList<>(targets); withMissing.addAll(missing); - mvc.perform(put(MgmtRestConstants.TARGET_TAG_V1_REQUEST_MAPPING + "/" + tag.getId() + "/assigned") + mvc.perform(post(MgmtRestConstants.TARGET_TAG_V1_REQUEST_MAPPING + "/" + tag.getId() + "/assigned") .content(JsonBuilder.toArray(withMissing)) .contentType(MediaType.APPLICATION_JSON)) .andDo(MockMvcResultPrinter.print()) @@ -387,7 +387,7 @@ public class MgmtTargetTagResourceTest extends AbstractManagementApiIntegrationT final List withMissing = new ArrayList<>(targets); withMissing.addAll(missing); - mvc.perform(put(MgmtRestConstants.TARGET_TAG_V1_REQUEST_MAPPING + "/" + tag.getId() + "/assigned") + mvc.perform(post(MgmtRestConstants.TARGET_TAG_V1_REQUEST_MAPPING + "/" + tag.getId() + "/assigned") .param("onNotFoundPolicy", MgmtTargetTagRestApi.OnNotFoundPolicy.ON_WHAT_FOUND_AND_FAIL.name()) .content(JsonBuilder.toArray(withMissing)) .contentType(MediaType.APPLICATION_JSON)) @@ -429,7 +429,7 @@ public class MgmtTargetTagResourceTest extends AbstractManagementApiIntegrationT final List withMissing = new ArrayList<>(targets); withMissing.addAll(missing); - mvc.perform(put(MgmtRestConstants.TARGET_TAG_V1_REQUEST_MAPPING + "/" + tag.getId() + "/assigned") + mvc.perform(post(MgmtRestConstants.TARGET_TAG_V1_REQUEST_MAPPING + "/" + tag.getId() + "/assigned") .param("onNotFoundPolicy", MgmtTargetTagRestApi.OnNotFoundPolicy.ON_WHAT_FOUND_AND_SUCCESS.name()) .content(JsonBuilder.toArray(withMissing)) .contentType(MediaType.APPLICATION_JSON))