Search in sources :

Example 16 with Config

use of io.fabric8.docker.client.Config in project fabric8 by jboss-fuse.

the class FeatureConfigInstaller method installFeatureConfigs.

void installFeatureConfigs(Feature feature) throws IOException, InvalidSyntaxException {
    for (Config config : feature.getConfigurations()) {
        Properties props = config.getProperties();
        String[] split = parsePid(config.getName());
        // see http://felix.apache.org/documentation/subprojects/apache-felix-file-install.html#configurations
        String pid = split[0];
        String subname = split[1];
        Configuration cfg = findExistingConfiguration(configAdmin, pid, subname);
        if (cfg == null) {
            Dictionary<String, String> cfgProps = convertToDict(props);
            cfg = createConfiguration(configAdmin, pid, subname);
            String key = createConfigurationKey(pid, subname);
            cfgProps.put(CONFIG_KEY, key);
            cfg.update(cfgProps);
        } else if (config.isAppend()) {
            Dictionary<String, Object> properties = cfg.getProperties();
            // Ignore already managed configurations
            String fabricManagedPid = (String) properties.get(FABRIC_ZOOKEEPER_PID);
            if (Strings.isNotBlank(fabricManagedPid)) {
                continue;
            }
            for (Enumeration<String> propKeys = properties.keys(); propKeys.hasMoreElements(); ) {
                String key = propKeys.nextElement();
                // remove existing entry, since it's about appending.
                if (props.containsKey(key)) {
                    props.remove(key);
                }
            }
            if (props.size() > 0) {
                // convert props to dictionary
                Dictionary<String, String> cfgProps = convertToDict(props);
                cfg.update(cfgProps);
            }
        }
    }
    for (ConfigFile configFile : feature.getConfigurationFiles()) {
        installConfigurationFile(configFile.getLocation(), configFile.getFinalname(), configFile.isOverride());
    }
}
Also used : Dictionary(java.util.Dictionary) Enumeration(java.util.Enumeration) Configuration(org.osgi.service.cm.Configuration) ConfigFile(io.fabric8.agent.model.ConfigFile) Config(io.fabric8.agent.model.Config) Properties(java.util.Properties)

Example 17 with Config

use of io.fabric8.docker.client.Config in project fabric8 by jboss-fuse.

the class DeployToProfileMojo method execute.

@Override
public void execute() throws MojoExecutionException, MojoFailureException {
    if (isIgnoreProject())
        return;
    try {
        ProjectRequirements requirements = new ProjectRequirements();
        if (isIncludeArtifact()) {
            DependencyDTO rootDependency = loadRootDependency();
            requirements.setRootDependency(rootDependency);
        }
        configureRequirements(requirements);
        // validate requirements
        if (requirements.getProfileId() != null) {
            // make sure the profile id is a valid name
            FabricValidations.validateProfileName(requirements.getProfileId());
        }
        boolean newUserAdded = false;
        fabricServer = mavenSettings.getServer(serverId);
        // we may have username and password from jolokiaUrl
        String jolokiaUsername = null;
        String jolokiaPassword = null;
        try {
            URL url = new URL(jolokiaUrl);
            String s = url.getUserInfo();
            if (Strings.isNotBlank(s) && s.indexOf(':') > 0) {
                int idx = s.indexOf(':');
                jolokiaUsername = s.substring(0, idx);
                jolokiaPassword = s.substring(idx + 1);
                customUsernameAndPassword = true;
            }
        } catch (MalformedURLException e) {
            throw new IllegalArgumentException("Option jolokiaUrl is invalid due " + e.getMessage());
        }
        // jolokia url overrides username/password configured in maven settings
        if (jolokiaUsername != null) {
            if (fabricServer == null) {
                fabricServer = new Server();
            }
            getLog().info("Using username: " + jolokiaUsername + " and password from provided jolokiaUrl option");
            fabricServer.setId(serverId);
            fabricServer.setUsername(jolokiaUsername);
            fabricServer.setPassword(jolokiaPassword);
        }
        if (fabricServer == null) {
            boolean create = false;
            if (mavenSettings.isInteractiveMode() && mavenSettingsWriter != null) {
                System.out.println("Maven settings file: " + mavenSettingsFile.getAbsolutePath());
                System.out.println();
                System.out.println();
                System.out.println("There is no <server> section in your ~/.m2/settings.xml file for the server id: " + serverId);
                System.out.println();
                System.out.println("You can enter the username/password now and have the settings.xml updated or you can do this by hand if you prefer.");
                System.out.println();
                while (true) {
                    String value = readInput("Would you like to update the settings.xml file now? (y/n): ").toLowerCase();
                    if (value.startsWith("n")) {
                        System.out.println();
                        System.out.println();
                        break;
                    } else if (value.startsWith("y")) {
                        create = true;
                        break;
                    }
                }
                if (create) {
                    System.out.println("Please let us know the login details for this server: " + serverId);
                    System.out.println();
                    String userName = readInput("Username: ");
                    String password = readPassword("Password: ");
                    String password2 = readPassword("Repeat Password: ");
                    while (!password.equals(password2)) {
                        System.out.println("Passwords do not match, please try again.");
                        password = readPassword("Password: ");
                        password2 = readPassword("Repeat Password: ");
                    }
                    System.out.println();
                    fabricServer = new Server();
                    fabricServer.setId(serverId);
                    fabricServer.setUsername(userName);
                    fabricServer.setPassword(password);
                    mavenSettings.addServer(fabricServer);
                    if (mavenSettingsFile.exists()) {
                        int counter = 1;
                        while (true) {
                            File backupFile = new File(mavenSettingsFile.getAbsolutePath() + ".backup-" + counter++ + ".xml");
                            if (!backupFile.exists()) {
                                System.out.println("Copied original: " + mavenSettingsFile.getAbsolutePath() + " to: " + backupFile.getAbsolutePath());
                                Files.copy(mavenSettingsFile, backupFile);
                                break;
                            }
                        }
                    }
                    Map<String, Object> config = new HashMap<String, Object>();
                    mavenSettingsWriter.write(mavenSettingsFile, config, mavenSettings);
                    System.out.println("Updated settings file: " + mavenSettingsFile.getAbsolutePath());
                    System.out.println();
                    newUserAdded = true;
                }
            }
        }
        if (fabricServer == null) {
            String message = "No <server> element can be found in ~/.m2/settings.xml for the server <id>" + serverId + "</id> so we cannot connect to fabric8!\n\n" + "Please add the following to your ~/.m2/settings.xml file (using the correct user/password values):\n\n" + "<servers>\n" + "  <server>\n" + "    <id>" + serverId + "</id>\n" + "    <username>admin</username>\n" + "    <password>admin</password>\n" + "  </server>\n" + "</servers>\n";
            getLog().error(message);
            throw new MojoExecutionException(message);
        }
        // now lets invoke the mbean
        J4pClient client = createJolokiaClient();
        if (upload) {
            uploadDeploymentUnit(client, newUserAdded || customUsernameAndPassword);
        } else {
            getLog().info("Uploading to the fabric8 maven repository is disabled");
        }
        DeployResults results = uploadRequirements(client, requirements);
        if (results != null) {
            uploadReadMeFile(client, results);
            uploadProfileConfigurations(client, results);
            refreshProfile(client, results);
        }
    } catch (MojoExecutionException e) {
        throw e;
    } catch (Exception e) {
        throw new MojoExecutionException("Error executing", e);
    }
}
Also used : MalformedURLException(java.net.MalformedURLException) DeployResults(io.fabric8.deployer.dto.DeployResults) Server(org.apache.maven.settings.Server) MojoExecutionException(org.apache.maven.plugin.MojoExecutionException) HashMap(java.util.HashMap) J4pClient(org.jolokia.client.J4pClient) DependencyDTO(io.fabric8.deployer.dto.DependencyDTO) URL(java.net.URL) MalformedObjectNameException(javax.management.MalformedObjectNameException) J4pRemoteException(org.jolokia.client.exception.J4pRemoteException) ArtifactDeploymentException(org.apache.maven.artifact.deployer.ArtifactDeploymentException) J4pConnectException(org.jolokia.client.exception.J4pConnectException) MalformedURLException(java.net.MalformedURLException) IOException(java.io.IOException) MojoExecutionException(org.apache.maven.plugin.MojoExecutionException) MojoFailureException(org.apache.maven.plugin.MojoFailureException) J4pException(org.jolokia.client.exception.J4pException) ProjectRequirements(io.fabric8.deployer.dto.ProjectRequirements) File(java.io.File)

Example 18 with Config

use of io.fabric8.docker.client.Config in project fabric8 by jboss-fuse.

the class DeployToProfileMojoTest method shouldExpandAnyPlaceholder.

@Test
public void shouldExpandAnyPlaceholder() throws IOException, J4pException, MalformedObjectNameException, MojoExecutionException {
    // Given
    File root = new File("src/test/fabric8");
    File config = new File(root, "pid.properties");
    // When
    mojo.uploadProfileConfigFile(jolokiaClient, deployResults, root, config);
    String decodedConfig = decodeSentConfig();
    // Then
    assertTrue(decodedConfig.contains("artifactId = " + "fabric8-maven-plugin"));
}
Also used : Matchers.anyString(org.mockito.Matchers.anyString) Files.writeToFile(io.fabric8.common.util.Files.writeToFile) File(java.io.File) Test(org.junit.Test)

Example 19 with Config

use of io.fabric8.docker.client.Config in project fabric8 by jboss-fuse.

the class DeployToProfileMojoTest method shouldExpandProjectVersionPlaceholder.

@Test
public void shouldExpandProjectVersionPlaceholder() throws IOException, J4pException, MalformedObjectNameException, MojoExecutionException {
    // Given
    File config = new File(root, randomUUID().toString());
    String property = "project = " + PLACEHOLDER_PROJECT_VERSION;
    writeToFile(config, property.getBytes());
    // When
    mojo.uploadProfileConfigFile(jolokiaClient, deployResults, root, config);
    String decodedConfig = decodeSentConfig();
    // Then
    assertEquals("project = " + FABRIC_VERSION, decodedConfig);
}
Also used : Matchers.anyString(org.mockito.Matchers.anyString) Files.writeToFile(io.fabric8.common.util.Files.writeToFile) File(java.io.File) Test(org.junit.Test)

Example 20 with Config

use of io.fabric8.docker.client.Config in project fabric8 by jboss-fuse.

the class FabricServiceImpl method setConfigurationValue.

@Override
public void setConfigurationValue(String versionId, String profileId, String pid, String key, String value) {
    assertValid();
    Version version = profileService.get().getRequiredVersion(versionId);
    Profile profile = version.getRequiredProfile(profileId);
    ProfileBuilder builder = ProfileBuilder.Factory.createFrom(profile);
    Map<String, String> config = builder.getConfiguration(pid);
    config.put(key, value);
    builder.addConfiguration(pid, config);
    profileService.get().updateProfile(builder.getProfile());
}
Also used : Version(io.fabric8.api.Version) ProfileBuilder(io.fabric8.api.ProfileBuilder) Profile(io.fabric8.api.Profile)

Aggregations

Test (org.junit.Test)128 ImageConfiguration (io.fabric8.maven.docker.config.ImageConfiguration)44 BuildImageConfiguration (io.fabric8.maven.docker.config.BuildImageConfiguration)43 IOException (java.io.IOException)41 HashMap (java.util.HashMap)40 File (java.io.File)31 ConfigMap (io.fabric8.kubernetes.api.model.ConfigMap)28 ResourceConfig (io.fabric8.maven.core.config.ResourceConfig)28 Map (java.util.Map)28 RunImageConfiguration (io.fabric8.maven.docker.config.RunImageConfiguration)24 ArrayList (java.util.ArrayList)24 ProcessorConfig (io.fabric8.maven.core.config.ProcessorConfig)23 AbstractConfigHandlerTest (io.fabric8.maven.docker.config.handler.AbstractConfigHandlerTest)21 Expectations (mockit.Expectations)20 DefaultKubernetesClient (io.fabric8.kubernetes.client.DefaultKubernetesClient)19 ConfigMapBuilder (io.fabric8.kubernetes.api.model.ConfigMapBuilder)17 DeploymentConfig (io.fabric8.openshift.api.model.DeploymentConfig)16 VolumeConfig (io.fabric8.maven.core.config.VolumeConfig)15 AuthConfig (io.fabric8.maven.docker.access.AuthConfig)14 KubernetesClient (io.fabric8.kubernetes.client.KubernetesClient)12