use of com.vmware.photon.controller.model.tasks.ProvisionSecurityGroupTaskService.ProvisionSecurityGroupTaskState in project photon-model by vmware.
the class TestProvisionAWSSecurityGroup method waitForTaskCompletion.
public static void waitForTaskCompletion(VerificationHost host, URI provisioningTaskUri) throws Throwable {
Date expiration = host.getTestExpiration();
ProvisionSecurityGroupTaskState provisioningTask;
do {
provisioningTask = host.getServiceState(null, ProvisionSecurityGroupTaskState.class, provisioningTaskUri);
if (provisioningTask.taskInfo.stage == TaskState.TaskStage.FAILED) {
throw new IllegalStateException("Task failed:" + Utils.toJsonHtml(provisioningTask));
}
if (provisioningTask.taskInfo.stage == TaskState.TaskStage.FINISHED) {
return;
}
Thread.sleep(1000);
} while (new Date().before(expiration));
host.log("Pending task:\n%s", Utils.toJsonHtml(provisioningTask));
throw new TimeoutException("Some tasks never finished");
}
use of com.vmware.photon.controller.model.tasks.ProvisionSecurityGroupTaskService.ProvisionSecurityGroupTaskState in project photon-model by vmware.
the class TestProvisionAWSSecurityGroup method testProvisionAWSSecurityGroup.
@Test
public void testProvisionAWSSecurityGroup() throws Throwable {
// create credentials
Operation authResponse = new Operation();
TestUtils.postCredentials(this.host, authResponse, this.privateKey, this.privateKeyId);
AuthCredentialsServiceState creds = authResponse.getBody(AuthCredentialsServiceState.class);
// create resource pool
Operation poolResponse = new Operation();
TestUtils.postResourcePool(this.host, poolResponse);
ResourcePoolState pool = poolResponse.getBody(ResourcePoolState.class);
// create sg service
Operation securityGroupResponse = new Operation();
SecurityGroupState initialSecurityGroupState = buildSecurityGroupState(creds, pool);
TestUtils.postSecurityGroup(this.host, initialSecurityGroupState, securityGroupResponse);
SecurityGroupState securityGroupState = securityGroupResponse.getBody(SecurityGroupState.class);
// set up security group task state
ProvisionSecurityGroupTaskState task = new ProvisionSecurityGroupTaskState();
task.requestType = SecurityGroupInstanceRequest.InstanceRequestType.CREATE;
task.securityGroupDescriptionLinks = Stream.of(securityGroupState.documentSelfLink).collect(Collectors.toSet());
task.customProperties = new HashMap<>();
task.customProperties.put(NETWORK_STATE_ID_PROP_NAME, this.vpcId);
Operation provision = new Operation();
provisionSecurityGroup(task, provision);
ProvisionSecurityGroupTaskState ps = provision.getBody(ProvisionSecurityGroupTaskState.class);
waitForTaskCompletion(this.host, UriUtils.buildUri(this.host, ps.documentSelfLink));
validateAWSArtifacts(securityGroupState.documentSelfLink, creds);
// reuse previous task, but switch to a delete
task.requestType = SecurityGroupInstanceRequest.InstanceRequestType.DELETE;
Operation remove = new Operation();
provisionSecurityGroup(task, remove);
ProvisionSecurityGroupTaskState removeTask = remove.getBody(ProvisionSecurityGroupTaskState.class);
waitForTaskCompletion(this.host, UriUtils.buildUri(this.host, removeTask.documentSelfLink));
// verify security group state is gone
try {
getSecurityGroupState(securityGroupState.documentSelfLink);
} catch (Exception ex) {
assertTrue(ex instanceof ServiceNotFoundException);
}
}
use of com.vmware.photon.controller.model.tasks.ProvisionSecurityGroupTaskService.ProvisionSecurityGroupTaskState in project photon-model by vmware.
the class ProvisionSecurityGroupTaskService method patchAdapter.
private void patchAdapter(ProvisionSecurityGroupTaskState taskState, String subTaskLink) {
if (subTaskLink == null) {
createSubTask(taskState, link -> patchAdapter(taskState, link));
return;
}
taskState.securityGroupDescriptionLinks.forEach(sgLink -> sendRequest(Operation.createGet(UriUtils.buildUri(this.getHost(), sgLink)).setCompletion((o, e) -> {
if (e != null) {
// don't fail the task; just update the subtask, which will
// handle the failure if necessary
ResourceOperationResponse subTaskPatchBody = ResourceOperationResponse.fail(sgLink, e);
updateSubTask(subTaskLink, subTaskPatchBody);
return;
}
SecurityGroupState securityGroupState = o.getBody(SecurityGroupState.class);
SecurityGroupInstanceRequest req = toReq(securityGroupState, taskState, sgLink, subTaskLink);
sendRequest(Operation.createPatch(securityGroupState.instanceAdapterReference).setBody(req).setCompletion((oo, ee) -> {
if (ee != null) {
ResourceOperationResponse subTaskPatchBody = ResourceOperationResponse.fail(sgLink, ee);
updateSubTask(subTaskLink, subTaskPatchBody);
}
}));
})));
}
use of com.vmware.photon.controller.model.tasks.ProvisionSecurityGroupTaskService.ProvisionSecurityGroupTaskState in project photon-model by vmware.
the class ProvisionSecurityGroupTaskService method handleStart.
@Override
public void handleStart(Operation start) {
if (!start.hasBody()) {
start.fail(new IllegalArgumentException("body is required"));
return;
}
ProvisionSecurityGroupTaskState state = start.getBody(ProvisionSecurityGroupTaskState.class);
try {
state.validate();
} catch (Exception e) {
start.fail(e);
return;
}
state.taskInfo = new TaskState();
state.taskInfo.stage = TaskState.TaskStage.CREATED;
state.taskSubStage = SubStage.CREATED;
start.complete();
// start the task
sendSelfPatch(TaskState.TaskStage.CREATED, null);
}
use of com.vmware.photon.controller.model.tasks.ProvisionSecurityGroupTaskService.ProvisionSecurityGroupTaskState in project photon-model by vmware.
the class ProvisionSecurityGroupTaskService method sendSelfPatch.
private void sendSelfPatch(TaskState.TaskStage stage, Throwable e) {
ProvisionSecurityGroupTaskState body = new ProvisionSecurityGroupTaskState();
body.taskInfo = new TaskState();
if (e == null) {
body.taskInfo.stage = stage;
} else {
body.taskInfo.stage = TaskState.TaskStage.FAILED;
body.taskInfo.failure = Utils.toServiceErrorResponse(e);
logWarning(() -> String.format("Patching to failed: %s", Utils.toString(e)));
}
sendSelfPatch(body);
}
Aggregations