Search in sources :

Example 1 with IOpenShiftSSHKey

use of com.openshift.client.IOpenShiftSSHKey in project fabric8 by jboss-fuse.

the class OpenShiftDeployAgent method onConfigurationChanged.

protected void onConfigurationChanged() {
    LOGGER.info("Configuration has changed; so checking the Fabric managed Java cartridges on OpenShift are up to date");
    Container[] containers = fabricService.get().getContainers();
    for (Container container : containers) {
        Profile effectiveProfile = Profiles.getEffectiveProfile(fabricService.get(), container.getOverlayProfile());
        Map<String, String> openshiftConfiguration = effectiveProfile.getConfiguration(OpenShiftConstants.OPENSHIFT_PID);
        if (openshiftConfiguration != null) {
            DeploymentUpdater deployTask = null;
            try {
                deployTask = createDeployTask(container, openshiftConfiguration);
            } catch (MalformedURLException e) {
                LOGGER.error("Failed to create DeploymentUpdater. " + e, e);
            }
            if (deployTask != null && OpenShiftUtils.isFabricManaged(openshiftConfiguration)) {
                String containerId = container.getId();
                IOpenShiftConnection connection = OpenShiftUtils.createConnection(container);
                CreateOpenshiftContainerOptions options = OpenShiftUtils.getCreateOptions(container);
                if (connection == null || options == null) {
                    LOGGER.warn("Ignoring container which has no openshift connection or options. connection: " + connection + " options: " + options);
                } else {
                    try {
                        IApplication application = OpenShiftUtils.getApplication(container, connection);
                        if (application != null) {
                            final String gitUrl = application.getGitUrl();
                            if (gitUrl != null) {
                                LOGGER.info("Git URL is " + gitUrl);
                                final CartridgeGitRepository repo = new CartridgeGitRepository(containerId);
                                final List<IOpenShiftSSHKey> sshkeys = application.getDomain().getUser().getSSHKeys();
                                final CredentialsProvider credentials = new CredentialsProvider() {

                                    @Override
                                    public boolean supports(CredentialItem... items) {
                                        return true;
                                    }

                                    @Override
                                    public boolean isInteractive() {
                                        return true;
                                    }

                                    @Override
                                    public boolean get(URIish uri, CredentialItem... items) throws UnsupportedCredentialItem {
                                        LOGGER.info("Credential request " + uri + " items " + Arrays.asList(items));
                                        int i = -1;
                                        for (CredentialItem item : items) {
                                            if (item instanceof CredentialItem.StringType) {
                                                CredentialItem.StringType stringType = (CredentialItem.StringType) item;
                                                int idx = ++i < sshkeys.size() ? i : 0;
                                                if (idx < sshkeys.size()) {
                                                    IOpenShiftSSHKey sshKey = sshkeys.get(idx);
                                                    String passphrase = sshKey.getPublicKey();
                                                    LOGGER.info("For item " + item + " index " + i + " using passphrase: " + passphrase);
                                                    stringType.setValue(passphrase);
                                                } else {
                                                    LOGGER.warn("No ssh keys we can pass into git!");
                                                }
                                                continue;
                                            } else {
                                                LOGGER.warn("Unknown CredentialItem " + item);
                                            }
                                        }
                                        return true;
                                    }
                                };
                                final DeploymentUpdater finalDeployTask = deployTask;
                                SshSessionFactoryUtils.useOpenShiftSessionFactory(new Callable<Object>() {

                                    @Override
                                    public Object call() throws Exception {
                                        repo.cloneOrPull(gitUrl, credentials);
                                        finalDeployTask.updateDeployment(repo.getGit(), repo.getLocalRepo(), credentials);
                                        return null;
                                    }
                                });
                            }
                        }
                    } catch (Exception e) {
                        LOGGER.error("Failed to update container " + containerId + ". Reason: " + e, e);
                    } finally {
                        OpenShiftUtils.close(connection);
                    }
                }
            }
        }
    }
}
Also used : URIish(org.eclipse.jgit.transport.URIish) MalformedURLException(java.net.MalformedURLException) CreateOpenshiftContainerOptions(io.fabric8.openshift.CreateOpenshiftContainerOptions) CredentialItem(org.eclipse.jgit.transport.CredentialItem) UnsupportedCredentialItem(org.eclipse.jgit.errors.UnsupportedCredentialItem) CredentialsProvider(org.eclipse.jgit.transport.CredentialsProvider) IOpenShiftSSHKey(com.openshift.client.IOpenShiftSSHKey) Profile(io.fabric8.api.Profile) MalformedURLException(java.net.MalformedURLException) Container(io.fabric8.api.Container) IApplication(com.openshift.client.IApplication) IOpenShiftConnection(com.openshift.client.IOpenShiftConnection)

Aggregations

IApplication (com.openshift.client.IApplication)1 IOpenShiftConnection (com.openshift.client.IOpenShiftConnection)1 IOpenShiftSSHKey (com.openshift.client.IOpenShiftSSHKey)1 Container (io.fabric8.api.Container)1 Profile (io.fabric8.api.Profile)1 CreateOpenshiftContainerOptions (io.fabric8.openshift.CreateOpenshiftContainerOptions)1 MalformedURLException (java.net.MalformedURLException)1 UnsupportedCredentialItem (org.eclipse.jgit.errors.UnsupportedCredentialItem)1 CredentialItem (org.eclipse.jgit.transport.CredentialItem)1 CredentialsProvider (org.eclipse.jgit.transport.CredentialsProvider)1 URIish (org.eclipse.jgit.transport.URIish)1