<?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>Virtual Andy</title>
	<atom:link href="http://virtualandy.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://virtualandy.wordpress.com</link>
	<description>Moving from Virtual Infrastructure Ops to Cloud Ops</description>
	<lastBuildDate>Wed, 01 May 2013 14:24:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='virtualandy.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Virtual Andy</title>
		<link>http://virtualandy.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://virtualandy.wordpress.com/osd.xml" title="Virtual Andy" />
	<atom:link rel='hub' href='http://virtualandy.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Deep Dive: HTB Rate Limiting (QoS) with Open vSwitch and XenServer</title>
		<link>http://virtualandy.wordpress.com/2013/04/29/deep-dive-htb-rate-limiting-qos-on-with-open-vswitch-and-xenserver/</link>
		<comments>http://virtualandy.wordpress.com/2013/04/29/deep-dive-htb-rate-limiting-qos-on-with-open-vswitch-and-xenserver/#comments</comments>
		<pubDate>Mon, 29 Apr 2013 16:00:27 +0000</pubDate>
		<dc:creator>vandyblog</dc:creator>
				<category><![CDATA[Virtual Andy]]></category>
		<category><![CDATA[deepdive]]></category>
		<category><![CDATA[networking]]></category>
		<category><![CDATA[openvswitch]]></category>

		<guid isPermaLink="false">http://virtualandy.wordpress.com/?p=561</guid>
		<description><![CDATA[DISCLAIMER: I&#8217;m still getting my feet wet with Open vSwitch. This post is just a cleaned up version of my scratchpad. Open vSwitch has a few ways of providing rate limiting &#8211; this deep dive will go into the internals of reverse engineering an existing virtual interface&#8217;s egress rate limits applied with tc-htb. Hierarchy Token Bucket [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=virtualandy.wordpress.com&#038;blog=5979717&#038;post=561&#038;subd=virtualandy&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><strong>DISCLAIMER: I&#8217;m still getting my feet wet with Open vSwitch. This post is just a cleaned up version of my scratchpad.</strong></p>
<p>Open vSwitch has a few ways of providing rate limiting &#8211; this deep dive will go into the internals of reverse engineering an existing virtual interface&#8217;s egress rate limits applied with tc-htb. Hierarchy Token Bucket (htb) is a standard linux packet scheduling implementation. More reading on HTB can be done on the <a href="http://luxik.cdi.cz/~devik/qos/htb/">author&#8217;s site</a> &#8211; I found the <a href="http://luxik.cdi.cz/~devik/qos/htb/manual/theory.htm">implementation and theory</a> pretty interesting.</p>
<p>This is current as of Open vSwitch 1.9.</p>
<p>The information needed to retrieve htb rate limits mostly lives in the ovsdb:</p>
<p><a href="http://virtualandy.files.wordpress.com/2013/04/vswitch-schema.png"><img class="alignnone size-large wp-image-564" alt="vswitch-schema" src="http://virtualandy.files.wordpress.com/2013/04/vswitch-schema.png?w=640&#038;h=363" width="640" height="363" /><br />
</a>Open vSwitch Schema (<a href="http://openvswitch.org/ovs-vswitchd.conf.db.5.pdf">http://openvswitch.org/ovs-vswitchd.conf.db.5.pdf</a>)</p>
<p>Things can get complex depending on how your vifs plug into your physical interfaces. In my case, OpenStack Quantum requires an integration bridge which I&#8217;ve attempted to diagram:</p>
<p><a href="http://virtualandy.files.wordpress.com/2013/04/openvswitchqueues1.png"><img class="alignnone size-large wp-image-574" alt="OpenvSwitchQueues" src="http://virtualandy.files.wordpress.com/2013/04/openvswitchqueues1.png?w=640&#038;h=253" width="640" height="253" /></a></p>
<ol>
<li>On instance boot, vifs are plugged into xapi0. xapi0&#8242;s controller nodes pull down information including flows and logical queues.</li>
<li>The flows pulled from (1) set the destination queue on all traffic for the source IP address for the interface.</li>
<li>The queue which the traffic gets sent to goes to a linux-htb ring where the packets are scheduled.</li>
</ol>
<p>Let&#8217;s take a look at an example. I want to retrieve the rate limit according to the hypervisor for vif2.1 which connects to xapi0, xenbr1, and the physical interface eth1. The IP address is 10.0.0.37.</p>
<p>Steps:</p>
<ul>
<li><span style="line-height:13px;">Find the QoS used by the physical interface:<br />
<code># ovs-vsctl find Port name=eth1 | grep qos<br />
qos : 678567ed-9f71-432b-99a2-2f28efced79c</code><br />
</span></li>
<li>Determine which queue is being used for your virtual interface. The value after set_queue is our queue_id.<br />
<code># ovs-ofctl dump-flows xapi0 | grep 10.0.0.37 | grep "set_queue"<br />
... ,nw_src=10.0.0.37 actions=set_queue:<strong><em><span style="text-decoration:underline;">13947</span></em></strong>, ...</code></li>
<li>List the QoS from the first step and its type. NOTE: This command outputs every single OpenFlow queue_id/OVS Queue UUID for the physical interface. The queue_id from the previous step will be the key we&#8217;re interested in and the value is our Queue&#8217;s UUID<br />
<code># ovs-vsctl list Qos 678567ed-9f71-432b-99a2-2f28efced79c | egrep 'queues|type'<br />
queues : { ... <strong><em><span style="text-decoration:underline;">13947</span></em></strong>=787b609b-417c-459f-b9df-9fb5b362e815,... }<br />
type : linux-htb</code></li>
<li>Use the Queue UUID from the previous step to list the Queue:<br />
<code># ovs-vsctl list Queue 787b609b-417c-459f-b9df-9fb5b362e815 | grep other_config<br />
other_config : {... max-rate="614400000" ...}</code></li>
<li>In order to tie it back to tc-htb we have to convert the OpenFlow queue_id+1 to hexadecimal (367c). I think it&#8217;s happening <a href="http://openvswitch.org/gitweb/?p=openvswitch;a=blob;f=lib/netdev-linux.c;h=c0e0c40c5d2df63ef950da1b27192c150c9d43fc;hb=HEAD#l2977">here</a> in the OVS code, but I&#8217;d love to have a definitive answer.<br />
<code># tc -s -d class show dev eth1 | grep 367c | grep ceil # Queue ID + 1 in Hex<br />
class htb 1:367c ... ceil 614400Kbit</code></li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/virtualandy.wordpress.com/561/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/virtualandy.wordpress.com/561/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=virtualandy.wordpress.com&#038;blog=5979717&#038;post=561&#038;subd=virtualandy&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://virtualandy.wordpress.com/2013/04/29/deep-dive-htb-rate-limiting-qos-on-with-open-vswitch-and-xenserver/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/88b234289d8e3e3ea5320e95ee1ab70e?s=96&#38;d=http%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">vandyblog</media:title>
		</media:content>

		<media:content url="http://virtualandy.files.wordpress.com/2013/04/vswitch-schema.png?w=640" medium="image">
			<media:title type="html">vswitch-schema</media:title>
		</media:content>

		<media:content url="http://virtualandy.files.wordpress.com/2013/04/openvswitchqueues1.png?w=640" medium="image">
			<media:title type="html">OpenvSwitchQueues</media:title>
		</media:content>
	</item>
		<item>
		<title>Using Swift and logrotate</title>
		<link>http://virtualandy.wordpress.com/2013/03/31/using-swift-and-logrotate/</link>
		<comments>http://virtualandy.wordpress.com/2013/03/31/using-swift-and-logrotate/#comments</comments>
		<pubDate>Sun, 31 Mar 2013 22:28:48 +0000</pubDate>
		<dc:creator>vandyblog</dc:creator>
				<category><![CDATA[Virtual Andy]]></category>
		<category><![CDATA[devops]]></category>
		<category><![CDATA[logging]]></category>
		<category><![CDATA[openstack]]></category>
		<category><![CDATA[swift]]></category>

		<guid isPermaLink="false">http://virtualandy.wordpress.com/?p=550</guid>
		<description><![CDATA[Ever have an exchange like this? Q: What happened &#60;insert very very long time ago&#62; on this service? A: We can&#8217;t keep logs on the server past 2 months.  Those logs are gone. Just about every IaaS out there has an object store. Amazon offers S3 and OpenStack providers have Swift. Why not just point [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=virtualandy.wordpress.com&#038;blog=5979717&#038;post=550&#038;subd=virtualandy&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Ever have an exchange like this?</p>
<blockquote><p>Q: What happened &lt;insert very very long time ago&gt; on this service?<br />
A: We can&#8217;t keep logs on the server past 2 months.  Those logs are gone.</p></blockquote>
<p>Just about every IaaS out there has an object store. Amazon offers S3 and OpenStack providers have Swift. Why not just point logrotate at one of those object stores?</p>
<p>That&#8217;s just what I&#8217;ve done with <a href="https://github.com/andyhky/swiftrotate">Swiftrotate</a>. It&#8217;s a simple shell script to use with logrotate. Config samples and more are in the project&#8217;s README.</p>
<p>NOTE: It doesn&#8217;t make a lot of sense to use without using dateext in logrotate. A lot of setups don&#8217;t use dateext, so there&#8217;s a utility script to rename all of your files to a dateext format.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/virtualandy.wordpress.com/550/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/virtualandy.wordpress.com/550/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=virtualandy.wordpress.com&#038;blog=5979717&#038;post=550&#038;subd=virtualandy&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://virtualandy.wordpress.com/2013/03/31/using-swift-and-logrotate/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/88b234289d8e3e3ea5320e95ee1ab70e?s=96&#38;d=http%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">vandyblog</media:title>
		</media:content>
	</item>
		<item>
		<title>Home Lab setup</title>
		<link>http://virtualandy.wordpress.com/2013/03/31/home-lab-setup/</link>
		<comments>http://virtualandy.wordpress.com/2013/03/31/home-lab-setup/#comments</comments>
		<pubDate>Sun, 31 Mar 2013 22:24:46 +0000</pubDate>
		<dc:creator>vandyblog</dc:creator>
				<category><![CDATA[Virtual Andy]]></category>
		<category><![CDATA[homelab]]></category>
		<category><![CDATA[openstack]]></category>
		<category><![CDATA[xenserver]]></category>

		<guid isPermaLink="false">http://virtualandy.wordpress.com/?p=541</guid>
		<description><![CDATA[Hardware: Dell XPS 8500 Intel i5 RAM + SSD upgrades from Crucial Local Storage (1T) Software: Fedora Core 18 (base OS) VirtualBox Vagrant DevStack XenServer 6 I&#8217;m setting up a home lab to do some light coding on OpenStack and for testing implementations of next generation software/hardware deployment tools like BOSH and Razor.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=virtualandy.wordpress.com&#038;blog=5979717&#038;post=541&#038;subd=virtualandy&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Hardware:</p>
<ul>
<li>Dell XPS 8500</li>
<li>Intel i5</li>
<li>RAM + SSD upgrades from Crucial</li>
<li>Local Storage (1T)</li>
</ul>
<p>Software:</p>
<ul>
<li><span style="line-height:13px;">Fedora Core 18 (base OS)<br />
</span></li>
<li>VirtualBox</li>
<li>Vagrant</li>
<li>DevStack</li>
<li>XenServer 6<em id="__mceDel"><em id="__mceDel"> </em></em></li>
</ul>
<p>I&#8217;m setting up a home lab to do some light coding on OpenStack and for testing implementations of next generation software/hardware deployment tools like <a href="https://github.com/cloudfoundry/bosh">BOSH</a> and <a href="https://github.com/puppetlabs/Razor">Razor</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/virtualandy.wordpress.com/541/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/virtualandy.wordpress.com/541/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=virtualandy.wordpress.com&#038;blog=5979717&#038;post=541&#038;subd=virtualandy&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://virtualandy.wordpress.com/2013/03/31/home-lab-setup/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/88b234289d8e3e3ea5320e95ee1ab70e?s=96&#38;d=http%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">vandyblog</media:title>
		</media:content>
	</item>
		<item>
		<title>the grep is a lie</title>
		<link>http://virtualandy.wordpress.com/2012/12/27/the-grep-is-a-lie/</link>
		<comments>http://virtualandy.wordpress.com/2012/12/27/the-grep-is-a-lie/#comments</comments>
		<pubDate>Fri, 28 Dec 2012 02:55:30 +0000</pubDate>
		<dc:creator>vandyblog</dc:creator>
				<category><![CDATA[Virtual Andy]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[logging]]></category>

		<guid isPermaLink="false">http://virtualandy.wordpress.com/?p=519</guid>
		<description><![CDATA[grep is a wonderful tool for digging through logs on specific issues, but there are a few cases when people misuse it and claim the logs don&#8217;t have the answers when grep didn&#8217;t yield an answer. Here&#8217;s an example of Rails application logging from Ruby on Rails Guides: Processing PostsController#create (for 127.0.0.1 at 2008-09-08 11:52:54) [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=virtualandy.wordpress.com&#038;blog=5979717&#038;post=519&#038;subd=virtualandy&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><code>grep</code> is a wonderful tool for digging through logs on specific issues, but there are a few cases when people misuse it and claim the logs don&#8217;t have the answers when grep didn&#8217;t yield an answer.</p>
<p>Here&#8217;s an example of Rails application logging from <a href="http://guides.rubyonrails.org/debugging_rails_applications.html">Ruby on Rails Guides</a>:</p>
<pre>Processing PostsController#create (for 127.0.0.1 at 2008-09-08 11:52:54) [POST]
  Session ID: BAh7BzoMY3NyZl9pZCIlMDY5MWU1M2I1ZDRjODBlMzkyMWI1OTg2NWQyNzViZjYiCmZsYXNoSUM6J0FjdGl
vbkNvbnRyb2xsZXI6OkZsYXNoOjpGbGFzaEhhc2h7AAY6CkB1c2VkewA=--b18cd92fba90eacf8137e5f6b3b06c4d724596a4
  Parameters: {"commit"=&gt;"Create", "post"=&gt;{"title"=&gt;"Debugging Rails",
 "body"=&gt;"I'm learning how to print in logs!!!", "published"=&gt;"0"},
 "authenticity_token"=&gt;"2059c1286e93402e389127b1153204e0d1e275dd", "action"=&gt;"create", "controller"=&gt;"posts"}
New post: {"updated_at"=&gt;nil, "title"=&gt;"Debugging Rails", "body"=&gt;"I'm learning how to print in logs!!!",
 "published"=&gt;false, "created_at"=&gt;nil}
Post should be valid: true
  Post Create (0.000443)   INSERT INTO "posts" ("updated_at", "title", "body", "published",
 "created_at") VALUES('2008-09-08 14:52:54', 'Debugging Rails',
 'I''m learning how to print in logs!!!', 'f', '2008-09-08 14:52:54')
The post was saved and now the user is going to be redirected...
Redirected to #
Completed in 0.01224 (81 reqs/sec) | DB: 0.00044 (3%) | 302 Found [http://localhost/posts]</pre>
<p>Grepping for &#8220;learning&#8221; will give us just a peek but there&#8217;s much more information to be found in the full request.</p>
<p><code># grep learning applog.log</code></p>
<pre> "body"=&gt;"I'm learning how to print in logs!!!", "published"=&gt;"0"},
New post: {"updated_at"=&gt;nil, "title"=&gt;"Debugging Rails", "body"=&gt;"I'm learning how to print in logs!!!",
 'I''m learning how to print in logs!!!', 'f', '2008-09-08 14:52:54')</pre>
<p>If you know the exact format of your applications log messages, you can use output context flags within <code>grep</code> (<code>-A -B</code> and <code>-C</code>). However, a lot of the time the exact number of context lines needed is unknown or a particular stack trace could have a varying length.</p>
<p>Rails applications aren&#8217;t the only ones &#8211; <a href="https://github.com/openstack/nova/blob/master/nova/openstack/common/log.py#L397">the logging module within Nova</a> also falls to this same issue. <a href="http://en.wikipedia.org/wiki/Common_Log_Format">Common Log Format</a> seems to get around the problem, but many modern applications or ones in debug mode have multiline/transaction-ID logging which make sole reliance on grep a bad decision.</p>
<p>My preferred technique: Use <code>grep</code> to determine which log file to open in <code>less</code>. Then, use the pattern search within <code>less</code> that I grepped and take a look at the clues provided in the context. Sometimes it&#8217;s as simple as two lines later you&#8217;ll see a <code>SIGTERM</code>, but you wouldn&#8217;t have grepped for <code>SIGTERM</code>.</p>
<p>Another tip with <code>less</code> and pattern matching: if you have a large file and you know relative to the file, your search string is toward the bottom hit <code>G</code> to move <code>less</code> to the bottom of the file, then do your <code>/pattern</code> search, but then press <code>N</code> to find the previous result.</p>
<p>One last thing: if you haven&#8217;t given <code>zless</code>/<code>zgrep</code> a try on compressed files, they&#8217;re worth their weight in gold.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/virtualandy.wordpress.com/519/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/virtualandy.wordpress.com/519/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=virtualandy.wordpress.com&#038;blog=5979717&#038;post=519&#038;subd=virtualandy&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://virtualandy.wordpress.com/2012/12/27/the-grep-is-a-lie/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/88b234289d8e3e3ea5320e95ee1ab70e?s=96&#38;d=http%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">vandyblog</media:title>
		</media:content>
	</item>
		<item>
		<title>Another Quick Post on ack</title>
		<link>http://virtualandy.wordpress.com/2012/12/01/another-quick-post-on-ack/</link>
		<comments>http://virtualandy.wordpress.com/2012/12/01/another-quick-post-on-ack/#comments</comments>
		<pubDate>Sat, 01 Dec 2012 15:19:03 +0000</pubDate>
		<dc:creator>vandyblog</dc:creator>
				<category><![CDATA[Virtual Andy]]></category>
		<category><![CDATA[ack]]></category>
		<category><![CDATA[code]]></category>

		<guid isPermaLink="false">http://virtualandy.wordpress.com/?p=507</guid>
		<description><![CDATA[Digging through code for common terms can yield lots of results. ack provides a way to send the output to less. Just add the following to ~/.ackrc.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=virtualandy.wordpress.com&#038;blog=5979717&#038;post=507&#038;subd=virtualandy&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Digging through code for common terms can yield lots of results. <a href="http://betterthangrep.com">ack</a> provides a way to send the output to less. Just add the following to ~/.ackrc.</p>
<pre class="brush: plain; title: ; notranslate">--pager=less -r</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/virtualandy.wordpress.com/507/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/virtualandy.wordpress.com/507/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=virtualandy.wordpress.com&#038;blog=5979717&#038;post=507&#038;subd=virtualandy&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://virtualandy.wordpress.com/2012/12/01/another-quick-post-on-ack/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/88b234289d8e3e3ea5320e95ee1ab70e?s=96&#38;d=http%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">vandyblog</media:title>
		</media:content>
	</item>
		<item>
		<title>Deep Dive: OpenStack Nova Snapshot Image Creation with XenAPI/XenServer and Glance</title>
		<link>http://virtualandy.wordpress.com/2012/11/26/deep-dive-openstack-nova-snapshot-image-creation-with-xenapixenserver-and-glance/</link>
		<comments>http://virtualandy.wordpress.com/2012/11/26/deep-dive-openstack-nova-snapshot-image-creation-with-xenapixenserver-and-glance/#comments</comments>
		<pubDate>Mon, 26 Nov 2012 13:20:39 +0000</pubDate>
		<dc:creator>vandyblog</dc:creator>
				<category><![CDATA[Virtual Andy]]></category>
		<category><![CDATA[deepdive]]></category>
		<category><![CDATA[glance]]></category>
		<category><![CDATA[imaging]]></category>
		<category><![CDATA[nova]]></category>
		<category><![CDATA[openstack]]></category>
		<category><![CDATA[xenserver]]></category>

		<guid isPermaLink="false">http://virtualandy.wordpress.com/?p=466</guid>
		<description><![CDATA[Based on currently available code (nova: a77c0c50166aac04f0707af25946557fbd43ad44 2012-11-02/python-glanceclient: 16aafa728e4b8309b16bcc120b10bc20372883f4 2012-11-07/glance: 9dae32d60fc285d03fdb5586e3368d229485fdb4) This is a deep dive into what happens (and where in the code) during image creation with a Nova/Glance configuration that is backed by XenServer/XenAPI.  Hopefully the methods used in Glance/Nova’s code will not change over time, and this guide will remain good starting point. Disclaimer: I am [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=virtualandy.wordpress.com&#038;blog=5979717&#038;post=466&#038;subd=virtualandy&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Based on currently available code (nova: <a href="https://github.com/openstack/nova/tree/a77c0c50166aac04f0707af25946557fbd43ad44">a77c0c50166aac04f0707af25946557fbd43ad44</a> 2012-11-02/python-glanceclient: <a title="16aafa728e4b8309b16bcc120b10bc20372883f4" href="https://github.com/openstack/python-glanceclient/tree/16aafa728e4b8309b16bcc120b10bc20372883f4">16aafa728e4b8309b16bcc120b10bc20372883f4</a> 2012-11-07/glance: <a href="https://github.com/openstack/glance/tree/9dae32d60fc285d03fdb5586e3368d229485fdb4">9dae32d60fc285d03fdb5586e3368d229485fdb4</a>)</p>
<p>This is a deep dive into what happens (and where in the code) during image creation with a Nova/Glance configuration that is backed by XenServer/XenAPI.  Hopefully the methods used in Glance/Nova’s code will not change over time, and this guide will remain good starting point.</p>
<p><strong>Disclaimer: I am _not_ a developer, and these are really just best guesses. Corrections are welcome.</strong></p>
<p><strong> </strong></p>
<p>1) nova-api receives an imaging request. The request is validated, checking for a name and making sure the request is within quotas. Instance data is retrieved, as well as block device mappings. If the instance is volume backed, a separate compute API call is made to snapshot (self.compute_api.snapshot_volume_backed). For this deep dive, we&#8217;ll assume there is no block device mapping. self.compute_api.snapshot is called. The newly created image UUID is returned.</p>
<ul>
<li>nova/api/openstack/compute/servers.py</li>
<li>def _action_create_image</li>
</ul>
<p>2) The compute API gets the request and calls _create_image.  The instance&#8217;s task state is set to IMAGE_SNAPSHOT. Notifications are created of the state change. Several properties are collected about the image, including the minimum RAM, customer, and base image ref.The non inheritable instance_system meta data is also collected. (2a, 2b, 2c) self.image_service.create and (3) self.compute_rpcapi.snapshot_instance are called.</p>
<ul>
<li>nova/compute/api.py</li>
<li>def snapshot</li>
<li>def _create_image</li>
</ul>
<p>2a) The collected metadata from 2 is put into a glance-friendly format, and sent to glance. The glance client&#8217;s create is called.</p>
<ul>
<li>nova/image/glance.py</li>
<li>def create</li>
</ul>
<p>2b) Glance (client) sends a POST the glance server to /v1/images with the gathered image metadata from (3).</p>
<ul>
<li>glanceclient/v1/images.py</li>
<li>def create</li>
</ul>
<p>2c) Glance (server) receives the POST. Per the code comments:</p>
<blockquote><p>Upon a successful save of the image data and metadata, a response<br />
containing metadata about the image is returned, including its<br />
opaque identifier.</p></blockquote>
<ul>
<li>glance/api/v1</li>
<li>def create</li>
<li>def _handle_source</li>
</ul>
<p>3) Compute RPC API casts a message to the queue for the instance&#8217;s compute node.</p>
<ul>
<li>nova/compute/rpcapi.py</li>
<li>def snapshot_instance</li>
</ul>
<p>4) The instance&#8217;s power state is read and updated. (4a) The XenAPI driver&#8217;s snapshot() is called. Notification is created for the snapshot&#8217;s start and end.</p>
<ul>
<li>nova/compute/manager.py</li>
<li>def snapshot_instance</li>
</ul>
<p>4a) The vmops snapshot is called (4a1).</p>
<ul>
<li>nova/virt/xenapi/driver.py</li>
<li>def snapshot</li>
</ul>
<p>4a1) The snapshot is created in XenServer via (4a1i) vm_utils, and (4a1ii) uploaded to glance. The code&#8217;s comments say this:</p>
<blockquote><p>Steps involved in a XenServer snapshot:</p>
<p>1. XAPI-Snapshot: Snapshotting the instance using XenAPI. This<br />
creates: Snapshot (Template) VM, Snapshot VBD, Snapshot VDI,<br />
Snapshot VHD<br />
2. Wait-for-coalesce: The Snapshot VDI and Instance VDI both point to<br />
a &#8216;base-copy&#8217; VDI. The base_copy is immutable and may be chained<br />
with other base_copies. If chained, the base_copies<br />
coalesce together, so, we must wait for this coalescing to occur to<br />
get a stable representation of the data on disk.<br />
3. Push-to-glance: Once coalesced, we call a plugin on the XenServer<br />
that will bundle the VHDs together and then push the bundle into<br />
Glance.</p></blockquote>
<ul>
<li>nova/virt/xenapi/vmops.py</li>
<li>def snapshot</li>
</ul>
<p>4a1i) The instance&#8217;s root disk is recorded and its VHD parent is also recorded. The SR is recorded. The instance&#8217;s root VDI is snapshotted. Operations are blocked until a coalesce completes in _wait_for_vhd_coalesce (4a1i-1).</p>
<ul>
<li>nova/virt/xenapi/vm_utils.py</li>
<li>def snapshot_attached_here</li>
</ul>
<p>4a1i-1) The end result of this process is outlined in the code comments:</p>
<blockquote><p>Before coalesce:</p>
<pre>* original_parent_vhd
    * parent_vhd
        snapshot</pre>
<p>After coalesce:</p>
<pre>* parent_vhd
    snapshot</pre>
</blockquote>
<p>In (4a1i) the original vdi uuid was recorded. The SR is scanned. In a nutshell, the code is ensuring that the desired layout above is met before allowing the snapshot to continue. The code polls CONF.xenapi_vhd_coalesce_max_attempts times and sleeps CONF.xenapi_vhd_coalesce_poll_interval: the SR is scanned. The original_parent_uuid is compared to the parent_uuid&#8230; if they don&#8217;t match we wait a while and check again for the coalescing to complete.</p>
<ul>
<li>nova/virt/xenapi/vm_utils.py</li>
<li>def _wait_for_vhd_coalesce</li>
</ul>
<p>4a1ii) The glance API servers are retrieved from configuration. The glance upload_vhd XenAPI plugin is called.</p>
<ul>
<li>nova/virt/xenapi/vm_utils.py</li>
<li>def upload_image</li>
</ul>
<p>4a2) A staging area is created, prepared, and _upload_tarball is called.</p>
<ul>
<li>plugins/xenserver/xenapi/etc/xapi.d/plugins/glance</li>
<li>def upload_vhd</li>
</ul>
<p>4a3) The staging area is prepared. This basically symlinks the snapshot VHDs to a temporary folder in the SR.</p>
<ul>
<li>plugins/xenserver/xenapi/etc/xapi.d/plugins/utils.py</li>
<li>def prepare_staging_area</li>
</ul>
<p>4a4) The comments say it best:</p>
<blockquote><p>Create a tarball of the image and then stream that into Glance<br />
using chunked-transfer-encoded HTTP.</p></blockquote>
<p>A URL is constructed and a connection is opened to it. The image meta properties (like status) are collected and added as HTTP headers. The tarball is created, and streamed to glance in CHUNK_SIZE increments.  The HTTP stream is terminated, the connection checks for an OK from glance and reports accordingly.</p>
<ul>
<li>plugins/xenserver/xenapi/etc/xapi.d/plugins/glance</li>
<li>def _upload_tarball</li>
</ul>
<p>(Glance Server)</p>
<p>5) I&#8217;ve removed some of the obvious URL routing functions in glance to get down to the meat of this process. Basically, the PUT request goes to glance API.  The API interacts with the registry again, but this time there is data to be uploaded.  The image&#8217;s metadata is validated for activation, and then _upload_and_activate is called. _upload_and_activate is basically a way to call _upload and ensure that if it works, activate the image.  _upload checks to see if we&#8217;re copying, but we&#8217;re not. It also checks to see if the HTTP request is application/octet-stream. Then, an object store like swift is inferred from the request or used from the glance configuration (self.get_store_or_400). Finally, the image is added to the object store and its checksum is verified and the glance registry is updated. Notifications are also sent for image.upload.</p>
<ul>
<li>glance/api/v1/images.py</li>
<li>def update</li>
<li>def _handle_source</li>
<li>def _upload_and_activate</li>
<li>def _upload</li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/virtualandy.wordpress.com/466/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/virtualandy.wordpress.com/466/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=virtualandy.wordpress.com&#038;blog=5979717&#038;post=466&#038;subd=virtualandy&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://virtualandy.wordpress.com/2012/11/26/deep-dive-openstack-nova-snapshot-image-creation-with-xenapixenserver-and-glance/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/88b234289d8e3e3ea5320e95ee1ab70e?s=96&#38;d=http%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">vandyblog</media:title>
		</media:content>
	</item>
		<item>
		<title>Deep Dive: Openstack Nova Rescue Mode with XenAPI / XenServer</title>
		<link>http://virtualandy.wordpress.com/2012/11/04/deep-dive-openstack-nova-rescue-mode-with-xenapi-xenserver/</link>
		<comments>http://virtualandy.wordpress.com/2012/11/04/deep-dive-openstack-nova-rescue-mode-with-xenapi-xenserver/#comments</comments>
		<pubDate>Sun, 04 Nov 2012 16:33:24 +0000</pubDate>
		<dc:creator>vandyblog</dc:creator>
				<category><![CDATA[Virtual Andy]]></category>
		<category><![CDATA[deepdive]]></category>
		<category><![CDATA[nova]]></category>
		<category><![CDATA[openstack]]></category>
		<category><![CDATA[rescue]]></category>
		<category><![CDATA[xenapi]]></category>
		<category><![CDATA[xenserver]]></category>

		<guid isPermaLink="false">http://virtualandy.wordpress.com/?p=447</guid>
		<description><![CDATA[Based on currently available code (a77c0c50166aac04f0707af25946557fbd43ad44 2012-11-02) This is a deep dive into what happens (and where in the code) during a rescue/unrescue scenario with a Nova configuration that is backed by XenServer/XenAPI.  Hopefully the methods used in Nova’s code will not change over time, and this guide will remain good starting point. Rescue 1) [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=virtualandy.wordpress.com&#038;blog=5979717&#038;post=447&#038;subd=virtualandy&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Based on currently available code (<a href="https://github.com/openstack/nova/tree/a77c0c50166aac04f0707af25946557fbd43ad44">a77c0c50166aac04f0707af25946557fbd43ad44</a> 2012-11-02)</p>
<p>This is a deep dive into what happens (and where in the code) during a rescue/unrescue scenario with a Nova configuration that is backed by XenServer/XenAPI.  Hopefully the methods used in Nova’s code will not change over time, and this guide will remain good starting point.</p>
<p><strong>Rescue</strong></p>
<p>1) nova-api receives a rescue request. A new admin password is generated via utils.generate_password meeting FLAGS.password_length length requirement. The API calls rescue on the compute api.</p>
<ul>
<li>nova/api/openstack/compute/contrib/rescue.py</li>
<li>def _rescue</li>
</ul>
<p>2) The compute API updates the vm_state to RESCUING, and calls the compute rpcapi rescue_instance with the same details.</p>
<ul>
<li>nova/compute/api.py</li>
<li>def rescue</li>
</ul>
<p>3) The RPC API casts a rescue_instance message to the compute node&#8217;s message queue.</p>
<ul>
<li>nova/compute/rpcapi.py</li>
<li>def rescue_instance</li>
</ul>
<p>4) nova-compute consumes the message in the queue containing the rescue request. The admin password is retrieved, if one was not passed this far one will be generated via utils.generate_password with the same flags as step 1. It then records details about the source instance, like networking and image details. The compute driver rescue function is called. After that (4a-4c) completes, the instance&#8217;s vm_state is updated to rescued.</p>
<ul>
<li>nova/compute/manager.py</li>
<li>def rescue_instance</li>
</ul>
<p>4a) This abstraction was skipped over in the last two deepdives, but for the sake of completeness: Driver.rescue is called. This just calls _vmops.rescue, where the real work happens.</p>
<ul>
<li>nova/virt/xenapi/driver.py</li>
<li>def rescue</li>
</ul>
<p>4b) Checks are performed to ensure the instance isn&#8217;t in rescue mode already. The original instance is shutdown via XenAPI. The original instance is bootlocked. A new instance is spawned with -rescue in the name-label.</p>
<ul>
<li>nova/virt/xenapi/vmops.py</li>
<li>def rescue</li>
</ul>
<p>4c) A new VM is created just as all other VMs, with the source VM&#8217;s metadata. The root volume from the instance we are rescuing is attached as a secondary disk. The instance&#8217;s networking is the same, however the new hostname is RESCUE-hostname.</p>
<ul>
<li>nova/virt/xenapi/vmops.py</li>
<li>def spawn -&gt; attach_disks_step rescue condition</li>
</ul>
<p><strong>Unrescue</strong></p>
<p>1) nova-api receives an unrescue request.</p>
<ul>
<li>nova/api/openstack/compute/contrib/rescue.py</li>
<li>def _unrescue</li>
</ul>
<p>2) The compute API updates the vm_state to UNRESCUING, and calls the compute rpcapi unrescue_instance with the same details.</p>
<ul>
<li>nova/compute/api.py</li>
<li>def unrescue</li>
</ul>
<p>3) The RPC API casts an unrescue_instance message to the compute node&#8217;s message queue.</p>
<ul>
<li>nova/compute/rpcapi.py</li>
<li>def unrescue_instance</li>
</ul>
<p>4) The compute manager receives the unrescue_instance message and calls the driver&#8217;s rescue method.</p>
<ul>
<li>nova/compute/manager.py</li>
<li>def unrescue_instance</li>
</ul>
<p>4a)  Driver.unrescue is called. This just calls _vmops.unrescue, where the real work happens.</p>
<ul>
<li>nova/virt/xenapi/driver.py</li>
<li>def unrescue</li>
</ul>
<p>4b) The rescue VM is found. Checks are done to ensure the VM is in rescue mode. The original VM is found. The rescue instance has _destroy_rescue_instance performed (4b1). After that completes, the source VM&#8217;s bootlock is released and the VM is started.</p>
<ul>
<li>nova/virt/xenapi/vmops.py</li>
<li>def unrescue</li>
</ul>
<p>4b1) A hard shutdown is issued on the rescue instance. Via XenAPI, the root disk of the original instance is found. All VDIs attached  to the rescue instance are destroyed omitting the root of the original instance. The rescue VM is destroyed.</p>
<ul>
<li>nova/virt/xenapi/vmops.py</li>
<li>def _destroy_rescue_instance</li>
</ul>
<p>&nbsp;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/virtualandy.wordpress.com/447/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/virtualandy.wordpress.com/447/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=virtualandy.wordpress.com&#038;blog=5979717&#038;post=447&#038;subd=virtualandy&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://virtualandy.wordpress.com/2012/11/04/deep-dive-openstack-nova-rescue-mode-with-xenapi-xenserver/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/88b234289d8e3e3ea5320e95ee1ab70e?s=96&#38;d=http%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">vandyblog</media:title>
		</media:content>
	</item>
		<item>
		<title>Code Diving: Ack (Better than Grep)</title>
		<link>http://virtualandy.wordpress.com/2012/11/02/code-diving-ack-better-than-grep/</link>
		<comments>http://virtualandy.wordpress.com/2012/11/02/code-diving-ack-better-than-grep/#comments</comments>
		<pubDate>Fri, 02 Nov 2012 22:26:32 +0000</pubDate>
		<dc:creator>vandyblog</dc:creator>
				<category><![CDATA[Virtual Andy]]></category>

		<guid isPermaLink="false">http://virtualandy.wordpress.com/?p=449</guid>
		<description><![CDATA[Code diving is a fact of the DevOps life and I just wanted to pass along a utility that makes those OpenStack Nova Deep Dive posts possible: ack. ack is awesome for the following reasons: speed ignores SCM directories like .git/.svn prints line numbers! Back to some code diving&#8230;<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=virtualandy.wordpress.com&#038;blog=5979717&#038;post=449&#038;subd=virtualandy&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Code diving is a fact of the DevOps life and I just wanted to pass along a utility that makes those <a href="http://virtualandy.wordpress.com/tag/deepdive/">OpenStack Nova Deep Dive</a> posts possible: <a href="http://betterthangrep.com">ack</a>.</p>
<p>ack is awesome for the following reasons:</p>
<ul>
<li>speed</li>
<li>ignores SCM directories like .git/.svn</li>
<li>prints line numbers!</li>
</ul>
<p>Back to some code diving&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/virtualandy.wordpress.com/449/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/virtualandy.wordpress.com/449/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=virtualandy.wordpress.com&#038;blog=5979717&#038;post=449&#038;subd=virtualandy&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://virtualandy.wordpress.com/2012/11/02/code-diving-ack-better-than-grep/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/88b234289d8e3e3ea5320e95ee1ab70e?s=96&#38;d=http%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">vandyblog</media:title>
		</media:content>
	</item>
		<item>
		<title>Deep dive: OpenStack Nova Resize Down with XenAPI/Xenserver</title>
		<link>http://virtualandy.wordpress.com/2012/10/28/deep-dive-openstack-nova-resize-down-with-xenapixenserver/</link>
		<comments>http://virtualandy.wordpress.com/2012/10/28/deep-dive-openstack-nova-resize-down-with-xenapixenserver/#comments</comments>
		<pubDate>Sun, 28 Oct 2012 18:09:38 +0000</pubDate>
		<dc:creator>vandyblog</dc:creator>
				<category><![CDATA[Virtual Andy]]></category>
		<category><![CDATA[deepdive]]></category>
		<category><![CDATA[nova]]></category>
		<category><![CDATA[openstack]]></category>
		<category><![CDATA[resize]]></category>
		<category><![CDATA[xenserver]]></category>

		<guid isPermaLink="false">http://virtualandy.wordpress.com/?p=415</guid>
		<description><![CDATA[Based on the currently available code (commit 114109dbf4094ae6b6333d41c84bebf6f85c4e48 – 2012-09-13) This is a deep dive into what happens (and where in the code) during a resize down  (e.g., flavor 4 to flavor 2) with a Nova configuration that is backed by XenServer/XenAPI.  Hopefully the methods used in Nova’s code will not change over time, and this guide will [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=virtualandy.wordpress.com&#038;blog=5979717&#038;post=415&#038;subd=virtualandy&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><a href="http://docs.openstack.org/developer/nova/">Based on the currently available code (<a href="https://github.com/openstack/nova/tree/114109dbf4094ae6b6333d41c84bebf6f85c4e48">commit 114109dbf4094ae6b6333d41c84bebf6f85c4e48</a> – 2012-09-13)</a></p>
<p>This is a deep dive into what happens (and where in the code) during a resize down  (e.g., flavor 4 to flavor 2) with a Nova configuration that is backed by XenServer/XenAPI.  Hopefully the methods used in Nova’s code will not change over time, and this guide will remain good starting point.</p>
<p>Steps 1-6a are identical to my previous entry &#8220;<a href="http://virtualandy.wordpress.com/2012/09/13/deep-dive-nova-resize-up-xenapi/">Deep dive: OpenStack Nova Resize Up with XenAPI/Xenserver</a>&#8220;. This deep dive will examine the divergence between resize up and resize down in Nova, as there are a few key differences.</p>
<p>6b) The instance resize progress gets an update. The VM is shutdown via XenAPI.</p>
<ul>
<li>./nova/virt/xenapi/vmops.py</li>
<li>def _migrate_disk_resizing_down</li>
</ul>
<p>6c) The source VDI is copied on the hypervisor via XenAPI VDI.copy.  Then, a different, new VDI is along with a VBD that it is plugged into the compute node.  The partition and filesystem of the new disk are resized via _resize_part_and_fs, using e2fsck, tune2fs,  parted, and tune2fs. The source VDI copy is also attached to nova-compute. Via _sparse_copy, which is configurable but by default true, nova-compute temporarily takes ownership of both devices (source read, dest write) and performs a block level copy, omitting zeroed blocks.</p>
<ul>
<li>./nova/virt/xenapi/vm_utils.py</li>
<li>def _resize_part_and_fs</li>
<li>def _sparse_copy</li>
<li>nova/utils.py</li>
<li>def temporary_chown</li>
</ul>
<p>6d) Progress is again updated. The devices that were attached are unplugged, and the VHDs are copied in the same fashion as outlined in steps 6a1i-6b2 from the <a href="http://virtualandy.wordpress.com/2012/09/13/deep-dive-nova-resize-up-xenapi/">deep dive on resizing up</a> are used, aside from 6b2.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/virtualandy.wordpress.com/415/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/virtualandy.wordpress.com/415/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=virtualandy.wordpress.com&#038;blog=5979717&#038;post=415&#038;subd=virtualandy&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://virtualandy.wordpress.com/2012/10/28/deep-dive-openstack-nova-resize-down-with-xenapixenserver/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/88b234289d8e3e3ea5320e95ee1ab70e?s=96&#38;d=http%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">vandyblog</media:title>
		</media:content>
	</item>
		<item>
		<title>The SDN Craze</title>
		<link>http://virtualandy.wordpress.com/2012/09/20/the-sdn-craze/</link>
		<comments>http://virtualandy.wordpress.com/2012/09/20/the-sdn-craze/#comments</comments>
		<pubDate>Fri, 21 Sep 2012 02:05:02 +0000</pubDate>
		<dc:creator>vandyblog</dc:creator>
				<category><![CDATA[Virtual Andy]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[sdn]]></category>

		<guid isPermaLink="false">http://virtualandy.wordpress.com/?p=421</guid>
		<description><![CDATA[I&#8217;ve been looking into the SDN craze over the past few weeks and assembled a few links along the way: Openstack Quantum Video Fundamentals of VXLAN - Do we really need Stateless Transport Tunneling (STT)? Software Defined Data Center - very cool to see this coming from a KY university, even if it is UK =P Dodging [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=virtualandy.wordpress.com&#038;blog=5979717&#038;post=421&#038;subd=virtualandy&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve been looking into the SDN craze over the past few weeks and assembled a few links along the way:</p>
<ul>
<li><a href="http://www.infoq.com/presentations/Quantum-Virtual-Networks-for-OpenStack">Openstack Quantum Video</a></li>
<li><a href="https://www.youtube.com/watch?feature=player_embedded&amp;v=j7on2iLk5ls">Fundamentals of VXLAN</a> - <a href="http://blog.ioshints.info/2012/03/do-we-really-need-stateless-transport.html">Do we really need Stateless Transport Tunneling (STT)</a>?</li>
<li><a href="http://networkstatic.net/software-defined-data-center-slidedeck/">Software Defined Data Center</a> - very cool to see this coming from a KY university, even if it is UK =P</li>
<li><a href="http://bradhedlund.com/2012/02/08/dodging-open-protocols-with-open-software/">Dodging Open Protocols with Software</a></li>
<li>On that note &#8230; all of <a href="http://bradhedlund.com/">Brad Hedlund&#8217;s</a> site</li>
<li><a href="http://openvswitch.org/cgi-bin/gitweb.cgi?p=openvswitch;a=blob_plain;f=FAQ;hb=HEAD">Open vSwitch FAQ</a></li>
</ul>
<p>&nbsp;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/virtualandy.wordpress.com/421/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/virtualandy.wordpress.com/421/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=virtualandy.wordpress.com&#038;blog=5979717&#038;post=421&#038;subd=virtualandy&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://virtualandy.wordpress.com/2012/09/20/the-sdn-craze/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/88b234289d8e3e3ea5320e95ee1ab70e?s=96&#38;d=http%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">vandyblog</media:title>
		</media:content>
	</item>
	</channel>
</rss>
