class KubernetesOperationExecutor extends BaseOperationExecutor {

    @Override
    public OperationProgress retrieveOperationProgress()
    {
        try
        {
            logger.debug("[{}] Getting Pod annotations", executionConfig.getName());
            Map<String,String> podAnnotations = follower.getPodAnnotations();
            String progressJson = podAnnotations.getOrDefault(KubernetesReporter.REPORT_PROGRESS_ANNOTATION, null);
            String resultPayload = podAnnotations.get(KubernetesReporter.REPORT_PAYLOAD_ANNOTATION);
            logger.debug("progressJson [" + progressJson + "], resultPayload [" + resultPayload + ']');
            if(progressJson == null)
            {
                return defaultFailedOperationProgress;
            }
            logger.debug("[{}] Getting operationProgress", executionConfig.getName());
            OperationProgress operationProgress = jsonHelper.getObjectFromString(progressJson, OperationProgress.class);
            logger.debug("[{}] OperationProgress processingState={} processingStateMessage={} percentComplete={}",
                executionConfig.getName(),
                operationProgress.getProcessingState(),
                operationProgress.getProcessingStateMessage(),
                operationProgress.getPercentComplete());
            operationProgress.setOperation(operation.getName());
            operationProgress.setResultPayload(resultPayload);
            if(operationProgress.getProcessingState() == ProcessingState.COMPLETE)
                isCompleteOperationProgressRetrieved.set(true);

            return operationProgress;
        }
        catch(JsonHelperException je)
        {
            logger.error("[{}] {} - Unable to convert progress string to OperationProgress", executionConfig.getName(), operation.getName());
        }
        catch(Exception e)
        {
            logger.error("[{}] {} - Unable to pull pod annotation: {}",
                executionConfig.getName(), operation.getName(), KubernetesReporter.REPORT_PROGRESS_ANNOTATION);
        }
        return null;
    }

    public  KubernetesOperationExecutor(PodFollower<PodPushClient> follower, Operation operation, KubeConfig kubeConfig, PodConfig podConfig, ExecutionConfig executionConfig, ExecutorContext executorContext);

}