<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<body link="#355491" alink="#4262a1" vlink="#355491" style="background: #e2e2e2; margin: 0; padding: 20px;">

<div>
        <table cellpadding="0" bgcolor="#FFFFFF" border="0" cellspacing="0" style="border: 1px solid #dadada; margin-bottom: 30px; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
                <tbody>
                        <tr>

                                <td>

                                        <table border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" style="border: solid 2px #ccc; background: #dadada; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
                                                <tbody>
                                                        <tr>
                                                                <td bgcolor="#000000" valign="middle" height="58px" style="border-bottom: 1px solid #ccc; padding: 20px; -moz-border-radius-topleft: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 5px; -webkit-border-top-left-radius: 5px;">
                                                                        <h1 style="color: #333333; font: bold 22px Arial, Helvetica, sans-serif; margin: 0; display: block !important;">
                                                                        <!-- To have a header image/logo replace the name below with your img tag -->
                                                                        <!-- Email clients will render the images when the message is read so any image -->
                                                                        <!-- must be made available on a public server, so that all recipients can load the image. -->
                                                                        <a href="https://community.jboss.org/index.jspa" style="text-decoration: none; color: #E1E1E1">JBoss Community</a></h1>
                                                                </td>

                                                        </tr>
                                                        <tr>
                                                                <td bgcolor="#FFFFFF" style="font: normal 12px Arial, Helvetica, sans-serif; color:#333333; padding: 20px;  -moz-border-radius-bottomleft: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 5px; -webkit-border-bottom-left-radius: 5px;"><h3 style="margin: 10px 0 5px; font-size: 17px; font-weight: normal;">
    show-domain-info: openshift-java-client in a nutshell
</h3>
<span style="margin-bottom: 10px;">
    modified by <a href="https://community.jboss.org/people/adietish">Andre Dietisheim</a> in <i>JBoss Tools</i> - <a href="https://community.jboss.org/community/tools/blog/2012/08/24/show-domain-info-openshift-java-client-in-a-nutshell">View the full blog post</a>
</span>
<hr style="margin: 20px 0; border: none; background-color: #dadada; height: 1px;">

<div class="jive-rendered-content"><p>At JBoss Tools we created a java client that allows you to talk to the <a class="jive-link-external-small" href="https://openshift.redhat.com/app/">OpenShift</a> PaaS: <a class="jive-link-external-small" href="https://github.com/openshift/openshift-java-client">openshift-java-client</a>. The library is already used in the <a class="" href="https://community.jboss.org/en/tools/blog/tags/openshift">OpenShift tooling</a> in <a class="jive-link-external-small" href="http://www.jboss.org/tools/">JBoss Tools</a>, the <a class="jive-link-external-small" href="https://github.com/forge/plugin-openshift-express/">Forge plugin</a> and <a class="jive-link-external-small" href="http://www.appcelerator.com/platform/titanium-studio">Appcelerators</a> tooling for OpenShift.</p><p>This blog post will show you how to use okthis API in your very own java programs. We'll develop a command line tool that displays informations equivalent to what you get when running <strong>rhc domain show</strong> with the <a class="jive-link-external-small" href="https://openshift.redhat.com/community/developers/install-the-client-tools">OpenShift command line tools</a>: It displays basic informations about your user.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><pre class="jive-pre"><code class="jive-code jive-java">User Info
=========
Namespace: andre
&#160; RHLogin: andre.dietisheim@redhat.com
&#160;
&#160;
Application Info
================
kitchensink
&#160;&#160;&#160; Framework: jbossas-7
&#160;&#160;&#160;&#160; Creation: 2012-08-10T11:24:13-04:00
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; UUID: 8ad0d94f39aa4295a0049de8b8b5ef55
&#160;&#160;&#160;&#160;&#160; Git URL: ssh:<font color="darkgreen">//&lt;SOMEID&gt;@kitchensink-andre.rhcloud.com/~/git/kitchensink.git/</font>
&#160;&#160; Public URL: http:<font color="darkgreen">//kitchensink-andre.rhcloud.com/</font>
&#160;
&#160;
 Embedded: 
&#160;&#160;&#160;&#160;&#160; jenkins-client-1.4 - Job URL: https:<font color="darkgreen">//jenk-andre.rhcloud.com/job/kitchensink-build/</font>
</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>You'll find the sourcecode for this example at github: <a class="jive-link-external-small" href="https://github.com/adietish/show-domain-info">https://github.com/adietish/show-domain-info</a>. All the code that is shown in this blog is contained within the <a class="jive-link-external-small" href="https://github.com/adietish/show-domain-info/blob/master/src/main/java/com/redhat/openshift/examples/domaininfo/Main.java">Main</a> class.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>If you want to dig futher, you'll get a more complete example that includes jenkins in <a class="jive-link-wiki-small" href="https://community.jboss.org/docs/DOC-19828">this</a> wiki article.</p><h1>Openshift-java-client 2.0</h1><p>The <a class="jive-link-external-small" href="https://github.com/openshift/openshift-java-client">openshift-java-client</a> is a java library that allows java programs to talk to the OpenShift PaaS. It talks to the new OpenShift <a class="jive-link-external-small" href="https://openshift.redhat.com/community/sites/default/files/documents/OpenShift-2.0-REST_API_Guide-en-US.pdf">RESTful service</a> and allows users to create, modify and destroy OpenShift resources: domains, applications, cartridges, etc.It is hosted on github at <a class="jive-link-external-small" href="https://github.com/openshift/openshift-java-client">https://github.com/openshift/openshift-java-client</a> and is available under the <a class="jive-link-external-small" href="http://www.eclipse.org/legal/epl-v10.html">Ecilpse Public License</a>.</p><h1>Requirements</h1><ul><li>You need an account on OpenShift. (If you have no account yet, you'd have to <a class="jive-link-external-small" href="https://openshift.redhat.com/app/account/new">signup</a> first)</li><li>Make sure you have an OpenShift domain and some applications (to get some meaningful output)</li></ul><h1>Launch Parameters</h1><p><span>To keep the implemenation simple, the program we're about to write, only accept 2 parameters on the command line:<br/></span></p><ol><li>username</li><li>password</li></ol><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Launching the program with maven would look like this:</p><pre class="jive-pre"><code class="jive-code">mvn test -Dusername=&lt;username&gt; -Dpassword=&lt;password&gt;</code></pre><h1>Project Setup</h1><p>We have to make sure that we have the <a class="jive-link-external-small" href="https://github.com/openshift/openshift-java-client">openshift-java-client</a> available on our classpath. The client library is available at <a class="jive-link-external-small" href="https://github.com/openshift/openshift-java-client">https://github.com/openshift/openshift-java-client</a>. You could clone the repo and build your own jar by telling maven to <span style="color: #ff0000;">"mvn clean package"</span>. But even simpler is to add it as dependency to your <a class="jive-link-external-small" href="https://github.com/adietish/show-domain-info/blob/master/pom.xml#L8">pom</a>, since the client library is available from central as maven artifact:</p><pre class="jive-pre"><code class="jive-code jive-xml"><span class="jive-xml-tag">&lt;dependency&gt;</span>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span class="jive-xml-tag">&lt;groupId&gt;</span>com.openshift<span class="jive-xml-tag">&lt;/groupId&gt;</span>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span class="jive-xml-tag">&lt;artifactId&gt;</span>openshift-java-client<span class="jive-xml-tag">&lt;/artifactId&gt;</span>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span class="jive-xml-tag">&lt;version&gt;</span>2.0.0<span class="jive-xml-tag">&lt;/version&gt;</span>
<span class="jive-xml-tag">&lt;/dependency&gt;</span>
</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><h1>Connect to OpenShift</h1><p>After we did some basic command line parameter parsing (that we skipped here on puropose) we'd have to get in touch with the OpenShift PaaS. Using the <a class="jive-link-external-small" href="https://github.com/openshift/openshift-java-client">openshift-java-client</a> you'd tell the <a class="jive-link-external-small" href="https://github.com/adietish/openshift-java-client/blob/master/src/main/java/com/openshift/client/OpenShiftConnectionFactory.java">OpenShiftConnectionFactory</a> to create a connection for you. To create this connection you'll have to provide some parameters: </p><h3>Server url</h3><p>First of all you need to give it the url of the OpenShift PaaS. You may either hard code it or ask the OpenShift configuration for it:</p><pre class="jive-pre"><code class="jive-code jive-java"><font color="navy"><b>new</b></font> OpenShiftConfiguration().getLibraServer()
</code></pre><p>The OpenShiftConfiguration class parses the OpenShift <a class="jive-link-external-small" href="http://docs.redhat.com/docs/en-US/OpenShift/2.0/html/Getting_Started_Guide/sect-Getting_Started_Guide-OpenShift_Client_Tools-Configuring_Client_Tools.html">configuration files</a> you may have on your machine (~/.openshift/express.conf, C:/Documents and Settings/user/.openshift/express.conf etc.). Those usually get created once you installed the <a class="jive-link-external-small" href="http://docs.redhat.com/docs/en-US/OpenShift/2.0/html/User_Guide/chap-User_Guide-OpenShift_Command_Line_Interface.html">rhc command line </a>tools. In case you dont have any configuration yet, <a class="jive-link-external-small" href="https://github.com/adietish/openshift-java-client/blob/master/src/main/java/com/openshift/client/configuration/OpenShiftConfiguration.java">OpenShiftConfiguration</a> holds some meaningful <a class="jive-link-external-small" href="https://github.com/openshift/openshift-java-client/blob/master/src/main/java/com/openshift/client/configuration/DefaultConfiguration.java">defaults</a> and points to <a class="jive-link-external-small" href="http://openshift.redhat.com" target="_blank">http://openshift.redhat.com</a>. On the other hand, our configuration class also allows you to override settings by putting them to the <a class="jive-link-external-small" href="https://github.com/openshift/openshift-java-client/blob/master/src/main/java/com/openshift/client/configuration/SystemProperties.java">system configuration</a> as you would do if you want to switch to the OpenShift <a class="jive-link-external-small" href="https://openshift.redhat.com/community/wiki/getting-started-with-openshift-origin-livecd">liveCD</a> temporarly. You would then simply add the following to the command line when launching the java virtual machine:</p><pre class="jive-pre"><code class="jive-code jive-java">-Dlibra_server=127.0.0.1
</code></pre><h3>Client id</h3><p>The connection factory also requires you to provide your very own client id. This client id is used when the openshift-java-client talks to the OpenShift REST service. It'll get included in the user-agent string that tells OpenShift what client it is talking to. We use the name of our example, <span style="color: #ff0000; font-size: 12px; background-color: #ffffff; font-family: Consolas, 'Liberation Mono', Courier, monospace;">"show-domain-info<span style="color: #ff0000; font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 12px; background-color: #ffffff;">"</span></span>.</p><h3>Username and Password</h3><p>Last but not least, you also have to give it your OpenShift credentials, the ones we got from the command-line.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><pre class="jive-pre"><code class="jive-code jive-java">String openshiftServer = <font color="navy"><b>new</b></font> OpenShiftConfiguration().getLibraServer();
IOpenShiftConnection connection = <font color="navy"><b>new</b></font> OpenShiftConnectionFactory().getConnection(<font color="red">"show-domain-info"</font>, <font color="red">"myuser"</font>, <font color="red">"mypassword"</font>, openshiftServer);
</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Once you have your connection you can get a <a class="jive-link-external-small" href="https://github.com/openshift/openshift-java-client/blob/master/src/main/java/com/openshift/client/IUser.java">IUser</a> instance which will allow you to create your domain and applications:</p><pre class="jive-pre"><code class="jive-code jive-java">IUser user = connection.getUser();
</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><h1>Print the User Infos</h1><p>The first information block involves basic user informations. The username is available from your <a class="jive-link-external-small" href="https://github.com/adietish/openshift-java-client/blob/master/src/main/java/com/openshift/client/IUser.java">IUser</a> instance:</p><pre class="jive-pre"><code class="jive-code jive-java">System.out.println(<font color="red">"RHLogin:\t"</font> + user.getRhlogin());
</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>The other value that we want to display, the domain namespace, is accessible from your OpenShift <a class="jive-link-external-small" href="https://github.com/adietish/openshift-java-client/blob/master/src/main/java/com/openshift/client/IDomain.java">IDomain</a>. We'll get it from the the user instance and print its id (namespace).</p><pre class="jive-pre"><code class="jive-code jive-java">IDomain domain = user.getDefaultDomain();
System.out.println(<font color="red">"Namespace:\t"</font> + domain.getId());
</code></pre><h1>Print the Application Infos</h1><p>The second portion printed by "rhc domain show" is reporting your users applications. All OpenShift applications are held in a list within your domain. We simply get the list and iterate over it's entries:</p><pre class="jive-pre"><code class="jive-code jive-java"><font color="navy"><b>for</b></font> (IApplication application : domain.getApplications()) <font color="navy">{</font>
</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>The required values - name, framework, creation time etc. - are now available within each <a class="jive-link-external-small" href="https://github.com/adietish/openshift-java-client/blob/master/src/main/java/com/openshift/client/IApplication.java">IApplication</a> instance:</p><pre class="jive-pre"><code class="jive-code jive-java">System.out.println(application.getName());
System.out.println(<font color="red">"\tFramework:\t"</font> + application.getCartridge().getName());
System.out.println(<font color="red">"\tCreation:\t"</font> + application.getCreationTime());
System.out.println(<font color="red">"\tUUID:\t\t"</font> + application.getUUID());
System.out.println(<font color="red">"\tGit URL:\t"</font> + application.getGitUrl());
System.out.println(<font color="red">"\tPublic URL:\t"</font> + application.getApplicationUrl() + <font color="red">"\n"</font>);
</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>An application may have several cartridges embedded (MySql, Postgres, Jenkins etc.). These cartridges are reported by by the application. We get the list of cartridges and inspect at each of them:</p><pre class="jive-pre"><code class="jive-code jive-java"><font color="navy"><b>for</b></font>(IEmbeddedCartridge cartridge : application.getEmbeddedCartridges()) <font color="navy">{</font>
</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>We then want to know bout a cartridge's (<a class="jive-link-external-small" href="https://github.com/adietish/openshift-java-client/blob/master/src/main/java/com/openshift/client/IEmbeddedCartridge.java">IEmbeddedCartridge</a>), name and url:</p><pre class="jive-pre"><code class="jive-code jive-java">System.out.println(<font color="red">"\t"</font> + cartridge.getName() + <font color="red">" - URL:"</font> + cartridge.getUrl());
</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>That is it - you now have an app that can talk to OpenShift via its <a class="jive-link-external-small" href="https://openshift.redhat.com/community/sites/default/files/documents/OpenShift-2.0-REST_API_Guide-en-US.pdf">REST API</a>. If you want to do more we also have this <a class="jive-link-wiki-small" href="https://community.jboss.org/docs/DOC-19828">article</a> that shows how to perform actual operations against your OpenShift applications. Hope you enjoy it and let us know what you build with it!</p></div>

<div style="background-color: #f4f4f4; padding: 10px; margin-top: 20px;">
    <p style="margin: 0;">Comment by <a href="https://community.jboss.org/community/tools/blog/2012/08/24/show-domain-info-openshift-java-client-in-a-nutshell">going to Community</a></p>

</div></td>
                        </tr>
                    </tbody>
                </table>


                </td>
            </tr>
        </tbody>
    </table>

</div>

</body>
</html>