@Override public void handlePut(Operation put) { if (put.hasPragmaDirective(Operation.PRAGMA_DIRECTIVE_POST_TO_PUT)) { logFine("Ignoring converted PUT."); put.complete(); return; } if (!checkForBody(put)) { return; } HostContainerListDataCollectionState putBody = put .getBody(HostContainerListDataCollectionState.class); this.setState(put, putBody); put.setBodyNoCloning(putBody).complete(); }
|| PowerState.RETIRED == existingContainerState.powerState || PowerState.ERROR == existingContainerState.powerState) { String names = containerNamesToString(existingContainerState.names); exists = callback.containerIdsAndNames.containsValue(names); callback.containerIdsAndNames.values().remove(names); || existingContainerState.powerState == PowerState.PAUSED; if (active) { handleMissingContainer(existingContainerState); updateExistingContainer(existingContainerState, callback); checkIfSystemContainer(containerHostLink, systemContainersToInstall, existingContainerState); .setCompletion((o, ex) -> { if (ex != null) { logSevere("Failure to retrieve host [%s]. Error: %s", callback.containerHostLink, Utils.toString(ex)); unlockCurrentDataCollectionForHost(callback.containerHostLink); return; String systemContainerName = isSystemContainer(systemContainersToInstall, containerState.names); containerState.adapterManagementReference = getContainerAdapterReference( callback.hostAdapterReference); installSystemContainerToHost(containerHostLink,
private void handleDiscoveredSystemContainer(ContainerState containerState, String containerHostLink, ContainerDescription containerDesc) { if (containerDesc == null) { OperationUtil.getDocumentState(this, containerState.descriptionLink, ContainerDescription.class, (ContainerDescription contDesc) -> handleDiscoveredSystemContainer( containerState, containerHostLink, contDesc)); return; } ContainerVersion containerVersion = ContainerVersion.fromImageName(containerState.image); ContainerVersion containerDescVersion = ContainerVersion.fromImageName(containerDesc.image); if (containerVersion.compareTo(containerDescVersion) < 0) { // if container version is old, delete the container and create it again recreateSystemContainer(containerState, containerHostLink); } else { // check if system ContainerState exists. If not, start won't work as docker-adapter // will refer to missing ContainerState resulting in failure in starting operation. checkIfSystemContainerStateExistsBeforeStartIt(containerState, containerDesc, containerHostLink); } }
private void createSystemContainerInstanceRequest(ContainerState container, ServiceTaskCallback serviceTaskCallback) { AdapterRequest adapterRequest = new AdapterRequest(); adapterRequest.resourceReference = UriUtils.buildUri(getHost(), container.documentSelfLink); adapterRequest.operationTypeId = ContainerOperationType.CREATE.id; String systemContainerName = isSystemContainer( SystemContainerDescriptions.getSystemContainerNames(), container.names); startAndCreateCallbackHandlerService(systemContainerName, createSystemContainerReadyHandler(container), (callback) -> createSystemContainerInstanceRequest(container, callback)); return; sendRequest(Operation .createPatch(getHost(), targetPath) .setBodyNoCloning(adapterRequest) .setCompletion((o, e) -> { if (e != null) { logWarning("Failure provisioning system container: %s", Utils.toString(e)); return; logInfo("Provisioning system container: %s with name: %s started ...", container.documentSelfLink, container.names); }));
private void createDiscoveredContainer(Consumer<Throwable> callback, AtomicInteger counter, ContainerState containerState) { logFine("Creating ContainerState for discovered container: %s", containerState.id); URI containerFactoryUri = UriUtils.buildUri(getHost(), ContainerFactoryService.class); sendRequest(OperationUtil .createForcedPost(containerFactoryUri) .setBody(containerState) if (ex != null) { if (OperationUtil.isServiceAlreadyStarted(ex, o)) { logWarning("Container state already exists for container (id=%s)", containerState.id); } else { logSevere("Failed to create ContainerState for discovered container" + " (id=%s): %s", containerState.id, ex.getMessage()); callback.accept(ex); logInfo("Created ContainerState for discovered container: %s", containerState.id); String systemContainerName = isSystemContainer( SystemContainerDescriptions.getSystemContainerNames(), containerState.names); createDiscoveredContainerDescription(body); inspectContainer(body, ServiceTaskCallback.createEmpty());
new ServiceDocumentQuery<ContainerState>(getHost(), ContainerState.class) .query(containerQuery, (r) -> { if (r.hasException()) { logWarning("Failed to retrieve system container state: %s", containerState.documentSelfLink); } else if (r.hasResult()) { logFine("start existing system container %s", containerState.documentSelfLink); startSystemContainer(containerState, null); } else { final ContainerState systemContainerState = createSystemContainerState( containerState, containerDesc, containerHostLink); sendRequest(OperationUtil .createForcedPost(this, ContainerFactoryService.SELF_LINK) .setBodyNoCloning(systemContainerState) .setCompletion((o, e) -> { if (e != null) { logWarning("Failure creating system container: %s", Utils.toString(e)); return; logInfo("Created system ContainerState: %s", body.documentSelfLink); createSystemContainerInstanceRequest(body, null); updateNumberOfContainers(containerHostLink); startSystemContainer(containerState, null);
String containerStateLink = SystemContainerDescriptions.getSystemContainerSelfLink( systemContainerName, Service.getId(containerHostLink)); ServiceDocumentQuery<ContainerState> query = new ServiceDocumentQuery<>(getHost(), ContainerState.class); logWarning("Failure retrieving system container: %s", r.getException() instanceof CancellationException ? r.getException().getMessage() final ContainerState containerState = createSystemContainerState(cs, containerDesc, containerHostLink); containerState.names = new ArrayList<>(); containerState.names.add(systemContainerName); logInfo("Already created system container state: %s", r.getResult().documentSelfLink); op = Operation.createPut(this, containerStateLink); sendRequest(op .setBodyNoCloning(containerState) .setCompletion((o, e) -> { if (e != null) { logWarning("Failure creating system container: %s", Utils.toString(e)); return; logInfo("Created system ContainerState: %s", body.documentSelfLink); createSystemContainerInstanceRequest(body, null); updateNumberOfContainers(containerHostLink); })); });
private void installSystemContainerToHost(String containerHostLink, String systemContainerName, ContainerDescription containerDesc) { if (DeploymentProfileConfig.getInstance().isTest()) { logWarning("No system containers will be installed in test mode..."); return; (ContainerDescription contDesc) -> installSystemContainerToHost( containerHostLink, systemContainerName, contDesc)); return; (ComputeState host) -> { if (ContainerHostUtil.getDriver(host) == null) { logInfo("Skipping the installation of the system container." + "The driver is not initialized."); return; logInfo("VIC host detected, system containers will not be installed."); return; logInfo("Kubernetes host detected, system containers will not be" + " installed."); return; createOrRetrieveSystemContainer(containerHostLink, systemContainerName, containerDesc); });
for (ContainerState containerState : containerStates) { if (containerState.names == null || containerState.names.isEmpty()) { logInfo("Names not set for container: %s", containerState.documentSelfLink); if (counter.decrementAndGet() == 0) { callback.accept(null); ContainerState.FIELD_NAME_SELF_LINK, selfLink); containerServicesQuery.querySpec.options.add(QueryOption.INCLUDE_DELETED); new ServiceDocumentQuery<>(getHost(), ContainerState.class) .query(containerServicesQuery, (r) -> { if (r.hasException()) { logSevere("Failed to get container %s : %s", containerState.names.get(0), r.getException().getMessage()); callback.accept(r.getException()); createDiscoveredContainer(callback, counter, containerState); } else { if (counter.decrementAndGet() == 0) {
states.add(HostContainerListDataCollection.buildDefaultStateInstance()); states.add(HostNetworkListDataCollection.buildDefaultStateInstance()); states.add(HostVolumeListDataCollection.buildDefaultStateInstance());