<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>OpenStack Blog</title>
	<atom:link href="https://openstackgd.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://openstackgd.wordpress.com</link>
	<description>Grid Dynamics Team</description>
	<lastBuildDate>Thu, 02 May 2013 14:46:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='openstackgd.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>https://s2.wp.com/i/buttonw-com.png</url>
		<title>OpenStack Blog</title>
		<link>https://openstackgd.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="https://openstackgd.wordpress.com/osd.xml" title="OpenStack Blog" />
	<atom:link rel='hub' href='https://openstackgd.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Altai v1.1.1 is out</title>
		<link>https://openstackgd.wordpress.com/2013/04/04/altai-v1-1-1-is-out/</link>
		<comments>https://openstackgd.wordpress.com/2013/04/04/altai-v1-1-1-is-out/#comments</comments>
		<pubDate>Thu, 04 Apr 2013 08:07:34 +0000</pubDate>
		<dc:creator>aababilov</dc:creator>
				<category><![CDATA[Administration]]></category>
		<category><![CDATA[Altai]]></category>
		<category><![CDATA[OpenStack]]></category>

		<guid isPermaLink="false">http://openstackgd.wordpress.com/?p=528</guid>
		<description><![CDATA[Hello everybody! A new version of Altai Private Cloud for Developers 1.1.1 is ready to use. In this release, we support reliable updates from any previous Altai version.. This release is recommended to use for everyone instead of 1.1.0. Update procedure from any previous release is safe and automated &#8211; just follow our upgrade guide. Changelog Documentation [...]<img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=openstackgd.wordpress.com&#038;blog=20742273&#038;post=528&#038;subd=openstackgd&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Hello everybody!</p>
<p>A new version of Altai Private Cloud for Developers 1.1.1 is ready to use. In this release, we support reliable updates from any previous Altai version..</p>
<p>This release is recommended to use for everyone instead of 1.1.0. Update procedure from any previous release is safe and automated &#8211; just follow our <a href="https://altaicloud.atlassian.net/wiki/display/V111/Update"> upgrade guide</a>.</p>
<ul>
<li><a href="https://altaicloud.atlassian.net/wiki/display/V111/ChangeLog">Changelog</a></li>
<li><a href="https://altaicloud.atlassian.net/wiki/display/V111/Altai+v1.1.1+Documentation">Documentation</a></li>
<li><a href="https://altaicloud.atlassian.net/wiki/display/V111/Installation">Installation</a></li>
<li><a href="https://github.com/altai">Source Code</a></li>
<li><a href="https://altaicloud.atlassian.net/wiki/display/V111/Downloads">Packages</a></li>
<li><a href="http://altaicloud.myjetbrains.com/youtrack/dashboard">Issue tracker</a></li>
</ul>
<p>Other important changes:</p>
<ul>
<li>guess root partition of virtual machine images for setting login credentials;</li>
<li>add script for LDAP configuration after Altai installation;</li>
<li>support instance live migration;</li>
<li>fix VNC security problem that occurs for deleted instances;</li>
<li>strong validation of Altai configuration parameters to determine installation/updating problems earlier;</li>
<li>bugfixes in UI;</li>
<li>correct adding records for NS servers on zone creation;</li>
<li>purge info about deleted instances from database.</li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/openstackgd.wordpress.com/528/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/openstackgd.wordpress.com/528/" /></a> <img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=openstackgd.wordpress.com&#038;blog=20742273&#038;post=528&#038;subd=openstackgd&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>https://openstackgd.wordpress.com/2013/04/04/altai-v1-1-1-is-out/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="https://0.gravatar.com/avatar/f25e76859fc634383f277e4abb3cc9ea?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">aababilov</media:title>
		</media:content>
	</item>
		<item>
		<title>Altai v1.1.0 with LDAP/AD support</title>
		<link>https://openstackgd.wordpress.com/2013/02/04/altai-v1-1-0-with-ldapad-support/</link>
		<comments>https://openstackgd.wordpress.com/2013/02/04/altai-v1-1-0-with-ldapad-support/#comments</comments>
		<pubDate>Mon, 04 Feb 2013 11:27:32 +0000</pubDate>
		<dc:creator>Dmitry Maslennikov</dc:creator>
				<category><![CDATA[Administration]]></category>
		<category><![CDATA[Altai]]></category>

		<guid isPermaLink="false">http://openstackgd.wordpress.com/?p=507</guid>
		<description><![CDATA[Hello, everybody! We are glad to announce a new version of Altai Private Cloud for Developers. This update introduces out-of-the-box LDAP/AD support in Altai Cloud. It should help to manage cloud users and authorization in companies where LDAP or AD is used. Useful links: Documentation Changelog Update &#160;<img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=openstackgd.wordpress.com&#038;blog=20742273&#038;post=507&#038;subd=openstackgd&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Hello, everybody!</p>
<p>We are glad to announce a new version of Altai Private Cloud for Developers.</p>
<p>This update introduces out-of-the-box LDAP/AD support in Altai Cloud. It should help to manage cloud users and authorization in companies where LDAP or AD is used.</p>
<p>Useful links:</p>
<ul>
<li><span style="line-height:14px;"><a href="https://altaicloud.atlassian.net/wiki/display/V110/Altai+v1.1.0+Documentation">Documentation</a><br />
</span></li>
<li><a href="https://altaicloud.atlassian.net/wiki/display/V110/ChangeLog">Changelog</a></li>
<li><a href="https://altaicloud.atlassian.net/wiki/display/V110/Update+from+v1.0.2">Update</a></li>
</ul>
<p>&nbsp;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/openstackgd.wordpress.com/507/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/openstackgd.wordpress.com/507/" /></a> <img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=openstackgd.wordpress.com&#038;blog=20742273&#038;post=507&#038;subd=openstackgd&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>https://openstackgd.wordpress.com/2013/02/04/altai-v1-1-0-with-ldapad-support/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="https://0.gravatar.com/avatar/3065fac23ef4980bd93bf90b5813e8d9?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dmaslennikov</media:title>
		</media:content>
	</item>
		<item>
		<title>Preconditions for Common OpenStack Client Library</title>
		<link>https://openstackgd.wordpress.com/2013/01/12/preconditions-for-common-openstack-client-library/</link>
		<comments>https://openstackgd.wordpress.com/2013/01/12/preconditions-for-common-openstack-client-library/#comments</comments>
		<pubDate>Sat, 12 Jan 2013 18:39:39 +0000</pubDate>
		<dc:creator>aababilov</dc:creator>
				<category><![CDATA[Altai]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[OpenStack]]></category>
		<category><![CDATA[oslo-incubator]]></category>

		<guid isPermaLink="false">http://openstackgd.wordpress.com/?p=489</guid>
		<description><![CDATA[OpenStack client packages have a long history. It begins in November 2009 when Rackspace Cloud Servers package started. It provided a Python API (the cloudservers module) and a command-line script (cloudservers). Initially, the script was just a stub, but it became a useful CLI utility able to launch, stop, and resize virtual machines. cloudservers package [...]<img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=openstackgd.wordpress.com&#038;blog=20742273&#038;post=489&#038;subd=openstackgd&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>OpenStack client packages have a long history. It begins in November 2009 when Rackspace Cloud Servers package <a href="https://github.com/jacobian/python-cloudservers/tree/0a0dc6f7a124d4d3f82b19e4f5da4fce7de12321" target="_blank">started</a>. It provided a Python API (the cloudservers module) and a command-line script (cloudservers). Initially, <a href="https://github.com/jacobian/python-cloudservers/blob/0a0dc6f7a124d4d3f82b19e4f5da4fce7de12321/cloudservers/shell.py" target="_blank">the script</a> was just a stub, but it became a useful CLI utility able to launch, stop, and resize virtual machines.</p>
<p>cloudservers package introduced a library architecture that is used till now. All entities can be split into five groups.</p>
<ol>
<li><strong>Resources</strong>, e.g., a flavor, a server, or an image. Technically, a resource is a Python object and its class is a descendant of the <code>Resource</code> class.</li>
<li><strong>Managers</strong> &#8211; they provide operations on resources, for example, &#8220;list all flavors&#8221; or &#8220;delete an image&#8221;. So, we have a flavor manager, an image manager, and so on. As you may guess, manager&#8217;s classes are descendants of the <code>Manager</code> class.</li>
<li><strong>HTTP client</strong> provides a convenient interface for managers that send HTTP requests to the server. The HTTP client is also responsible for authentication process that changed a lot after introducing a new Keystone service, so, the newer HTTP clients are a bit more complicated.</li>
<li><strong>Exceptions</strong> are normal Python exceptions raised by <strong>HTTP client</strong> for HTTP error codes. This is a more or less rich hierarchy with exceptions such as <code>Unauthorized</code>, <code>BadRequest</code>, or <code>NotFound</code>.</li>
<li><strong>Client</strong> (not to be confused with HTTP client!) puts <strong>HTTP client</strong> and various managers together (using <em>class composition</em>: HTTP client and managers are <em>members</em> of a <strong>client</strong>). As a user, you create a client and can immediately perform any API calls:
<pre>
# this is the client
client = Client(USERNAME, PASSWORD, PROJECT_ID, AUTH_URL)
# client.flavors is a manager
all_flavors = client.flavors.list()
# and all_flavors is a list of resources
print all_flavors                                         
</pre>
</li>
</ol>
<p>The oldest of currently alive clients (<code>novaclient</code>) was born in <a href="https://github.com/rackspace/python-novaclient/tree/7304ed80df265b3b11a0018a826ce2e38c052572" target="_blank">January 2011</a> as a fork of Rackspace Cloud Servers package. Since that time, <code>cloudservers</code> library and CLI script were renamed to <code>novaclient</code>. They support new Nova API that was growing all the time, but these two main functions (a Python API and a command line client) remain unchanged.</p>
<p>About a year later, a new OpenStack client project called keystoneclient was started. It was a flesh of novaclient&#8217;s flesh with almost the same architecture with a small difference: client was a child class of HTTP client thus using <em>inheritance</em>, not <em>composition</em>. And, of course, keystoneclient has its own managers and resources (tenant, user, etc.).</p>
<p>Al lot of code required in the new client package was already written in novaclient (the base <code>Resource</code> and <code>Manager</code> and <strong>HTTP client</strong>). But this code was copied, not imported in keystoneclient. On the one hand, it made these packages independent: you haven&#8217;t to install novaclient if you would like to use keystoneclient. On the other hand, the story of duplicated classes diverged and they gained different features available in one package and absent in another.</p>
<p>glanceclient used the same copying approach with the same benefits and pitfalls. However, quantumclient and swiftclient are completely different and I won&#8217;t discuss them here.</p>
<p>So, what do we have now? </p>
<ol>
<li>Keystone server provides tokens with limited time to live. So, that&#8217;s natural to obtain an &#8220;Unauthorized&#8221; error after a series of successful calls. Nova and Keystone clients handle this situation correctly: they do one call to obtain a new fresh token and repeat the fallen query. glanceclient just raises an exception.</li>
<li>Keystone server supports two ways of authentication on a tenant: with user name and password and with an unscoped token. As a response to successful authentication, it returns a scoped token and a catalog of all OpenStack service endpoints (nova, glance, keystone, swift etc.). So, keystoneclient supports both authentication ways while novaclient handles only authentication with user name and password. glanceclient is even less prompt: it requires a scoped token and a Glance server endpoint. It knows nothing about clever Keystone service and you have to do the dirty job. By the way, glanceclient&#8217;s shell uses keystoneclient to issue this initial call to Keystone.</li>
<li>All <b>client</b> constructors use different parameters. For example, the thing that is called <code>password</code> in keystoneclient is an <code>api_key</code> in novaclient for historical reasons: it was called <code>apikey</code>  (without underscore!) in cloudservices three years ago.</li>
<li><b>clients</b> have not only different constructors but also diverse behavior: keystoneclient authenticates immediately when you create the <b>client</b> object while novaclient does it lazily during first API call.</li>
<li>Often you would like to make calls to different services. A dashboard or a common command line tool usually requests tenant list from Keystone, image list from Glance, and sends a &#8220;launch an instance&#8221; command to Nova. With current clients it&#8217;s different to share the same token and service endpoint catalog. A simple ways could be just to use a common <b>HTTP client</b> object, but it&#8217;s impossible because of incompatible architectures in different client packages.</li>
</ol>
<p>To solve these problems, we could move the common code to a separate library that would be imported in all three clients. The common library would contain:</p>
<ul>
<li>the base <code>Resource</code> class;</li>
<li>the base <code>Manager</code> class;</li>
<li>a rich <strong>Exceptions</strong> hierarchy;</li>
<li>a feature rich <strong>HTTP client</strong> that supports all ways of authentication, handles outdated token faults, and saves the whole service catalog returned by Keystone;</li>
<li>the base <strong>client</strong> class that contains an instance of <strong>HTTP client</strong> as a member: this way, several <strong>clients</strong> (e.g., a <strong>client</strong> for Nova and a <strong>client</strong> for Keystone) can share the same <strong>HTTP client</strong>.
</ul>
<p>I developed a <a href="https://github.com/altai/python-openstackclient-base" target="_blank">sample implementation</a> of this library and called it <code>python-openstackclient-base</code>. The library is used in <a href="http://www.griddynamics.com/solutions/altai-private-cloud-for-developers/" target="_blank">Altai Private Cloud</a>, a project of Grid Dynamics. <code>python-openstackclient-base</code> is easy to use:</p>
<pre>
from openstackclient_base.client import HttpClient
http_client = HttpClient(username="...", password="...", tenant_name="...", auth_uri="...")

# Nova Compute API client
from openstackclient_base.nova.client import ComputeClient
# create a client class and use servers manager
print ComputeClient(http_client).servers.list()   

# Identity (Keystone) Public API client
from openstackclient_base.keystone.client import IdentityPublicClient 
# use the same HTTP client as above
print IdentityPublicClient(http_client).tenants.list()
</pre>
<p>Now I&#8217;m going to put this library to oslo-incubator project and use it in all three clients. When oslo-incubator will be mature, it will be imported in OpenStack projects as I want, but now its code will be just copied literally to other projects. However, it&#8217;s also quite satisfiable since it will reach all the goals mentioned above.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/openstackgd.wordpress.com/489/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/openstackgd.wordpress.com/489/" /></a> <img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=openstackgd.wordpress.com&#038;blog=20742273&#038;post=489&#038;subd=openstackgd&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>https://openstackgd.wordpress.com/2013/01/12/preconditions-for-common-openstack-client-library/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="https://0.gravatar.com/avatar/f25e76859fc634383f277e4abb3cc9ea?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">aababilov</media:title>
		</media:content>
	</item>
		<item>
		<title>fping Support in OpenStack</title>
		<link>https://openstackgd.wordpress.com/2012/12/21/fping-support-in-openstack/</link>
		<comments>https://openstackgd.wordpress.com/2012/12/21/fping-support-in-openstack/#comments</comments>
		<pubDate>Fri, 21 Dec 2012 15:52:24 +0000</pubDate>
		<dc:creator>aababilov</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[OpenStack]]></category>
		<category><![CDATA[Grizzly]]></category>
		<category><![CDATA[monitoring]]></category>
		<category><![CDATA[Nova extensions]]></category>
		<category><![CDATA[novaclient]]></category>
		<category><![CDATA[OpenStack Nova]]></category>

		<guid isPermaLink="false">http://openstackgd.wordpress.com/?p=471</guid>
		<description><![CDATA[OpenStack is very good at launching virtual machines &#8211; that&#8217;s its purpose, isn&#8217;t it? But usually you want to monitor state of you machines somehow, and there are many reasonable ways. You can test daemons running on the machine, e.g., check up open ports or poll known services. Of course, this approach means that you [...]<img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=openstackgd.wordpress.com&#038;blog=20742273&#038;post=471&#038;subd=openstackgd&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>OpenStack is very good at launching virtual machines &#8211; that&#8217;s its purpose, isn&#8217;t it? But usually you want to monitor state of you machines somehow, and there are many reasonable ways.</p>
<ol>
<li>You can test daemons running on the machine, e.g., check up open ports or poll known services. Of course, this approach means that you know exactly what services should be running &#8211; and this is the most precise way to test system health.</li>
<li>You can ask hypervisor if the machine is ok. That&#8217;s a very dirty check since hypervisor will likely report that VM is active while its operating system kernel can encounter problems.</li>
<li>A compromise settlement may be pinging the machine. It&#8217;s a general solution since a lot of VMs respond to ping normally. Sure, VM can ignore ping or its daemons can have problems while host is responding to ping, but this solution is far easier to implement then check each machine according to an individual plan.</li>
</ol>
<p>Let&#8217;s concentrate on the last two approaches. I would like to launch a machine and check it.</p>
<pre>[root@a001 ~]# nova image-list
+--------------------------------------+--------------+--------+--------+
| ID                                   | Name         | Status | Server |
+--------------------------------------+--------------+--------+--------+
| 960dc70a-3e0e-496a-b8da-0e9cd91d3a44 | selenium-img | ACTIVE |        |
+--------------------------------------+--------------+--------+--------+
[root@a001 ~]# nova boot --flavor m1.small --image 960dc70a-3e0e-496a-b8da-0e9cd91d3a44 selenium-0
...
[root@a001 ~]# nova list
+--------------------------------------+-------------------+--------+-------------------------+
| ID                                   | Name              | Status | Networks                |
+--------------------------------------+-------------------+--------+-------------------------+
| a9060a07-d32a-4dcf-8387-1c7d69f897dc | selenium-0        | ACTIVE | selenium-net=10.109.0.4 |
+--------------------------------------+-------------------+--------+-------------------------+
[root@a001 ~]# fping 10.109.0.4
10.109.0.4 is unreachable</pre>
<p>As you can see, VM status is reported as active, but the machine has not booted really. Even more, consider a damaged image (I use a text file for this purpose):</p>
<pre>[root@a001 ~]# glance index 
ID                                   Name                           Disk Format          Container Format     Size          
------------------------------------ ------------------------------ -------------------- -------------------- --------------
7d8007fe-a63c-4d02-8edf-a6cc19fa1d73 text                           qcow2                ovf                           17043
[root@a001 ~]# nova boot --flavor m1.small --image 7d8007fe-a63c-4d02-8edf-a6cc19fa1d73 text-0
[root@a001 ~]# nova list
+--------------------------------------+-------------------+--------+-------------------------+
| ID                                   | Name              | Status | Networks                |
+--------------------------------------+-------------------+--------+-------------------------+
| a9060a07-d32a-4dcf-8387-1c7d69f897dc | selenium-0        | ACTIVE | selenium-net=10.109.0.4 |
| 461e73e4-7f88-4c8f-bb1f-49df9ec18d84 | text-0            | ACTIVE | selenium-net=10.109.0.5 |
+--------------------------------------+-------------------+--------+-------------------------+</pre>
<p>Nova bravely reports that the new instance is active, but it obviously is not functioning: a text file is not a disk image with an operating system. And fping reveals that the VM is ill:</p>
<pre>[root@a001 ~]# fping 10.109.0.5
10.109.0.5 is unreachable</pre>
<p>We can extend nova API adding this fping feature. Nova will run fping for requested instances and report which ones seems to be truly alive. I have developed this extension and it was accepted to Grizzly on November 16, 2012 (<a href="https://github.com/openstack/nova/commit/a220aa15b056914df1b9debc95322d01a0e408e8" rel="nofollow">https://github.com/openstack/nova/commit/a220aa15b056914df1b9debc95322d01a0e408e8</a>).</p>
<p>fping API is simple and straightforward. We can ask to check all instances or a single one. In fact, we have two API calls.</p>
<ol>
<li><code>GET /os-fping/&lt;uuid&gt;</code> &#8211; check a single instance.</li>
<li><code>GET /os-fping?[all_tenants=1]&amp;[include=uuid[,uuid...][&amp;exclude=...]</code> &#8211; check all VMs in the current project. If <code>all_tenants</code> is requested, data for all projects is returned (by default, this option is allowed only for admins). <code>include</code> and <code>exclude</code> are parameters specifying VM masks. These parameters are mutually exclusive and <code>exclude</code> is ignored if <code>include</code> is specified. Consider that VM list is <code>VM_all</code>, then if <code>include</code> list is set, the only <code>VM_all * VM_to_include</code> (set intersection) will be tested &#8211; thus we can check several instances in a single API call. If <code>exclude</code> list is provided, <code>VM_all -<br />
VM_to_exclude</code> (set difference) will be polled &#8211; thus we can skip testing for instances that are not supposed to respond to ping.</li>
</ol>
<p>fping increases I/O load on nova-api node, so, by default, fping API is limited to 12 calls in an hour (nevertheless it&#8217;s a single or several instances poll).</p>
<p>I have added nova fping support to python-novaclient (<a href="https://github.com/openstack/python-novaclient/commit/ff69e4d3830f463afa48ca432600224f29a2c238" rel="nofollow">https://github.com/openstack/python-novaclient/commit/ff69e4d3830f463afa48ca432600224f29a2c238</a>) making easy to write a daemon in Python that will periodically check instance states and send notifications on detected problems. This daemon is available in Grid Dynamics Altai Private Cloud For Developers and is called instance-notifier (<a href="https://github.com/altai/instance-notifier" rel="nofollow">https://github.com/altai/instance-notifier</a>). The daemon is installed and configured by Altai installer automatically. Despite Altai 1.0.2 runs Essex, not Grizzly, I have added nova-fping as an additional extension package.</p>
<p>Let&#8217;s see how to use fping from client side. We have three instances: <code>selenium-0</code> (shut off), <code>selenium-1</code> (up and running), and <code>text</code> (invalid image). Nova reports that they are active:</p>
<pre>[root@a001 /]# nova list
+--------------------------------------+-------------------+--------+-------------------------+
| ID                                   | Name              | Status | Networks                |
+--------------------------------------+-------------------+--------+-------------------------+
| a9060a07-d32a-4dcf-8387-1c7d69f897dc | selenium-0        | ACTIVE | selenium-net=10.109.0.4 |
| 20325b87-6858-49df-ab30-795a189dd2ac | selenium-1        | ACTIVE | selenium-net=10.109.0.3 |
| 461e73e4-7f88-4c8f-bb1f-49df9ec18d84 | text-0            | ACTIVE | selenium-net=10.109.0.5 |
+--------------------------------------+-------------------+--------+-------------------------+</pre>
<p>Check them with nova fping!</p>
<pre>[root@a001 /]# python
Python 2.6.6 (r266:84292, Jun 18 2012, 14:18:47) 
[GCC 4.4.6 20110731 (Red Hat 4.4.6-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
&gt;&gt;&gt; from novaclient.v1_1 import Client
&gt;&gt;&gt; cl = Client("admin", "topsecret", "systenant", "http://localhost:5000/v2.0")
&gt;&gt;&gt; ping_list = cl.fping.list()
&gt;&gt;&gt; ping_list
[&lt;Fping: 461e73e4-7f88-4c8f-bb1f-49df9ec18d84&gt;, &lt;Fping: a9060a07-d32a-4dcf-8387-1c7d69f897dc&gt;, &lt;Fping: 20325b87-6858-49df-ab30-795a189dd2ac&gt;]
&gt;&gt;&gt; import json
&gt;&gt;&gt; print json.dumps([p._info for p in ping_list], indent=4)
[
    {
        "project_id": "4fd17bd4ac834dcf8ba1236368f79986", 
        "id": "461e73e4-7f88-4c8f-bb1f-49df9ec18d84", 
        "alive": false
    }, 
    {
        "project_id": "4fd17bd4ac834dcf8ba1236368f79986", 
        "id": "a9060a07-d32a-4dcf-8387-1c7d69f897dc", 
        "alive": false
    }, 
    {
        "project_id": "4fd17bd4ac834dcf8ba1236368f79986", 
        "id": "20325b87-6858-49df-ab30-795a189dd2ac", 
        "alive": true
    }
]</pre>
<p>As expected, nova fping reported that only <code>selenium-1 (id=20325b87-6858-49df-ab30-795a189dd2ac)</code> is really alive.</p>
<p>So, fping in nova is a fast and quite reliable way to check instance health. Like a phonendoscope, it cannot provide full information, but if a human doesn&#8217;t respire, he&#8217;s likely to be dead.</p>
<p><a href="http://openstackgd.wordpress.com/2012/12/21/fping-support-in-openstack/fping-phonendoscope-2/" rel="attachment wp-att-481"><img src="http://openstackgd.files.wordpress.com/2012/12/fping-phonendoscope.jpeg?w=300&#038;h=236" alt="fping-phonendoscope" width="300" height="236" class="aligncenter size-medium wp-image-481" /></a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/openstackgd.wordpress.com/471/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/openstackgd.wordpress.com/471/" /></a> <img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=openstackgd.wordpress.com&#038;blog=20742273&#038;post=471&#038;subd=openstackgd&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>https://openstackgd.wordpress.com/2012/12/21/fping-support-in-openstack/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="https://0.gravatar.com/avatar/f25e76859fc634383f277e4abb3cc9ea?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">aababilov</media:title>
		</media:content>

		<media:content url="http://openstackgd.files.wordpress.com/2012/12/fping-phonendoscope.jpeg?w=300" medium="image">
			<media:title type="html">fping-phonendoscope</media:title>
		</media:content>
	</item>
		<item>
		<title>Altai v1.0.2 is out</title>
		<link>https://openstackgd.wordpress.com/2012/12/07/altai-v1-0-2-is-out/</link>
		<comments>https://openstackgd.wordpress.com/2012/12/07/altai-v1-0-2-is-out/#comments</comments>
		<pubDate>Fri, 07 Dec 2012 08:11:48 +0000</pubDate>
		<dc:creator>aababilov</dc:creator>
				<category><![CDATA[Administration]]></category>
		<category><![CDATA[Altai]]></category>

		<guid isPermaLink="false">http://openstackgd.wordpress.com/?p=454</guid>
		<description><![CDATA[Hello everybody! A new version of Altai Private Cloud for Developers 1.0.2 is ready to use. In this release, we reviewed and cleaned up third-party packages and made bugfixes, primarily to user interface. This release is recommended to use for everyone instead of 1.0.1. Update procedure is safe and automated &#8211; just follow our upgrade guide. Changelog [...]<img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=openstackgd.wordpress.com&#038;blog=20742273&#038;post=454&#038;subd=openstackgd&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Hello everybody!</p>
<p>A new version of Altai Private Cloud for Developers 1.0.2 is ready to use. In this release, we reviewed and cleaned up third-party packages and made bugfixes, primarily to user interface.</p>
<p>This release is recommended to use for everyone instead of 1.0.1. Update procedure is safe and automated &#8211; just follow our <a href="https://altaicloud.atlassian.net/wiki/display/V102/Update+from+v1.0.1">upgrade guide</a>.</p>
<ul>
<li><a href="https://altaicloud.atlassian.net/wiki/display/V102/ChangeLog">Changelog</a></li>
<li><a href="https://altaicloud.atlassian.net/wiki/display/V102/Altai+v1.0.2+Documentation">Documentation</a></li>
<li><a href="https://github.com/altai">Source Code</a></li>
<li><a href="https://altaicloud.atlassian.net/wiki/display/V102/Downloads">Packages</a></li>
<li><a href="http://altaicloud.myjetbrains.com/youtrack/dashboard">Issue tracker</a></li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/openstackgd.wordpress.com/454/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/openstackgd.wordpress.com/454/" /></a> <img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=openstackgd.wordpress.com&#038;blog=20742273&#038;post=454&#038;subd=openstackgd&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>https://openstackgd.wordpress.com/2012/12/07/altai-v1-0-2-is-out/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="https://0.gravatar.com/avatar/f25e76859fc634383f277e4abb3cc9ea?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">aababilov</media:title>
		</media:content>
	</item>
		<item>
		<title>What&#8217;s New in Altai 1.0.2 from Maintainer&#8217;s Point of View</title>
		<link>https://openstackgd.wordpress.com/2012/12/06/whats-new-in-altai-1-0-2-from-maintainers-point-of-view/</link>
		<comments>https://openstackgd.wordpress.com/2012/12/06/whats-new-in-altai-1-0-2-from-maintainers-point-of-view/#comments</comments>
		<pubDate>Thu, 06 Dec 2012 15:09:28 +0000</pubDate>
		<dc:creator>aababilov</dc:creator>
				<category><![CDATA[Altai]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[OpenStack]]></category>

		<guid isPermaLink="false">http://openstackgd.wordpress.com/?p=464</guid>
		<description><![CDATA[A new version of Altai Private Cloud for Developers 1.0.2 was released. The new release is devoted to cleaning package dependencies. Also, a bunch of bugfixes was made, primarily to user interface. Let&#8217;s see what&#8217;s new in Altai 1.0.2 from maintainer&#8217;s point of view. In previous releases, we had this motto: &#8220;Take basic CentOS/RHEL, take [...]<img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=openstackgd.wordpress.com&#038;blog=20742273&#038;post=464&#038;subd=openstackgd&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>A new version of Altai Private Cloud for Developers 1.0.2 was released.</p>
<p>The new release is devoted to cleaning package dependencies. Also, a bunch of bugfixes was made, primarily to user interface. Let&#8217;s see what&#8217;s new in Altai 1.0.2 from maintainer&#8217;s point of view.</p>
<p>In previous releases, we had this motto: &#8220;Take basic CentOS/RHEL, take our source RPMs, and you will be able to build the whole Altai and install it&#8221;.<br />
Altai RPMs (both source and binary) were grouped in two repositories: &#8220;main&#8221; and &#8220;deps&#8221;. &#8220;deps&#8221; were packages rebuilt from their third-party source RPMs without changes. All other packages went to &#8220;main&#8221;, including customized third-party software (like nginx with uploading module) and Altai proper packages like Focus web UI.<br />
Since we built both &#8220;main&#8221; and &#8220;deps&#8221; packages, we signed them with Grid Dynamics signature.</p>
<p>This model had one pitfall: we had to maintain plenty of well-known packages that were not included into basic CentOS/RHEL, such as Rabbit MQ or Erlang. That made our repositories really tremendous: 500 MiB, 100 MiB for &#8220;main&#8221; and 400 for &#8220;deps&#8221;! Imagine how wasteful is add these tons of unchanged third-party packages to every release. That&#8217;s why we tried the following solution in the previous release (1.0.1): include a chain of repositories so almost all unchanged packaged are downloaded from 1.0.0 release and 1.0.1 repository contains only packages to upgrade. As it was shown in <a href="http://aababilov.wordpress.com/2012/09/24/yum-repository-limit/" target="_blank">this article</a>, YUM can handle thousands of repositories simultaneously without performance problems. So, the repository chain approach significantly saves space for newer releases, but it leads to some maintaining problems.</p>
<p>For example, imagine if one package should be downgraded in the next release. We can call <code>yum downgrade package-name</code> in Altai installer, but how could we guarantee that this packages will not be updated later accidentally by user in a <code>yum update</code> procedure?</p>
<p>A more complex problem is that it&#8217;s difficult to determine a list of all packages that belong to given release if they are spread between lots of repositories. Even more, build a new release repository being the next in the repo chain is a nontrivial task.</p>
<p>Fortunately, if you decide to use EPEL packages, you&#8217;ll say farewell to all these obstacles. First, the repository becomes significantly smaller just because now you haven&#8217;t to rebuild heaps of packages. Now we have only 160 MiB of binary packages. Second, with a small repository you haven&#8217;t to use cunning repository chain &#8211; everything becomes transparent and easy to support.</p>
<p>It&#8217;s worth to say that it using EPEL packages <a href="http://aababilov.wordpress.com/2012/10/14/openstack-epel-the-dependency-purgatory/" target="_blank">isn&#8217;t as simple as it seems to be</a>. Some important Python libraries are installed in such places that you would have to patch your programs or they wouldn&#8217;t find their dependencies. We decided to reject these libraries and package them ourselves. Luckily, the most of EPEL packages were able to be used in Altai without complications.</p>
<p>As far as we reviewed all Altai packages, we chosen another repository layout. Let&#8217;s briefly describe it.</p>
<ul>
<li>centos6: these packages are maintained and developed by Grid Dynamics team. This group contains customized OpenStack and a lot of home-grown packages signed by Altai team. Sources of these packages are available at <a href="https://github.com/altai" target="_blank">GitHub</a>.</li>
<li>deps: these packages are not a subject of Grid Dynamics development. This category includes the following subdirectories.
<ol>
<li>centos6-updates &#8211; necessary update packages for CentOS 6 signed by CentOS.</li>
<li>epel &#8211; necessary packages from EPEL repositories signed by EPEL.</li>
<li>misc &#8211; packages built and signed by Altai team.</li>
<li>misc-srpms &#8211; source RPMs for misc and signed by Altai team.</li>
</ol>
</li>
</ul>
<p>As you see, we still provide sources of all packages we&#8217;ve built as it&#8217;s appropriate for an open source project.</p>
<p>As it was mentioned above, we keep Altai sources in git. There are two steps between a git repository and a binary RPM. First, a source RPM must be built from a git repo. Second, a binary RPM is built from a source one.</p>
<p>Each step is a not-trivial operation. A source RPM must contain all information required for package build, including source tarball, spec file, and possibly patches that should be applied to unpacked tarball before build. ALT Linux team even developed a powerful toolkit called GEAR (Get Every Archive from git package Repository). GEAR contains tens of individual CLI programs for different purposes, including composing a source RPM from a git repository and importing a tarball to git. We used GEAR in previous releases, but the only feature we needed was git-to-source RPM conversion. Even more, almost every conversion was trivial because we develop software keeping in mind that they will be packaged to RPMs. GEAR, on its turn, allows to maintain third-party software that is under active or slow development and need to be patched before packaging.</p>
<p>Obviously, multifunctional GEAR led to boilerplate configuration files. That&#8217;s why we simplified git-to-source RPM conversion as in our case it could be done with a small and clear script. And there is now need to write GEAR rules file: it&#8217;s sufficient to just place a spec file to git repository.</p>
<p>Frankly speaking, the second step (source-to-binary RPM conversion) is trickier than the first, but, fortunately, there is a ready solution &#8211; mock tool used in Fedora and EPEL. mock prepares a clean and safe build chroot environment for build operation. We have already used mock for previous releases and we haven&#8217;t ceased to take its advantages.</p>
<p>So, Altai 1.0.2 is easy to develop, maintain, and support and in the same time more foolproof.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/openstackgd.wordpress.com/464/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/openstackgd.wordpress.com/464/" /></a> <img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=openstackgd.wordpress.com&#038;blog=20742273&#038;post=464&#038;subd=openstackgd&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>https://openstackgd.wordpress.com/2012/12/06/whats-new-in-altai-1-0-2-from-maintainers-point-of-view/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="https://0.gravatar.com/avatar/f25e76859fc634383f277e4abb3cc9ea?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">aababilov</media:title>
		</media:content>
	</item>
		<item>
		<title>Hungry Process Breaks Your &quot;while read&quot; bash Cycle</title>
		<link>https://openstackgd.wordpress.com/2012/11/01/451/</link>
		<comments>https://openstackgd.wordpress.com/2012/11/01/451/#comments</comments>
		<pubDate>Thu, 01 Nov 2012 19:47:40 +0000</pubDate>
		<dc:creator>aababilov</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://openstackgd.wordpress.com/2012/11/01/451/</guid>
		<description><![CDATA[Reblogged from Alessio Ababilov&#039;s Blog: I am working on a build system that makes easy to control several connected git repositories forming one project. This system is being written in bash and uses lots of rarely used git and bash features. Often I have to iterate over a table usually generated by git, e.g., to [...]<img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=openstackgd.wordpress.com&#038;blog=20742273&#038;post=451&#038;subd=openstackgd&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<div class="reblog-post"><p class="reblog-from"><img alt='' src='https://0.gravatar.com/avatar/f25e76859fc634383f277e4abb3cc9ea?s=25&amp;d=identicon&amp;r=G' class='avatar avatar-25' height='25' width='25' /> <a href="https://aababilov.wordpress.com/2012/10/28/hungry-process-breaks-your-while-read-bash-cycle/">Reblogged from Alessio Ababilov&#039;s Blog:</a></p><div class="wpcom-enhanced-excerpt"><div class="wpcom-enhanced-excerpt-content">
<p>I am working on a build system that makes easy to control several connected git repositories forming one project. This system is being written in bash and uses lots of rarely used git and bash features.</p>
<p>Often I have to iterate over a table usually generated by git, e.g., to see the changes between a commit and its parent, I run:</p>
</div> <p class="read-more"><a href="https://aababilov.wordpress.com/2012/10/28/hungry-process-breaks-your-while-read-bash-cycle/" target="_self"><span>Read more&hellip;</span> 817 more words</a></p></div></div> ]]></content:encoded>
			<wfw:commentRss>https://openstackgd.wordpress.com/2012/11/01/451/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="https://0.gravatar.com/avatar/f25e76859fc634383f277e4abb3cc9ea?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">aababilov</media:title>
		</media:content>
	</item>
		<item>
		<title>OpenStack Migration from Diablo to Essex</title>
		<link>https://openstackgd.wordpress.com/2012/10/20/435/</link>
		<comments>https://openstackgd.wordpress.com/2012/10/20/435/#comments</comments>
		<pubDate>Sat, 20 Oct 2012 10:57:17 +0000</pubDate>
		<dc:creator>aababilov</dc:creator>
				<category><![CDATA[Administration]]></category>
		<category><![CDATA[OpenStack]]></category>

		<guid isPermaLink="false">http://openstackgd.wordpress.com/2012/10/20/435/</guid>
		<description><![CDATA[Reblogged from Alessio Ababilov&#039;s Blog: We use Openstack at Grid Dynamics for more than a year. It is the basis of our private infrastructure originally named Cloud For Grid Dynamics (C4GD) and now known as Altai. C4GD provided cheap and fast VM management for our developers' needs with reliable support. We were using the Diablo [...]<img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=openstackgd.wordpress.com&#038;blog=20742273&#038;post=435&#038;subd=openstackgd&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<div class="reblog-post"><p class="reblog-from"><img alt='' src='https://0.gravatar.com/avatar/f25e76859fc634383f277e4abb3cc9ea?s=25&amp;d=identicon&amp;r=G' class='avatar avatar-25' height='25' width='25' /> <a href="https://aababilov.wordpress.com/2012/10/18/openstack-migration-from-diablo-to-essex/">Reblogged from Alessio Ababilov&#039;s Blog:</a></p><div class="wpcom-enhanced-excerpt"><div class="wpcom-enhanced-excerpt-content">
<p>We use Openstack at Grid Dynamics for more than a year. It is the basis of our private infrastructure originally named Cloud For Grid Dynamics (C4GD) and now known as <a href="http://www.griddynamics.com/solutions/altai-private-cloud-for-developers/">Altai</a>. C4GD provided cheap and fast VM management for our developers' needs with reliable support. We were using the Diablo release and were happy with it.</p>
<p>On 5 April 2012 a new shiny&hellip;</p>
</div> <p class="read-more"><a href="https://aababilov.wordpress.com/2012/10/18/openstack-migration-from-diablo-to-essex/" target="_self"><span>Read more&hellip;</span> 1,336 more words</a></p></div></div> ]]></content:encoded>
			<wfw:commentRss>https://openstackgd.wordpress.com/2012/10/20/435/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="https://0.gravatar.com/avatar/f25e76859fc634383f277e4abb3cc9ea?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">aababilov</media:title>
		</media:content>
	</item>
		<item>
		<title>OpenStack EPEL: the Dependency Purgatory</title>
		<link>https://openstackgd.wordpress.com/2012/10/14/432/</link>
		<comments>https://openstackgd.wordpress.com/2012/10/14/432/#comments</comments>
		<pubDate>Sun, 14 Oct 2012 11:55:32 +0000</pubDate>
		<dc:creator>aababilov</dc:creator>
				<category><![CDATA[Administration]]></category>
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://openstackgd.wordpress.com/2012/10/14/432/</guid>
		<description><![CDATA[Reblogged from Alessio Ababilov&#039;s Blog: When you develop a software system, you can choose any solution between two extreme approaches. Build and maintain all your dependencies. Rely on external repositories and build only your specific packages. Having chosen the first approach, you can be sure that your users will use your great tuned packages of [...]<img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=openstackgd.wordpress.com&#038;blog=20742273&#038;post=432&#038;subd=openstackgd&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<div class="reblog-post"><p class="reblog-from"><img alt='' src='https://0.gravatar.com/avatar/f25e76859fc634383f277e4abb3cc9ea?s=25&amp;d=identicon&amp;r=G' class='avatar avatar-25' height='25' width='25' /> <a href="https://aababilov.wordpress.com/2012/10/14/openstack-epel-the-dependency-purgatory/">Reblogged from Alessio Ababilov&#039;s Blog:</a></p><div class="wpcom-enhanced-excerpt"><div class="wpcom-enhanced-excerpt-content"><a href="https://aababilov.wordpress.com/2012/10/14/openstack-epel-the-dependency-purgatory/" target="_self"><img src="http://aababilov.files.wordpress.com/2012/10/boromir-use-epel-in-his-project.jpeg?w=625&h=176" alt="Click to visit the original post" class="size-full" /></a>
<p>When you develop a software system, you can choose any solution between two extreme approaches.</p>
<ol>
<li>Build and maintain all your dependencies.</li>
<li>Rely on external repositories and build only your specific packages.</li>
</ol>
<p>Having chosen the first approach, you can be sure that your users will use your great tuned packages of carefully chosen versions that are doomed to work properly. And when you see a problem in a dependency, you freely patch it and...</p>
</div> <p class="read-more"><a href="https://aababilov.wordpress.com/2012/10/14/openstack-epel-the-dependency-purgatory/" target="_self"><span>Read more&hellip;</span> 1,481 more words</a></p></div></div> ]]></content:encoded>
			<wfw:commentRss>https://openstackgd.wordpress.com/2012/10/14/432/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="https://0.gravatar.com/avatar/f25e76859fc634383f277e4abb3cc9ea?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">aababilov</media:title>
		</media:content>
	</item>
		<item>
		<title>Altai v1.0.1 is out</title>
		<link>https://openstackgd.wordpress.com/2012/10/09/altai-v1-0-1-is-out/</link>
		<comments>https://openstackgd.wordpress.com/2012/10/09/altai-v1-0-1-is-out/#comments</comments>
		<pubDate>Tue, 09 Oct 2012 13:28:14 +0000</pubDate>
		<dc:creator>Dmitry Maslennikov</dc:creator>
				<category><![CDATA[Administration]]></category>
		<category><![CDATA[Altai]]></category>

		<guid isPermaLink="false">http://openstackgd.wordpress.com/?p=422</guid>
		<description><![CDATA[Hello everybody! A new version of Altai Private Cloud 1.0.1 is ready to use. This is bugfix release. It is recommended to use for everybody instead of 1.0.0. Read our upgrade guide to do this. Changelog Documentation Source Code Packages<img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=openstackgd.wordpress.com&#038;blog=20742273&#038;post=422&#038;subd=openstackgd&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Hello everybody!</p>
<p>A new version of Altai Private Cloud 1.0.1 is ready to use. This is bugfix release. It is recommended to use for everybody instead of 1.0.0. Read our <a href="https://altaicloud.atlassian.net/wiki/display/V101/Update+from+v1.0.0">upgrade guide</a> to do this.</p>
<ul>
<li><a href="https://altaicloud.atlassian.net/wiki/display/V101/ChangeLog">Changelog</a></li>
<li><a href="https://altaicloud.atlassian.net/wiki/display/V101/Altai+v1.0.1+Documentation">Documentation</a></li>
<li><a href="https://github.com/altai">Source Code</a></li>
<li><a href="https://altaicloud.atlassian.net/wiki/display/V101/Downloads">Packages</a></li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/openstackgd.wordpress.com/422/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/openstackgd.wordpress.com/422/" /></a> <img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=openstackgd.wordpress.com&#038;blog=20742273&#038;post=422&#038;subd=openstackgd&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>https://openstackgd.wordpress.com/2012/10/09/altai-v1-0-1-is-out/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="https://0.gravatar.com/avatar/3065fac23ef4980bd93bf90b5813e8d9?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dmaslennikov</media:title>
		</media:content>
	</item>
	</channel>
</rss>
