blob: 9fb291bb22aeb5dae705964de9838c8a3b646b36 [file] [log] [blame]
<!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 &amp; 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> &amp; <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">&lt;profiles&gt;</span>
<span class="nt">&lt;profile&gt;</span>
<span class="nt">&lt;id&gt;</span>provisionr-credentials<span class="nt">&lt;/id&gt;</span>
<span class="nt">&lt;activation&gt;&lt;activeByDefault&gt;</span>true<span class="nt">&lt;/activeByDefault&gt;&lt;/activation&gt;</span>
<span class="nt">&lt;properties&gt;</span>
<span class="nt">&lt;test.cloudstack.provider.accessKey&gt;</span>cs-key<span class="nt">&lt;/test.cloudstack.provider.accessKey&gt;</span>
<span class="nt">&lt;test.cloudstack.provider.secretKey&gt;</span>cs-secret<span class="nt">&lt;/test.cloudstack.provider.secretKey&gt;</span>
<span class="nt">&lt;test.cloudstack.provider.endpoint&gt;</span>...<span class="nt">&lt;/test.cloudstack.provider.endpoint&gt;</span>
<span class="nt">&lt;test.cloudstack.provider.zoneId&gt;</span>1<span class="nt">&lt;/test.cloudstack.provider.zoneId&gt;</span>
<span class="nt">&lt;test.cloudstack.provider.templateId&gt;</span>3012<span class="nt">&lt;/test.cloudstack.provider.templateId&gt;</span>
<span class="nt">&lt;test.cloudstack.provider.serviceOffering&gt;</span>105<span class="nt">&lt;/test.cloudstack.provider.serviceOffering&gt;</span>
<span class="nt">&lt;test.amazon.provider.accessKey&gt;</span>xxxxx<span class="nt">&lt;/test.amazon.provider.accessKey&gt;</span>
<span class="nt">&lt;test.amazon.provider.secretKey&gt;</span>xxxxx<span class="nt">&lt;/test.amazon.provider.secretKey&gt;</span>
<span class="nt">&lt;test.amazon.provider.region&gt;</span>us-east-1<span class="nt">&lt;/test.amazon.provider.region&gt;</span>
<span class="nt">&lt;/properties&gt;</span>
<span class="nt">&lt;/profile&gt;</span>
<span class="nt">&lt;/profiles&gt;</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>