Search in sources :

Example 6 with Command

use of org.eclipse.che.api.core.model.workspace.config.Command in project devspaces-images by redhat-developer.

the class PreviewUrlLinksVariableGenerator method genLinksMapAndUpdateCommands.

/**
 * Takes commands from given {@code workspace}. For all commands that have defined previewUrl,
 * creates variable name in defined format and final preview url link. It updates the command so
 * it's `previewUrl` attribute will contain variable in proper format. Method then returns map of
 * all preview url links with these variables as keys:
 *
 * <pre>
 *   links:
 *     "previewURl/run_123": http://your.domain
 *   command:
 *     attributes:
 *       previewUrl: '${previewUrl/run_123}/some/path'
 * </pre>
 *
 * @return map of all <commandPreviewUrlVariable, previewUrlFullLink>
 */
Map<String, String> genLinksMapAndUpdateCommands(WorkspaceImpl workspace, UriBuilder uriBuilder) {
    if (workspace == null || workspace.getRuntime() == null || workspace.getRuntime().getCommands() == null || uriBuilder == null) {
        return Collections.emptyMap();
    }
    Map<String, String> links = new HashMap<>();
    for (Command command : workspace.getRuntime().getCommands()) {
        Map<String, String> commandAttributes = command.getAttributes();
        if (command.getPreviewUrl() != null && commandAttributes != null && commandAttributes.containsKey(PREVIEW_URL_ATTRIBUTE)) {
            String previewUrlLinkValue = createPreviewUrlLinkValue(uriBuilder, command);
            String previewUrlLinkKey = createPreviewUrlLinkKey(command);
            links.put(previewUrlLinkKey, previewUrlLinkValue);
            commandAttributes.replace(PREVIEW_URL_ATTRIBUTE, formatAttributeValue(previewUrlLinkKey, command.getPreviewUrl().getPath()));
        }
    }
    return links;
}
Also used : HashMap(java.util.HashMap) Command(org.eclipse.che.api.core.model.workspace.config.Command)

Example 7 with Command

use of org.eclipse.che.api.core.model.workspace.config.Command in project che-server by eclipse-che.

the class KubernetesInternalRuntimeTest method shouldReturnCommandsAfterRuntimeStart.

@Test
public void shouldReturnCommandsAfterRuntimeStart() throws Exception {
    // given
    CommandImpl commandToProvision = new CommandImpl("provisioned-command", "build", "env");
    doAnswer((Answer<Void>) invocationOnMock -> {
        k8sEnv.getCommands().add(commandToProvision);
        return null;
    }).when(internalEnvironmentProvisioner).provision(any(), any());
    internalRuntime.start(emptyMap());
    // when
    List<? extends Command> commands = internalRuntime.getCommands();
    // then
    assertEquals(commands.size(), 2);
    Optional<? extends Command> envCommandOpt = commands.stream().filter(c -> "envCommand".equals(c.getName())).findAny();
    assertTrue(envCommandOpt.isPresent());
    Command envCommand = envCommandOpt.get();
    assertEquals(envCommand.getCommandLine(), envCommand.getCommandLine());
    assertEquals(envCommand.getType(), envCommand.getType());
    Optional<? extends Command> provisionedCommandOpt = commands.stream().filter(c -> "provisioned-command".equals(c.getName())).findAny();
    assertTrue(provisionedCommandOpt.isPresent());
    Command provisionedCommand = provisionedCommandOpt.get();
    assertEquals(provisionedCommand.getCommandLine(), provisionedCommand.getCommandLine());
    assertEquals(provisionedCommand.getType(), provisionedCommand.getType());
}
Also used : CommandImpl(org.eclipse.che.api.workspace.server.model.impl.CommandImpl) KubernetesRuntimeCommandImpl(org.eclipse.che.workspace.infrastructure.kubernetes.model.KubernetesRuntimeCommandImpl) Arrays(java.util.Arrays) ServerStatus(org.eclipse.che.api.core.model.workspace.runtime.ServerStatus) KubernetesServerImpl(org.eclipse.che.workspace.infrastructure.kubernetes.model.KubernetesServerImpl) IntOrString(io.fabric8.kubernetes.api.model.IntOrString) ArgumentMatchers.eq(org.mockito.ArgumentMatchers.eq) CREATE_IN_CHE_INSTALLATION_NAMESPACE(org.eclipse.che.workspace.infrastructure.kubernetes.Annotations.CREATE_IN_CHE_INSTALLATION_NAMESPACE) KubernetesEnvironment(org.eclipse.che.workspace.infrastructure.kubernetes.environment.KubernetesEnvironment) Test(org.testng.annotations.Test) Collections.singletonList(java.util.Collections.singletonList) KubernetesObjectUtil.putLabels(org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesObjectUtil.putLabels) Mockito.doThrow(org.mockito.Mockito.doThrow) MockitoAnnotations(org.mockito.MockitoAnnotations) KubernetesRuntimeState(org.eclipse.che.workspace.infrastructure.kubernetes.model.KubernetesRuntimeState) Arrays.asList(java.util.Arrays.asList) Mockito.doAnswer(org.mockito.Mockito.doAnswer) Map(java.util.Map) WorkspaceExposureType(org.eclipse.che.workspace.infrastructure.kubernetes.server.WorkspaceExposureType) IngressBackend(io.fabric8.kubernetes.api.model.networking.v1.IngressBackend) ServiceExposureStrategyProvider(org.eclipse.che.workspace.infrastructure.kubernetes.server.external.ServiceExposureStrategyProvider) Mockito.doReturn(org.mockito.Mockito.doReturn) Assert.assertFalse(org.testng.Assert.assertFalse) KubernetesConfigsMaps(org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesConfigsMaps) KubernetesDeployments(org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesDeployments) Mockito.atLeastOnce(org.mockito.Mockito.atLeastOnce) Set(java.util.Set) KubernetesMachineCache(org.eclipse.che.workspace.infrastructure.kubernetes.cache.KubernetesMachineCache) IngressPathTransformInverter(org.eclipse.che.workspace.infrastructure.kubernetes.server.external.IngressPathTransformInverter) SidecarToolingProvisioner(org.eclipse.che.workspace.infrastructure.kubernetes.wsplugins.SidecarToolingProvisioner) Mockito.doNothing(org.mockito.Mockito.doNothing) HasMetadata(io.fabric8.kubernetes.api.model.HasMetadata) Executors(java.util.concurrent.Executors) RuntimeStartInterruptedException(org.eclipse.che.api.workspace.server.spi.RuntimeStartInterruptedException) UnrecoverablePodEventListenerFactory(org.eclipse.che.workspace.infrastructure.kubernetes.util.UnrecoverablePodEventListenerFactory) ObjectMeta(io.fabric8.kubernetes.api.model.ObjectMeta) RuntimeIdentity(org.eclipse.che.api.core.model.workspace.runtime.RuntimeIdentity) LogWatcher(org.eclipse.che.workspace.infrastructure.kubernetes.namespace.log.LogWatcher) Mockito.mock(org.mockito.Mockito.mock) MachineStatus(org.eclipse.che.api.core.model.workspace.runtime.MachineStatus) InternalEnvironmentProvisioner(org.eclipse.che.api.workspace.server.spi.provision.InternalEnvironmentProvisioner) Mock(org.mockito.Mock) CommandImpl(org.eclipse.che.api.workspace.server.model.impl.CommandImpl) ServicePortBuilder(io.fabric8.kubernetes.api.model.ServicePortBuilder) Mockito.spy(org.mockito.Mockito.spy) KubernetesMachineImpl(org.eclipse.che.workspace.infrastructure.kubernetes.model.KubernetesMachineImpl) ArrayList(java.util.ArrayList) CheNamespace(org.eclipse.che.workspace.infrastructure.kubernetes.namespace.CheNamespace) ServersChecker(org.eclipse.che.api.workspace.server.hc.ServersChecker) KubernetesNamespace(org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesNamespace) Answer(org.mockito.stubbing.Answer) Stream.concat(java.util.stream.Stream.concat) ProbeScheduler(org.eclipse.che.api.workspace.server.hc.probe.ProbeScheduler) LogWatchTimeouts(org.eclipse.che.workspace.infrastructure.kubernetes.namespace.log.LogWatchTimeouts) KubernetesSecrets(org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesSecrets) Pod(io.fabric8.kubernetes.api.model.Pod) MachineStatusEvent(org.eclipse.che.api.workspace.shared.dto.event.MachineStatusEvent) KubernetesIngresses(org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesIngresses) Mockito.times(org.mockito.Mockito.times) ConfigMap(io.fabric8.kubernetes.api.model.ConfigMap) ConfigMapBuilder(io.fabric8.kubernetes.api.model.ConfigMapBuilder) ContainerPort(io.fabric8.kubernetes.api.model.ContainerPort) Mockito.never(org.mockito.Mockito.never) KubernetesRuntimeStateCache(org.eclipse.che.workspace.infrastructure.kubernetes.cache.KubernetesRuntimeStateCache) PodData(org.eclipse.che.workspace.infrastructure.kubernetes.environment.KubernetesEnvironment.PodData) DEBUG_WORKSPACE_START_LOG_LIMIT_BYTES(org.eclipse.che.api.workspace.shared.Constants.DEBUG_WORKSPACE_START_LOG_LIMIT_BYTES) PodEvent(org.eclipse.che.workspace.infrastructure.kubernetes.namespace.event.PodEvent) ServersCheckerFactory(org.eclipse.che.api.workspace.server.hc.ServersCheckerFactory) ArgumentMatchers.anyString(org.mockito.ArgumentMatchers.anyString) ArgumentMatchers.argThat(org.mockito.ArgumentMatchers.argThat) Date(java.util.Date) DtoConverter(org.eclipse.che.api.workspace.server.DtoConverter) ServicePort(io.fabric8.kubernetes.api.model.ServicePort) ServiceBackendPort(io.fabric8.kubernetes.api.model.networking.v1.ServiceBackendPort) KubernetesPreviewUrlCommandProvisioner(org.eclipse.che.workspace.infrastructure.kubernetes.provision.KubernetesPreviewUrlCommandProvisioner) Collectors.toMap(java.util.stream.Collectors.toMap) IngressRule(io.fabric8.kubernetes.api.model.networking.v1.IngressRule) Mockito.verifyNoMoreInteractions(org.mockito.Mockito.verifyNoMoreInteractions) PodBuilder(io.fabric8.kubernetes.api.model.PodBuilder) KubernetesServices(org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesServices) PodEvents(org.eclipse.che.workspace.infrastructure.kubernetes.util.PodEvents) ParseException(java.text.ParseException) StateException(org.eclipse.che.api.workspace.server.spi.StateException) KubernetesObjectUtil.putAnnotations(org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesObjectUtil.putAnnotations) EventService(org.eclipse.che.api.core.notification.EventService) Command(org.eclipse.che.api.core.model.workspace.config.Command) PodLogHandler(org.eclipse.che.workspace.infrastructure.kubernetes.namespace.log.PodLogHandler) WorkspaceProbes(org.eclipse.che.api.workspace.server.hc.probe.WorkspaceProbes) ImmutableSet(com.google.common.collect.ImmutableSet) ImmutableMap(com.google.common.collect.ImmutableMap) KubernetesServerResolverFactory(org.eclipse.che.workspace.infrastructure.kubernetes.server.resolver.KubernetesServerResolverFactory) Collections.emptyList(java.util.Collections.emptyList) Predicate(java.util.function.Predicate) MULTI_HOST_STRATEGY(org.eclipse.che.workspace.infrastructure.kubernetes.server.external.MultiHostExternalServiceExposureStrategy.MULTI_HOST_STRATEGY) DtoFactory.newDto(org.eclipse.che.dto.server.DtoFactory.newDto) URLRewriter(org.eclipse.che.api.workspace.server.URLRewriter) BeforeMethod(org.testng.annotations.BeforeMethod) STARTING(org.eclipse.che.api.core.model.workspace.runtime.MachineStatus.STARTING) InternalMachineConfig(org.eclipse.che.api.workspace.server.spi.environment.InternalMachineConfig) KubernetesSharedPool(org.eclipse.che.workspace.infrastructure.kubernetes.util.KubernetesSharedPool) InfrastructureException(org.eclipse.che.api.workspace.server.spi.InfrastructureException) List(java.util.List) WorkspaceVolumesStrategy(org.eclipse.che.workspace.infrastructure.kubernetes.namespace.pvc.WorkspaceVolumesStrategy) RuntimeIdentityImpl(org.eclipse.che.api.workspace.server.model.impl.RuntimeIdentityImpl) IngressServiceBackend(io.fabric8.kubernetes.api.model.networking.v1.IngressServiceBackend) Ingress(io.fabric8.kubernetes.api.model.networking.v1.Ingress) Entry(java.util.Map.Entry) KubernetesRuntimeCommandImpl(org.eclipse.che.workspace.infrastructure.kubernetes.model.KubernetesRuntimeCommandImpl) Secret(io.fabric8.kubernetes.api.model.Secret) Optional(java.util.Optional) WorkspaceProbesFactory(org.eclipse.che.api.workspace.server.hc.probe.WorkspaceProbesFactory) ArgumentMatchers.any(org.mockito.ArgumentMatchers.any) ServiceSpec(io.fabric8.kubernetes.api.model.ServiceSpec) NoopExecutorServiceWrapper(org.eclipse.che.commons.observability.NoopExecutorServiceWrapper) ArgumentMatchers.anyLong(org.mockito.ArgumentMatchers.anyLong) Container(io.fabric8.kubernetes.api.model.Container) DataProvider(org.testng.annotations.DataProvider) DEBUG_WORKSPACE_START(org.eclipse.che.api.workspace.shared.Constants.DEBUG_WORKSPACE_START) Assert.assertEquals(org.testng.Assert.assertEquals) HashMap(java.util.HashMap) CompletableFuture(java.util.concurrent.CompletableFuture) ServerResolver(org.eclipse.che.workspace.infrastructure.kubernetes.server.resolver.ServerResolver) Captor(org.mockito.Captor) HashSet(java.util.HashSet) InternalInfrastructureException(org.eclipse.che.api.workspace.server.spi.InternalInfrastructureException) ArgumentCaptor(org.mockito.ArgumentCaptor) ImmutableList(com.google.common.collect.ImmutableList) IngressSpec(io.fabric8.kubernetes.api.model.networking.v1.IngressSpec) Collections.singletonMap(java.util.Collections.singletonMap) Service(io.fabric8.kubernetes.api.model.Service) RUNNING(org.eclipse.che.api.core.model.workspace.runtime.MachineStatus.RUNNING) LinkedList(java.util.LinkedList) RuntimeEventsPublisher(org.eclipse.che.workspace.infrastructure.kubernetes.util.RuntimeEventsPublisher) Collections.emptyMap(java.util.Collections.emptyMap) MachineId(org.eclipse.che.workspace.infrastructure.kubernetes.model.KubernetesMachineImpl.MachineId) Answers(org.mockito.Answers) InOrder(org.mockito.InOrder) Tracer(io.opentracing.Tracer) RuntimeLogEvent(org.eclipse.che.api.workspace.shared.dto.event.RuntimeLogEvent) IntOrStringBuilder(io.fabric8.kubernetes.api.model.IntOrStringBuilder) Assert.fail(org.testng.Assert.fail) WorkspaceStatus(org.eclipse.che.api.core.model.workspace.WorkspaceStatus) SecretAsContainerResourceProvisioner(org.eclipse.che.workspace.infrastructure.kubernetes.provision.secret.SecretAsContainerResourceProvisioner) Mockito.when(org.mockito.Mockito.when) DeploymentBuilder(io.fabric8.kubernetes.api.model.apps.DeploymentBuilder) Mockito.verify(org.mockito.Mockito.verify) TimeUnit(java.util.concurrent.TimeUnit) Mockito(org.mockito.Mockito) Collectors.toList(java.util.stream.Collectors.toList) CHE_ORIGINAL_NAME_LABEL(org.eclipse.che.workspace.infrastructure.kubernetes.Constants.CHE_ORIGINAL_NAME_LABEL) Assert.assertTrue(org.testng.Assert.assertTrue) ContainerPortBuilder(io.fabric8.kubernetes.api.model.ContainerPortBuilder) Deployment(io.fabric8.kubernetes.api.model.apps.Deployment) Command(org.eclipse.che.api.core.model.workspace.config.Command) Test(org.testng.annotations.Test)

Example 8 with Command

use of org.eclipse.che.api.core.model.workspace.config.Command in project che-server by eclipse-che.

the class CommandConverterTest method shouldAcceptActionWithCommand.

@Test
public void shouldAcceptActionWithCommand() throws Exception {
    // given
    CommandImpl devfileCommand = new CommandImpl();
    devfileCommand.setName("build");
    ActionImpl action = new ActionImpl();
    action.setType("exec");
    action.setCommand("blah");
    devfileCommand.getActions().add(action);
    // when
    Command command = commandConverter.toWorkspaceCommand(devfileCommand, null);
    // then
    assertEquals(command.getCommandLine(), "blah");
}
Also used : CommandImpl(org.eclipse.che.api.workspace.server.model.impl.devfile.CommandImpl) Command(org.eclipse.che.api.core.model.workspace.config.Command) ActionImpl(org.eclipse.che.api.workspace.server.model.impl.devfile.ActionImpl) Test(org.testng.annotations.Test)

Example 9 with Command

use of org.eclipse.che.api.core.model.workspace.config.Command in project che-server by eclipse-che.

the class CommandConverterTest method shouldAcceptActionWithReferenceContent.

@Test
public void shouldAcceptActionWithReferenceContent() throws Exception {
    // given
    CommandImpl devfileCommand = new CommandImpl();
    devfileCommand.setName("build");
    ActionImpl action = new ActionImpl();
    action.setType("exec");
    action.setReference("blah");
    action.setReferenceContent("content");
    devfileCommand.getActions().add(action);
    // when
    Command command = commandConverter.toWorkspaceCommand(devfileCommand, null);
    // then
    assertNull(command.getCommandLine());
    assertEquals("blah", command.getAttributes().get(Command.COMMAND_ACTION_REFERENCE_ATTRIBUTE));
    assertEquals("content", command.getAttributes().get(Command.COMMAND_ACTION_REFERENCE_CONTENT_ATTRIBUTE));
}
Also used : CommandImpl(org.eclipse.che.api.workspace.server.model.impl.devfile.CommandImpl) Command(org.eclipse.che.api.core.model.workspace.config.Command) ActionImpl(org.eclipse.che.api.workspace.server.model.impl.devfile.ActionImpl) Test(org.testng.annotations.Test)

Example 10 with Command

use of org.eclipse.che.api.core.model.workspace.config.Command in project che-server by eclipse-che.

the class PreviewUrlLinksVariableGenerator method genLinksMapAndUpdateCommands.

/**
 * Takes commands from given {@code workspace}. For all commands that have defined previewUrl,
 * creates variable name in defined format and final preview url link. It updates the command so
 * it's `previewUrl` attribute will contain variable in proper format. Method then returns map of
 * all preview url links with these variables as keys:
 *
 * <pre>
 *   links:
 *     "previewURl/run_123": http://your.domain
 *   command:
 *     attributes:
 *       previewUrl: '${previewUrl/run_123}/some/path'
 * </pre>
 *
 * @return map of all <commandPreviewUrlVariable, previewUrlFullLink>
 */
Map<String, String> genLinksMapAndUpdateCommands(WorkspaceImpl workspace, UriBuilder uriBuilder) {
    if (workspace == null || workspace.getRuntime() == null || workspace.getRuntime().getCommands() == null || uriBuilder == null) {
        return Collections.emptyMap();
    }
    Map<String, String> links = new HashMap<>();
    for (Command command : workspace.getRuntime().getCommands()) {
        Map<String, String> commandAttributes = command.getAttributes();
        if (command.getPreviewUrl() != null && commandAttributes != null && commandAttributes.containsKey(PREVIEW_URL_ATTRIBUTE)) {
            String previewUrlLinkValue = createPreviewUrlLinkValue(uriBuilder, command);
            String previewUrlLinkKey = createPreviewUrlLinkKey(command);
            links.put(previewUrlLinkKey, previewUrlLinkValue);
            commandAttributes.replace(PREVIEW_URL_ATTRIBUTE, formatAttributeValue(previewUrlLinkKey, command.getPreviewUrl().getPath()));
        }
    }
    return links;
}
Also used : HashMap(java.util.HashMap) Command(org.eclipse.che.api.core.model.workspace.config.Command)

Aggregations

Command (org.eclipse.che.api.core.model.workspace.config.Command)14 Test (org.testng.annotations.Test)10 HashMap (java.util.HashMap)6 ActionImpl (org.eclipse.che.api.workspace.server.model.impl.devfile.ActionImpl)6 CommandImpl (org.eclipse.che.api.workspace.server.model.impl.devfile.CommandImpl)6 ImmutableList (com.google.common.collect.ImmutableList)2 ImmutableMap (com.google.common.collect.ImmutableMap)2 ImmutableSet (com.google.common.collect.ImmutableSet)2 ConfigMap (io.fabric8.kubernetes.api.model.ConfigMap)2 ConfigMapBuilder (io.fabric8.kubernetes.api.model.ConfigMapBuilder)2 Container (io.fabric8.kubernetes.api.model.Container)2 ContainerPort (io.fabric8.kubernetes.api.model.ContainerPort)2 ContainerPortBuilder (io.fabric8.kubernetes.api.model.ContainerPortBuilder)2 HasMetadata (io.fabric8.kubernetes.api.model.HasMetadata)2 IntOrString (io.fabric8.kubernetes.api.model.IntOrString)2 IntOrStringBuilder (io.fabric8.kubernetes.api.model.IntOrStringBuilder)2 ObjectMeta (io.fabric8.kubernetes.api.model.ObjectMeta)2 Pod (io.fabric8.kubernetes.api.model.Pod)2 PodBuilder (io.fabric8.kubernetes.api.model.PodBuilder)2 Secret (io.fabric8.kubernetes.api.model.Secret)2