private ProgressEvent preAttachDisk()

in aws-lightsail-instance/src/main/java/software/amazon/lightsail/instance/helpers/handler/DiskHandler.java [96:125]


    private ProgressEvent<ResourceModel, CallbackContext> preAttachDisk(
            final ProgressEvent<ResourceModel, CallbackContext> progress) {
        val disk = new Disk(resourceModel, logger, proxyClient, resourceModelRequest);
        logger.log("Executing AWS-Lightsail-Instance::Update::PreDiskAttach...");
        return proxy
                .initiate("AWS-Lightsail-Instance::Update::PreDiskAttach", proxyClient, progress.getResourceModel(),
                        progress.getCallbackContext())
                .translateToServiceRequest(Translator::translateToReadRequest).backoffDelay(BACKOFF_DELAY)
                .makeServiceCall((awsRequest, client) -> {
                    // Just return empty Get Response. We are not making any service call here.
                    // All we care out here is to make sure disks need to attach are in free state.
                    return GetInstanceResponse.builder().build();
                }).stabilize((awsRequest, awsResponse, client, model, context) -> {
                    val disksNeedAttachment = disk.disksNeedAttachment();
                    logger.log(String.format("Need to attach %s Disks. Checking if necessary disks are free",
                            disksNeedAttachment.size()));
                    for (val checkDisk : disksNeedAttachment) {
                        val diskFree = disk.isDiskDetached(checkDisk.getDiskName());
                        logger.log(String.format("%s disk current state(InUse=) is %s", checkDisk.getDiskName(),
                                diskFree));
                        if (!diskFree) {
                            // wait for max wait time and then return true.
                            return this.isStabilized(this.callbackContext, PRE_CHECK_UPDATE_ATTACH);
                        }
                    }
                    return true;
                }).handleError((awsRequest, exception, client, model, context) -> handleError(exception, model,
                        callbackContext, ImmutableList.of(), logger, this.getClass().getSimpleName()))
                .progress();
    }