private void selectHost(ContainerNetworkProvisionTaskState state, Consumer<ComputeState> callback) { getContextContainerStates(state, (states) -> { getContextContainerDescriptions(states, (descriptions) -> { List<ContainerState> containerStatesForNetwork = getDependantContainerStates( descriptions, states, networkDescription); if (containerStatesForNetwork.isEmpty()) { String err = String.format( "No container states depending on network description [%s] found.", networkDescription.name); failTask(err, null); } else { String hostLink = containerStatesForNetwork.get(0).parentLink; getHost(hostLink, (host) -> { callback.accept(host); }); } }); }); }
private void getContextContainerDescriptions( Map<String, List<ContainerState>> containersByDescriptionLink, Consumer<List<ContainerDescription>> callback) { if ((containersByDescriptionLink == null) || (containersByDescriptionLink.isEmpty())) { callback.accept(Collections.emptyList()); return; } QueryTask q = QueryUtil.buildQuery(ContainerDescription.class, true); QueryUtil.addExpandOption(q); QueryUtil.addListValueClause(q, ContainerDescription.FIELD_NAME_SELF_LINK, containersByDescriptionLink.keySet()); q.taskInfo.isDirect = false; List<ContainerDescription> result = new ArrayList<>(); new ServiceDocumentQuery<ContainerDescription>(getHost(), ContainerDescription.class) .query(q, (r) -> { if (r.hasException()) { failTask("Exception while selecting container descriptions", r.getException()); } else if (r.hasResult()) { result.add(r.getResult()); } else { callback.accept(result); } }); }
private void getNetworkByName(ContainerNetworkProvisionTaskState state, String networkName, Consumer<ContainerNetworkState> callback) { selectHost(state, (host) -> { List<ContainerNetworkState> networkStates = new ArrayList<ContainerNetworkState>(); QueryTask queryTask = NetworkUtils .getNetworkByHostAndNameQueryTask(host.documentSelfLink, networkName); new ServiceDocumentQuery<ContainerNetworkState>(getHost(), ContainerNetworkState.class) .query(queryTask, (r) -> { if (r.hasException()) { failTask("Failed to query for active networks by name '" + networkName + "' in host '" + host.documentSelfLink + "'!", r.getException()); } else if (r.hasResult()) { if (networkName.equals(r.getResult().name)) { networkStates.add(r.getResult()); } } else { if (networkStates.size() == 1) { callback.accept(networkStates.get(0)); return; } failTask(networkStates.size() + " active network(s) found by name '" + networkName + "' in host '" + host.documentSelfLink + "'!", null); } }); }); }
new ServiceDocumentQuery<ContainerState>(getHost(), ContainerState.class) .query(q, (r) -> {
QueryUtil.addExpandOption(queryTask); new ServiceDocumentQuery<ComputeState>(getHost(), ComputeState.class) .query(queryTask, (r) -> { if (r.hasException()) {
private void createAndSendContainerNetworkRequest(ContainerNetworkState networkState, ContainerNetworkProvisionTaskState state, ServiceTaskCallback taskCallback, String networkSelfLink) { getContainerNetworkDescription(state, (networkDescription) -> { AdapterRequest networkRequest = new AdapterRequest(); networkRequest.resourceReference = UriUtils.buildUri(getHost(), networkSelfLink); networkRequest.serviceTaskCallback = taskCallback; if (Boolean.TRUE.equals(networkDescription.external)) { // The network is defined as external, just validate that it exists actually. networkRequest.operationTypeId = NetworkOperationType.INSPECT.id; } else { networkRequest.operationTypeId = NetworkOperationType.CREATE.id; } networkRequest.customProperties = state.customProperties; sendRequest(Operation.createPatch(getHost(), state.instanceAdapterReference.toString()) .setBody(networkRequest) .setContextId(getSelfId()) .setCompletion((o, e) -> { if (e != null) { failTask("AdapterRequest failed for network: " + networkSelfLink, e); return; } logInfo("Network '%s' request started for: %s", networkRequest.operationTypeId, networkSelfLink); })); }); }