use of io.fabric8.api.Container in project docker-maven-plugin by fabric8io.
the class StopMojo method getNetworksToRemove.
private Set<Network> getNetworksToRemove(QueryService queryService, PomLabel pomLabel) throws DockerAccessException {
if (!autoCreateCustomNetworks) {
return Collections.emptySet();
}
Set<Network> customNetworks = new HashSet<>();
Set<Network> networks = queryService.getNetworks();
for (ImageConfiguration image : getResolvedImages()) {
final NetworkConfig config = image.getRunConfiguration().getNetworkingConfig();
if (config.isCustomNetwork()) {
Network network = getNetworkByName(networks, config.getCustomNetwork());
if (network != null) {
customNetworks.add(network);
for (Container container : getContainersToStop(queryService, image)) {
if (!shouldStopContainer(container, pomLabel, image)) {
// it's sill in use don't collect it
customNetworks.remove(network);
}
}
}
}
}
return customNetworks;
}
use of io.fabric8.api.Container in project fabric8 by jboss-fuse.
the class ClusterListAction method printCluster.
protected void printCluster(String dir, PrintStream out) throws Exception {
// do we have any clusters at all?
if (exists(getCurator(), dir) == null) {
return;
}
List<String> children = getAllChildren(getCurator(), dir);
Map<String, Map<String, ClusterNode>> clusters = new TreeMap<String, Map<String, ClusterNode>>();
for (String child : children) {
byte[] data = getCurator().getData().forPath(child);
if (data != null && data.length > 0) {
String text = new String(data).trim();
if (!text.isEmpty()) {
String clusterName = getClusterName(dir, child);
Map<String, ClusterNode> cluster = clusters.get(clusterName);
if (cluster == null) {
cluster = new TreeMap<String, ClusterNode>();
clusters.put(clusterName, cluster);
}
ObjectMapper mapper = new ObjectMapper();
Map<String, Object> map = null;
try {
map = mapper.readValue(data, HashMap.class);
} catch (JsonParseException e) {
log.error("Error parsing JSON string: {}", text);
throw e;
}
ClusterNode node = null;
Object id = value(map, "id", "container");
if (id != null) {
Object agent = value(map, "container", "agent");
List services = (List) value(map, "services");
node = cluster.get(id);
if (node == null) {
node = new ClusterNode();
cluster.put(id.toString(), node);
}
if (services != null) {
if (!services.isEmpty()) {
for (Object service : services) {
node.services.add(getSubstitutedData(getCurator(), service.toString()));
}
node.masters.add(agent);
} else {
node.slaves.add(agent);
}
} else {
Object started = value(map, "started");
if (started == Boolean.TRUE) {
node.masters.add(agent);
} else {
node.slaves.add(agent);
}
}
}
}
}
}
TablePrinter table = new TablePrinter();
table.columns("cluster", "masters", "slaves", "services");
for (String clusterName : clusters.keySet()) {
Map<String, ClusterNode> nodes = clusters.get(clusterName);
table.row(clusterName, "", "", "", "");
for (String nodeName : nodes.keySet()) {
ClusterNode node = nodes.get(nodeName);
table.row(" " + nodeName, printList(node.masters), printList(node.slaves), printList(node.services));
}
}
table.print();
}
use of io.fabric8.api.Container in project fabric8 by jboss-fuse.
the class ContainerAddProfileAction method doExecute.
protected Object doExecute() throws Exception {
FabricValidations.validateContainerName(container);
FabricValidations.validateProfileNames(profiles);
Container cont = FabricCommand.getContainer(fabricService, container);
// we can add existing profiles
Profile[] profs = FabricCommand.getExistingProfiles(fabricService, cont.getVersion(), this.profiles);
cont.addProfiles(profs);
return null;
}
use of io.fabric8.api.Container in project fabric8 by jboss-fuse.
the class ContainerChangeProfileAction method doExecute.
protected Object doExecute() throws Exception {
FabricValidations.validateContainerName(container);
FabricValidations.validateProfileNames(profiles);
Container cont = FabricCommand.getContainer(fabricService, container);
// we can only change to existing profiles
Profile[] profs = FabricCommand.getExistingProfiles(fabricService, cont.getVersion(), profiles);
cont.setProfiles(profs);
return null;
}
use of io.fabric8.api.Container in project fabric8 by jboss-fuse.
the class ContainerConnectAction method executSshCommand.
/**
* Executes the ssh command.
*/
private void executSshCommand(CommandSession session, String username, String password, String hostname, String port, String cmd) throws Exception {
if (cmd == null || cmd.length() == 0) {
// ENTESB-6826: we're connecting in "shell" mode, which isn't wise when running from bin/client or ssh
if (session.getKeyboard().getClass().getName().equals("org.apache.sshd.common.channel.ChannelPipedInputStream")) {
System.err.println("When connecting to remote container using \"fabric:container-connect\" using ssh or bin/client, please establish SSH session (run bin/client) first and then run \"fabric:container-connect\"");
return;
}
}
// Create the client from prototype
SshClient client = createClient();
String agentSocket;
if (this.session.get(SshAgent.SSH_AUTHSOCKET_ENV_NAME) != null) {
agentSocket = this.session.get(SshAgent.SSH_AUTHSOCKET_ENV_NAME).toString();
client.getProperties().put(SshAgent.SSH_AUTHSOCKET_ENV_NAME, agentSocket);
}
try {
ConnectFuture future = client.connect(hostname, Integer.parseInt(port));
future.await();
sshSession = future.getSession();
Object oldIgnoreInterrupts = this.session.get(Console.IGNORE_INTERRUPTS);
this.session.put(Console.IGNORE_INTERRUPTS, Boolean.TRUE);
try {
System.out.println("Connected");
boolean authed = false;
if (!authed) {
if (username == null) {
throw new FabricAuthenticationException("No username specified.");
}
log.debug("Prompting user for password");
String pwd = password != null ? password : ShellUtils.readLine(session, "Password: ", true);
sshSession.authPassword(username, pwd);
int ret = sshSession.waitFor(ClientSession.WAIT_AUTH | ClientSession.CLOSED | ClientSession.AUTHED, 0);
if ((ret & ClientSession.AUTHED) == 0) {
System.err.println("Password authentication failed");
} else {
authed = true;
}
}
if (!authed) {
throw new FabricAuthenticationException("Failed to authenticate.");
}
// If user is authenticated credentials to session for future use.
ShellUtils.storeFabricCredentials(session, username, password);
ClientChannel channel;
if (cmd != null && cmd.length() > 0) {
channel = sshSession.createChannel("exec", cmd);
channel.setIn(new ByteArrayInputStream(new byte[0]));
} else {
channel = sshSession.createChannel("shell");
channel.setIn(new NoCloseInputStream(System.in));
((ChannelShell) channel).setPtyColumns(ShellUtils.getTermWidth(session));
((ChannelShell) channel).setupSensibleDefaultPty();
((ChannelShell) channel).setAgentForwarding(true);
}
channel.setOut(new NoCloseOutputStream(System.out));
channel.setErr(new NoCloseOutputStream(System.err));
channel.open();
channel.waitFor(ClientChannel.CLOSED, 0);
} finally {
session.put(Console.IGNORE_INTERRUPTS, oldIgnoreInterrupts);
sshSession.close(false);
}
} finally {
client.stop();
}
}
Aggregations