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;
}
});
}
};
}
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));
}
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);
}
}
}
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();
}
}
}
}
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();
}
}
}
}
Aggregations