use of io.fabric8.maven.docker.config.CopyConfiguration.Entry in project fabric8 by jboss-fuse.
the class MQManager method createConfigDTOs.
public static List<MQBrokerConfigDTO> createConfigDTOs(MQService mqService, Profile profile) {
List<MQBrokerConfigDTO> answer = new ArrayList<MQBrokerConfigDTO>();
Map<String, Map<String, String>> configurations = profile.getConfigurations();
Set<Map.Entry<String, Map<String, String>>> entries = configurations.entrySet();
for (Map.Entry<String, Map<String, String>> entry : entries) {
String key = entry.getKey();
Map<String, String> configuration = entry.getValue();
if (isBrokerConfigPid(key)) {
String brokerName = getBrokerNameFromPID(key);
String profileId = profile.getId();
MQBrokerConfigDTO dto = new MQBrokerConfigDTO();
dto.setProfile(profileId);
dto.setBrokerName(brokerName);
String version = profile.getVersion();
dto.setVersion(version);
List<String> parentIds = profile.getParentIds();
if (parentIds.size() > 0) {
dto.setParentProfile(parentIds.get(0));
}
if (configuration != null) {
dto.setData(configuration.get(DATA));
dto.setConfigUrl(configuration.get(CONFIG_URL));
dto.setGroup(configuration.get(GROUP));
dto.setKind(BrokerKind.fromValue(configuration.get(KIND)));
dto.setMinimumInstances(Maps.integerValue(configuration, MINIMUM_INSTANCES));
dto.setNetworks(Maps.stringValues(configuration, NETWORKS));
dto.setNetworksUserName(configuration.get(NETWORK_USER_NAME));
dto.setNetworksPassword(configuration.get(NETWORK_PASSWORD));
dto.setReplicas(Maps.integerValue(configuration, REPLICAS));
for (Map.Entry<String, String> configurationEntry : configuration.entrySet()) {
if (configurationEntry.getKey().endsWith("-port")) {
dto.getPorts().put(configurationEntry.getKey().substring(0, configurationEntry.getKey().indexOf("-port")), configurationEntry.getValue());
}
}
}
answer.add(dto);
}
}
return answer;
}
use of io.fabric8.maven.docker.config.CopyConfiguration.Entry in project fabric8 by jboss-fuse.
the class MQManager method getActiveOrRequiredBrokerProfileMap.
private List<Profile> getActiveOrRequiredBrokerProfileMap(Version version, FabricRequirements requirements) {
IllegalArgumentAssertion.assertNotNull(fabricService, "fabricService");
List<Profile> answer = new ArrayList<Profile>();
if (version != null) {
ProfileService profileService = fabricService.adapt(ProfileService.class);
List<Profile> profiles = version.getProfiles();
for (Profile profile : profiles) {
String versionId = profile.getVersion();
String profileId = profile.getId();
if (!IGNORED_PROFILES.contains(profileId)) {
Profile overlay = profileService.getOverlayProfile(profile);
Map<String, Map<String, String>> configurations = overlay.getConfigurations();
Set<Map.Entry<String, Map<String, String>>> entries = configurations.entrySet();
for (Map.Entry<String, Map<String, String>> entry : entries) {
String key = entry.getKey();
if (isBrokerConfigPid(key)) {
answer.add(overlay);
}
}
}
}
}
return answer;
}
use of io.fabric8.maven.docker.config.CopyConfiguration.Entry 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();
}
use of io.fabric8.maven.docker.config.CopyConfiguration.Entry in project fabric8 by jboss-fuse.
the class SubsystemResolver method associateFragments.
private void associateFragments() {
SimpleFilter sf = createFilter(IDENTITY_NAMESPACE, "*", CAPABILITY_TYPE_ATTRIBUTE, TYPE_SUBSYSTEM);
for (Map.Entry<Resource, List<Wire>> entry : wiring.entrySet()) {
final Resource resource = entry.getKey();
final Requirement requirement = getSubsystemRequirement(resource);
if (isFragment(resource)) {
List<Wire> wires = entry.getValue();
final Resource host = wires.get(0).getProvider();
final Wire wire = findMatchingWire(sf, wiring.get(host));
if (wire != null) {
wires.add(new Wire() {
@Override
public Capability getCapability() {
return wire.getCapability();
}
@Override
public Requirement getRequirement() {
return requirement;
}
@Override
public Resource getProvider() {
return wire.getProvider();
}
@Override
public Resource getRequirer() {
return resource;
}
});
}
}
}
}
use of io.fabric8.maven.docker.config.CopyConfiguration.Entry in project fabric8 by jboss-fuse.
the class SubsystemResolver method prepare.
public void prepare(Collection<Feature> allFeatures, Map<String, Set<String>> requirements, Map<String, Set<BundleRevision>> system) throws Exception {
// Build subsystems on the fly
for (Map.Entry<String, Set<String>> entry : requirements.entrySet()) {
String[] parts = entry.getKey().split("/");
if (root == null) {
root = new Subsystem(parts[0]);
} else if (!root.getName().equals(parts[0])) {
throw new IllegalArgumentException("Can not use multiple roots: " + root.getName() + ", " + parts[0]);
}
Subsystem ss = root;
for (int i = 1; i < parts.length; i++) {
ss = getOrCreateChild(ss, parts[i]);
}
for (String requirement : entry.getValue()) {
ss.require(requirement);
}
}
if (root == null) {
return;
}
// Pre-resolve
root.build(allFeatures);
// Add system resources
BundleRevision sysBundleRev = null;
boolean hasEeCap = false;
for (Map.Entry<String, Set<BundleRevision>> entry : system.entrySet()) {
Subsystem ss = null;
String[] parts = entry.getKey().split("/");
String path = parts[0];
if (path.equals(root.getName())) {
ss = root;
}
for (int i = 1; ss != null && i < parts.length; i++) {
path += "/" + parts[i];
ss = ss.getChild(path);
}
if (ss != null) {
ResourceImpl dummy = new ResourceImpl("dummy", "dummy", Version.emptyVersion);
for (BundleRevision res : entry.getValue()) {
// We need to explicitely provide service capabilities for bundles
// We use both actual services and services declared from the headers
// TODO: use actual services
Map<String, String> headers = new DictionaryAsMap<>(res.getBundle().getHeaders());
Resource tmp = ResourceBuilder.build(res.getBundle().getLocation(), headers);
for (Capability cap : tmp.getCapabilities(ServiceNamespace.SERVICE_NAMESPACE)) {
dummy.addCapability(new CapabilityImpl(dummy, cap.getNamespace(), cap.getDirectives(), cap.getAttributes()));
}
ss.addSystemResource(res);
for (Capability cap : res.getCapabilities(null)) {
hasEeCap |= cap.getNamespace().equals(EXECUTION_ENVIRONMENT_NAMESPACE);
}
if (res.getBundle().getBundleId() == 0) {
sysBundleRev = res;
}
}
ss.addSystemResource(dummy);
}
}
// Under Equinox, the osgi.ee capabilities are not provided by the system bundle
if (!hasEeCap && sysBundleRev != null) {
String provideCaps = sysBundleRev.getBundle().getHeaders().get(PROVIDE_CAPABILITY);
environmentResource = new ResourceImpl("environment", "karaf.environment", Version.emptyVersion);
environmentResource.addCapabilities(ResourceBuilder.parseCapability(environmentResource, provideCaps));
root.addSystemResource(environmentResource);
}
}
Aggregations