| <!doctype html> |
| <html> |
| <head> |
| <meta charset="utf-8"> |
| <meta http-equiv="X-UA-Compatible" content="chrome=1"> |
| <title>Axemblr Provisionr by axemblr</title> |
| |
| <link rel="stylesheet" href="stylesheets/styles.css"> |
| <link rel="stylesheet" href="stylesheets/pygment_trac.css"> |
| <script src="javascripts/scale.fix.js"></script> |
| <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"> |
| <!--[if lt IE 9]> |
| <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> |
| <![endif]--> |
| </head> |
| <body> |
| <div class="wrapper"> |
| <header> |
| <h1 class="header">Axemblr Provisionr</h1> |
| <p class="header">Simple Service for Managing Pools of 10s or 100s of Virtual Machines</p> |
| |
| <ul> |
| <li class="download"><a class="buttons" href="https://github.com/axemblr/axemblr-provisionr/zipball/master">Download ZIP</a></li> |
| <li class="download"><a class="buttons" href="https://github.com/axemblr/axemblr-provisionr/tarball/master">Download TAR</a></li> |
| <li><a class="buttons github" href="https://github.com/axemblr/axemblr-provisionr">View On GitHub</a></li> |
| </ul> |
| |
| <p class="header">This project is maintained by <a class="header name" href="https://github.com/axemblr">axemblr</a></p> |
| |
| |
| </header> |
| <section> |
| <p>With Provisionr we want to solve the problem of cloud portability by hiding completely the API and only focusing on building a cluster that matches the same set of assumptions on all clouds, assumptions like: running a specific operating system (e.g. Ubuntu LTS), having the same set of pre-installed packages and binaries, sane dns settings (forward & reverse ip resolution - as needed for <a href="http://hadoop.apache.org/">Hadoop</a>), ntp settings, networking settings, ssh admin access, vpn access etc.</p> |
| |
| <h2>Features</h2> |
| |
| <ul> |
| <li>Can provision 10s or 100s of virtual machines across multiple clouds</li> |
| <li>Fully persistent granular internal workflows based on <a href="http://activiti.org/">Activiti</a> |
| </li> |
| <li>The application server can be restarted at any time with no impact</li> |
| <li>Has a modular architecture based on OSGi and <a href="http://karaf.apache.org/">Apache Karaf</a> |
| </li> |
| <li>Can be used as an interactive tool or as a REST service (work in progress) </li> |
| </ul><h2>How does it look like?</h2> |
| |
| <p>For each cloud provider we define an Activiti pool management process similar to this:</p> |
| |
| <p><img src="http://people.apache.org/%7Easavu/sample.bpmn20.png" alt="Sample pool management process"></p> |
| |
| <p>You can use Activiti Explorer to inspect the process while running:</p> |
| |
| <p><img src="http://people.apache.org/%7Easavu/explorer.png" alt="Activiti Explorer"></p> |
| |
| <p>... and manage everything from an interactive shell:</p> |
| |
| <p><img src="http://people.apache.org/%7Easavu/shell.png" alt="Shell"></p> |
| |
| <h2>Who is behind this?</h2> |
| |
| <p>Core developers:</p> |
| |
| <ul> |
| <li>Andrei Savu - <a href="mailto:asavu@axemblr.com">asavu@axemblr.com</a> - <a href="http://www.linkedin.com/in/sandrei">LinkedIn</a>, <a href="https://github.com/andreisavu">Github</a> |
| </li> |
| <li>Ioan Eugen Stan - <a href="mailto:ieugen@axemblr.com">ieugen@axemblr.com</a> - <a href="http://www.linkedin.com/in/ieugen">LinkedIn</a>, <a href="https://github.com/ieugen">Github</a> |
| </li> |
| </ul><h2>License</h2> |
| |
| <p>Apache License Version 2.0 |
| <a href="http://apache.org/licenses/LICENSE-2.0.txt">http://apache.org/licenses/LICENSE-2.0.txt</a></p> |
| |
| <h2>Get involved in the community </h2> |
| |
| <p>For those of you who really dig our software, we have created two mailing lists that yo can join depending on your involvement: </p> |
| |
| <ul> |
| <li>If you are a user join: <a href="https://groups.google.com/forum/?fromgroups#!forum/provisionr-users">provisionr-users@googlegroups.com</a> |
| </li> |
| <li>If you wish to develop Provisionr go to <a href="https://groups.google.com/forum/?fromgroups#!forum/provisionr-dev">provisionr-dev@googlegroups.com</a> |
| </li> |
| </ul><p>Join us on IRC channel <em>#axemblr</em> on <em>irc.freenode.net</em>.</p> |
| |
| <p>We appreciate any kind of help so don't heasitate. </p> |
| |
| <h2>Supported cloud providers</h2> |
| |
| <p>We are working on making all this run as expected on <a href="http://aws.amazon.com/ec2/">Amazon EC2</a> & <a href="http://incubator.apache.org/cloudstack/">CloudStack</a> </p> |
| |
| <h2>How to create a distribution?</h2> |
| |
| <p>You can build a binary release by running:</p> |
| |
| <pre><code>$ ./scripts/create_distribution.sh |
| </code></pre> |
| |
| <p>And you will find the .tar.gz file in:</p> |
| |
| <pre><code>karaf/assembly/target/com.axemblr.provisionr-*.tar.gz |
| </code></pre> |
| |
| <h2>How to run?</h2> |
| |
| <p>Extract the custom Karaf distribution:</p> |
| |
| <pre><code>$ cd karaf/assembly/target/ |
| $ tar xvfz com.axemblr.provisionr-0.0.1-SNAPSHOT.tar.gz |
| $ cd com.axemblr.provisionr-0.0.1-SNAPSHOT |
| </code></pre> |
| |
| <p>Start and configure the Amazon provisionr:</p> |
| |
| <pre><code>$ ./bin/provisionr |
| provisionr [0.0.1-SNAPSHOT] $ config:edit com.axemblr.provisionr.amazon |
| provisionr [0.0.1-SNAPSHOT] $ config:proplist |
| service.pid = com.axemblr.provisionr.amazon |
| secretKey = secret |
| felix.fileinstall.filename = file:[...]/etc/com.axemblr.provisionr.amazon.cfg |
| region = us-east-1 |
| accessKey = access |
| provisionr [0.0.1-SNAPSHOT] $ config:propset accessKey "XXXXXXX" |
| provisionr [0.0.1-SNAPSHOT] $ config:propset secretKey "XXXXXXX" |
| provisionr [0.0.1-SNAPSHOT] $ config:update |
| provisionr [0.0.1-SNAPSHOT] $ config:list "(service.pid=com.axemblr.provisionr.amazon)" |
| </code></pre> |
| |
| <p>Create a pool:</p> |
| |
| <pre><code>provisionr [0.0.1-SNAPSHOT] $ provisionr:create --id amazon --key mypool --size 2 --hardware-type m1.small |
| provisionr [0.0.1-SNAPSHOT] $ provisionr:pools |
| Pool{provider=Provider{id='amazon', endpoint='', accessKey='XXXXXXX', options='{region=us-east-1}'}, |
| network=Network{type=default, ingress=[Rule{cidr=0.0.0.0/0, ports=(-1?-1], protocol=ICMP}, |
| Rule{cidr=0.0.0.0/0, ports=[22?22], protocol=TCP}], options={}}, adminAccess=AdminAccess{username='andreisavu', |
| publicKey='ssh-rsa ....'}, software=Software{baseOperatingSystem='default', files={}, |
| packages=[git-core, vim], options={}}, hardware=Hardware{type='t1.micro', options={}}, minSize=1, |
| cacheBaseImage=false, expectedSize=1, bootstrapTimeInSeconds=900, options={}} |
| Business Key: mypool |
| </code></pre> |
| |
| <p>You should see an Activiti process in execution:</p> |
| |
| <pre><code>provisionr [0.0.1-SNAPSHOT] $ activiti:list |
| |
| BPMN Deployments |
| ---------------- |
| ID Name Deployment Time |
| [1 ][com.axemblr.provisionr.amazon ][Dec 13, 2012 1:52:05 PM] |
| [5 ][com.axemblr.provisionr.cloudstack][Dec 13, 2012 1:52:07 PM] |
| |
| BPMN Process Definitions |
| ------------------------- |
| Definition ID Name Ver Resource |
| [amazon:1:4 ][Amazon Process][1 ][OSGI-INF/activiti/amazon.bpmn20.xml ] |
| [cloudstack:1:8][cloudstack ][1 ][OSGI-INF/activiti/cloudstack.bpmn20.xml] |
| |
| History of BPMN Process Instances |
| --------------------------------- |
| Def Ins Sta End |
| |
| Active BPMN Process Instances |
| ----------------------------- |
| Definition Ins Executions |
| [amazon:1:4][9 ][13,14,16,19,9] |
| </code></pre> |
| |
| <p>Make sure you also check the Activiti Explorer at (login kermit:kermit): </p> |
| |
| <pre><code>http://localhost:8181/activiti-explorer/ |
| </code></pre> |
| |
| <p>If you want to manage Apache Karaf you can access the webconsole at</p> |
| |
| <pre><code>http://localhost:8181/system/console |
| </code></pre> |
| |
| <p>And don't forget to destroy the pool</p> |
| |
| <pre><code>provisionr [0.0.1-SNAPSHOT] $ provisionr:destroy --id amazon --key mypool |
| </code></pre> |
| |
| <h2>How to build?</h2> |
| |
| <p>Maven as usual:</p> |
| |
| <pre><code>$ mvn clean install |
| </code></pre> |
| |
| <p>This will download dependencies, compile the sources and run unit tests and some of the integration tests (karaf feature install)</p> |
| |
| <h2>How to test?</h2> |
| |
| <p>All the unit tests are executed as part of the normal build.</p> |
| |
| <p>For SSH tests we assume the current user can do "ssh localhost" and authenticate |
| automatically using the local ssh keys. </p> |
| |
| <p>You can run tests against a specific cloud provider for individual activities by running:</p> |
| |
| <pre><code>$ ./scripts/activities_test.sh ID # (amazon or cloudstack) |
| </code></pre> |
| |
| <p>Or you can the test the pool management process as a whole by running:</p> |
| |
| <pre><code>$ ./scripts/process_test.sh ID # (amazon or cloudstack) |
| </code></pre> |
| |
| <p>Your cloud provider credentials should be in ~/.m2/settings.xml or sent as system properties</p> |
| |
| <div class="highlight"><pre><span class="nt"><profiles></span> |
| <span class="nt"><profile></span> |
| <span class="nt"><id></span>provisionr-credentials<span class="nt"></id></span> |
| <span class="nt"><activation><activeByDefault></span>true<span class="nt"></activeByDefault></activation></span> |
| <span class="nt"><properties></span> |
| <span class="nt"><test.cloudstack.provider.accessKey></span>cs-key<span class="nt"></test.cloudstack.provider.accessKey></span> |
| <span class="nt"><test.cloudstack.provider.secretKey></span>cs-secret<span class="nt"></test.cloudstack.provider.secretKey></span> |
| <span class="nt"><test.cloudstack.provider.endpoint></span>...<span class="nt"></test.cloudstack.provider.endpoint></span> |
| <span class="nt"><test.cloudstack.provider.zoneId></span>1<span class="nt"></test.cloudstack.provider.zoneId></span> |
| <span class="nt"><test.cloudstack.provider.templateId></span>3012<span class="nt"></test.cloudstack.provider.templateId></span> |
| <span class="nt"><test.cloudstack.provider.serviceOffering></span>105<span class="nt"></test.cloudstack.provider.serviceOffering></span> |
| |
| <span class="nt"><test.amazon.provider.accessKey></span>xxxxx<span class="nt"></test.amazon.provider.accessKey></span> |
| <span class="nt"><test.amazon.provider.secretKey></span>xxxxx<span class="nt"></test.amazon.provider.secretKey></span> |
| <span class="nt"><test.amazon.provider.region></span>us-east-1<span class="nt"></test.amazon.provider.region></span> |
| <span class="nt"></properties></span> |
| <span class="nt"></profile></span> |
| <span class="nt"></profiles></span> |
| </pre></div> |
| |
| <p>Thanks! </p> |
| </section> |
| <footer> |
| <p><small>Hosted on <a href="https://pages.github.com">GitHub Pages</a> using the Dinky theme</small></p> |
| </footer> |
| </div> |
| <!--[if !IE]><script>fixScale(document);</script><![endif]--> |
| |
| </body> |
| </html> |