Search in sources :

Example 71 with Container

use of io.fabric8.maven.docker.model.Container in project fabric8 by jboss-fuse.

the class MQManager method loadBrokerStatus.

@Override
public List<MQBrokerStatusDTO> loadBrokerStatus(String versionId) throws Exception {
    FabricRequirements requirements = fabricService.getRequirements();
    List<MQBrokerStatusDTO> answer = new ArrayList<MQBrokerStatusDTO>();
    Version version = versionId == null ? fabricService.getDefaultVersion() : profileService.getVersion(versionId);
    Container[] containers = fabricService.getContainers();
    List<Profile> values = getActiveOrRequiredBrokerProfileMap(version, requirements);
    for (Profile profile : values) {
        List<MQBrokerConfigDTO> list = createConfigDTOs(mqService, profile);
        for (MQBrokerConfigDTO configDTO : list) {
            ProfileRequirements profileRequirements = requirements.findProfileRequirements(profile.getId());
            int count = 0;
            for (Container container : containers) {
                if (Containers.containerHasProfile(container, profile)) {
                    MQBrokerStatusDTO status = createStatusDTO(profile, configDTO, profileRequirements, container);
                    count++;
                    answer.add(status);
                }
            }
            // if there are no containers yet, lets create a record anyway
            if (count == 0) {
                MQBrokerStatusDTO status = createStatusDTO(profile, configDTO, profileRequirements, null);
                answer.add(status);
            }
        }
    }
    addMasterSlaveStatus(answer);
    return answer;
}
Also used : ProfileRequirements(io.fabric8.api.ProfileRequirements) ArrayList(java.util.ArrayList) Profile(io.fabric8.api.Profile) MQBrokerStatusDTO(io.fabric8.api.jmx.MQBrokerStatusDTO) MQBrokerConfigDTO(io.fabric8.api.jmx.MQBrokerConfigDTO) Container(io.fabric8.api.Container) Version(io.fabric8.api.Version) FabricRequirements(io.fabric8.api.FabricRequirements)

Example 72 with Container

use of io.fabric8.maven.docker.model.Container in project fabric8 by jboss-fuse.

the class MQManager method assignProfileToContainers.

public static void assignProfileToContainers(FabricService fabricService, Profile profile, String[] assignContainers) {
    for (String containerName : assignContainers) {
        try {
            Container container = fabricService.getContainer(containerName);
            if (container == null) {
                LOG.warn("Failed to assign profile to " + containerName + ": profile doesn't exists");
            } else {
                Set<Profile> profiles = new HashSet<Profile>(Arrays.asList(container.getProfiles()));
                profiles.add(profile);
                container.setProfiles(profiles.toArray(new Profile[profiles.size()]));
                LOG.info("Profile successfully assigned to " + containerName);
            }
        } catch (Exception e) {
            LOG.warn("Failed to assign profile to " + containerName + ": " + e.getMessage());
        }
    }
}
Also used : Container(io.fabric8.api.Container) Profile(io.fabric8.api.Profile) MalformedObjectNameException(javax.management.MalformedObjectNameException) IOException(java.io.IOException) HashSet(java.util.HashSet)

Example 73 with Container

use of io.fabric8.maven.docker.model.Container in project fabric8 by jboss-fuse.

the class ContainerProviderUtils method buildInstallAndStartScript.

/**
 * Creates a shell script for installing and starting up a container.
 *
 * @param options
 * @return
 * @throws MalformedURLException
 */
public static String buildInstallAndStartScript(String name, CreateRemoteContainerOptions options) throws MalformedURLException, URISyntaxException {
    String distFilename = String.format(DISTNAME_PATTERN, "karaf", FabricConstants.FABRIC_VERSION);
    String systemDistPath = String.format(SYSTEM_DIST, "karaf", FabricConstants.FABRIC_VERSION);
    StringBuilder sb = new StringBuilder();
    sb.append("#!/bin/bash").append("\n");
    if (logger.isTraceEnabled()) {
        sb.append("set -x ").append("\n");
        sb.append("export PS4='+(${BASH_SOURCE}:${LINENO}): ${FUNCNAME[0]:+${FUNCNAME[0]}(): }' ").append("\n");
    }
    // Export environmental variables
    HashMap<String, String> environmentalVariables = new HashMap<>();
    if (options.getEnvironmentalVariables() != null) {
        environmentalVariables.putAll(options.getEnvironmentalVariables());
    }
    for (Map.Entry<String, String> entry : environmentalVariables.entrySet()) {
        sb.append("export ").append(entry.getKey()).append("=\"").append(entry.getValue()).append("\"").append("\n");
    }
    sb.append(RUN_FUNCTION).append("\n");
    sb.append(SUDO_N_FUNCTION).append("\n");
    sb.append(DOWNLOAD_FUNCTION).append("\n");
    sb.append(MAVEN_DOWNLOAD_FUNCTION).append("\n");
    sb.append(UPDATE_PKGS).append("\n");
    sb.append(INSTALL_CURL).append("\n");
    sb.append(INSTALL_UNZIP).append("\n");
    sb.append(INSTALL_JDK).append("\n");
    sb.append(VALIDATE_REQUIREMENTS).append("\n");
    sb.append(EXIT_IF_NOT_EXISTS).append("\n");
    sb.append(COPY_NODE_METADATA).append("\n");
    sb.append(KARAF_CHECK).append("\n");
    sb.append(REPLACE_IN_FILE).append("\n");
    sb.append(REPLACE_PROPERTY_VALUE).append("\n");
    sb.append(UNCOMMENT_LINE).append("\n");
    sb.append(CONFIGURE_HOSTNAMES).append("\n");
    sb.append(FIND_FREE_PORT).append("\n");
    sb.append(WAIT_FOR_PORT).append("\n");
    sb.append(EXTRACT_ZIP).append("\n");
    sb.append(GENERATE_SSH_KEYS).append("\n");
    sb.append("run mkdir -p ").append(options.getPath()).append("\n");
    sb.append("run cd ").append(options.getPath()).append("\n");
    sb.append("run mkdir -p ").append(name).append("\n");
    sb.append("run cd ").append(name).append("\n");
    // We need admin access to be able to install curl & java.
    if (options.isAdminAccess()) {
        // This is not really needed.
        // Its just here as a silly workaround for some cases which fail to get the first thing installed.
        sb.append("update_pkgs").append("\n");
        sb.append("install_openjdk").append("\n");
        sb.append("install_curl").append("\n");
        sb.append("install_unzip").append("\n");
    }
    sb.append("validate_requirements").append("\n");
    List<String> fallbackRepositories = new ArrayList<String>();
    List<String> optionsRepos = options.getFallbackRepositories();
    if (optionsRepos != null) {
        fallbackRepositories.addAll(optionsRepos);
    }
    extractZipIntoDirectory(sb, options.getProxyUri(), "io.fabric8", "fabric8-karaf", FabricConstants.FABRIC_VERSION, fallbackRepositories);
    sb.append("run cd `").append(FIRST_FABRIC_DIRECTORY).append("`\n");
    sb.append("run mkdir -p ").append(systemDistPath).append("\n");
    sb.append("run cp ../").append(distFilename).append(" ").append(systemDistPath).append("/\n");
    sb.append("run rm ../").append(distFilename).append("\n");
    sb.append("run chmod +x bin/*").append("\n");
    List<String> lines = new ArrayList<String>();
    String globalResolver = options.getResolver() != null ? options.getResolver() : ZkDefs.DEFAULT_RESOLVER;
    lines.add(ZkDefs.GLOBAL_RESOLVER_PROPERTY + "=" + globalResolver);
    if (options.getBindAddress() != null && !options.getBindAddress().isEmpty()) {
        lines.add(ZkDefs.BIND_ADDRESS + "=" + options.getBindAddress());
    }
    if (options.getManualIp() != null && !options.getManualIp().isEmpty()) {
        lines.add(ZkDefs.MANUAL_IP + "=" + options.getManualIp());
    }
    appendFile(sb, "etc/system.properties", lines);
    replacePropertyValue(sb, "etc/system.properties", "karaf.name", name);
    String dataStoreFile = "etc/" + Constants.DATASTORE_PID + ".cfg";
    for (Map.Entry<String, String> entry : options.getDataStoreProperties().entrySet()) {
        String key = entry.getKey();
        String value = entry.getValue();
        replacePropertyValue(sb, dataStoreFile, key, value);
        uncomment_line(sb, dataStoreFile, key);
    }
    // Apply port range
    sb.append("BIND_ADDRESS=").append(options.getBindAddress() != null && !options.getBindAddress().isEmpty() ? options.getBindAddress() : "0.0.0.0").append("\n");
    sb.append("SSH_PORT=").append("\"").append("`find_free_port ").append(Ports.mapPortToRange(DEFAULT_SSH_PORT, options.getMinimumPort(), options.getMaximumPort())).append(" ").append(options.getMaximumPort()).append("`\"").append("\n");
    sb.append("RMI_REGISTRY_PORT=").append("\"").append("`find_free_port ").append(Ports.mapPortToRange(DEFAULT_RMI_REGISTRY_PORT, options.getMinimumPort(), options.getMaximumPort())).append(" ").append(options.getMaximumPort()).append("`\"").append("\n");
    sb.append("RMI_SERVER_PORT=").append("\"").append("`find_free_port ").append(Ports.mapPortToRange(DEFAULT_RMI_SERVER_PORT, options.getMinimumPort(), options.getMaximumPort())).append(" ").append(options.getMaximumPort()).append("`\"").append("\n");
    sb.append("JMX_SERVER_URL=\"").append("service:jmx:rmi:\\/\\/${BIND_ADDRESS}:${RMI_SERVER_PORT}\\/jndi\\/rmi:\\/\\/${BIND_ADDRESS}:${RMI_REGISTRY_PORT}\\/karaf-").append(name).append("\"\n");
    sb.append("HTTP_PORT=").append("\"").append("`find_free_port ").append(Ports.mapPortToRange(DEFAULT_HTTP_PORT, options.getMinimumPort(), options.getMaximumPort())).append(" ").append(options.getMaximumPort()).append("`\"").append("\n");
    replacePropertyValue(sb, "etc/org.apache.karaf.shell.cfg", "sshPort", "$SSH_PORT");
    replacePropertyValue(sb, "etc/org.apache.karaf.shell.cfg", "sshHost", "$BIND_ADDRESS");
    replacePropertyValue(sb, "etc/org.apache.karaf.management.cfg", "rmiRegistryPort", "$RMI_REGISTRY_PORT");
    replacePropertyValue(sb, "etc/org.apache.karaf.management.cfg", "rmiServerPort", "$RMI_SERVER_PORT");
    replacePropertyValue(sb, "etc/org.apache.karaf.management.cfg", "rmiServerHost", "$BIND_ADDRESS");
    replacePropertyValue(sb, "etc/org.apache.karaf.management.cfg", "rmiRegistryHost", "$BIND_ADDRESS");
    // ENTESB-2733: do not change serviceUrl, let's leave it with placeholders
    // replacePropertyValue(sb, "etc/org.apache.karaf.management.cfg", "serviceUrl", "$JMX_SERVER_URL");
    replacePropertyValue(sb, "etc/org.ops4j.pax.web.cfg", "org.osgi.service.http.port", "$HTTP_PORT");
    replaceLineInFile(sb, "etc/jetty.xml", String.valueOf(DEFAULT_HTTP_PORT), "$HTTP_PORT");
    appendFile(sb, "etc/system.properties", Arrays.asList(ZkDefs.MINIMUM_PORT + "=" + options.getMinimumPort()));
    appendFile(sb, "etc/system.properties", Arrays.asList(ZkDefs.MAXIMUM_PORT + "=" + options.getMaximumPort()));
    appendFile(sb, "etc/system.properties", Arrays.asList("\n"));
    // Read all system properties
    for (Map.Entry<String, Properties> entry : options.getSystemProperties().entrySet()) {
        Properties sysprops = entry.getValue();
        for (Map.Entry syspropEntry : sysprops.entrySet()) {
            Object type = syspropEntry.getKey();
            Object value = syspropEntry.getValue();
            appendFile(sb, "etc/system.properties", Arrays.asList(type + "=" + value));
        }
    }
    // TODO: Be simple & move all of the code below under system properties MAP.
    if (options.getPreferredAddress() != null) {
        appendFile(sb, "etc/system.properties", Arrays.asList(HostUtils.PREFERED_ADDRESS_PROPERTY_NAME + "=" + options.getPreferredAddress()));
    }
    String zkPasswordEncode = System.getProperty("zookeeper.password.encode", "true");
    if (options.isEnsembleServer()) {
        appendFile(sb, "etc/system.properties", Arrays.asList("zookeeper.password = " + options.getZookeeperPassword()));
        appendFile(sb, "etc/system.properties", Arrays.asList("zookeeper.password.encode = " + zkPasswordEncode));
        appendFile(sb, "etc/system.properties", Arrays.asList(CreateEnsembleOptions.ENSEMBLE_AUTOSTART + "=true"));
        appendFile(sb, "etc/system.properties", Arrays.asList(CreateEnsembleOptions.AGENT_AUTOSTART + "=true"));
        appendFile(sb, "etc/system.properties", Arrays.asList(CreateEnsembleOptions.PROFILES_AUTOIMPORT_PATH + "=${runtime.home}/fabric/import/"));
        if (options.getUsers() != null) {
            appendFile(sb, "etc/users.properties", Arrays.asList("\n"));
            for (Map.Entry<String, String> entry : options.getUsers().entrySet()) {
                appendFile(sb, "etc/users.properties", Arrays.asList(entry.getKey() + "=" + entry.getValue()));
            }
        }
    } else if (options.getZookeeperUrl() != null) {
        appendFile(sb, "etc/system.properties", Arrays.asList("zookeeper.url = " + options.getZookeeperUrl()));
        appendFile(sb, "etc/system.properties", Arrays.asList("zookeeper.password = " + options.getZookeeperPassword()));
        appendFile(sb, "etc/system.properties", Arrays.asList("zookeeper.password.encode = " + zkPasswordEncode));
        appendFile(sb, "etc/system.properties", Arrays.asList(CreateEnsembleOptions.AGENT_AUTOSTART + "=true"));
        appendToLineInFile(sb, "etc/org.apache.karaf.features.cfg", "featuresBoot=", "fabric-agent,fabric-git,");
    }
    // Add the proxyURI to the list of repositories
    if (options.getProxyUri() != null) {
        appendToLineInFile(sb, "etc/org.ops4j.pax.url.mvn.cfg", "repositories=", options.getProxyUri().toString() + ",");
    }
    // Just for ensemble servers we want to copy their creation metadata for import.
    if (options.isEnsembleServer()) {
        CreateContainerMetadata metadata = options.getMetadataMap().get(name);
        if (metadata != null) {
            byte[] metadataPayload = ObjectUtils.toBytes(metadata);
            if (metadataPayload != null && metadataPayload.length > 0) {
                sb.append("copy_node_metadata ").append(name).append(" ").append(new String(Base64Encoder.encode(metadataPayload))).append("\n");
            }
        }
    }
    sb.append("generate_ssh_keys").append("\n");
    sb.append("configure_hostnames").append(" ").append(options.getHostNameContext()).append("\n");
    String jvmOptions = options.getJvmOpts();
    if (jvmOptions == null) {
        jvmOptions = "-XX:+UnlockDiagnosticVMOptions -XX:+UnsyncloadClass";
    } else if (!jvmOptions.contains("-XX:+UnlockDiagnosticVMOptions -XX:+UnsyncloadClass")) {
        jvmOptions = jvmOptions + " -XX:+UnlockDiagnosticVMOptions -XX:+UnsyncloadClass";
    }
    if (!jvmOptions.contains("-server")) {
        jvmOptions = jvmOptions + " -server";
    }
    environmentalVariables.put("JAVA_OPTS", jvmOptions);
    ArrayList<String> setenv = new ArrayList<String>();
    for (Map.Entry<String, String> entry : environmentalVariables.entrySet()) {
        setenv.add("export " + entry.getKey() + "=\"" + entry.getValue() + "\"\n");
    }
    writeFile(sb, "bin/setenv", setenv);
    sb.append("nohup bin/start &").append("\n");
    sb.append("karaf_check `pwd`").append("\n");
    sb.append("wait_for_port $SSH_PORT").append("\n");
    sb.append("wait_for_port $RMI_REGISTRY_PORT").append("\n");
    return sb.toString();
}
Also used : HashMap(java.util.HashMap) CreateContainerMetadata(io.fabric8.api.CreateContainerMetadata) ArrayList(java.util.ArrayList) Properties(java.util.Properties) HashMap(java.util.HashMap) Map(java.util.Map)

Example 74 with Container

use of io.fabric8.maven.docker.model.Container in project fabric8 by jboss-fuse.

the class ContainerLifecycleCommandsTest method testStopSingleContainer.

@Test
public void testStopSingleContainer() throws Exception {
    containers("c1");
    ContainerImpl c1 = newContainer("c1");
    expect(this.fabricService.adapt(CuratorFramework.class)).andReturn(this.curatorFramework).anyTimes();
    expect(this.fabricService.getContainers()).andReturn(new Container[] { c1 });
    this.fabricService.stopContainer(c1, false);
    replay(this.fabricService, this.commandSession);
    this.stop.execute(this.commandSession);
    verify(this.fabricService);
}
Also used : CuratorFramework(org.apache.curator.framework.CuratorFramework) ContainerImpl(io.fabric8.internal.ContainerImpl) Test(org.junit.Test)

Example 75 with Container

use of io.fabric8.maven.docker.model.Container in project fabric8 by jboss-fuse.

the class ContainerLifecycleCommandsTest method testStopSomeMatchingContainers.

@Test
public void testStopSomeMatchingContainers() throws Exception {
    containers("c1", "c2");
    ContainerImpl c1 = newContainer("c1");
    expect(this.fabricService.adapt(CuratorFramework.class)).andReturn(this.curatorFramework);
    expect(this.fabricService.getContainers()).andReturn(new Container[] { c1 }).once();
    this.fabricService.stopContainer(c1, false);
    expect(this.fabricService.adapt(CuratorFramework.class)).andReturn(this.curatorFramework);
    expect(this.fabricService.getContainers()).andReturn(new Container[] { c1 }).once();
    replay(this.fabricService, this.commandSession);
    try {
        this.stop.execute(this.commandSession);
        fail("Should throw FabricException");
    } catch (IllegalArgumentException e) {
        assertThat(e.getMessage().contains(" c2 "), is(true));
    }
    verify(this.fabricService);
}
Also used : Container(io.fabric8.api.Container) ContainerImpl(io.fabric8.internal.ContainerImpl) Test(org.junit.Test)

Aggregations

Container (io.fabric8.api.Container)139 Test (org.junit.Test)75 FabricService (io.fabric8.api.FabricService)56 ArrayList (java.util.ArrayList)39 Container (io.fabric8.kubernetes.api.model.Container)38 IOException (java.io.IOException)38 Profile (io.fabric8.api.Profile)37 HashMap (java.util.HashMap)34 Map (java.util.Map)30 FabricException (io.fabric8.api.FabricException)27 BundleContext (org.osgi.framework.BundleContext)24 Version (io.fabric8.api.Version)23 File (java.io.File)23 HashSet (java.util.HashSet)20 LinkedList (java.util.LinkedList)17 PodSpec (io.fabric8.kubernetes.api.model.PodSpec)16 ImageConfiguration (io.fabric8.maven.docker.config.ImageConfiguration)16 CreateContainerMetadata (io.fabric8.api.CreateContainerMetadata)15 Pod (io.fabric8.kubernetes.api.model.Pod)12 List (java.util.List)12