private CloudTask mapTaskResource(Map<String, Object> resource) { CloudTask task = new CloudTask(getV3Meta(resource), getNameOfV3Resource(resource)); task.setCommand(getAttributeOfV3Resource(resource, "command", String.class)); task.setMemory(getAttributeOfV3Resource(resource, "memory_in_mb", Integer.class)); task.setDiskQuota(getAttributeOfV3Resource(resource, "disk_in_mb", Integer.class)); task.setState(getTaskState(resource)); task.setResult(getTaskResult(resource)); return task; }
@Override public CloudTask runTask(String applicationName, CloudTask task) { UUID applicationId = getRequiredApplicationId(applicationName); String urlPath = "/v3/apps/{applicationGuid}/tasks"; Map<String, Object> urlVariables = new HashMap<>(); urlVariables.put("applicationGuid", applicationId); Map<String, Object> request = new HashMap<>(); request.put("name", task.getName()); request.put("command", task.getCommand()); request.put("memory_in_mb", task.getMemory()); request.put("disk_in_mb", task.getDiskQuota()); @SuppressWarnings("unchecked") Map<String, Object> resource = getRestTemplate().postForObject(getUrl(urlPath), request, Map.class, urlVariables); return resourceMapper.mapResource(resource, CloudTask.class); }
private void cancelTask(CloudTask task, CloudApplication appToUndeploy, CloudControllerClient client) { getStepLogger().info(Messages.CANCELING_TASK_ON_APP, task.getName(), appToUndeploy.getName()); client.cancelTask(task.getMeta() .getGuid()); getStepLogger().debug(Messages.CANCELED_TASK_ON_APP, task.getName(), appToUndeploy.getName()); }
private CloudTask toCloudTask(Map<String, Object> rawTask) { CloudTask task = new CloudTask(null, getProperty(rawTask, TasksValidator.TASK_NAME_KEY)); task.setCommand(getProperty(rawTask, TasksValidator.TASK_COMMAND_KEY)); task.setEnvironmentVariables(getEnvironmentVariables(rawTask)); task.setMemory(parseMemory(rawTask)); task.setDiskQuota(parseDiskQuota(rawTask)); return task; }
private AsyncExecutionState handleFinalState(CloudTask.State state) { if (state.equals(CloudTask.State.FAILED)) { execution.getStepLogger() .error(Messages.ERROR_EXECUTING_TASK_ON_APP, taskToPoll.getName(), app.getName()); return AsyncExecutionState.ERROR; } return AsyncExecutionState.FINISHED; }
private void cancelRunningTasks(CloudApplication appToUndeploy, CloudControllerClient client) { List<CloudTask> tasksToCancel = client.getTasks(appToUndeploy.getName()); for (CloudTask task : tasksToCancel) { CloudTask.State taskState = task.getState(); if (taskState.equals(CloudTask.State.RUNNING) || taskState.equals(CloudTask.State.PENDING)) { cancelTask(task, appToUndeploy, client); } } }
private CloudTask findTaskWithGuid(List<CloudTask> allTasksForApp, UUID guid) { return allTasksForApp.stream() .filter(task -> task.getMeta() .getGuid() .equals(guid)) .findAny() .orElseThrow(() -> new IllegalStateException(MessageFormat.format(Messages.COULD_NOT_FIND_TASK_WITH_GUID, guid))); }
private AsyncExecutionState handleFinalState(CloudTask.State state) { if (state.equals(CloudTask.State.FAILED)) { execution.getStepLogger() .error(Messages.ERROR_EXECUTING_TASK_ON_APP, taskToPoll.getName(), app.getName()); return AsyncExecutionState.ERROR; } return AsyncExecutionState.FINISHED; }
private void cancelRunningTasks(CloudApplication appToUndeploy, CloudControllerClient client) { List<CloudTask> tasksToCancel = client.getTasks(appToUndeploy.getName()); for (CloudTask task : tasksToCancel) { CloudTask.State taskState = task.getState(); if (taskState.equals(CloudTask.State.RUNNING) || taskState.equals(CloudTask.State.PENDING)) { cancelTask(task, appToUndeploy, client); } } }
@Override protected StepPhase executeAsyncStep(ExecutionWrapper execution) throws Exception { CloudApplicationExtended app = StepsUtil.getApp(execution.getContext()); CloudTask taskToExecute = StepsUtil.getTask(execution.getContext()); try { return attemptToExecuteTask(execution, app, taskToExecute); } catch (CloudOperationException coe) { CloudControllerException e = new CloudControllerException(coe); getStepLogger().error(e, Messages.ERROR_EXECUTING_TASK_ON_APP, taskToExecute.getName(), app.getName()); throw e; } catch (SLException e) { getStepLogger().error(e, Messages.ERROR_EXECUTING_TASK_ON_APP, taskToExecute.getName(), app.getName()); throw e; } }
private void cancelTask(CloudTask task, CloudApplication appToUndeploy, CloudControllerClient client) { getStepLogger().info(Messages.CANCELING_TASK_ON_APP, task.getName(), appToUndeploy.getName()); client.cancelTask(task.getMeta() .getGuid()); getStepLogger().debug(Messages.CANCELED_TASK_ON_APP, task.getName(), appToUndeploy.getName()); }
private StepPhase attemptToExecuteTask(ExecutionWrapper execution, CloudApplication app, CloudTask taskToExecute) { CloudControllerClient client = execution.getControllerClient(); getStepLogger().info(Messages.EXECUTING_TASK_ON_APP, taskToExecute.getName(), app.getName()); CloudTask startedTask = client.runTask(app.getName(), taskToExecute); StepsUtil.setStartedTask(execution.getContext(), startedTask); execution.getContext() .setVariable(Constants.VAR_START_TIME, currentTimeSupplier.get()); return StepPhase.POLL; }
@Override protected StepPhase executeAsyncStep(ExecutionWrapper execution) throws Exception { CloudApplicationExtended app = StepsUtil.getApp(execution.getContext()); CloudTask taskToExecute = StepsUtil.getTask(execution.getContext()); try { return attemptToExecuteTask(execution, app, taskToExecute); } catch (CloudOperationException coe) { CloudControllerException e = new CloudControllerException(coe); getStepLogger().error(e, Messages.ERROR_EXECUTING_TASK_ON_APP, taskToExecute.getName(), app.getName()); throw e; } catch (SLException e) { getStepLogger().error(e, Messages.ERROR_EXECUTING_TASK_ON_APP, taskToExecute.getName(), app.getName()); throw e; } }
private StepPhase attemptToExecuteTask(ExecutionWrapper execution, CloudApplication app, CloudTask taskToExecute) { CloudControllerClient client = execution.getControllerClient(); getStepLogger().info(Messages.EXECUTING_TASK_ON_APP, taskToExecute.getName(), app.getName()); CloudTask startedTask = client.runTask(app.getName(), taskToExecute); StepsUtil.setStartedTask(execution.getContext(), startedTask); execution.getContext() .setVariable(Constants.VAR_START_TIME, currentTimeSupplier.get()); return StepPhase.POLL; }
@Override public AsyncExecutionState execute(ExecutionWrapper execution) { CloudApplicationExtended app = StepsUtil.getApp(execution.getContext()); CloudTask task = StepsUtil.getStartedTask(execution.getContext()); try { return new PollExecuteTaskStatusDelegate(execution).execute(); } catch (CloudOperationException coe) { CloudControllerException e = new CloudControllerException(coe); execution.getStepLogger() .error(e, Messages.ERROR_EXECUTING_TASK_ON_APP, task.getName(), app.getName()); throw e; } catch (SLException e) { execution.getStepLogger() .error(e, Messages.ERROR_EXECUTING_TASK_ON_APP, task.getName(), app.getName()); throw e; } }
@Override public AsyncExecutionState execute(ExecutionWrapper execution) { CloudApplicationExtended app = StepsUtil.getApp(execution.getContext()); CloudTask task = StepsUtil.getStartedTask(execution.getContext()); try { return new PollExecuteTaskStatusDelegate(execution).execute(); } catch (CloudOperationException coe) { CloudControllerException e = new CloudControllerException(coe); execution.getStepLogger() .error(e, Messages.ERROR_EXECUTING_TASK_ON_APP, task.getName(), app.getName()); throw e; } catch (SLException e) { execution.getStepLogger() .error(e, Messages.ERROR_EXECUTING_TASK_ON_APP, task.getName(), app.getName()); throw e; } }