private static DeferredResult<List<NetworkInterfaceDescription>> patchNicDescriptions( ServiceHost host, Set<String> nicDescriptions, Set<String> staticIps, SubnetState subnet) { Iterator<String> ipIterator = staticIps.iterator(); List<DeferredResult<NetworkInterfaceDescription>> results = nicDescriptions.stream() .filter(nic -> ipIterator.hasNext()) .map(nicSelfLink -> patchNicDescriptionOperation(host, ipIterator.next(), nicSelfLink)) .map(o -> o.setReferer(host.getUri())) .map(o -> host.sendWithDeferredResult(o, NetworkInterfaceDescription.class)) .collect(Collectors.toList()); return DeferredResult.allOf(results); }
private static DeferredResult<Set<String>> patchNicStates(ServiceHost host, Set<String> nicStates, Set<String> staticIps, SubnetState subnet) { Iterator<String> ipIterator = staticIps.iterator(); List<DeferredResult<NetworkInterfaceState>> results = nicStates.stream() /** * Filter base on size of ip list and number of NICs. For example: * 1) IP list: [1,2,3], Computes: [A,B] => A[1], B[2]; ip 3 - will be ignored. * 2) IP list: [1,2], Computes: [A,B,C] => A[1], B[2]; Compute C - will be ignored. */ .filter(nic -> ipIterator.hasNext()) .map(nicSelfLink -> patchNicStateOperation(host, subnet, ipIterator.next(), nicSelfLink)) .map(o -> o.setReferer(host.getUri())) .map(o -> host.sendWithDeferredResult(o, NetworkInterfaceState.class)) .collect(Collectors.toList()); return DeferredResult.allOf(results).thenApply(nics -> nics.stream().map(nic -> nic .networkInterfaceDescriptionLink) .collect(Collectors.toSet())); }
private static DeferredResult<Set<String>> getNicStates(ServiceHost host, Set<String> resourceLinks) { List<DeferredResult<ComputeState>> results = resourceLinks.stream() .map(c -> Operation.createGet(host, c)) .map(o -> o.setReferer(host.getUri())) .map(o -> host.sendWithDeferredResult(o, ComputeState.class)) .collect(Collectors.toList()); return DeferredResult.allOf(results).thenApply(computes -> /** * Get NIC links from Compute(s) with only one (default) NIC. */ computes.stream() .filter(c -> c.networkInterfaceLinks != null && c.networkInterfaceLinks.size() == 1) .map(c -> c.networkInterfaceLinks.get(0)) .collect(Collectors.toSet()) ); } }
private DeferredResult<ComputeState> requestComputeState(String selfLink) { URI uri = UriUtils.buildUri(host, selfLink); Operation op = Operation.createGet(uri) .setCompletion((o, e) -> { if (e != null) { logger.warning(String.format("Failed to retrieve compute state: [%s]", Utils.toString(e))); return; } }); prepareRequest(op, false); return host.sendWithDeferredResult(op, ComputeState.class); }
private DeferredResult<Operation> patchContainerState(ContainerState cs) { Operation operation = Operation.createPatch(host, UriUtils.buildUriPath(cs.documentSelfLink)) .setBody(cs) .setReferer(host.getUri()) .setCompletion((o, ex) -> { if (ex != null) { logger.warning(String.format("Error patching container state [%s]. Error: [%s]", cs.documentSelfLink, ex.getMessage())); } }); return host.sendWithDeferredResult(operation); } }
private DeferredResult patchComputeState(String documentSelfLink, ComputeState computeState) { URI uri = UriUtils.buildUri(host, documentSelfLink); Operation op = Operation.createPatch(uri) .setBody(computeState) .setReferer(host.getUri()) .setCompletion((o, e) -> { if (e != null) { logger.warning(String.format("Failed to patch compute state: [%s]", Utils.toString(e))); return; } logger.info(String.format("Successfully patched compute state [%s]", documentSelfLink)); }); return host.sendWithDeferredResult(op); }
private DeferredResult<Void> createProjectUserGroup(Set<String> addTo, UserGroupState groupState) { AssertUtil.assertNotNull(addTo, "addTo"); AssertUtil.assertNotNull(groupState, "groupState"); if (addTo.contains(groupState.documentSelfLink)) { return DeferredResult.completed(null); } return getHost().sendWithDeferredResult(buildCreateUserGroupOperation(groupState), UserGroupState.class) .thenAccept((createdState) -> addTo.add(createdState.documentSelfLink)); }
private static DeferredResult<Operation> createGroup(ServiceHost host, Group group) { host.log(Level.INFO, "createGroup - Group '%s'...", group.name); LocalPrincipalState state = new LocalPrincipalState(); state.name = group.name; state.type = LocalPrincipalType.GROUP; state.groupMembersLinks = group.members.stream() .map(u -> UriUtils.buildUriPath(LocalPrincipalFactoryService.SELF_LINK, encode(u))) .collect(Collectors.toList()); Operation op = Operation.createPost(host, LocalPrincipalFactoryService.SELF_LINK) .setBody(state) .setReferer(host.getUri()); return host.sendWithDeferredResult(op); }
private DeferredResult<RoleState> createProjectMemberRole(ProjectState projectState, String resourceGroupLink, String userGroupLink) { String projectId = Service.getId(projectState.documentSelfLink); RoleState projectMemberRoleState = AuthUtil.buildProjectMembersRole(projectId, userGroupLink, resourceGroupLink); return getHost().sendWithDeferredResult( buildCreateRoleOperation(projectMemberRoleState), RoleState.class); }
private DeferredResult<RoleState> createProjectExtendedMemberRole(ProjectState projectState, String resourceGroupLink, String userGroupLink) { String projectId = Service.getId(projectState.documentSelfLink); RoleState projectMemberRoleState = AuthUtil.buildProjectExtendedMembersRole(projectId, userGroupLink, resourceGroupLink); return getHost().sendWithDeferredResult( buildCreateRoleOperation(projectMemberRoleState), RoleState.class); }
private DeferredResult<RoleState> createProjectAdminRole(ProjectState projectState, String resourceGroupLink, String userGroupLink) { String projectId = Service.getId(projectState.documentSelfLink); RoleState projectAdminRoleState = AuthUtil.buildProjectAdminsRole(projectId, userGroupLink, resourceGroupLink); return getHost().sendWithDeferredResult( buildCreateRoleOperation(projectAdminRoleState), RoleState.class); }
private DeferredResult<RoleState> createProjectViewerRole(ProjectState projectState, String resourceGroupLink, String userGroupLink) { String projectId = Service.getId(projectState.documentSelfLink); RoleState projectViewerRoleState = AuthUtil.buildProjectViewersRole(projectId, userGroupLink, resourceGroupLink); return getHost().sendWithDeferredResult( buildCreateRoleOperation(projectViewerRoleState), RoleState.class); }
private static DeferredResult<ProjectState> getProjectState(ServiceHost host, String projectId) { String projectSelfLink = UriUtils.buildUriPath(ProjectFactoryService.SELF_LINK, projectId); Operation getOp = Operation.createGet(host, projectSelfLink) .setReferer(host.getUri()); return host.sendWithDeferredResult(getOp, ProjectState.class); }
public static DeferredResult<ResourceGroupState> createResourceGroup(ServiceHost host, URI referer, String contextId, List<String> tenantLinks) { ResourceGroupState resourceGroup = new ResourceGroupState(); resourceGroup.name = contextId; resourceGroup.documentSelfLink = generateSelfLink(resourceGroup); resourceGroup.tenantLinks = tenantLinks; resourceGroup.customProperties = new HashMap<>(); resourceGroup.customProperties.put(ComputeProperties.RESOURCE_TYPE_KEY, COMPUTE_DEPLOYMENT_TYPE_VALUE); return host.sendWithDeferredResult( Operation.createPost(host, ResourceGroupService.FACTORY_LINK) .setReferer(referer) .setBody(resourceGroup)) .thenApply(op -> op.getBody(ResourceGroupState.class)); }
private DeferredResult<ConfigurationState> getProperty(String propName) { String propUrl = UriUtils.buildUriPath( ConfigurationFactoryService.SELF_LINK, propName); Operation op = Operation.createGet(this, propUrl).setReferer(this.getUri()); return getHost() .sendWithDeferredResult(op, ConfigurationState.class); }
private static DeferredResult<Operation> createUserIfNotExist(ServiceHost host, User user) { host.log(Level.INFO, "createUserIfNotExist - User '%s'...", user.email); LocalPrincipalState state = new LocalPrincipalState(); state.email = user.email; state.password = user.password; state.name = user.name; state.type = LocalPrincipalType.USER; state.isAdmin = user.isAdmin; Operation op = Operation.createPost(host, LocalPrincipalFactoryService.SELF_LINK) .setBody(state) .setReferer(host.getUri()); return host.sendWithDeferredResult(op); }
private static DeferredResult<Void> deleteResourceDescription(ServiceHost host, String resourceDescriptionLink, Class<? extends ServiceDocument> stateClass) { return verifyDescriptionIsNotUsed(host, resourceDescriptionLink, stateClass) .thenCompose(ignore -> { host.log(Level.INFO, String.format( "Resource description [%s] is not referenced by any resource." + " Deleting description.", resourceDescriptionLink)); Operation delete = Operation.createDelete(host, resourceDescriptionLink) .setReferer(host.getUri()); return host.sendWithDeferredResult(delete) .thenAccept(i -> { host.log(Level.INFO, "Resource description [%s] has been deleted.", resourceDescriptionLink); }).exceptionally(ex -> { String error = String.format("%s [%s]", CANNOT_DELETE_RESOURCE_DESCRIPTION, resourceDescriptionLink); throw logAndPrepareCompletionException(host, ex, error); }); }); }
private void validatePlanSelection(PKSProvisioningTaskState taskState, Runnable nextAction) { final String planName = taskState.getCustomProperty(PKS_PLAN_NAME_FIELD); Operation getEndpoint = Operation.createGet(getHost(), taskState.endpointLink) .setReferer(getSelfLink()); getHost().sendWithDeferredResult(getEndpoint, Endpoint.class) .thenAccept(endpoint -> doValidatePlanSelection(planName, taskState.tenantLinks, endpoint)) .thenAccept(v -> nextAction.run()) .exceptionally(ex -> { failTask(String.format("Plan selection validation failed: %s", Utils.toString(ex)), ex); return null; }); }
private DeferredResult<List<Operation>> unsubscribeHostForEvents(ContainerHostRemovalTaskState state) { List<DeferredResult<Operation>> deferredResults = new ArrayList<>(state.resourceLinks.size()); for (String resourceLink : state.resourceLinks) { AdapterRequest request = new AdapterRequest(); request.operationTypeId = ContainerHostOperationType.EVENTS_UNSUBSCRIBE.id; request.serviceTaskCallback = ServiceTaskCallback.createEmpty(); request.resourceReference = UriUtils.buildUri(getHost(), resourceLink); URI adapterManagementReference = UriUtils.buildUri(getHost(), ManagementUriParts.ADAPTER_DOCKER_HOST); deferredResults.add(getHost() .sendWithDeferredResult(Operation .createPatch(adapterManagementReference) .setReferer(this.getUri()) .setBodyNoCloning(request)) .whenComplete((o, e) -> { if (e != null) { logWarning("Failed to unsubscribe for host events."); } })); } return DeferredResult.allOf(deferredResults); } }
public static void deletePlacementZoneAndPlacement(String pathPZLink, String resourcePoolLink, Operation delete, ServiceHost host) { host.sendWithDeferredResult( Operation.createDelete(UriUtils.buildUri(host, pathPZLink)) .setBody(new ElasticPlacementZoneConfigurationState()) .setReferer(host.getUri()), ElasticPlacementZoneConfigurationState.class) .thenCompose(epz -> deletePlacementWithResourcePoolLink(resourcePoolLink, host)) .exceptionally(f -> { if (f instanceof ServiceNotFoundException) { return null; } else { throw new CompletionException(f); } }) .whenCompleteNotify(delete); }