<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Nimbula Engineering Team</title>
	<atom:link href="http://blog.nimbula.com/engineering/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.nimbula.com/engineering</link>
	<description>engineering high-performance, easy to use, private clouds</description>
	<lastBuildDate>Tue, 11 Dec 2012 19:35:17 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5</generator>
		<item>
		<title>OpenStack Folsom Install Guide</title>
		<link>http://blog.nimbula.com/engineering/2012/12/openstack-folsom-install-guide/</link>
		<comments>http://blog.nimbula.com/engineering/2012/12/openstack-folsom-install-guide/#comments</comments>
		<pubDate>Tue, 11 Dec 2012 19:26:28 +0000</pubDate>
		<dc:creator>Zach VanDuyn</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[openstack]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[cinder]]></category>
		<category><![CDATA[folsom]]></category>
		<category><![CDATA[glance]]></category>
		<category><![CDATA[horizon]]></category>
		<category><![CDATA[nova-compute]]></category>
		<category><![CDATA[nova-network]]></category>
		<category><![CDATA[ubuntu 12.10]]></category>

		<guid isPermaLink="false">http://blog.nimbula.com/engineering/?p=256</guid>
		<description><![CDATA[With the recent OpenStack announcement, I was tasked with creating a presentation to document my experiences deploying the newly released OpenStack Folsom. One portion of my presentation spent time detailing the vanilla OpenStack installation and configuration. At the time of my &#8230; <a href="http://blog.nimbula.com/engineering/2012/12/openstack-folsom-install-guide/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>With the recent <a href="http://blog.nimbula.com/corporate/2012/10/a-new-chapter-nimbula-joins-openstack/" target="_blank">OpenStack announcement</a>, I was tasked with creating a presentation to document my experiences deploying the newly released OpenStack Folsom. One portion of my presentation spent time detailing the vanilla OpenStack installation and configuration. At the time of my writing (October 2012), the official OpenStack documentation wasn&#8217;t quite polished yet, so I began recording my own processes in hope that it would save someone else a bit of time.</p>
<p>After sharing my tutorial with a few friends in the OpenStack community, it seems there was some interest in having these documents published outside of our internal Nimbula wiki. So, here it is:</p>
<p><a href="http://openstack-folsom-install-guide.readthedocs.org/en/latest/" target="_blank">http://openstack-folsom-install-guide.readthedocs.org/en/latest/ </a></p>
<p>If you have any suggestions or find an error, please send an email to openstack-docs (at) nimbula.com</p>
<p>-Zach VanDuyn, Technical Marketing Intern</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nimbula.com/engineering/2012/12/openstack-folsom-install-guide/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creating a FreeBSD 9.0 machineimage for Nimbula</title>
		<link>http://blog.nimbula.com/engineering/2012/09/creating-a-freebsd-9-0-machineimage-under-linux/</link>
		<comments>http://blog.nimbula.com/engineering/2012/09/creating-a-freebsd-9-0-machineimage-under-linux/#comments</comments>
		<pubDate>Tue, 18 Sep 2012 22:24:48 +0000</pubDate>
		<dc:creator>Michael Richmond</dc:creator>
				<category><![CDATA[machine images]]></category>
		<category><![CDATA[freebsd]]></category>
		<category><![CDATA[guest OS]]></category>
		<category><![CDATA[instructions]]></category>
		<category><![CDATA[kvm]]></category>
		<category><![CDATA[machineimage]]></category>
		<category><![CDATA[nimbula director]]></category>

		<guid isPermaLink="false">http://blog.nimbula.com/engineering/?p=204</guid>
		<description><![CDATA[The operating systems used by virtual machine instances in Nimbula Director are packaged into a form known as a &#8220;machineimage&#8221;. Nimbula Director users and administrators may upload many machineimages to make the operating systems available in the Nimbula environment. This &#8230; <a href="http://blog.nimbula.com/engineering/2012/09/creating-a-freebsd-9-0-machineimage-under-linux/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>The operating systems used by virtual machine instances in Nimbula Director are packaged into a form known as a &#8220;machineimage&#8221;. Nimbula Director users and administrators may upload many machineimages to make the operating systems available in the Nimbula environment. This blog post details the necessary steps to build a FreeBSD machineimage using a Linux host with KVM to create the image.</p>
<h1>Requirements</h1>
<ul>
<li>A Linux host with KVM installed and working. (This host will be used to construct the FreeBSD machineimage. No data on this host will be destroyed.)</li>
<li>Download the FreeBSD 9.0 install disk from <a href="http://www.freebsd.org/where.html">http://www.freebsd.org/where.html</a></li>
<li>Download the virtio drivers for FreeBSD 9.0 from <a href="http://people.freebsd.org/~kuriyama/virtio/">http://people.freebsd.org/~kuriyama/virtio/</a></li>
</ul>
<p>In these instructions, commands to be run under Linux are shown in <font style="color: #00C;">blue</font> and commands to be run under the FreeBSD guest OS are shown in <font style="color: #C00;">red</font>.</p>
<h1>Install instructions</h1>
<h3>Create an empty disk image (10GB)</h3>
<p>The basis of a machineimage is a sparse file that is sized to the desired maximum size of the virtual hard drive. In these instructions we will use a 10GB maximum size. With a blocksize of 1024 bytes, a 10GB file consists of 10485760 blocks.</p>
<p>On your Linux host, run the following command to create the sparse file:</p>
<blockquote><p><code style="color: #00C;">dd if=/dev/null of=freebsd-9_0.raw bs=1024 seek=10485760</code></p></blockquote>
<h3>Boot the FreeBSD installer and perform installation</h3>
<p>Launch kvm to boot from the FreeBSD iso file with the sparse virtual hard drive file as the attached virtual hard drive.</p>
<p>On your Linux host, run the following command:</p>
<blockquote><p><code style="color: #00C;">sudo kvm -vnc 0.0.0.0:55 -drive file=freebsd-9_0.raw,if=ide -net nic -net user -cdrom FreeBSD-9.0-RELEASE-amd64-disc1.iso</code></p></blockquote>
<p>This will start up KVM exposing the virtual console via VNC port 5955 (vnc base of 5900 + 55 from kvm command).</p>
<p>Connect to the guest OS using a VNC client pointed to port 5955 on your Linux host. (The VNC client may also run on your Linux host.)</p>
<p>Step through the FreeBSD installer:</p>
<ul>
<li>Allocate the whole virtual drive to FreeBSD.</li>
<li>Configure networking to use IPv4 and DHCP.</li>
</ul>
<p>When the installer finishes, reboot the FreeBSD guest.</p>
<h3>Install VirtIO drivers</h3>
<p>KVM and Nimbula Director support virtualization-optimized device emulation for hard drives and network adapters known as &#8220;virtio&#8221;. This virtio device emulation provides significant performance gains over full device emulation. To use virtio, specific device drivers need to be installed in the guest OS.</p>
<p>Download the binary package of virtio drivers for FreeBSD 9.0 from <a href="http://people.freebsd.org/~kuriyama/virtio/">http://people.freebsd.org/~kuriyama/virtio/</a>. Copy the driver file to the guest OS.</p>
<p>Install the package by running the following command in the guest OS:</p>
<blockquote><p><code style="color: #C00;">pkg_add virtio-kmod-9-0.239473.tbz</code></p></blockquote>
<h3>Configure the VirtIO drivers</h3>
<p>Edit the <code style="color: #C00;">/boot/loader.conf</code> file to add the following lines:</p>
<blockquote><p><code style="color: #C00;">virtio_load="YES"<br />
virtio_pci_load="YES"<br />
virtio_blk_load="YES"<br />
if_vtnet_load="YES"</code></p></blockquote>
<p>Edit <code style="color: #C00;">/etc/fstab</code> in the guest OS to change the device identifiers to <code style="color: #C00;">/dev/vtbd*</code>. (The following example shows the original device entries commented out. The new entries in bold are the virtio entries.)</p>
<blockquote><p><code style="color: #C00;"># Device		Mountpoint	FStype	Options	Dump	Pass#<br />
#/dev/ada0p2	/			ufs		rw		1	1<br />
#/dev/ada0p3	none			swap		sw		0	0<br />
<b>/dev/vtbd0p2	/			ufs		rw		1	1<br />
/dev/vtbd0p3	none			swap		sw		0	0</b></code></p></blockquote>
<p>Edit <code style="color: #C00;">/etc/rc.conf</code> in the guest OS to add the line shown in bold. (This line configures FreeBSD to use DHCP when bringing up the <code>vtnet0</code> network interface.):</p>
<blockquote><p><code style="color: #C00;">hostname="freebsd-90"<br />
ifconfig_re0="DHCP"<br />
<b>ifconfig_vtnet0="DHCP"</b><br />
sshd_enable="YES"<br />
# Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable<br />
dumpdev="NO"<br />
</code></p></blockquote>
<p>Power off the guest.</p>
<p>Relaunch using virtio for the virtual hard drive and virtual network adapter using the following KVM command on your Linux host:</p>
<blockquote><p><code style="color: #00C;">sudo kvm -vnc 0.0.0.0:54 -drive file=freebsd-9_0.raw,if=virtio -net nic,model=virtio -net user<br />
</code></p></blockquote>
<p>Verify correct hard drive and network operation in the guest OS.</p>
<p>If the hard drive and network appear to be working correctly then power off the FreeBSD guest.</p>
<p>At this stage you have created a virtual hard drive image with a functioning FreeBSD installation that includes virtio support. The remaining step is to package up the hard drive image as a Nimbula Director machineimage.</p>
<h3>Package the machineimage</h3>
<p>Tar up the <code>freebsd-9_0.raw</code> file to produce the Nimbula Director machine image using the following command on your Linux host:</p>
<blockquote><p><code style="color: #00C;">tar zcvf freebsd-9_0.tar.gz freebsd-9_0.raw</code></p></blockquote>
<h1>FreeBSD virtio setup resources</h1>
<p>The following resources were used to prepare these instructions:</p>
<ul>
<li><a href="http://people.freebsd.org/~kuriyama/virtio/">http://people.freebsd.org/~kuriyama/virtio/</a></li>
<li><a href="http://www.area536.com/projects/freebsd-as-a-kvm-guest-using-virtio/">http://www.area536.com/projects/freebsd-as-a-kvm-guest-using-virtio/</a></li>
<li><a href="http://kdl.nobugware.com/post/2011/10/14/freebsd-90-guest-virtio-support-in-KVM/">http://kdl.nobugware.com/post/2011/10/14/freebsd-90-guest-virtio-support-in-KVM/</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.nimbula.com/engineering/2012/09/creating-a-freebsd-9-0-machineimage-under-linux/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Introducing the Nimbula API Python Bindings</title>
		<link>http://blog.nimbula.com/engineering/2012/07/introducing-the-nimbula-api-python-bindings/</link>
		<comments>http://blog.nimbula.com/engineering/2012/07/introducing-the-nimbula-api-python-bindings/#comments</comments>
		<pubDate>Tue, 31 Jul 2012 14:40:41 +0000</pubDate>
		<dc:creator>Peter Juritz</dc:creator>
				<category><![CDATA[api]]></category>
		<category><![CDATA[compute]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[aws]]></category>
		<category><![CDATA[bindings]]></category>
		<category><![CDATA[boto]]></category>
		<category><![CDATA[ec2]]></category>
		<category><![CDATA[twisted]]></category>

		<guid isPermaLink="false">http://blog.nimbula.com/engineering/?p=95</guid>
		<description><![CDATA[In this post I&#8217;d like to talk about one of the ways to use Nimbula Director that hasn’t been discussed before. Currently, users can access the core functionality via the command line client, our web UI or by making HTTP calls &#8230; <a href="http://blog.nimbula.com/engineering/2012/07/introducing-the-nimbula-api-python-bindings/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>In this post I&#8217;d like to talk about one of the ways to use Nimbula Director that hasn’t been discussed before. Currently, users can access the core functionality via the command line client, our web UI or by making HTTP calls directly against our RESTful web API. All of these methods are explained extensively in our documentation (which can be found under the references section <a href="http://nimbula.com/resources/documentation/" target="_blank">here</a>).</p>
<p>In this post I’ll be talking about a fourth method: the Nimbula API Python Bindings. This is a Python library which is distributed alongside our tools (which can be found <a href="http://nimbula.com/support/download/document/nimbula-client-tools-2" target="_blank">here</a>). It provides all the functionality available against any Nimbula entity via HTTP API calls to a Nimbula Director endpoint. Let&#8217;s look at some examples:</p>
<h1>Setting up the environment</h1>
<p>To use the bindings we first need to set up the environment to point at the API endpoint we would like to use. The standard way to do this is by setting the NIMBULA_API environment variable (which is also used by our CLI tools). For example:</p>
<pre class="brush: bash; light: true; title: ; notranslate">
$ export NIMBULA_API=&quot;http://api.example.com/&quot;
</pre>
<p>Now any subsequent library calls will work against the specified endpoint. If you prefer not to use environment variables it is possible to set the API endpoint directly in code by setting the base_url property of the transport you are using, for example:</p>
<pre class="brush: python; light: true; title: ; notranslate">
from nimbula.api import client
client.DEFAULT_TRANSPORT.base_url = &quot;http://api.example.com/&quot;
</pre>
<h1></h1>
<h1></h1>
<h1><strong>Hello Cloud</strong></h1>
<p>Now that the endpoint is set we can write our first program. In this example we log in to the cloud as the user ‘project/user’ with the password ‘p4ssw0rd’ and then get some basic details about the site:</p>
<pre class="brush: python; title: ; notranslate">

from nimbula.api import models as m
m.User.authenticate('project/user', 'p4ssw0rd')
print m.SiteInformation.get()

</pre>
<p>On my development cluster this produces:</p>
<pre>&lt;SiteInformation: {'name': u'usdev150', 'idpname': u'usdev150', 'uri': None, 'licensed': True, 'version': u'2.0.1', 'fingerprint': u'06:7E:67:24:C0:38:2C:F8:6D:97:CE:D2:CC:7F:7B:FF:2C:DC:C0:C0'}&gt;</pre>
<p>You may notice that these are all synchronous calls which correspond with REST calls against the API.</p>
<p>Now that we’ve done our first example, let&#8217;s look at something more useful. In the following example, we launch two instances (a database and webserver) with two different shapes and two different images. We also set a further placement requirement that these two instances run on the same node. Finally, we wait till the instances have started and then print out their IP addresses.</p>
<pre class="brush: python; title: ; notranslate">
from nimbula.api import models as m,client as c
from time import sleep
m.User.authenticate('project/user','p4ssw0rd')
lp = m.LaunchPlan()

web_instance = m.Instance()
db_instance = m.Instance()

web_instance.label = 'webserver'
web_instance.imagelist = '/project/webimages/webserver'
web_instance.shape = 'medium'

db_instance.label = 'database'
db_instance.imagelist = '/project/webimages/database'
db_instance.shape = 'large'

lp.instances = [web_instance, db_instance]
lp.relationships = [{ &quot;instances&quot;:[&quot;database&quot;, &quot;webserver&quot; ],
                      &quot;type&quot;:&quot;same_node&quot; }  ] # we want the instances to run on the same node

lp.save() # The api launch call happens here

for inst in lp.instances: # The following two lines are necessary for
    inst.bind()           # older versions of the product

def is_running(instance):
    instance.refresh()
    return instance.state == 'running'

while not all(map(is_running, lp.instances)):
    print 'Waiting for instances to start'
    sleep(5)

print 'Instances started'
print '\n'.join(['Instance label: %s , IP: %s' % (i.label, i.ip) for i in lp.instances])

</pre>
<h1></h1>
<h1><strong>Twisted transport</strong></h1>
<p>As I mentioned earlier, the previous examples have all been synchronous calls to the REST API, achieved using a blocking HTTP request. However our Python bindings can also make use of the Twisted library for asynchronous IO. This allows you to make API calls and register callbacks for when they complete. Twisted is a great event-based networking library which we make use of extensively for our internal services. More information can be found <a href="http://twistedmatrix.com/" target="_blank">here</a>.</p>
<p>There are two ways to make use of theTwisted transport when using our Python bindings. One way is by setting the transport directly on the client model:</p>
<pre class="brush: python; light: true; title: ; notranslate">
from nimbula.api import client
from nimbula.api.transports.http.twisted import PersistentTwistedHTTPTransport
client.DEFAULT_TRANSPORT = PersistentTwistedHTTPTransport
</pre>
<p>The second way is by importing twisted.internet at the beginning of your script. Our Python bindings will inspect the modules imported and if Twisted is present it will make use of that.</p>
<p>Here is a simple example to delete all instances on the Nimbula deployment using the Twisted transport:</p>
<pre class="brush: python; title: ; notranslate">

from twisted.internet import reactor, defer
from nimbula.api import models as m

@defer.inlineCallbacks
def delete_instances():
    yield m.User.authenticate('project/user', 'p4ssw0rd')
    instances = yield m.Instance.list()
    dl = [instance.delete() for instance in instances]
    print 'Waiting on callbacks'
    yield defer.DeferredList(dl)
    print 'Done'
    reactor.stop()

delete_instances()
reactor.run()
</pre>
<h1><strong>EC2 API: Using boto with Nimbula Director</strong></h1>
<p><strong></strong>In Nimbula Director 2.0 we introduced our AWS EC2 shim which allows users to interact with a Director deployment using any EC2 compatible tools by implementing both the SOAP and Query protocols. One of the popular AWS tools is the <a href="https://github.com/boto/boto" target="_blank">boto library</a>, which provides Python bindings to the AWS API.</p>
<p>To use the AWS API you first need to create authentication credentials. To do this you can run:</p>
<pre>$ nimbula-api add accesskey /project/user/mykey</pre>
<p>This will create an access and secret key pair with the identifier /project/user/mykey. These can then be used against Director&#8217;s AWS API shim. Any commands which are then run against the cloud with these credentials will run with the permissions of the user that created the key. Once you have created the authentication credentials, using the Nimbula EC2 API through boto is simple. Here is an example of a simple boto program to print all of the instances which are running:</p>
<pre class="brush: python; title: ; notranslate">

import boto
from boto.ec2.regioninfo import RegionInfo
hostname = &quot;api.example.com&quot; # the nimbula API endpoint
region = RegionInfo(name='nimbula', endpoint=hostname)
accesskey = '&lt; your access key &gt;'
secretkey = '&lt; your secret key &gt;'

connection = boto.connect_ec2(aws_access_key_id=accesskey,
    aws_secret_access_key=secretkey, is_secure=False,
    region=region, path=&quot;/aws/&quot;)
print connection.get_all_instances()

</pre>
<h1>Check it out yourself!</h1>
<p>So that should all be enough to try it out for yourself. These examples have only shown a few of the objects you can interact with, however there are many more. A great way to explore the Python bindings is with ipython and its tab completion: simply import the models module in nimbula.api.models and see which objects are available.</p>
<p>Alternatively you can read the source distributed alongside the tools (download <a href="http://nimbula.com/support/download/document/nimbula-client-tools-2" target="_blank">here</a>), under tools/source/.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nimbula.com/engineering/2012/07/introducing-the-nimbula-api-python-bindings/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Useful tutorials about creating images, automation, CLI and API access</title>
		<link>http://blog.nimbula.com/engineering/2012/03/useful-tutorials-about-creating-images-automation-cli-and-api-access/</link>
		<comments>http://blog.nimbula.com/engineering/2012/03/useful-tutorials-about-creating-images-automation-cli-and-api-access/#comments</comments>
		<pubDate>Wed, 21 Mar 2012 15:26:24 +0000</pubDate>
		<dc:creator>Jeremy Bar</dc:creator>
				<category><![CDATA[api]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[compute]]></category>
		<category><![CDATA[machine images]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[CLI]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[installation]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://blog.nimbula.com/engineering/?p=74</guid>
		<description><![CDATA[Conversations with our customers often results in a focused investigation of a particular aspect of the Nimbula Director product. In many cases these conversations prompt one of our individual engineers to write up instructions or mini-tutorials on how to work &#8230; <a href="http://blog.nimbula.com/engineering/2012/03/useful-tutorials-about-creating-images-automation-cli-and-api-access/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Conversations with our customers often results in a focused investigation of a particular aspect of the Nimbula Director product. In many cases these conversations prompt one of our individual engineers to write up instructions or mini-tutorials on how to work with a particular aspect of Nimbula Director.</p>
<p>Some tutorials that have grown out of these conversations include the following topics:</p>
<ul>
<li>How to create Windows Server 2008 based Nimbula compatible images with optimized VirtIO drivers<br />
<a href="http://nimbula.com/forum/topic/26/">http://nimbula.com/forum/topic/26/</a></li>
<li>Sample demo PHP and Javascript code of creating your own Web Interface<br />
<a href="http://nimbula.com/forum/topic/43/">http://nimbula.com/forum/topic/43/</a></li>
<li>Script to add high availability to running Nimbula Director virtual machines<br />
<a href="http://nimbula.com/forum/topic/41/">http://nimbula.com/forum/topic/41/</a></li>
<li>Guide to Converting a Windows Server 2008 VMware Virtual Machine Image to KVM Format<br />
<a href="http://nimbula.com/forum/topic/40/">http://nimbula.com/forum/topic/40/</a></li>
<li>Nimbula Director Install Setup Checklist<br />
<a href="http://nimbula.com/forum/topic/1/">http://nimbula.com/forum/topic/1/</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.nimbula.com/engineering/2012/03/useful-tutorials-about-creating-images-automation-cli-and-api-access/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Feeding our way to an engineered product</title>
		<link>http://blog.nimbula.com/engineering/2011/12/feeding-our-way-to-an-engineered-product/</link>
		<comments>http://blog.nimbula.com/engineering/2011/12/feeding-our-way-to-an-engineered-product/#comments</comments>
		<pubDate>Fri, 30 Dec 2011 16:00:50 +0000</pubDate>
		<dc:creator>Kiran Palan</dc:creator>
				<category><![CDATA[dogfood]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[development practices]]></category>
		<category><![CDATA[team]]></category>

		<guid isPermaLink="false">http://50.18.154.228/engineering/?p=13</guid>
		<description><![CDATA[Architecting and implementing a new technology such as a Cloud Operating System requires one to gain valuable feedback in the early stages of the product.  When building new technology it is of the essence to get that feedback even before &#8230; <a href="http://blog.nimbula.com/engineering/2011/12/feeding-our-way-to-an-engineered-product/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Architecting and implementing a new technology such as a <a href="http://youtu.be/OmpSOe-draQ">Cloud Operating System</a> requires one to gain valuable feedback in the early stages of the product.  When building new technology it is of the essence to get that feedback even before releasing it to a customer. To build this feedback organically from our own team we have been using Nimbula Director to build Nimbula Director. We call this environment <strong>dogfood </strong>(derived from “<a href="http://en.wikipedia.org/wiki/Eating_your_own_dog_food">eating your own dogfood</a>”).  In this blog post, I will talk about how as a startup in an enterprise/service-provider market, we are using &#8216;dogfooding&#8217; as an engineering approach to develop our product.</p>
<p>We started off small by installing Nimbula Director on a few machines and created our private cloud for the engineering team. Each engineer has a laptop and they utilized the <strong>dogfood</strong> private cloud for their dev/test work.</p>
<p><a href="http://blog.nimbula.com/engineering/files/2011/12/Dogfood.jpg"><img class="alignnone size-full wp-image-63" src="http://blog.nimbula.com/engineering/files/2011/12/Dogfood.jpg" alt="" width="696" height="557" /></a></p>
<p>The diagram above shows a single site install of our <strong>dogfood</strong> environment. A Nimbula Director installation is comprised of the concepts of a site, clusters, and nodes.</p>
<p><strong>Site</strong>: The site is a single Nimbula Director installation at a single location.</p>
<p><strong>Cluster:</strong>  One or more networked collection of computers or nodes is called a cluster.  A cluster usually runs on a single broadcast domain. A site can have one or more clusters. A cluster is uniquely identified by its IP subnet.</p>
<p><strong>Node</strong>: A single server, which participates in a cluster.</p>
<p>Getting our network ready for the cloud should ideally be a one time thing, after which the Cloud Operating System gives you the flexibility and elasticity to adapt to change. Example: the Nimbula Director administrator can add and remove clusters, nodes or sites dynamically by using a restful API or the CLI.</p>
<p>Since engineers manage this private cloud, ‘self-service and automation’ has become the essence of the product starting right from the installation stage. Check out how easy it is to install Nimbula Director to create your private cloud in the <a href="http://youtu.be/xp4-ek9wZyg">video</a> here.</p>
<p>Using our own product for our day-to-day engineering operations has accelerated our understanding of customer requirements. This has led to organic growth of innovative ideas and has enhanced our understanding of the importance of usability, quality and documentation of the product. If you can’t eat it, expect no one else to…</p>
<p>In the next few blog posts I will talk about how we are feeding our way to a robustly engineered product by using the features of Nimbula Director in our <strong>dogfood</strong> environment.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nimbula.com/engineering/2011/12/feeding-our-way-to-an-engineered-product/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Welcome to the Cloud</title>
		<link>http://blog.nimbula.com/engineering/2011/12/welcome-to-the-cloud/</link>
		<comments>http://blog.nimbula.com/engineering/2011/12/welcome-to-the-cloud/#comments</comments>
		<pubDate>Thu, 29 Dec 2011 21:05:33 +0000</pubDate>
		<dc:creator>Michael Richmond</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[nimbula]]></category>

		<guid isPermaLink="false">http://50.18.154.228/engineering/?p=6</guid>
		<description><![CDATA[Welcome to the Nimbula Director engineering team blog. Nimbula Director allows you to easily pool your server hardware into a private infrastructure cloud. This private cloud allows quick and easy provisioning of virtual hosts, networks, and storage thereby simplifying system &#8230; <a href="http://blog.nimbula.com/engineering/2011/12/welcome-to-the-cloud/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Welcome to the <a href="http://www.nimbula.com" title="Nimbula homepage">Nimbula Director</a> engineering team blog. Nimbula Director allows you to easily pool your server hardware into a private infrastructure cloud. This private cloud allows quick and easy provisioning of virtual hosts, networks, and storage thereby simplifying system management.</p>
<p>Various members of our engineering team will be contributing posts to this blog. Over time you will find technical dives into aspects of Nimbula Director; rationales for engineering choices; analysis and investigation of available technologies; and other miscellaneous thoughts from the team. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nimbula.com/engineering/2011/12/welcome-to-the-cloud/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Served from: blog.nimbula.com @ 2013-05-23 01:51:23 -->