Search in sources :

Example 6 with Stop

use of io.fabric8.arquillian.kubernetes.event.Stop in project fabric8 by jboss-fuse.

the class ChildContainerProvider method createKarafContainerController.

private ChildContainerController createKarafContainerController() {
    return new ChildContainerController() {

        @Override
        public CreateChildContainerMetadata create(final CreateChildContainerOptions options, final CreationStateListener listener) {
            final Container parent = fabricService.get().getContainer(options.getParent());
            ContainerTemplate containerTemplate = new ContainerTemplate(parent, options.getJmxUser(), options.getJmxPassword(), false);
            return containerTemplate.execute(new ContainerTemplate.AdminServiceCallback<CreateChildContainerMetadata>() {

                public CreateChildContainerMetadata doWithAdminService(AdminServiceMBean adminService) throws Exception {
                    return doCreateKaraf(adminService, options, listener, parent);
                }
            });
        }

        @Override
        public void start(final Container container) {
            getContainerTemplateForChild(container).execute(new ContainerTemplate.AdminServiceCallback<Object>() {

                public Object doWithAdminService(AdminServiceMBean adminService) throws Exception {
                    // update jvm options if they have have changed
                    CreateChildContainerMetadata metadata = (CreateChildContainerMetadata) container.getMetadata();
                    CreateChildContainerOptions createOptions = metadata.getCreateOptions();
                    String jvmOpts = createOptions.getJvmOpts();
                    TabularData instances = adminService.getInstances();
                    Collection<CompositeDataSupport> values = (Collection<CompositeDataSupport>) instances.values();
                    for (CompositeDataSupport o : values) {
                        if (container.getId().equals(o.get("Name"))) {
                            if (o.containsKey("JavaOpts")) {
                                String oldJavaOpts = (String) o.get("JavaOpts");
                                StringBuilder stringBuilder = ChildContainerProvider.buildJvmOpts(createOptions, fabricService.get());
                                String extendendJvmOpts = stringBuilder.toString();
                                if (jvmOpts != null && !extendendJvmOpts.equals(oldJavaOpts)) {
                                    adminService.changeJavaOpts(container.getId(), extendendJvmOpts);
                                }
                            }
                            break;
                        }
                    }
                    adminService.startInstance(container.getId(), null);
                    return null;
                }
            });
        }

        @Override
        public void stop(final Container container) {
            getContainerTemplateForChild(container).execute(new ContainerTemplate.AdminServiceCallback<Object>() {

                public Object doWithAdminService(AdminServiceMBean adminService) throws Exception {
                    String prevProvisionResult = container.getProvisionResult();
                    container.setProvisionResult(Container.PROVISION_STOPPING);
                    try {
                        adminService.stopInstance(container.getId());
                        container.setProvisionResult(Container.PROVISION_STOPPED);
                    } catch (Throwable t) {
                        container.setProvisionResult(prevProvisionResult);
                        LOG.error("Failed to stop container: " + container.getId(), t);
                        throw t;
                    }
                    return null;
                }
            });
        }

        @Override
        public void destroy(final Container container) {
            getContainerTemplateForChild(container).execute(new ContainerTemplate.AdminServiceCallback<Object>() {

                public Object doWithAdminService(AdminServiceMBean adminService) throws Exception {
                    adminService.destroyInstance(container.getId());
                    return null;
                }
            });
        }
    };
}
Also used : CompositeDataSupport(javax.management.openmbean.CompositeDataSupport) AdminServiceMBean(org.apache.karaf.admin.management.AdminServiceMBean) TabularData(javax.management.openmbean.TabularData) ContainerTemplate(io.fabric8.service.ContainerTemplate) Collection(java.util.Collection)

Example 7 with Stop

use of io.fabric8.arquillian.kubernetes.event.Stop in project fabric8 by jboss-fuse.

the class ContainerLifecycleCommandsTest method testStopGlobMatchingContainers.

@Test
public void testStopGlobMatchingContainers() throws Exception {
    // should stop c2 once
    // should not touch d1
    containers("c*", "c2");
    ContainerImpl c1 = newContainer("c1");
    ContainerImpl c2 = newContainer("c2");
    ContainerImpl c3 = newContainer("c3");
    ContainerImpl d1 = newContainer("d1");
    expect(this.fabricService.getContainers()).andReturn(new Container[] { c1, c3, c2, d1 }).once();
    expect(this.fabricService.adapt(CuratorFramework.class)).andReturn(this.curatorFramework);
    expect(this.fabricService.getContainers()).andReturn(new Container[] { c1, c3, c2, d1 }).once();
    this.fabricService.stopContainer(c1, false);
    expect(this.fabricService.adapt(CuratorFramework.class)).andReturn(this.curatorFramework);
    expect(this.fabricService.getContainers()).andReturn(new Container[] { c1, c3, c2, d1 }).once();
    this.fabricService.stopContainer(c3, false);
    expect(this.fabricService.adapt(CuratorFramework.class)).andReturn(this.curatorFramework);
    expect(this.fabricService.getContainers()).andReturn(new Container[] { c1, c3, c2, d1 }).once();
    this.fabricService.stopContainer(c2, false);
    replay(this.fabricService, this.commandSession);
    this.stop.execute(this.commandSession);
    verify(this.fabricService);
    String result = new String(this.result.toByteArray());
    assertThat(result.contains("Container 'c1' stopped successfully."), is(true));
    assertThat(result.contains("Container 'c2' stopped successfully."), is(true));
    assertThat(result.contains("Container 'c3' stopped successfully."), is(true));
}
Also used : Container(io.fabric8.api.Container) ContainerImpl(io.fabric8.internal.ContainerImpl) Test(org.junit.Test)

Example 8 with Stop

use of io.fabric8.arquillian.kubernetes.event.Stop in project fabric8 by jboss-fuse.

the class JcloudsContainerProvider method stop.

@Override
public void stop(Container container) {
    assertValid();
    CreateContainerMetadata metadata = container.getMetadata();
    if (!(metadata instanceof CreateJCloudsContainerMetadata)) {
        throw new IllegalStateException("Container doesn't have valid create container metadata type");
    } else {
        CreateJCloudsContainerMetadata jCloudsContainerMetadata = (CreateJCloudsContainerMetadata) metadata;
        CreateJCloudsContainerOptions options = jCloudsContainerMetadata.getCreateOptions();
        try {
            ComputeService computeService = getOrCreateComputeService(options);
            String nodeId = jCloudsContainerMetadata.getNodeId();
            Optional<RunScriptOptions> runScriptOptions = ToRunScriptOptions.withComputeService(computeService).apply(jCloudsContainerMetadata);
            String script = buildStopScript(container.getId(), options);
            ExecResponse response;
            container.setProvisionResult(Container.PROVISION_STOPPING);
            if (runScriptOptions.isPresent()) {
                response = computeService.runScriptOnNode(nodeId, script, runScriptOptions.get());
            } else {
                response = computeService.runScriptOnNode(nodeId, script);
            }
            if (response == null) {
                jCloudsContainerMetadata.setFailure(new Exception("No response received for fabric install script."));
            } else if (response.getOutput() != null && response.getOutput().contains(ContainerProviderUtils.FAILURE_PREFIX)) {
                jCloudsContainerMetadata.setFailure(new Exception(ContainerProviderUtils.parseScriptFailure(response.getOutput())));
            }
        } catch (Throwable t) {
            container.setProvisionResult(Container.PROVISION_STOPPED);
            jCloudsContainerMetadata.setFailure(t);
        }
    }
}
Also used : RunScriptOptions(org.jclouds.compute.options.RunScriptOptions) ToRunScriptOptions(io.fabric8.service.jclouds.functions.ToRunScriptOptions) ExecResponse(org.jclouds.compute.domain.ExecResponse) CreateContainerMetadata(io.fabric8.api.CreateContainerMetadata) ComputeService(org.jclouds.compute.ComputeService) URISyntaxException(java.net.URISyntaxException) RunNodesException(org.jclouds.compute.RunNodesException) MalformedURLException(java.net.MalformedURLException)

Example 9 with Stop

use of io.fabric8.arquillian.kubernetes.event.Stop in project fabric8 by jboss-fuse.

the class SshContainerProvider method destroy.

@Override
public void destroy(Container container) {
    CreateContainerMetadata metadata = container.getMetadata();
    if (!(metadata instanceof CreateSshContainerMetadata)) {
        throw new IllegalStateException("Container doesn't have valid create container metadata type");
    } else {
        CreateSshContainerMetadata sshContainerMetadata = (CreateSshContainerMetadata) metadata;
        CreateSshContainerOptions options = sshContainerMetadata.getCreateOptions();
        Session session = null;
        String prevProvisionResult = container.getProvisionResult();
        try {
            String script = buildUninstallScript(container.getId(), options);
            session = createSession(options);
            container.setProvisionResult(Container.PROVISION_DELETING);
            runScriptOnHost(session, script);
        } catch (Throwable t) {
            LOGGER.error("Failed to stop container: " + container.getId(), t);
            throw new FabricException(t);
        } finally {
            if (session != null) {
                session.disconnect();
            }
        }
    }
}
Also used : CreateContainerMetadata(io.fabric8.api.CreateContainerMetadata) FabricException(io.fabric8.api.FabricException) Session(com.jcraft.jsch.Session)

Example 10 with Stop

use of io.fabric8.arquillian.kubernetes.event.Stop in project fabric8 by jboss-fuse.

the class SshContainerProvider method stop.

@Override
public void stop(Container container) {
    CreateContainerMetadata metadata = container.getMetadata();
    if (!(metadata instanceof CreateSshContainerMetadata)) {
        throw new IllegalStateException("Container doesn't have valid create container metadata type");
    } else {
        CreateSshContainerMetadata sshContainerMetadata = (CreateSshContainerMetadata) metadata;
        CreateSshContainerOptions options = sshContainerMetadata.getCreateOptions();
        Session session = null;
        try {
            String script = buildStopScript(container.getId(), options);
            session = createSession(options);
            container.setProvisionResult(Container.PROVISION_STOPPING);
            runScriptOnHost(session, script);
            container.setProvisionResult(Container.PROVISION_STOPPED);
        } catch (Throwable t) {
            LOGGER.error("Failed to stop container: " + container.getId(), t);
            throw new FabricException(t);
        } finally {
            if (session != null) {
                session.disconnect();
            }
        }
    }
}
Also used : CreateContainerMetadata(io.fabric8.api.CreateContainerMetadata) FabricException(io.fabric8.api.FabricException) Session(com.jcraft.jsch.Session)

Aggregations

Container (io.fabric8.api.Container)7 FabricService (io.fabric8.api.FabricService)7 IOException (java.io.IOException)7 File (java.io.File)6 Test (org.junit.Test)6 ArrayList (java.util.ArrayList)5 BundleException (org.osgi.framework.BundleException)5 CreateContainerMetadata (io.fabric8.api.CreateContainerMetadata)4 URISyntaxException (java.net.URISyntaxException)4 Bundle (org.osgi.framework.Bundle)4 FabricException (io.fabric8.api.FabricException)3 HashMap (java.util.HashMap)3 Session (com.jcraft.jsch.Session)2 Downloader (io.fabric8.agent.download.Downloader)2 StreamProvider (io.fabric8.agent.download.StreamProvider)2 Watch (io.fabric8.kubernetes.client.Watch)2 Watcher (io.fabric8.kubernetes.client.Watcher)2 MavenResolver (io.fabric8.maven.MavenResolver)2 Parser (io.fabric8.maven.util.Parser)2 BundleUpdate (io.fabric8.patch.management.BundleUpdate)2