use of org.eclipse.che.plugin.docker.client.json.HostConfig in project che by eclipse.
the class MachineProviderImpl method createContainer.
private String createContainer(String workspaceId, String machineName, boolean isDev, String image, String networkName, CheServiceImpl service) throws IOException {
long machineMemorySwap = memorySwapMultiplier == -1 ? -1 : (long) (service.getMemLimit() * memorySwapMultiplier);
addSystemWideContainerSettings(workspaceId, isDev, service);
EndpointConfig endpointConfig = new EndpointConfig().withAliases(machineName).withLinks(toArrayIfNotNull(service.getLinks()));
NetworkingConfig networkingConfig = new NetworkingConfig().withEndpointsConfig(singletonMap(networkName, endpointConfig));
HostConfig hostConfig = new HostConfig();
hostConfig.withMemorySwap(machineMemorySwap).withMemory(service.getMemLimit()).withNetworkMode(networkName).withLinks(toArrayIfNotNull(service.getLinks())).withPortBindings(service.getPorts().stream().collect(toMap(Function.identity(), value -> new PortBinding[0]))).withVolumesFrom(toArrayIfNotNull(service.getVolumesFrom()));
ContainerConfig config = new ContainerConfig();
config.withImage(image).withExposedPorts(service.getExpose().stream().distinct().collect(toMap(Function.identity(), value -> emptyMap()))).withHostConfig(hostConfig).withCmd(toArrayIfNotNull(service.getCommand())).withEntrypoint(toArrayIfNotNull(service.getEntrypoint())).withLabels(service.getLabels()).withNetworkingConfig(networkingConfig).withEnv(service.getEnvironment().entrySet().stream().map(entry -> entry.getKey() + "=" + entry.getValue()).toArray(String[]::new));
List<String> bindMountVolumes = new ArrayList<>();
Map<String, Volume> nonBindMountVolumes = new HashMap<>();
for (String volume : service.getVolumes()) {
// If volume contains colon then it is bind volume, otherwise - non bind-mount volume.
if (volume.contains(":")) {
bindMountVolumes.add(volume);
} else {
nonBindMountVolumes.put(volume, new Volume());
}
}
hostConfig.setBinds(bindMountVolumes.toArray(new String[bindMountVolumes.size()]));
config.setVolumes(nonBindMountVolumes);
addStaticDockerConfiguration(config);
return docker.createContainer(CreateContainerParams.create(config).withContainerName(service.getContainerName())).getId();
}
use of org.eclipse.che.plugin.docker.client.json.HostConfig in project che by eclipse.
the class DockerInstanceRuntimeInfo method getProperties.
@Override
public Map<String, String> getProperties() {
Map<String, String> md = new LinkedHashMap<>();
md.put("id", info.getId());
md.put("created", info.getCreated());
md.put("image", info.getImage());
md.put("path", info.getPath());
md.put("appArmorProfile", info.getAppArmorProfile());
md.put("driver", info.getDriver());
md.put("execDriver", info.getExecDriver());
md.put("hostnamePath", info.getHostnamePath());
md.put("hostsPath", info.getHostsPath());
md.put("mountLabel", info.getMountLabel());
md.put("name", info.getName());
md.put("processLabel", info.getProcessLabel());
md.put("volumesRW", String.valueOf(info.getVolumesRW()));
md.put("resolvConfPath", info.getResolvConfPath());
md.put("args", Arrays.toString(info.getArgs()));
md.put("volumes", String.valueOf(info.getVolumes()));
md.put("restartCount", String.valueOf(info.getRestartCount()));
md.put("logPath", String.valueOf(info.getLogPath()));
ContainerConfig config = info.getConfig();
if (config != null) {
md.put("config.domainName", config.getDomainName());
md.put("config.hostname", config.getHostname());
md.put("config.image", config.getImage());
md.put("config.user", config.getUser());
md.put("config.workingDir", config.getWorkingDir());
md.put("config.cmd", Arrays.toString(config.getCmd()));
md.put("config.volumes", String.valueOf(config.getVolumes()));
md.put("config.entrypoint", Arrays.toString(config.getEntrypoint()));
md.put("config.exposedPorts", String.valueOf(config.getExposedPorts()));
md.put("config.macAddress", config.getMacAddress());
md.put("config.securityOpts", Arrays.toString(config.getSecurityOpts()));
md.put("config.env", Arrays.toString(config.getEnv()));
md.put("config.attachStderr", Boolean.toString(config.isAttachStderr()));
md.put("config.attachStdin", Boolean.toString(config.isAttachStdin()));
md.put("config.attachStdout", Boolean.toString(config.isAttachStdout()));
md.put("config.networkDisabled", Boolean.toString(config.isNetworkDisabled()));
md.put("config.openStdin", Boolean.toString(config.isOpenStdin()));
md.put("config.stdinOnce", Boolean.toString(config.isStdinOnce()));
md.put("config.tty", Boolean.toString(config.isTty()));
md.put("config.labels", String.valueOf(config.getLabels()));
}
ContainerState state = info.getState();
if (state != null) {
md.put("state.startedAt", state.getStartedAt());
md.put("state.exitCode", Integer.toString(state.getExitCode()));
md.put("state.pid", Integer.toString(state.getPid()));
md.put("state.running", Boolean.toString(state.isRunning()));
md.put("state.finishedAt", state.getFinishedAt());
md.put("state.paused", Boolean.toString(state.isPaused()));
md.put("state.restarting", Boolean.toString(state.isRestarting()));
md.put("state.dead", String.valueOf(state.isDead()));
md.put("state.OOMKilled", String.valueOf(state.isOOMKilled()));
md.put("state.error", state.getError());
}
NetworkSettings networkSettings = info.getNetworkSettings();
if (networkSettings != null) {
md.put("network.bridge", networkSettings.getBridge());
md.put("network.gateway", networkSettings.getGateway());
md.put("network.ipAddress", networkSettings.getIpAddress());
md.put("network.ipPrefixLen", Integer.toString(networkSettings.getIpPrefixLen()));
md.put("network.portMappings", Arrays.toString(networkSettings.getPortMapping()));
md.put("network.macAddress", networkSettings.getMacAddress());
md.put("network.ports", String.valueOf(networkSettings.getPorts()));
md.put("network.linkLocalIPv6PrefixLen", String.valueOf(networkSettings.getLinkLocalIPv6PrefixLen()));
md.put("network.globalIPv6Address", networkSettings.getGlobalIPv6Address());
md.put("network.globalIPv6PrefixLen", String.valueOf(networkSettings.getGlobalIPv6PrefixLen()));
md.put("network.iPv6Gateway", networkSettings.getIpV6Gateway());
md.put("network.linkLocalIPv6Address", networkSettings.getLinkLocalIPv6Address());
}
HostConfig hostConfig = info.getHostConfig();
if (hostConfig != null) {
md.put("hostConfig.cgroupParent", hostConfig.getCgroupParent());
md.put("hostConfig.containerIDFile", hostConfig.getContainerIDFile());
md.put("hostConfig.cpusetCpus", hostConfig.getCpusetCpus());
md.put("hostConfig.ipcMode", hostConfig.getIpcMode());
md.put("hostConfig.memory", Long.toString(hostConfig.getMemory()));
md.put("hostConfig.networkMode", hostConfig.getNetworkMode());
md.put("hostConfig.pidMode", hostConfig.getPidMode());
md.put("hostConfig.binds", Arrays.toString(hostConfig.getBinds()));
md.put("hostConfig.capAdd", Arrays.toString(hostConfig.getCapAdd()));
md.put("hostConfig.capDrop", Arrays.toString(hostConfig.getCapDrop()));
md.put("hostConfig.cpuShares", String.valueOf(hostConfig.getCpuShares()));
md.put("hostConfig.devices", Arrays.toString(hostConfig.getDevices()));
md.put("hostConfig.dns", Arrays.toString(hostConfig.getDns()));
md.put("hostConfig.dnsSearch", Arrays.toString(hostConfig.getDnsSearch()));
md.put("hostConfig.extraHosts", Arrays.toString(hostConfig.getExtraHosts()));
md.put("hostConfig.links", Arrays.toString(hostConfig.getLinks()));
md.put("hostConfig.logConfig", String.valueOf(hostConfig.getLogConfig()));
md.put("hostConfig.lxcConf", Arrays.toString(hostConfig.getLxcConf()));
md.put("hostConfig.memorySwap", String.valueOf(hostConfig.getMemorySwap()));
md.put("hostConfig.portBindings", String.valueOf(hostConfig.getPortBindings()));
md.put("hostConfig.restartPolicy", String.valueOf(hostConfig.getRestartPolicy()));
md.put("hostConfig.ulimits", Arrays.toString(hostConfig.getUlimits()));
md.put("hostConfig.volumesFrom", Arrays.toString(hostConfig.getVolumesFrom()));
md.put("hostConfig.pidsLimit", Long.toString(hostConfig.getPidsLimit()));
}
return md;
}
use of org.eclipse.che.plugin.docker.client.json.HostConfig in project che by eclipse.
the class OpenShiftConnector method createContainerInfo.
/**
* Collects the relevant information from a Service, an ImageInfo, and a Pod into
* a docker ContainerInfo JSON object. The returned object is what would be returned
* by executing {@code docker inspect <container>}, with fields filled as available.
* @param svc
* @param imageInfo
* @param pod
* @param containerId
* @return
*/
private ContainerInfo createContainerInfo(Service svc, ImageInfo imageInfo, Pod pod, String containerId) {
// In Che on OpenShift, we only have one container per pod.
Container container = pod.getSpec().getContainers().get(0);
ContainerConfig imageContainerConfig = imageInfo.getContainerConfig();
// HostConfig
HostConfig hostConfig = new HostConfig();
hostConfig.setBinds(new String[0]);
hostConfig.setMemory(imageInfo.getConfig().getMemory());
// Env vars
List<String> imageEnv = Arrays.asList(imageContainerConfig.getEnv());
List<String> containerEnv = container.getEnv().stream().map(e -> String.format("%s=%s", e.getName(), e.getValue())).collect(Collectors.toList());
String[] env = Stream.concat(imageEnv.stream(), containerEnv.stream()).toArray(String[]::new);
// Exposed Ports
Map<String, List<PortBinding>> ports = getCheServicePorts(svc);
Map<String, Map<String, String>> exposedPorts = new HashMap<>();
for (String key : ports.keySet()) {
exposedPorts.put(key, Collections.emptyMap());
}
// Labels
Map<String, String> annotations = KubernetesLabelConverter.namesToLabels(svc.getMetadata().getAnnotations());
Map<String, String> containerLabels = imageInfo.getConfig().getLabels();
Map<String, String> labels = Stream.concat(annotations.entrySet().stream(), containerLabels.entrySet().stream()).filter(e -> e.getKey().startsWith(KubernetesLabelConverter.getCheServerLabelPrefix())).collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue()));
// ContainerConfig
ContainerConfig config = imageContainerConfig;
config.setHostname(svc.getMetadata().getName());
config.setEnv(env);
config.setExposedPorts(exposedPorts);
config.setLabels(labels);
config.setImage(container.getImage());
// NetworkSettings
NetworkSettings networkSettings = new NetworkSettings();
networkSettings.setIpAddress(svc.getSpec().getClusterIP());
networkSettings.setGateway(svc.getSpec().getClusterIP());
networkSettings.setPorts(ports);
// Make final ContainerInfo
ContainerInfo info = new ContainerInfo();
info.setId(containerId);
info.setConfig(config);
info.setNetworkSettings(networkSettings);
info.setHostConfig(hostConfig);
info.setImage(imageInfo.getConfig().getImage());
return info;
}
Aggregations