private void filterKubernetesHosts(ContainerHostRemovalTaskState state) { filterKubernetesHostLinks(this, state.resourceLinks, (kubernetesHostLinks, errors) -> { if (errors != null) { failTask("Couldn't filter kubernetes host links: %s", new IllegalStateException(Utils.toString(errors))); return; } removeKubernetesResources(state, kubernetesHostLinks); }); }
private void removePortProfiles(ContainerHostRemovalTaskState state, ArrayList<String> hostPortProfileLinks, String subTaskLink) { if (subTaskLink == null) { // create counter subtask to remove every host port profile. Go to REMOVED_PORT_PROFILES when complete createCounterSubTask(state, hostPortProfileLinks.size(), SubStage.REMOVED_PORT_PROFILES, (link) -> removePortProfiles(state, hostPortProfileLinks, link)); return; } // delete host port profiles for (String profileLink : hostPortProfileLinks) { sendRequest(Operation.createDelete(this, profileLink) .setCompletion((o, ex) -> { if (ex != null) { failTask("Failed to delete host port profile: %s", ex); return; } completeSubTasksCounter(subTaskLink, null); })); } }
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); } }); }
.query(networkQuery, (r) -> { if (r.hasException()) { failTask("Failure retrieving query results", r.getException()); return; } else if (r.hasResult()) {
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); } }); }
private void removeKubernetesResources(ContainerHostRemovalTaskState state, Set<String> kubernetesHostLinks) { if (kubernetesHostLinks == null || kubernetesHostLinks.isEmpty()) { queryPortProfiles(state); return; } CompositeKubernetesRemovalTaskState kubernetesRemovalTask = new CompositeKubernetesRemovalTaskState(); kubernetesRemovalTask.resourceLinks = kubernetesHostLinks; kubernetesRemovalTask.cleanupOnly = true; kubernetesRemovalTask.serviceTaskCallback = ServiceTaskCallback.create( getSelfLink(), TaskStage.STARTED, SubStage.REMOVED_KUBERNETES_RESOURCES, TaskStage.STARTED, SubStage.ERROR); kubernetesRemovalTask.requestTrackerLink = state.requestTrackerLink; Operation startPost = Operation .createPost(this, CompositeKubernetesRemovalTaskService.FACTORY_LINK) .setBody(kubernetesRemovalTask) .setCompletion((o, e) -> { if (e != null) { failTask("Failure creating kubernetes composite removal task", e); return; } proceedTo(SubStage.REMOVING_KUBERNETES_RESOURCES); }); sendRequest(startPost); }
private void removeVolumes(ContainerHostRemovalTaskState state, Set<String> volumeSelfLinks) { // run a sub task for removing the volumes ContainerVolumeRemovalTaskState volumeRemovalTask = new ContainerVolumeRemovalTaskState(); volumeRemovalTask.resourceLinks = volumeSelfLinks; volumeRemovalTask.removeOnly = true; volumeRemovalTask.serviceTaskCallback = ServiceTaskCallback.create( getSelfLink(), TaskStage.STARTED, SubStage.REMOVED_VOLUMES, TaskStage.STARTED, SubStage.ERROR); volumeRemovalTask.requestTrackerLink = state.requestTrackerLink; Operation startPost = Operation .createPost(this, ContainerVolumeRemovalTaskService.FACTORY_LINK) .setBody(volumeRemovalTask) .setCompletion((o, e) -> { if (e != null) { failTask("Failure creating container volume removal task", e); return; } proceedTo(SubStage.REMOVING_VOLUMES); }); sendRequest(startPost); }
failTask("Unexpected exception while suspending container host", e);
private void removeContainers(ContainerHostRemovalTaskState state, Set<String> containerSelfLinks) { // run a sub task for removing the containers ContainerRemovalTaskState containerRemovalTask = new ContainerRemovalTaskState(); containerRemovalTask.resourceLinks = containerSelfLinks; containerRemovalTask.removeOnly = true; containerRemovalTask.serviceTaskCallback = ServiceTaskCallback.create( getSelfLink(), TaskStage.STARTED, SubStage.REMOVED_CONTAINERS, TaskStage.STARTED, SubStage.ERROR); containerRemovalTask.requestTrackerLink = state.requestTrackerLink; Operation startPost = Operation .createPost(this, ContainerRemovalTaskFactoryService.SELF_LINK) .setBody(containerRemovalTask) .setCompletion((o, e) -> { if (e != null) { failTask("Failure creating container removal task", e); return; } proceedTo(SubStage.REMOVING_CONTAINERS); }); sendRequest(startPost); }
private void removeNetworks(ContainerHostRemovalTaskState state, Set<String> networkSelfLinks) { // run a sub task for removing the networks ContainerNetworkRemovalTaskState networkRemovalTask = new ContainerNetworkRemovalTaskState(); networkRemovalTask.resourceLinks = networkSelfLinks; networkRemovalTask.removeOnly = true; networkRemovalTask.serviceTaskCallback = ServiceTaskCallback.create( getSelfLink(), TaskStage.STARTED, SubStage.REMOVED_NETWORKS, TaskStage.STARTED, SubStage.ERROR); networkRemovalTask.requestTrackerLink = state.requestTrackerLink; Operation startPost = Operation .createPost(this, ContainerNetworkRemovalTaskService.FACTORY_LINK) .setBody(networkRemovalTask) .setCompletion((o, e) -> { if (e != null) { failTask("Failure creating container network removal task", e); return; } proceedTo(SubStage.REMOVING_NETWORKS); }); sendRequest(startPost); }
proceedTo(SubStage.REMOVING_HOSTS); } catch (Throwable e) { failTask("Unexpected exception while deleting container host instances", e);