Skip to content

Commit

Permalink
Refactor workspace infrastructure provisioning
Browse files Browse the repository at this point in the history
Move agents volume addition into infrastructure provisioner.
Suppress some false positive warnings.
Add some javadocs.
Signed-off-by: Alexander Garagatyi <agaragatyi@codenvy.com>
  • Loading branch information
Alexander Garagatyi committed Jan 5, 2017
1 parent 0cc2137 commit 0f042d7
Show file tree
Hide file tree
Showing 7 changed files with 94 additions and 101 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,6 @@ protected void configure() {
install(new org.eclipse.che.api.machine.server.MachineModule());
install(new org.eclipse.che.api.agent.server.AgentModule());
install(new org.eclipse.che.plugin.docker.machine.ext.DockerExtServerModule());
install(new org.eclipse.che.plugin.docker.machine.ext.DockerTerminalModule());
install(new org.eclipse.che.swagger.deploy.DocsModule());
install(new org.eclipse.che.plugin.machine.ssh.SshMachineModule());
install(new org.eclipse.che.plugin.docker.machine.proxy.DockerProxyModule());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,6 @@
import com.google.inject.multibindings.Multibinder;
import com.google.inject.name.Names;

import org.eclipse.che.inject.CheBootstrap;
import org.eclipse.che.plugin.docker.machine.ext.provider.WsAgentVolumeProvider;

/**
* Guice module for extension servers feature in docker machines
*
Expand All @@ -28,34 +25,12 @@
public class DockerExtServerModule extends AbstractModule {
@Override
protected void configure() {
Multibinder<String> volumesMultibinder = Multibinder.newSetBinder(binder(),
String.class,
Names.named("machine.docker.dev_machine.machine_volumes"));
volumesMultibinder.addBinding()
.toProvider(WsAgentVolumeProvider.class);

Multibinder<String> devMachineEnvVars = Multibinder.newSetBinder(binder(),
String.class,
Names.named("machine.docker.dev_machine.machine_env"))
.permitDuplicates();
devMachineEnvVars.addBinding().toProvider(org.eclipse.che.plugin.docker.machine.ext.provider.ApiEndpointEnvVariableProvider.class);
devMachineEnvVars.addBinding().toProvider(org.eclipse.che.plugin.docker.machine.ext.provider.ProjectsRootEnvVariableProvider.class);
devMachineEnvVars.addBinding().toProvider(org.eclipse.che.plugin.docker.machine.ext.provider.JavaOptsEnvVariableProvider.class);
devMachineEnvVars.addBinding()
.toInstance(CheBootstrap.CHE_LOCAL_CONF_DIR
+ '='
+ org.eclipse.che.plugin.docker.machine.ext.provider.DockerExtConfBindingProvider
.EXT_CHE_LOCAL_CONF_DIR);
Multibinder<String> allMachinesEnvVars = Multibinder.newSetBinder(binder(),
String.class,
Names.named("machine.docker.machine_env"))
.permitDuplicates();
allMachinesEnvVars.addBinding()
.toProvider(org.eclipse.che.plugin.docker.machine.ext.provider.ApiEndpointEnvVariableProvider.class);
org.eclipse.che.plugin.docker.machine.ext.provider.DockerExtConfBindingProvider extConfBindingProvider =
new org.eclipse.che.plugin.docker.machine.ext.provider.DockerExtConfBindingProvider();
if (extConfBindingProvider.get() != null) {
volumesMultibinder.addBinding().toProvider(extConfBindingProvider);
}
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -10,21 +10,28 @@
*******************************************************************************/
package org.eclipse.che.plugin.docker.machine.local;

import com.google.common.base.Strings;

import org.eclipse.che.api.core.model.workspace.Environment;
import org.eclipse.che.api.core.model.workspace.ExtendedMachine;
import org.eclipse.che.api.core.util.SystemInfo;
import org.eclipse.che.api.environment.server.AgentConfigApplier;
import org.eclipse.che.api.environment.server.DefaultInfrastructureProvisioner;
import org.eclipse.che.api.environment.server.exception.EnvironmentException;
import org.eclipse.che.api.environment.server.model.CheServiceImpl;
import org.eclipse.che.api.environment.server.model.CheServicesEnvironmentImpl;
import org.eclipse.che.commons.annotation.Nullable;
import org.eclipse.che.commons.lang.os.WindowsPathEscaper;
import org.eclipse.che.inject.CheBootstrap;
import org.eclipse.che.plugin.docker.machine.ext.provider.DockerExtConfBindingProvider;
import org.eclipse.che.plugin.docker.machine.ext.provider.TerminalVolumeProvider;
import org.eclipse.che.plugin.docker.machine.ext.provider.WsAgentVolumeProvider;
import org.eclipse.che.plugin.docker.machine.node.WorkspaceFolderPathProvider;

import com.google.common.base.Strings;

import javax.inject.Inject;
import javax.inject.Named;
import java.io.IOException;
import java.util.List;
import java.util.Map;

import static java.lang.String.format;
Expand All @@ -35,21 +42,30 @@
* @author Alexander Garagatyi
*/
public class LocalCheInfrastructureProvisioner extends DefaultInfrastructureProvisioner {
private final WorkspaceFolderPathProvider workspaceFolderPathProvider;
private final WindowsPathEscaper pathEscaper;
private final String projectFolderPath;
private final String projectsVolumeOptions;
private final WorkspaceFolderPathProvider workspaceFolderPathProvider;
private final WindowsPathEscaper pathEscaper;
private final String projectFolderPath;
private final WsAgentVolumeProvider wsAgentVolumeProvider;
private final DockerExtConfBindingProvider dockerExtConfBindingProvider;
private final TerminalVolumeProvider terminalVolumeProvider;
private final String projectsVolumeOptions;

@Inject
public LocalCheInfrastructureProvisioner(AgentConfigApplier agentConfigApplier,
WorkspaceFolderPathProvider workspaceFolderPathProvider,
WindowsPathEscaper pathEscaper,
@Named("che.workspace.projects.storage") String projectFolderPath,
@Nullable @Named("che.docker.volumes_projects_options") String projectsVolumeOptions) {
@Nullable @Named("che.docker.volumes_projects_options") String projectsVolumeOptions,
WsAgentVolumeProvider wsAgentVolumeProvider,
DockerExtConfBindingProvider dockerExtConfBindingProvider,
TerminalVolumeProvider terminalVolumeProvider) {
super(agentConfigApplier);
this.workspaceFolderPathProvider = workspaceFolderPathProvider;
this.pathEscaper = pathEscaper;
this.projectFolderPath = projectFolderPath;
this.wsAgentVolumeProvider = wsAgentVolumeProvider;
this.dockerExtConfBindingProvider = dockerExtConfBindingProvider;
this.terminalVolumeProvider = terminalVolumeProvider;
if (!Strings.isNullOrEmpty(projectsVolumeOptions)) {
this.projectsVolumeOptions = ":" + projectsVolumeOptions;
} else {
Expand All @@ -73,6 +89,9 @@ public void provision(Environment envConfig, CheServicesEnvironmentImpl internal
.orElseThrow(() -> new EnvironmentException(
"ws-machine is not found on agents applying"));

CheServiceImpl devMachine = internalEnv.getServices().get(devMachineName);
List<String> devMachineVolumes = devMachine.getVolumes();

// add bind-mount volume for projects in a workspace
String projectFolderVolume;
try {
Expand All @@ -83,13 +102,30 @@ public void provision(Environment envConfig, CheServicesEnvironmentImpl internal
throw new EnvironmentException("Error occurred on resolving path to files of workspace " +
internalEnv.getWorkspaceId());
}
internalEnv.getServices()
.get(devMachineName)
.getVolumes()
.add(SystemInfo.isWindows() ? pathEscaper.escapePath(projectFolderVolume)
: projectFolderVolume);
devMachineVolumes.add(SystemInfo.isWindows() ? pathEscaper.escapePath(projectFolderVolume)
: projectFolderVolume);
// add volume with ws-agent archive
devMachineVolumes.add(wsAgentVolumeProvider.get());
// add volume and variable to setup ws-agent configuration
String dockerExtConfVolume = dockerExtConfBindingProvider.get();
if (dockerExtConfVolume != null) {
devMachineVolumes.add(dockerExtConfVolume);
}
devMachine.getEnvironment().put(CheBootstrap.CHE_LOCAL_CONF_DIR,
DockerExtConfBindingProvider.EXT_CHE_LOCAL_CONF_DIR);

for (CheServiceImpl machine : internalEnv.getServices().values()) {
machine.getVolumes().add(terminalVolumeProvider.get());
}

// apply basic infra (e.g. agents)
super.provision(envConfig, internalEnv);
}

@Override
public void provision(ExtendedMachine machineConfig, CheServiceImpl internalMachine) throws EnvironmentException {
internalMachine.getVolumes().add(terminalVolumeProvider.get());

super.provision(machineConfig, internalMachine);
}
}
Loading

0 comments on commit 0f042d7

Please sign in to comment.