use of org.eclipse.linuxtools.docker.core.IDockerConnection in project linuxtools by eclipse.
the class PushImageCommandHandler method performPushImage.
private void performPushImage(final ImagePush wizard, final IDockerConnection connection) {
if (connection == null) {
Display.getDefault().syncExec(() -> MessageDialog.openError(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), DVMessages.getFormattedString(ERROR_PUSHING_IMAGE, wizard.getSelectedImageTag()), DVMessages.getFormattedString(NO_CONNECTION)));
return;
}
final Job pushImageJob = new Job(DVMessages.getFormattedString(PUSH_IMAGE_JOB_TITLE, wizard.getSelectedImageTag())) {
@Override
protected IStatus run(final IProgressMonitor monitor) {
final IDockerImage image = wizard.getImage();
final String defaultImageNameTag = wizard.getDefaultImageName();
final String selectedImageNameTag = wizard.getSelectedImageTag();
// TODO: remove cast once AbstractRegistry methods are
// part of the IRegistry interface
final AbstractRegistry registry = (AbstractRegistry) wizard.getRegistry();
final boolean forceTagging = wizard.isForceTagging();
final boolean keepTaggedImage = wizard.isKeepTaggedImage();
monitor.beginTask(DVMessages.getString(PUSH_IMAGE_JOB_TASK), IProgressMonitor.UNKNOWN);
// push the image and let the progress
// handler refresh the images when done
final String tmpRegistryTag = getNameToTag(selectedImageNameTag, registry);
boolean tagCreated = false;
try {
// selected)
if (!image.repoTags().contains(tmpRegistryTag) || forceTagging) {
// TODO: remove cast to DockerConnection once the
// 'tagImage' is added in the public API
((DockerConnection) connection).tagImage(defaultImageNameTag, tmpRegistryTag, forceTagging);
tagCreated = true;
}
// push image
if (!registry.isAuthProvided()) {
connection.pushImage(tmpRegistryTag, new DefaultImagePushProgressHandler(connection, tmpRegistryTag));
} else {
final IRegistryAccount registryAccount = (IRegistryAccount) registry;
connection.pushImage(tmpRegistryTag, registryAccount, new DefaultImagePushProgressHandler(connection, tmpRegistryTag));
}
} catch (final DockerException e) {
Display.getDefault().syncExec(() -> MessageDialog.openError(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), DVMessages.getFormattedString(ERROR_PUSHING_IMAGE, defaultImageNameTag), e.getMessage()));
Activator.logErrorMessage(DVMessages.getFormattedString(ERROR_PUSHING_IMAGE, defaultImageNameTag), e);
// for now
} catch (InterruptedException e) {
// do nothing
} finally {
if (tagCreated && !keepTaggedImage) {
try {
connection.removeTag(tmpRegistryTag);
connection.getImages(true);
} catch (Exception e) {
// do nothing
}
}
monitor.done();
}
return Status.OK_STATUS;
}
};
pushImageJob.schedule();
}
use of org.eclipse.linuxtools.docker.core.IDockerConnection in project linuxtools by eclipse.
the class RefreshCommandHandler method getRefreshJobs.
private List<Job> getRefreshJobs(final IWorkbenchPart activePart) {
final IDockerConnection connection = getCurrentConnection(activePart);
final ArrayList<Job> jobs = new ArrayList<>();
if (activePart instanceof DockerImagesView) {
jobs.add(getRefreshImagesJob(connection));
} else if (activePart instanceof DockerContainersView) {
jobs.add(getRefreshContainersJob(connection));
} else if (activePart instanceof DockerExplorerView) {
DockerExplorerView dockerExplorerView = (DockerExplorerView) activePart;
final ITreeSelection selection = dockerExplorerView.getCommonViewer().getStructuredSelection();
if (selection.getFirstElement() instanceof DockerContainersCategory) {
jobs.add(getRefreshContainersJob(connection));
} else if (selection.getFirstElement() instanceof DockerImagesCategory) {
jobs.add(getRefreshImagesJob(connection));
} else {
final IDockerConnection[] connections = DockerConnectionManager.getInstance().getConnections();
for (IDockerConnection selectedConnection : connections) {
if (!selectedConnection.isOpen()) {
try {
selectedConnection.open(true);
} catch (DockerException e) {
// do nothing
}
}
if (selectedConnection.isOpen()) {
jobs.add(getRefreshContainersJob(selectedConnection));
jobs.add(getRefreshImagesJob(selectedConnection));
}
}
}
}
return jobs;
}
use of org.eclipse.linuxtools.docker.core.IDockerConnection in project linuxtools by eclipse.
the class RefreshConnectionHandler method getRefreshJobs.
private List<Job> getRefreshJobs(final IWorkbenchPart activePart) {
final IDockerConnection connection = getCurrentConnection(activePart);
final ArrayList<Job> jobs = new ArrayList<>();
if (!connection.isOpen()) {
try {
connection.open(true);
} catch (DockerException e) {
// do nothing
}
}
if (connection.isOpen()) {
jobs.add(getRefreshContainersJob(connection));
jobs.add(getRefreshImagesJob(connection));
}
return jobs;
}
use of org.eclipse.linuxtools.docker.core.IDockerConnection in project linuxtools by eclipse.
the class RemoveTagCommandHandler method performRemoveTagImage.
private void performRemoveTagImage(final IDockerConnection connection, final String tag) {
final Job removeTagImageJob = new Job(DVMessages.getString(REMOVE_TAG_JOB_TITLE)) {
@Override
protected IStatus run(final IProgressMonitor monitor) {
monitor.beginTask(DVMessages.getString(REMOVE_TAG_MSG), 2);
try {
((DockerConnection) connection).removeTag(tag);
monitor.worked(1);
((DockerConnection) connection).getImages(true);
monitor.worked(1);
} catch (final DockerException e) {
Display.getDefault().syncExec(() -> MessageDialog.openError(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), DVMessages.getFormattedString(ERROR_REMOVING_TAG_IMAGE, tag), e.getMessage()));
// for now
} catch (InterruptedException e) {
// do nothing
} finally {
monitor.done();
}
return Status.OK_STATUS;
}
};
removeTagImageJob.schedule();
}
use of org.eclipse.linuxtools.docker.core.IDockerConnection in project linuxtools by eclipse.
the class RunImageCommandHandler method runImage.
/**
* Run the given {@link IDockerImage} with the given settings
*
* @param image
* @param containerConfig
* @param hostConfig
* @param containerName
* @param removeWhenExits
*/
public static void runImage(final IDockerImage image, final IDockerContainerConfig containerConfig, final IDockerHostConfig hostConfig, final String containerName, final boolean removeWhenExits) {
final IDockerConnection connection = image.getConnection();
if (containerConfig.tty()) {
// show the console view
Display.getDefault().asyncExec(() -> {
try {
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(IConsoleConstants.ID_CONSOLE_VIEW);
} catch (Exception e) {
Activator.log(e);
}
});
}
// Create the container in a non-UI thread.
final Job runImageJob = new Job(// $NON-NLS-1$
DVMessages.getString("RunImageCreateContainer.job")) {
@Override
protected IStatus run(final IProgressMonitor monitor) {
monitor.beginTask(DVMessages.getString("RunImageRunningTask.msg"), // $NON-NLS-1$
2);
String containerId = null;
RunConsole console = null;
try {
final SubMonitor createContainerMonitor = SubMonitor.convert(monitor, 1);
// create the container
createContainerMonitor.beginTask(DVMessages.getString(// $NON-NLS-1$
"RunImageCreatingContainerTask.msg"), 1);
containerId = ((DockerConnection) connection).createContainer(containerConfig, hostConfig, containerName);
final IDockerContainer container = ((DockerConnection) connection).getContainer(containerId);
createContainerMonitor.done();
// abort if operation was cancelled
if (monitor.isCanceled()) {
return Status.CANCEL_STATUS;
}
// start the container
final SubMonitor startContainerMonitor = SubMonitor.convert(monitor, 1);
startContainerMonitor.beginTask(DVMessages.getString("RunImageStartingContainerTask.msg"), // $NON-NLS-1$
1);
console = getRunConsole(connection, container);
if (console != null) {
// if we are auto-logging, show the console
console.showConsole();
((DockerConnection) connection).startContainer(containerId, console.getOutputStream());
} else {
((DockerConnection) connection).startContainer(containerId, null);
}
startContainerMonitor.done();
// create a launch configuration from the container
LaunchConfigurationUtils.createRunImageLaunchConfiguration(image, containerConfig, hostConfig, containerName, removeWhenExits);
} catch (final DockerException | InterruptedException e) {
if (console != null) {
RunConsole.removeConsole(console);
}
Display.getDefault().syncExec(() -> MessageDialog.openError(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), DVMessages.getFormattedString(ERROR_CREATING_CONTAINER, containerConfig.image()), e.getMessage()));
} finally {
final String tmpContainerId = containerId;
if (removeWhenExits) {
final Job waitContainerJob = new Job(CommandMessages.getString(// $NON-NLS-1$
"RunImageCommandHandler.waitContainer.label")) {
@Override
protected IStatus run(IProgressMonitor monitor) {
try {
if (tmpContainerId != null) {
// Wait for the container to finish
((DockerConnection) connection).waitForContainer(tmpContainerId);
// Drain the logging thread before we remove the
// container
((DockerConnection) connection).stopLoggingThread(tmpContainerId);
while (((DockerConnection) connection).loggingStatus(tmpContainerId) == EnumDockerLoggingStatus.LOGGING_ACTIVE) {
Thread.sleep(1000);
}
}
} catch (DockerContainerNotFoundException e) {
// container not created correctly
return Status.OK_STATUS;
} catch (DockerException | InterruptedException e) {
// ignore any errors in waiting for container or
// draining log
}
try {
// try and remove the container if it was created
if (tmpContainerId != null)
((DockerConnection) connection).removeContainer(tmpContainerId);
} catch (DockerException | InterruptedException e) {
final String id = tmpContainerId;
Display.getDefault().syncExec(() -> MessageDialog.openError(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), DVMessages.getFormattedString(ERROR_REMOVING_CONTAINER, id), e.getMessage()));
}
return Status.OK_STATUS;
}
};
// Do not display this job in the UI
waitContainerJob.setSystem(true);
waitContainerJob.schedule();
}
monitor.done();
}
return Status.OK_STATUS;
}
};
runImageJob.schedule();
}
Aggregations