private void doRemoveTrustCerts(ContainerHostRemovalTaskState state) { collectTrustCert(state) .thenApply(trustCertSelfLinks -> { return trustCertSelfLinks.stream() .filter(Objects::nonNull) .filter(link -> link.startsWith(SslTrustCertificateService.FACTORY_LINK)) .collect(Collectors.toSet()); }) .thenCompose(trustCertSelfLinks -> { return CertificateCleanupUtil.removeTrustCertsIfUnused(getHost(), trustCertSelfLinks, state.resourceLinks); }) .whenComplete((ignore, ex) -> { if (ex != null) { logWarning("Failed to remove unused trust certificates.", ex); } proceedTo(SubStage.REMOVED_CERTIFICATES); }); }
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); } }
private void queryVolumes(ContainerHostRemovalTaskState state) { QueryTask volumeQuery = QueryUtil.buildQuery(ContainerVolumeState.class, false); QueryUtil.addListValueClause(volumeQuery, ContainerVolumeState.FIELD_NAME_ORIGINATING_HOST_LINK, state.resourceLinks); Set<String> volumeLinks = new HashSet<>(); new ServiceDocumentQuery<ContainerVolumeState>(getHost(), ContainerVolumeState.class).query( volumeQuery, (r) -> { if (r.hasException()) { failTask("Failure retrieving query results", r.getException()); return; } else if (r.hasResult()) { volumeLinks.add(r.getDocumentSelfLink()); } else { if (volumeLinks.isEmpty()) { filterKubernetesHosts(state); return; } removeVolumes(state, volumeLinks); } }); }
private void queryContainers(ContainerHostRemovalTaskState state) { QueryTask containerQuery = QueryUtil.buildQuery(ContainerState.class, true); QueryUtil.addListValueClause(containerQuery, ContainerState.FIELD_NAME_PARENT_LINK, state.resourceLinks); Set<String> containerLinks = new HashSet<>(); new ServiceDocumentQuery<ContainerState>(getHost(), ContainerState.class).query( containerQuery, (r) -> { if (r.hasException()) { failTask("Failure retrieving query results", r.getException()); return; } else if (r.hasResult()) { containerLinks.add(r.getDocumentSelfLink()); } else { if (containerLinks.isEmpty()) { queryNetworks(state); return; } removeContainers(state, containerLinks); } }); }
new ServiceDocumentQuery<ContainerNetworkState>(getHost(), ContainerNetworkState.class) .query(networkQuery, (r) -> { if (r.hasException()) {
private void queryPortProfiles(ContainerHostRemovalTaskState state) { QueryTask q = QueryUtil .buildQuery(HostPortProfileService.HostPortProfileState.class, false); QueryUtil.addListValueClause(q, HostPortProfileService.HostPortProfileState.FIELD_HOST_LINK, state.resourceLinks); ServiceDocumentQuery<HostPortProfileService.HostPortProfileState> query = new ServiceDocumentQuery<>( getHost(), HostPortProfileService.HostPortProfileState.class); QueryUtil.addBroadcastOption(q); ArrayList<String> hostPortProfileLinks = new ArrayList<>(); query.query(q, (r) -> { if (r.hasException()) { failTask("Failure retrieving query results", r.getException()); return; } else if (r.hasResult()) { hostPortProfileLinks.add(r.getDocumentSelfLink()); } else { // if there are no host port profiles, go to the next stage if (hostPortProfileLinks.isEmpty()) { proceedTo(SubStage.REMOVED_PORT_PROFILES); return; } removePortProfiles(state, hostPortProfileLinks, null); proceedTo(SubStage.REMOVING_PORT_PROFILES); } }); }
URI uri = UriUtils.buildUri(getHost(), ContainerHostDataCollectionService.HOST_INFO_DATA_COLLECTION_LINK); ContainerHostDataCollectionService.ContainerHostDataCollectionState dataCollectionState
private void removeTrustCerts(ContainerHostRemovalTaskState state) { QueryTask queryTask = new QueryTask(); queryTask.querySpec = new QueryTask.QuerySpecification(); queryTask.taskInfo.isDirect = true; Query q = Query.Builder.create() .addFieldClause(QuerySpecification .buildCompositeFieldName(ComputeState.FIELD_NAME_CUSTOM_PROPERTIES, ComputeConstants.HOST_TRUST_CERTS_PROP_NAME), UriUtils.URI_WILDCARD_CHAR, MatchType.WILDCARD, Occurance.MUST_NOT_OCCUR).build(); q.addBooleanClause(createKindClause(ComputeState.class)); queryTask.querySpec.query.addBooleanClause(q); sendWithDeferredResult(Operation .createPost(UriUtils.buildUri(getHost(), ServiceUriPaths.CORE_QUERY_TASKS)) .setBody(queryTask) .setReferer(getHost().getUri()), QueryTask.class) .thenAccept(qrt -> { if (qrt.results.documentCount == 0) { doRemoveTrustCerts(state); } else { proceedTo(SubStage.REMOVED_CERTIFICATES); } }).exceptionally(e -> { logWarning("Failed to remove unused trust certificate.", e); proceedTo(SubStage.REMOVED_CERTIFICATES); return null; }); }