public ProgressEvent handleRequest()

in aws-ssm-patchbaseline/src/main/java/software/amazon/ssm/patchbaseline/CreateHandler.java [40:109]


    public ProgressEvent<ResourceModel, CallbackContext> handleRequest(
        final AmazonWebServicesClientProxy proxy,
        final ResourceHandlerRequest<ResourceModel> request,
        final CallbackContext callbackContext,
        final Logger logger) {

        String baselineId = null;
        final ResourceModel model = request.getDesiredResourceState();

        logger.log(String.format("INFO Activity %s request with clientRequestToken: %s %n", TYPE_NAME, request.getClientRequestToken()));

        try {
            /**Validate, merge, and add 3 sets of Tags to request
             * Tags added to our specific Patch Baseline resource in the template, which is in ResourceModel
             * Tags added to the entire CloudFormation Stack, which is in desiredResourceTag
             * System Tags set by CloudFormation service, which is systemTags
             **/

            List<Tag> createTags = tagHelper.validateAndMergeTagsForCreate(request, model.getTags());
            ResourceModelPropertyTranslator.translateToResourceModelTags(createTags).ifPresent(model::setTags);

            CreatePatchBaselineRequest createPatchBaselineRequest =
                    CreatePatchBaselineRequestTranslator.createPatchBaseline(model, request.getClientRequestToken());

            final CreatePatchBaselineResponse createPatchBaselineResponse =
                    proxy.injectCredentialsAndInvokeV2(createPatchBaselineRequest, ssmClient::createPatchBaseline);

            baselineId = createPatchBaselineResponse.baselineId();

            logger.log(String.format("INFO Created patch baseline %s successfully. Adding groups (if any) %n", baselineId));

            // put physical ID to model
            model.setId(baselineId);

            // This is not in the definition for a baseline object but we must receive it from CFN
            // Register the groups for this Patch Baseline
            List<String> patchGroups = CollectionUtils.isNullOrEmpty(model.getPatchGroups()) ? new ArrayList<>() : model.getPatchGroups();

            for (String group : patchGroups) {
                //Each group needs its own Register call
                RegisterPatchBaselineForPatchGroupRequest groupRequest =
                        registerPatchBaselineForPatchGroupRequest(baselineId, group);
                RegisterPatchBaselineForPatchGroupResponse groupResponse =
                        proxy.injectCredentialsAndInvokeV2(groupRequest, ssmClient::registerPatchBaselineForPatchGroup);
            }

            // If we made it here, no exceptions related to the requests were thrown. Success.
            logger.log(String.format("INFO Registered groups to patch baseline %s successfully %n", baselineId));

            // Set to default patch baseline
            if (BooleanUtils.isTrue(model.getDefaultBaseline())) {
                RegisterDefaultPatchBaselineRequest registerDefaultPatchBaselineRequest = RegisterDefaultPatchBaselineRequest.builder()
                                                                                                    .baselineId(baselineId)
                                                                                                    .build();
                RegisterDefaultPatchBaselineResponse registerDefaultPatchBaselineResponse =
                        proxy.injectCredentialsAndInvokeV2(registerDefaultPatchBaselineRequest, ssmClient::registerDefaultPatchBaseline);

                logger.log(String.format("INFO Registered patch baseline %s to default patch baseline successfully %n", baselineId));
            }

            return ProgressEvent.<ResourceModel, CallbackContext>builder()
                    .resourceModel(model)
                    .status(OperationStatus.SUCCESS)
                    .build();

        } catch (Exception e) {
            return Resource.handleException(e, model, baselineId, logger);
        }

    }