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

<channel>
	<title>Nickapedia</title>
	<atom:link href="http://nickapedia.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://nickapedia.com</link>
	<description>abstract your problems away</description>
	<lastBuildDate>Sun, 05 May 2013 16:06:00 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.2</generator>
		<item>
		<title>VMware &amp; Puppet : One More Step Forward</title>
		<link>http://nickapedia.com/2013/02/27/vmware-puppet-one-more-step-forward/</link>
		<comments>http://nickapedia.com/2013/02/27/vmware-puppet-one-more-step-forward/#comments</comments>
		<pubDate>Wed, 27 Feb 2013 07:45:02 +0000</pubDate>
		<dc:creator>nick</dc:creator>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[VirtualAppliances]]></category>
		<category><![CDATA[VMware]]></category>
		<category><![CDATA[Automation]]></category>
		<category><![CDATA[puppet]]></category>
		<category><![CDATA[puppet forge]]></category>
		<category><![CDATA[vmware partner exchange]]></category>

		<guid isPermaLink="false">http://nickapedia.com/?p=2212</guid>
		<description><![CDATA[I wake up everyday committed to not doing things the same old way. That is why my title has that funny word &#8216;Automation&#8217; in it. I am tasked with finding a way to make what is fragile, expensive, risky, and complex; easier to manage. While most of what I am working on at VMware is not ready for the light of day. There are some things that have come out of our work that would have a greater benefit being in the public space. If you are even an infrequent reader of this blog (which given my posts lately, is everyone) you know that I am a huge fan of PuppetLabs. More than that I am a huge fan of automation using DevOps-style toolsets enabled by community development. Right now I belong to an amazing team of crazy talented engineers. I rarely go a week without seeing something that makes me wish I was capable of doing a backflip. I am proud to announce that today some of that magic is now being put in a place for everyone. Today VMware and PuppetLabs are releasing the first set of modules for managing VMware environments. This brings a bunch of new features for the first time: Management for the vCenter Appliance /w Complete initialization &#8211; Just point as a VM that was deployed from the OVF and it will standup vCenter. Datacenter and Cluster configuration &#8211; HA, DRS, and more. The one caveat being EVC (but coming soon) ESXi Host &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>I wake up everyday committed to not doing things the same old way. That is why my title has that funny word &#8216;Automation&#8217; in it. I am tasked with finding a way to make what is fragile, expensive, risky, and complex; easier to manage.</p>
<p>While most of what I am working on at VMware is not ready for the light of day. There are some things that have come out of our work that would have a greater benefit being in the public space. If you are even an infrequent reader of this blog (which given my posts lately, is everyone) you know that I am a huge fan of PuppetLabs. More than that I am a huge fan of automation using DevOps-style toolsets enabled by community development.</p>
<p>Right now I belong to an amazing team of crazy talented engineers. I rarely go a week without seeing something that makes me wish I was capable of doing a backflip. I am proud to announce that today some of that magic is now being put in a place for everyone.</p>
<p>Today VMware and PuppetLabs are releasing the first set of modules for managing VMware environments. This brings a bunch of new features for the first time:</p>
<p>Management for the vCenter Appliance /w</p>
<ul>
<li>Complete initialization &#8211; Just point as a VM that was deployed from the OVF and it will standup vCenter.</li>
<li>Datacenter and Cluster configuration &#8211; HA, DRS, and more. The one caveat being EVC (but coming soon)</li>
<li>ESXi Host &#8211; Grab and add ESXi hosts to clusters and manage them through Puppet. Something that *might* align nicely with another tool called <a href="http://nickapedia.com/2012/05/21/lex-parsimoniae-cloud-provisioning-with-a-razor/">Razor</a>.</li>
</ul>
<p>Management for vShield Manager</p>
<ul>
<li>Complete initialization &#8211; Just like the VCSA, point Puppet at your deployed vSM appliance and watch it complete the setup and stand it up.</li>
<li>Association to vCenter &#8211; Bind the vSM to a vCenter automagically.</li>
<li>vShield Edge Deployment &#8211; Point it at a resource pool and easily deploy vShield Edges to vCenter.</li>
<li>vShield Edge Configuration &#8211; Control the firewall, NAT, load-balancing, and more using Puppet config. &#8211; Note: We are actually adding more this now so this may be in flux.</li>
</ul>
<p>With the features above you may now deploy out VCSA and vSM appliances and automatically configure them into vSphere clusters with firewall, NAT, load-balancing and more. You can carve up the ESXi nodes into any number of clusters or config. And this is just the beginning.</p>
<p>The other great part of this is that we are today releasing all of these modules under the Apache 2.0 license and submitting to the Puppet Forge. We strongly believe that VMware admins that have not played with Puppet need a way to start. And even more importantly there is a great number of brilliant people that can add to this work and make it even better for the community as a whole.</p>
<p>The modules can be found on github:</p>
<ul>
<li><a href="http://github.com/vmware/vmware-vmware_lib">http://github.com/vmware/vmware-vmware_lib</a> &#8211; VMware Common Library</li>
<li><a href="http://github.com/vmware/vmware-vcsa">http://github.com/vmware/vmware-vcsa</a> &#8211; VMware VCSA Management (init)</li>
<li><a href="http://github.com/vmware/vmware-vcenter">http://github.com/vmware/vmware-vcenter</a> &#8211; VMware vCenter Operations</li>
<li><a href="http://github.com/vmware/vmware-vshield">http://github.com/vmware/vmware-vshield</a> &#8211; VMware vShield Operations and Management</li>
</ul>
<p>If you want an awesome technical walkthrough. Then read the blog on this release from one of the main authors, Nan Liu: <a href="http://nanliu.github.com/blog/2013/02/27/puppet-managing-vcenter-and-vshield/ "> <!--StartFragment-->http://nanliu.github.com/blog/2013/02/27/puppet-managing-vcenter-and-vshield/</a></p>
<p>I want to thanks the team behind these modules for the amazing amount of work they accomplished in a crazy short amount of time:</p>
<ul>
<li>Randy Brown</li>
<li>Shawn Holland</li>
<li>Nan Liu</li>
</ul>
<div>I cannot emphasize enough how this is just the tip of the spear. There is so much more to be done in the realm of automation for cloud uses cases. And before this year is up, I am personally hoping we can deliver some amazing technology for everyone in cloud.</div>
<div></div>
<div>.nick</div>
<p><!--EndFragment--></p>
<div class="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://nickapedia.com/2012/06/05/api-all-the-things-razor-api-wiki/" rel="bookmark" class="crp_title">API All The Things! : Razor API Wiki</a></li><li><a href="http://nickapedia.com/2013/02/01/stuff-to-see-puppet-pex-and-more/" rel="bookmark" class="crp_title">Stuff to see : Puppet, PEX, and more</a></li><li><a href="http://nickapedia.com/2012/05/25/alternate-pxeipxe-config-razor/" rel="bookmark" class="crp_title">Alternate PXE/iPXE Config : Razor</a></li><li><a href="http://nickapedia.com/2012/10/22/hello-again-my-life-up-to-this-point/" rel="bookmark" class="crp_title">Hello Again : My life up to this point</a></li><li><a href="http://nickapedia.com/2012/05/21/lex-parsimoniae-cloud-provisioning-with-a-razor/" rel="bookmark" class="crp_title">Lex Parsimoniae : Cloud Provisioning with a Razor</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://nickapedia.com/2013/02/27/vmware-puppet-one-more-step-forward/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Stuff to see : Puppet, PEX, and more</title>
		<link>http://nickapedia.com/2013/02/01/stuff-to-see-puppet-pex-and-more/</link>
		<comments>http://nickapedia.com/2013/02/01/stuff-to-see-puppet-pex-and-more/#comments</comments>
		<pubDate>Fri, 01 Feb 2013 19:26:18 +0000</pubDate>
		<dc:creator>nick</dc:creator>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[VMware]]></category>
		<category><![CDATA[partner exchange]]></category>
		<category><![CDATA[pex]]></category>
		<category><![CDATA[puppetlabs]]></category>

		<guid isPermaLink="false">http://nickapedia.com/?p=2207</guid>
		<description><![CDATA[I know it has been a while since i have posted. I have been deeply engrossed in my work here at VMware and hopefully will have some extremely cool things to show for it later this year. But I am coming out of the basement for a couple of cool things in the month of February. First I will be doing the keynote for the Toronto VMUG next week. Go here to register and view the great sessions and more that will be available. I will be presenting on Cloud + Automation and giving my perspective on why this is such an awesome time to be diving into automation. I am also going to be co-presenting a session at VMware Partner Exchange 2013 alongside Nigel Kersten (CTO PuppetLabs) on some exciting new stuff from VMware and PuppetLabs. This is a must-attend session as we will be presenting some extremely cool never-before-seen stuff with a live demo . The session info is: &#8216;VPN1298 &#8211; Next Round of Cloud Configuration Automation Using Puppet and VMware&#8217; and it takes place at 2pm on Wednesday. I also have some forthcoming stuff for the community as a whole in the next couple months around some code my team and I have been working on. This year is going to be a busy one for VMware cloud and automation. .nick Related Posts:VMware &#038; Puppet : One More Step ForwardHello Again : My life up to this pointVMworld 2011 : One lonely sessionSelfish Self Promotion : Vote For [...]]]></description>
			<content:encoded><![CDATA[<p>I know it has been a while since i have posted. I have been deeply engrossed in my work here at VMware and hopefully will have some extremely cool things to show for it later this year.</p>
<p>But I am coming out of the basement for a couple of cool things in the month of February.</p>
<p>First I will be doing the keynote for the Toronto VMUG next week. Go <a href="http://tovmug.com/feb-6-2013-toronto-full-day-vmug-user-conference/" target="_blank">here</a> to register and view the great sessions and more that will be available. I will be presenting on Cloud + Automation and giving my perspective on why this is such an awesome time to be diving into automation.</p>
<p>I am also going to be co-presenting a session at <a href="http://communities.vmware.com/community/vmtn/partner-exchange" target="_blank">VMware Partner Exchange 2013</a> alongside Nigel Kersten (CTO PuppetLabs) on some exciting new stuff from VMware and PuppetLabs. This is a must-attend session as we will be presenting some extremely cool never-before-seen stuff with a live demo <img src='http://nickapedia.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . The session info is: &#8216;VPN1298 &#8211; Next Round of Cloud Configuration Automation Using Puppet and VMware&#8217; and it takes place at 2pm on Wednesday.</p>
<p>I also have some forthcoming stuff for the community as a whole in the next couple months around some code my team and I have been working on. This year is going to be a busy one for VMware cloud and automation.</p>
<p>.nick</p>
<div class="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://nickapedia.com/2013/02/27/vmware-puppet-one-more-step-forward/" rel="bookmark" class="crp_title">VMware &#038; Puppet : One More Step Forward</a></li><li><a href="http://nickapedia.com/2012/10/22/hello-again-my-life-up-to-this-point/" rel="bookmark" class="crp_title">Hello Again : My life up to this point</a></li><li><a href="http://nickapedia.com/2011/05/16/vmworld-2011-one-lonely-session/" rel="bookmark" class="crp_title">VMworld 2011 : One lonely session</a></li><li><a href="http://nickapedia.com/2010/09/13/selfish-self-promotion-vote-for-me/" rel="bookmark" class="crp_title">Selfish Self Promotion : Vote For Me!</a></li><li><a href="http://nickapedia.com/2010/06/27/what-happens-in-vegas-cisco-live-2010/" rel="bookmark" class="crp_title">What happens in Vegas&#8230; : Cisco Live 2010!</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://nickapedia.com/2013/02/01/stuff-to-see-puppet-pex-and-more/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Next Level : 5 Rules for a Rookie Tech Leader:</title>
		<link>http://nickapedia.com/2012/10/30/next-level-5-rules-for-a-rookie-tech-leader/</link>
		<comments>http://nickapedia.com/2012/10/30/next-level-5-rules-for-a-rookie-tech-leader/#comments</comments>
		<pubDate>Tue, 30 Oct 2012 14:40:03 +0000</pubDate>
		<dc:creator>nick</dc:creator>
				<category><![CDATA[Life/Work]]></category>
		<category><![CDATA[Slider_Featured]]></category>
		<category><![CDATA[commentary]]></category>
		<category><![CDATA[tech leadership]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://nickapedia.com/?p=2174</guid>
		<description><![CDATA[At this point in my career something weird has happened. People look at me expecting me to answer questions. They expect me to hack my way through the jungle of technology and find a path to business value. They expect me to lead. Or in other words: at sometime in the recent past, I transferred from a contributor &#8211; to a leader. But, I am not an executive or a PhD. I am not a battle hardened veteran of a dozen product launches. I am not on any boards, I have not written any books, and I do not walk into a room with every single person knowing my name. What I have done is build a reputation for executing where it is difficult. I have demonstrated my passion for technology and my love for problem solving. I have shown that I love talk to people about tech as much as building tech. And through all this I find myself in an interesting position. There is more riding on my shoulders than ever before. But more than that; there are really good, hard working, and intelligent people that are looking to me to help them achieve success. Which means I can now fail more than just my family or myself. Which is a much more serious place to be. Out of this I have been trying to ensure that I am not just the Special Forces style engineer. I do not just drop in, kill all the problems, and then [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://nickapedia.com/wp-content/uploads/2012/10/RoundTableKnights.jpeg"><img class="alignright  wp-image-2177" style="border: 1px solid black; margin: 10px;" title="Tech Round Table" src="http://nickapedia.com/wp-content/uploads/2012/10/RoundTableKnights.jpeg" alt="" width="322" height="250" /></a></p>
<p>At this point in my career something weird has happened. People look at me expecting me to answer questions. They expect me to hack my way through the jungle of technology and find a path to business value. They expect me to lead. Or in other words: at sometime in the recent past, I transferred from a contributor &#8211; to a leader.</p>
<p>But, I am not an executive or a PhD. I am not a battle hardened veteran of a dozen product launches. I am not on any boards, I have not written any books, and I do not walk into a room with every single person knowing my name.</p>
<p>What I have done is build a reputation for executing where it is difficult. I have demonstrated my passion for technology and my love for problem solving. I have shown that I love talk to people about tech as much as building tech. And through all this I find myself in an interesting position. There is more riding on my shoulders than ever before. But more than that; there are really good, hard working, and intelligent people that are looking to me to help them achieve success. Which means I can now fail more than just my family or myself. Which is a much more serious place to be.</p>
<p>Out of this I have been trying to ensure that I am not just the Special Forces style engineer. I do not just drop in, kill all the problems, and then zip out with a quick helicopter extraction. I have to build value that lasts. I have to enable others around me while still delivering my unique technical value.</p>
<p>Out of this I have been thinking about the core principles I want to adopt in this process. After rolling these around in my head for a month or so I have decided to share them.</p>
<h2>5 Rules for a Rookie Tech Leader:</h2>
<p>&nbsp;</p>
<h3>#1 &#8211; Create places to live not a mansion</h3>
<p>An interesting aspect of technical leadership is the ability to take credit for progress (and if honest, failure also). Because of this, you naturally approach every project or challenge with this in mind. And some leaders develop the habit of staking out real estate in the technical mind-share. They become the gateway to anything they are an *authority* on. Worst than that &#8211; they make a habit out of squashing up and coming tech stars that would even have the slightest chance of challenging their rule. Value for them is using the newly cleared trail they blazed to build a mansion and live there. And then expand this out as much as possible to somehow make them invaluable and irreplaceable.</p>
<p>This is an unnatural and poisonous place to be and many of you reading this can probably think of people that fit this role exactly. A person who develops into this role is as valuable as a growing tumor on your lung. They changed from being a person that drives execution to a person that controls execution for his or her own purpose. This is not who I ever want to become.</p>
<p>Instead I want to be the person who builds homes in tech for others. I want to make the challenges easy to consume for those behind me. I want to look back and see people living in their own resident value that I helped break down the walls and make possible.</p>
<p>To avoid this pattern in my own work I will focus on a few key rules:</p>
<ul>
<li>I will publically (!) inquire and listen to people about their viewpoints and ideas.</li>
<li>I will accept ideas that are honestly better than my own.</li>
<li>I will plan everything I build to not require myself around to run it.</li>
<li>I will recruit people that can do what I do and add value to the company.</li>
<li>I will NEVER take credit for work that I did not do. Instead I will ALWAYS credit the true contributors.</li>
</ul>
<h3>#2 &#8211; Success is more important than your ego</h3>
<p>I have worked with people who would actively try and kill a good idea or project that did not have their name on it. An extension of the mansion-dwelling tech-Nazi in the rule above is the glory hound. When it is all about you then it is really hard to be about anyone else. And I am not going to argue about why community is better than going solo or why building a tribe is about you giving and not you getting. I am arguing that you are actually killing your own reputation and growth with this pattern.</p>
<p>In the end you are as valuable as the sum of you effect on your company. So if you contribute several key projects but then turn around and kill off many other good ones because you did not think of them first; you may actually come up in the red as a value to your company. And do not be deceived that people around you, under you, and above you are not aware of this.</p>
<p>I will support a project that is valuable but may not have my name on it just as much as my own. I will applaud good ideas and get just as excited as if they were my own baby. I will bleed genuine enthusiasm and encouragement for those around me. I will have my value in the black.</p>
<h3>#3 &#8211; Give out more praise than advice</h3>
<p>Short and sweet: just because you are in a position where your opinion matters, that does not mean your opinion actually matters. You should listen and respond with any and all advice that is appropriate. But stay away from the dangerous zone where people come to you with good ideas and all you do is tell them how you would make it better. This can quickly change to a point where nobody wants to go to you at all. People want good constructive feedback. But deep down inside they want validation that what they did was worthwhile. And they deserve both. Wrapping advice on the project with honest positive feedback on all the incredible good value they created is a great way to balance this out.</p>
<p>I will give out honest praise on beautiful tech and avoid trying to become the advice machine.</p>
<h3>#4 &#8211; Knowing how doesn&#8217;t mean you have the know-how</h3>
<p>Do not get too confident that you know the way. Technology changes so fast that anyone who thinks that they have the patterns down for approaching any problem is an idiot. You need to approach everything by utilizing everyone around you. Your job as a leader is making sure the goal is reached. Sometimes that means a lot of reaching into your own tool chest of experience. But, sometimes that means pulling wisdom out of individuals around you and propping them up into a place where they can do what you cannot.</p>
<p>I will be honest with myself on what I do and do not know. I will continuously develop my own skills while utilizing the skills of my team and peers.</p>
<h3>#5 &#8211; Keep your promises more than your schedule</h3>
<p>People look to leaders and see what they have done. They know about your success before. They know what others say about you. You can destroy all of this by being a flaky and irresponsible person in the day-to-day interactions with your teams.</p>
<p>Keep your promises. Do not make promises you cannot keep. Even in the small things. When people see that you care about your interactions with them, you built true trust in a relationship. Why should people trust you in the big projects or designs if you cannot keep a lunch appointment? Respect is a two-way street and you can destroy your own by stepping on everyone else’s.</p>
<p>Part of this is learning to manage demands on your time. The other part is consciously thinking about others and how you affect them. There is no more valuable a leader than one that people WANT to follow. No matter how rock star you are, if nobody wants to join the band &#8211; your leadership career will never grow.</p>
<p>I will manage the demands on my time. I will keep commitments I make. And I will sincerely apologize when I realize I let someone down and not just sweep it under the rug.</p>
<p>&nbsp;</p>
<p>These are the rules I want to live by as a tech leader. Only time will tell how well I can stick to my own advice. I hope this was useful to someone else in my position.</p>
<p>.nick</p>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Helvetica;"><br />
</span></p>
<p><!--EndFragment--></p>
<p>&nbsp;</p>
<div class="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://nickapedia.com/2012/09/13/change-of-pace-my-next-career-experiment/" rel="bookmark" class="crp_title">Change of pace : My next career experiment</a></li><li><a href="http://nickapedia.com/2011/10/17/note-to-self-scary-choices-pay-off/" rel="bookmark" class="crp_title">Note to self : Scary choices pay off</a></li><li><a href="http://nickapedia.com/2011/12/17/it-silos-cloud-you-what-do-you-want-to-be-when-cloud-grows-up/" rel="bookmark" class="crp_title">IT, Silos, Cloud, &#038; You : What do you want to be when Cloud grows up?</a></li><li><a href="http://nickapedia.com/2010/02/05/change-is-good-fear-atmosphere/" rel="bookmark" class="crp_title">Change is good : Fear &#038; Atmosphere</a></li><li><a href="http://nickapedia.com/2012/01/04/the-next-iteration-what-i-learned-what-you-can-expect/" rel="bookmark" class="crp_title">The next iteration : What I learned &#038; what you can expect</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://nickapedia.com/2012/10/30/next-level-5-rules-for-a-rookie-tech-leader/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hello Again : My life up to this point</title>
		<link>http://nickapedia.com/2012/10/22/hello-again-my-life-up-to-this-point/</link>
		<comments>http://nickapedia.com/2012/10/22/hello-again-my-life-up-to-this-point/#comments</comments>
		<pubDate>Mon, 22 Oct 2012 14:35:06 +0000</pubDate>
		<dc:creator>nick</dc:creator>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Commentary]]></category>
		<category><![CDATA[Distractions]]></category>
		<category><![CDATA[Life/Work]]></category>
		<category><![CDATA[Slider_Featured]]></category>
		<category><![CDATA[antlr]]></category>
		<category><![CDATA[distractions]]></category>
		<category><![CDATA[Life]]></category>
		<category><![CDATA[puppetconf]]></category>
		<category><![CDATA[razor]]></category>
		<category><![CDATA[riak]]></category>
		<category><![CDATA[storm]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://nickapedia.com/?p=2149</guid>
		<description><![CDATA[This post is a catch-up for all the stuff I should have written about but didn&#8217;t in the last few weeks. For those that don&#8217;t know, I recently moved from EMC over to VMware into a brand new kind of role. Right now I am caught in the trifecta of learning a new company, meeting new teams, and trying to help bootstrap my own with recruiting and design work. Which results in my blog getting a lack of attention. But, all that is going to change. My new mission with this blog is to just start dumping from my brain a combination of what I am playing with and what I have discovered along the way. I am working on tools and special things for the cloud community at large. But these will take a bit of time to see the light of day. So my new post will be titled: &#8220;Nick&#8217;s Distractions&#8221; &#8211; and will be a summary of mildly interesting topics that distracted me somehow during my week. So here is my first catch-up: Project Razor: Razor has exploded way bigger than I expected. Funny how solving personal problems can result in public acceptance. The current forks are over 50+ and watchers are almost 200 on the github repo(https://github.com/puppetlabs/Razor). This is just awesome, as I had always envisioned Razor as being truly powerful when it becomes a part of an open community that contributes 99.99% of the code and design. Now for the updates: 1. I was lucky [...]]]></description>
			<content:encoded><![CDATA[<p>This post is a catch-up for all the stuff I should have written about but didn&#8217;t in the last few weeks. For those that don&#8217;t know, I recently moved from EMC over to VMware into a brand new kind of role. Right now I am caught in the trifecta of learning a new company, meeting new teams, and trying to help bootstrap my own with recruiting and design work.</p>
<p><img class="alignright size-full wp-image-2171" style="border: 1px solid black; margin: 10px;" title="Hello Again" src="http://nickapedia.com/wp-content/uploads/2012/10/76122726.png" alt="" width="252" height="252" /></p>
<p>Which results in my blog getting a lack of attention.</p>
<p>But, all that is going to change. My new mission with this blog is to just start dumping from my brain a combination of what I am playing with and what I have discovered along the way. I am working on tools and special things for the cloud community at large. But these will take a bit of time to see the light of day. So my new post will be titled: &#8220;Nick&#8217;s Distractions&#8221; &#8211; and will be a summary of mildly interesting topics that distracted me somehow during my week.</p>
<p>So here is my first catch-up:</p>
<h2>Project Razor:</h2>
<p>Razor has exploded way bigger than I expected. Funny how solving personal problems can result in public acceptance. The current forks are over 50+ and watchers are almost 200 on the github repo(<a href="https://github.com/puppetlabs/Razor" target="_blank">https://github.com/puppetlabs/Razor</a>). This is just awesome, as I had always envisioned Razor as being truly powerful when it becomes a part of an open community that contributes 99.99% of the code and design.</p>
<p>Now for the updates:</p>
<p>1. I was lucky enough to be able to do the short Razor session at PuppetConf 2012. I ended up redoing my presentation the night before to better fit the audience. I ended up doing a live demo and preso at the same time. PupeptConf has to be one of my favorite audiences to speak to, ever. You can actually watch the whole presentation, which is a GREAT way to get to know Razor right here:</p>
<p>&nbsp;</p>
<p><iframe width="1067" height="600" src="http://www.youtube.com/embed/cR1bOg0IU5U?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>&nbsp;</p>
<p>2. Another secret trick I have been working on with Razor was actually announced during the keynote at PuppetConf by Dan Hushon. I had spent about two months trying to figure out a way to do Microsoft Windows provisioning with 100% Razor deployment and all the same ease and power as you would get with Ubuntu or Centos. While it is still in private alpha until I get a pull request up, here is the video showing the Windows magic happening. This includes full control of the Windows version, language, and everything in between.</p>
<p>&nbsp;</p>
<p><iframe src="http://player.vimeo.com/video/51923382" width="960" height="600" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe></p>
<p>&nbsp;</p>
<p>3. There was a major update right before PuppetConf which updated the REST and CLI API&#8217;s for a much more consistent control of Razor.<br />
The Wiki got a major update so if you haven&#8217;t checked it out go peruse the new Wiki: <a href="https://github.com/puppetlabs/Razor/wiki" target="_blank">https://github.com/puppetlabs/Razor/wiki</a></p>
<p>4. There is also a nice new install guide: <a href="https://github.com/puppetlabs/Razor/wiki/Installation" target="_blank">https://github.com/puppetlabs/Razor/wiki/Installation</a></p>
<p>5. Razor is going to be used by RackSpace to qualify hardware for their OpenStack efforts:<br />
<a href="https://twitter.com/scottbri/status/258716825221738496" target="_blank">https://twitter.com/scottbri/status/258716825221738496</a></p>
<p>6. Turns out Cisco&#8217;s demo of deploying their OpenStack + Puppet at OpenStack Summit including using Razor (Dan Bode from PuppetLabs co-wrote the Puppet-&gt;Razor control). Can&#8217;t find the video at the moment.</p>
<h2>Random stuff:</h2>
<p>1. If you haven&#8217;t played with it before: AntlrWorks(<a href="http://www.antlr.org/works/index.html" target="_blank">http://www.antlr.org/works/index.html</a>) is an awesome GUI/IDE for using the Antlr lexer/parser generator(<a href="http://en.wikipedia.org/wiki/ANTLR" target="_blank">http://en.wikipedia.org/wiki/ANTLR</a>)</p>
<p>2. In exploring Basho&#8217;s Riak software I discovered some interesting constraints around getting a list of keys or range of keys. Here is a very good thread I found around this including how to handle it with secondary indexing and good design approaches: <a href="http://riak-users.197444.n3.nabble.com/Getting-all-the-Keys-td2308764.html" target="_blank">http://riak-users.197444.n3.nabble.com/Getting-all-the-Keys-td2308764.html</a></p>
<p>3. Here is a very cool post on Twitter&#8217;s Storm project: <a href="http://www.michael-noll.com/blog/2012/10/16/understanding-the-parallelism-of-a-storm-topology/ " target="_blank">http://www.michael-noll.com/blog/2012/10/16/understanding-the-parallelism-of-a-storm-topology/</a> (thanks to <a href="http://twitter.com/cloudclint" target="_blank">Clint Greenwood</a> for showing me)</p>
<p>&nbsp;</p>
<div class="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://nickapedia.com/2012/05/25/alternate-pxeipxe-config-razor/" rel="bookmark" class="crp_title">Alternate PXE/iPXE Config : Razor</a></li><li><a href="http://nickapedia.com/2012/06/05/api-all-the-things-razor-api-wiki/" rel="bookmark" class="crp_title">API All The Things! : Razor API Wiki</a></li><li><a href="http://nickapedia.com/2012/03/01/uberlinkedtwit-chambers-special/" rel="bookmark" class="crp_title">UBERLinkedTwit : Chambers special</a></li><li><a href="http://nickapedia.com/2013/02/27/vmware-puppet-one-more-step-forward/" rel="bookmark" class="crp_title">VMware &#038; Puppet : One More Step Forward</a></li><li><a href="http://nickapedia.com/2012/06/05/quick-videos-razor-webinar-more/" rel="bookmark" class="crp_title">Quick Videos : Razor Webinar &#038; More</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://nickapedia.com/2012/10/22/hello-again-my-life-up-to-this-point/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Change of pace : My next career experiment</title>
		<link>http://nickapedia.com/2012/09/13/change-of-pace-my-next-career-experiment/</link>
		<comments>http://nickapedia.com/2012/09/13/change-of-pace-my-next-career-experiment/#comments</comments>
		<pubDate>Thu, 13 Sep 2012 15:48:11 +0000</pubDate>
		<dc:creator>nick</dc:creator>
				<category><![CDATA[EMC]]></category>
		<category><![CDATA[Life/Work]]></category>
		<category><![CDATA[Slider_Featured]]></category>
		<category><![CDATA[VMware]]></category>
		<category><![CDATA[Career]]></category>
		<category><![CDATA[changes]]></category>
		<category><![CDATA[Life]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://nickapedia.com/?p=2122</guid>
		<description><![CDATA[Every year I get a little older and a little wiser. And the one thing I am realizing about myself is that I thrive on challenges. My natural element is breaking problems down and creating answers. I live for that first 5 minutes after success when you can look back and see a pattern of effort paying off. Which is why I look back at my time at EMC and feel so good about what has happened. I have made a great many friends. I have worked with people that have influenced me greatly. I have made my small dent in the technology world where I could. And beyond all that I have had a blast doing it all. And it would be very easy to stay comfortable and contribute where I am. But, I have been presented with an opportunity to move the ball in a way I have not before. Life is a sequence of opportunities, challenges, and empty-time in between. It is how you handle each of those moments over a long period of time that shapes who you become. This new change for me is both a major challenge and an extremely important opportunity to shape who I become. Which is why I am announcing that I have accepted a position with VMware as an Automation Architect in Cloud Infrastructure and Services. This position presents some very unique challenges and I am joining an amazing team of rockstars. I have very specific challenges in this role [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://nickapedia.com/wp-content/uploads/2012/09/running.jpg"><img class="alignright  wp-image-2128" style="margin: 10px;" title="Change of Pace" src="http://nickapedia.com/wp-content/uploads/2012/09/running.jpg" alt="" width="314" height="170" /></a>Every year I get a little older and a little wiser. And the one thing I am realizing about myself is that I thrive on challenges. My natural element is breaking problems down and creating answers. I live for that first 5 minutes after success when you can look back and see a pattern of effort paying off.</p>
<p>Which is why I look back at my time at EMC and feel so good about what has happened. I have made a great many friends. I have worked with people that have influenced me greatly. I have made my small dent in the technology world where I could. And beyond all that I have had a blast doing it all.</p>
<p>And it would be very easy to stay comfortable and contribute where I am. But, I have been presented with an opportunity to move the ball in a way I have not before. <span class="pullquote">Life is a sequence of opportunities, challenges, and empty-time in between. It is how you handle each of those moments over a long period of time that shapes who you become.</span> This new change for me is both a major challenge and an extremely important opportunity to shape who I become.</p>
<p>Which is why I am announcing that I have accepted a position with VMware as an Automation Architect in Cloud Infrastructure and Services. This position presents some very unique challenges and I am joining an amazing team of rockstars. I have very specific challenges in this role that I am chomping at the bit to attack.</p>
<p>The sad part of this story is that this means I will be leaving EMC. I find it hard to put into words how much my time here has meant. How do you leave a a company full of great people where many of those people have been critical to your development and great experiences? I leave with a head full of incredible memories and friendships meant to last.</p>
<p>But life is about opportunities, challenges, and empty-time between. And when presented with the right challenge you have to make the choice to abandon the comfortable and take on the unknown.</p>
<p>I think Ralph Waldo Emerson says it best:</p>
<blockquote><p>All life is an experiment. The more experiments you make the better.</p></blockquote>
<p>Thank you to all at EMC who have been friends, supporters, and mentors. And a special thanks to Dan Hushon. Without his exceptional leadership in the last year; I would not have accomplished 90% of what I did.</p>
<p><iframe src="http://player.vimeo.com/video/49353957" width="1067" height="600" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe></p>
<p>Wish me luck.</p>
<p>.nick</p>
<div class="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://nickapedia.com/2010/02/05/change-is-good-fear-atmosphere/" rel="bookmark" class="crp_title">Change is good : Fear &#038; Atmosphere</a></li><li><a href="http://nickapedia.com/2011/10/17/note-to-self-scary-choices-pay-off/" rel="bookmark" class="crp_title">Note to self : Scary choices pay off</a></li><li><a href="http://nickapedia.com/2012/10/30/next-level-5-rules-for-a-rookie-tech-leader/" rel="bookmark" class="crp_title">Next Level : 5 Rules for a Rookie Tech Leader:</a></li><li><a href="http://nickapedia.com/2012/01/04/the-late-recap-post-aka-top-7-things-i-learned-in-2011/" rel="bookmark" class="crp_title">The late recap post : AKA Top 7 things I learned in 2011</a></li><li><a href="http://nickapedia.com/2012/01/04/the-next-iteration-what-i-learned-what-you-can-expect/" rel="bookmark" class="crp_title">The next iteration : What I learned &#038; what you can expect</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://nickapedia.com/2012/09/13/change-of-pace-my-next-career-experiment/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Razor OSS #2 : Public Release of MK</title>
		<link>http://nickapedia.com/2012/06/25/razor-oss-2-public-release-of-mk/</link>
		<comments>http://nickapedia.com/2012/06/25/razor-oss-2-public-release-of-mk/#comments</comments>
		<pubDate>Mon, 25 Jun 2012 20:57:04 +0000</pubDate>
		<dc:creator>tomm</dc:creator>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Scripts]]></category>
		<category><![CDATA[Slider_Featured]]></category>
		<category><![CDATA[facter]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[microkernel]]></category>
		<category><![CDATA[Open source]]></category>
		<category><![CDATA[provisioning]]></category>
		<category><![CDATA[puppetlabs]]></category>
		<category><![CDATA[razor]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[tagging]]></category>
		<category><![CDATA[tinycore]]></category>

		<guid isPermaLink="false">http://nickapedia.com/?p=2104</guid>
		<description><![CDATA[Shortly after the open-source release of Razor in late May, we started to see requests from users for more information about the Microkernel that is used by Razor.  What distribution was used as the basis for this Microkernel?  What services does it provide?  What is involved in building a custom Microkernel that will support my hardware?  Will the Microkernel be open-sourced as well?  If so, will it be part of the Razor project or a separate (but related) project? At the same time that these requests started coming in from the Razor community, we saw our first Razor issue that was directly linked to the Razor Microkernel.  The issue was with support for a networking card that we hadn’t seen before (the Broadcom NetXtreme II card) that was presenting some issues for a Razor user (The Microkernel it wasn’t checking in with the Razor server on machines that used this network card because the it couldn’t connect to the underlying network).  In the end, the issue turned out to be that the firmware needed to support this network card was not included in the Microkernel (even though firmware for this card that would work with our Microkernel was readily available). Our intention all along was to make this project publically available, but we still hadn’t worked out the last remaining issues around automating the build of a Microkernel ISO from the Razor Microkernel project itself (at the time of the Razor release late last month the process of building a [...]]]></description>
			<content:encoded><![CDATA[<p>Shortly after the open-source release of Razor in late May, we started to see requests from users for more information about the Microkernel that is used by Razor.  What distribution was used as the basis for this Microkernel?  What services does it provide?  What is involved in building a custom Microkernel that will support my hardware?  Will the Microkernel be open-sourced as well?  If so, will it be part of the Razor project or a separate (but related) project?</p>
<p>At the same time that these requests started coming in from the Razor community, we saw our first Razor issue that was directly linked to the Razor Microkernel.  The issue was with support for a networking card that we hadn’t seen before (the Broadcom NetXtreme II card) that was presenting some issues for a Razor user (The Microkernel it wasn’t checking in with the Razor server on machines that used this network card because the it couldn’t connect to the underlying network).  In the end, the issue turned out to be that the firmware needed to support this network card was not included in the Microkernel (even though firmware for this card that would work with our Microkernel was readily available).</p>
<p>Our intention all along was to make this project publically available, but we still hadn’t worked out the last remaining issues around automating the build of a Microkernel ISO from the Razor Microkernel project itself (at the time of the Razor release late last month the process of building a new version of the Microkernel ISO “from source” was still fairly tedious, manual, and error prone).  We have finally resolved the last of these issues, and are proud to announce that the Razor-Microkernel project is now publicly available as an open-source project that is hosted by Puppet Labs.  The source code for this project is freely available under a GPLv2 license (which is the license that governs the underlying Linux kernel that the Razor-Microkernel project is based on), and the project itself can be found <a href="https://github.com/puppetlabs/Razor-Microkernel" target="_blank">here</a>.</p>
<p>Given the general interest in the Razor Microkernel itself, Nick Weaver also asked me if I would be interested in guest writing a blog post that provides users with a bit more background about the Razor Microkernel itself (what it is, how Razor uses it, and how it can be customized).  At the end of this post there are links to pages on the Razor-Microkernel Project Wiki, where you can find more in depth information about the Microkernel (including a guide that will help you if you decide that you would like to build your own version of the Razor Microkernel to support your special needs).</p>
<h2>A personal introduction</h2>
<p>Perhaps I should start out by introducing myself (since most of you don’t know me).  My name is Tom McSweeney, and I’m one of the co-creators of Razor.  While Nick was primarily focused on developing the Razor Server over the past few months, my primary focus has been on developing the Razor Microkernel (and helping out with the development of the Razor Server in my spare time).  In terms of my background, I’ve been working as a Sr. Technologist in the Office of the CTO at EMC for about 5 years now.  Prior to that, I worked for a number of years as a software architect in one of the Java Centers at Sun Microsystems.  Overall, I’ve spent many years designing, developing, and deploying large-scale software systems for a variety of platforms, from servers to back-end telecommunications gear to embedded systems (and even handsets).  In almost every case, discovery and provisioning of devices across the network was one of the harder (and in many cases critical) issues that had to be resolved.</p>
<h2>A bit of history</h2>
<p>Last fall, as part of an internal project at EMC, Nick and I were tasked with selecting a framework that could be used for power-control and bare-metal provisioning of servers in a modern datacenter environment.  Ideally, the framework that we selected would support both bare-metal and “virtual bare-metal” provisioning, but we knew that provisioning on OS onto physical hardware was an absolute necessity for the use cases being considered for that project.  After fighting with several existing frameworks that each claimed to have already solved this problem for us (including <a href="http://baracus-project.org/Site/Baracus.html" target="_blank">Baracus</a> and <a href="https://github.com/dellcloudedge/crowbar/wiki" target="_blank">Crowbar</a>), we decided that it would probably be easier to build our own framework for this task than to try to make one of the existing frameworks do what we needed them to do.</p>
<p>Once we started putting together a design for our own solution (the solution that would eventually become Razor), one of the first issues that we had to resolve was exactly how we would discover new nodes  in the network (so that the Razor server could start managing them).  Whatever tool we used for node discovery would have to be able to provide the Razor Server with a view into the capabilities of those nodes (either physical or virtual) so that the Razor Server could use that meta-data to decide exactly what it should do with the nodes that were discovered.</p>
<p>After discussing alternatives, we decided that the best approach would be to use a small, in-memory Linux kernel for this node discovery process.  There are a number of alternatives available today when it comes to small, in-memory Linux kernels (<a href="http://www.damnsmalllinux.org/" target="_blank">Damn Small Linux</a>, <a href="http://www.slitaz.org/en/" target="_blank">SliTaz</a>, <a href="http://porteus.org/" target="_blank">Porteus</a>, and <a href="http://puppylinux.org/main/Overview%20and%20Getting%20Started.htm" target="_blank">Puppy LinuX</a> all come to mind), so we narrowed our choices down to just distributions with an total size smaller than 256MB (to speed up delivery of the image to the node) that were under active development, and that included a relatively recent Linux kernel (i.e. distributions built using a v3.0.x Linux kernel).  As an additional constraint, we knew that we would be using Facter during the node discovery process, so we searched for distributions that included pre-built versions of Ruby and the system-level commands that Facter uses (like dmidecode).  Finally, we knew that we would want to build custom extensions for our Microkernel (perhaps even commercial versions of these extensions) so we looked at distributions that provided an easy mechanism for building custom extensions and that were licensed under a “commercial friendly” open-source license.</p>
<p>Once we applied all of these constraints to the various distributions that we had were comparing with each other, there was one distribution that clearly stood out on the list, and that distribution was <a href="http://distro.ibiblio.org/tinycorelinux/" target="_blank">Tiny Core Linux</a>.  Tiny Core Linux (or TCL) easily met all of our constraints (even a few constraints that we hadn’t thought of initially):</p>
<ol>
<li>TCL is very small (the “Core” distribution is an ISO that is only 8MB in size) and is designed to run completely in memory  (the default configuration assumes no local storage exists and only takes up about 20MB of system memory when fully booted)</li>
<li>TCL is built using a (very) recent kernel; as of the time of this writing (the latest release of TCL uses a v3.0.21 Linux kernel and, at the time that this was written, that release was posted less than two weeks ago), so we knew that it would provide support for most of the hardware that we were likely to see.</li>
<li>TCL can easily be extended (either during the boot process or dynamically, while the kernel is running) by installing TCL Extensions (which we will call TCEs for short).  An extensive set of pre-built TCEs are available for download and installation (including Ruby).  The complete set of extensions can be found <a href="http://distro.ibiblio.org/pub/linux/distributions/tinycorelinux/4.x/x86/tcz/" target="_blank">here</a>.</li>
<li>It is relatively simple to build your own TCE mirror, allowing for download and installation of TCEs from a local server (rather than having to pull down the extensions you need across the network).</li>
<li>Tools exist to build your own TCEs if you can’t find a pre-build TCE for a package that you might need.</li>
<li>The licensing terms under which TCL is available (<a href="http://www.gnu.org/licenses/gpl-2.0.html" target="_blank">GPLv2</a>) are relatively “commercial friendly”, allowing for later development of commercial extensions for the Microkernel (as long as those extensions are not bundled directly into the ISO).  This would not be the case if a distribution that used a <a href="http://www.gnu.org/licenses/gpl-3.0.html" target="_blank">GPLv3</a> license were used instead.</li>
</ol>
<p>Now that we had selected the distribution that we were going to use to build our Microkernel, it was time to turn our attention to the additional components that we would be deploying within that distribution to support the node discovery process.</p>
<h2>Components that make up the Razor Microkernel</h2>
<p>In order to successfully perform node discovery, a number of standard TCL extensions (and their dependencies) are installed during the Microkernel boot process:</p>
<ul>
<li><strong>ruby.tcz</strong> – an extension that provides everything needed to run Ruby (v1.8.7) within the Microkernel ; all of the services written for the Microkernel are Ruby-based services, and this package provides the framework needed to run those services (and the classes they depend on).</li>
<li><strong>bash.tcz</strong> – an extension containing the ‘bash’ shell; installed in case the ‘bash’ shell is needed (out of the box, only the ‘ash’ shell is provided by the TCL “Core” distribution)</li>
<li><strong>dmidecode.tcz</strong> – an extension containing the dmidecode UNIX command; this command is used by the Facter (and, as such, by the Microkernel Controller) during the node discovery process</li>
<li><strong>scsi-3.0.21-tinycore.tcz</strong> – an extension that provides the tools, drivers, and kernel modules needed to access SCSI disks; without this extension any SCSI disks attached to the node are not visible to the Microkernel</li>
<li><strong>lshw.tcz</strong> – an extension containing the lshw UNIX command; this command is used by the Microkernel Controller during the discovery process</li>
<li><strong>firmware-bnx2.tcz</strong> – an extension that provides the firmware files necessary to access the network using a Broadcom NetXtreme II networking card during the system boot process; without this extension the network cannot be accessed using this type of NIC (which is fairly common on some newer servers).</li>
<li><strong>openssh.tcz</strong> – an extension containing the OpenSSH daemon; this extension is only included in “development” Microkernel images, on a “production” Microkernel image this package is not included (to prevent unauthorized access to the underlying systems via SSH).</li>
</ul>
<p>These extensions (which we’ll refer to as the “built-in extensions”) are set up to automatically install during the boot process and, as such, are readily available during the Microkernel setup and initialization process.</p>
<p>In addition to these “built-in extensions”, the Razor Microkernel also downloads and installs a set of “additional extensions”.  These additional extensions are downloaded and installed from a TCE mirror (rather than being installed from a local directory in the Microkernel filesystem) at the end of the Microkernel boot process (rather than during the boot process).  In the current release of the Razor Microkernel, there is only one “additional extension” that might be installed during the system initialization process, an extension that installs the Open VM Tools package (this extension is only installed if when the Microkernel is deployed to a VM running in a VMware-related environment).</p>
<p>Additional extensions can also be provided by an external TCE mirror (perhaps even by the Razor Server itself), and it is a simple configuration change (on the Razor Server) to point the Microkernel at different TCE mirror containing additional extensions that it should install.  If additional extensions are installed from an external TCE mirror, they will be installed in addition to (not instead of) those that are installed from the internal TCE mirror after the boot process completes.</p>
<p>As part of the Microkernel boot process, the Ruby Gems package is also installed (“from source”, using a gzipped tarfile that is bundled into the ISO itself).  Once this package is installed, several “Ruby Gems” are then installed as part of this same system initialization process.  Currently, this list of gems includes the following four gems:</p>
<ol>
<li><strong>daemons</strong> – a gem that provides the capability to wrap existing Ruby classes/scripts as daemon processes (that can be started, stopped, restarted, etc.); this gem is used primarily to wrap the Razor Microkernel Controller as a daemon process.</li>
<li><strong>facter</strong> – provides us with access to <a href="http://puppetlabs.com/puppet/related-projects/facter/" target="_blank">Facter</a>, a cross-platform Ruby library that is used by the Razor Microkernel to gather together many of the “facts” about the systems that it is deployed to (other “facts” are discovered using the lshw and lscpu UNIX commands).</li>
<li><strong>json_pure</strong> – provides the functionality needed to parse/construct JSON requests, which is critical when interacting with the Razor Server; the json_pure gem is used because it is purely Ruby based, so we don’t have to install any additional packages (like we would have to do if we were to use the more “performant”, but partly C-based, json gem instead).</li>
<li><strong>stomp</strong> – used by the MCollective daemon to provide external access to its agents via an ActiveMQ message queue</li>
</ol>
<p>Which gems are actually installed is determined using a list that is “burned into the Microkernel ISO”.  The list itself is actually a part of the Razor-Microkernel project; and the gems are meant to be downloaded (from a local gem repository) during the process of building the ISO (although currently this list is used to bundle a fixed set of gems into the ISO during the Microkernel ISO build process).</p>
<p>The final components that make up the Razor Microkernel are a set of key services that are started automatically during system initialization.  This set of services includes the following:</p>
<ol>
<li>The <strong>Microkernel Controller</strong> – a Ruby-based daemon process that interacts with the Razor Server via HTTP</li>
<li>The <strong>Microkernel TCE Mirror</strong> – a WEBrick instance that provides a completely internal web-server that can be used to obtain TCL extensions that should be installed once the boot process has completed. As was mentioned previously, the only extension that is currently provided by this mirror is the Open VM Tools extension (and its dependencies).</li>
<li>The <strong>Microkernel Web Server</strong> – a WEBrick instance that can be used to interact with the Microkernel Controller via HTTP; currently this server is only used by the Microkernel Controller itself to save configuration changes it might receive from the Razor Server as part of the “checkin response” (this action actually triggers a restart of the Microkernel Controller by this web server instance), but in the future we feel that this server is also the most-likely interaction point between the MCollective and the Microkernel Controller.</li>
<li>The <strong>MCollective Daemon</strong> – as was mentioned previously, this process is not currently used, but it is available for future use</li>
<li>The <strong>OpenSSH Daemon</strong> – only installed and running if we are in a “development” Microkernel; in a “production” Microkernel this daemon process is not started (in fact, the package containing this daemon process isn’t even installed, as was noted above).</li>
</ol>
<p>Once the system is fully initialized, the components that are running (and the connections between them) look something like this:</p>
<p><img class="wp-image-2117 aligncenter" style="border: 1px solid black; margin-top: 10px; margin-bottom: 10px;" title="razor_mk" src="http://nickapedia.com/wp-content/uploads/2012/06/razor_mk.png" alt="" width="528" height="331" /></p>
<p>&nbsp;</p>
<p>Often, when we talk about the Razor Microkernel, we’re actually referring to the Microkernel Controller that is running within the Razor Microkernel (since that’s the component that interacts directly with the Razor Server) but, as is shown in this diagram, there are actually several services that all work together to provide the full functionality of the complete Razor Microkernel.</p>
<h2>Interactions with the Razor Server</h2>
<p>There are two basic operations that the Microkernel Controller performs when interacting with the Razor Server:</p>
<ol>
<li><strong>Node Checkin</strong> – during this process, the Razor Microkernel “checks in” with the Razor Server to determine what, if anything, the Razor Server would like that Microkernel instance to do</li>
<li><strong>Node Registration</strong> – during this process, the Razor Microkernel reports the meta-data that it has gathered about the platform it is deployed on (its node) to the Razor Server; this meta-data is then used by the Razor Server to determine what should be done with that node.</li>
</ol>
<p>The Node Checkin process is periodic (with the timing defined as part of the Razor Server configuration).  The Razor Microkernel simply sends a “checkin request” to the Razor Server every N seconds, and the Razor Server looks for that node in the list of nodes that is managing.  Based on what the Razor Server finds, one of three things might happen:</p>
<ol>
<li>If it finds the node, and if the information for that node looks like it is up to date, then the Razor Server sends back an acknowledge command in its reply to this checkin request (an “<strong>acknowledge</strong>” command is basically a no-op).</li>
<li>If the node cannot be found, or if the information for that node looks like it might be out of date, then the Razor Server sends <strong>register</strong> command back to the Microkernel in the reply to that checkin request instead (and the Microkernel will start the process of node registration).</li>
<li>Finally, if the node needs to be transitioned to a new state (to install a new OS onto the node, for example), the Razor Server can send back <strong>reboot</strong> command back to the Microkernel in the reply to the checkin request instead (and the Microkernel will reboot immediately).</li>
</ol>
<p>If the node registration process is triggered (either because the Razor Server has sent back a register command in the response to a checkin request or because the Microkernel itself has detected that the current facts gathered during the node checkin process are different from the facts that it last reported to the Razor Server), then a new set of facts for that node are reported to the Razor Server in a Node Registration request.  This set of facts contains the latest information gathered by the Microkernel Controller (using Facter, combined with information gathered using the lshw and lscpu commands).</p>
<h2>Summary</h2>
<p>In this posting we have described what the Razor Microkernel is and we’ve shown how the Razor Microkernel is used by the Razor Server for node discovery.  We’ve shown how the Microkernel is constructed from the Tiny Core Linux “Core” distribution (the basis the Razor Microkernel) and also broken down the Microkernel in a bit more detail in order to show how the services running within the Microkernel are organized internally.</p>
<h2>More Information</h2>
<p>If you are looking for a more detailed view into the Razor Microkernel, we invite you to visit the Razor-Microkernel project page itself.  That project is now freely accessible through the Puppet Labs GitHub site, and can be found <a href="https://github.com/puppetlabs/Razor-Microkernel" target="_blank">here</a>.  This project contains the source code for the services that were described above, as well as the scripts that you need to build your own versions of the Razor Microkernel.  The project site also includes several Wiki pages that provide more detailed information about the Razor Microkernel than we can provide in a blog posting like this.  Of particular interest might be the following pair of pages:</p>
<ul>
<li><a href="https://github.com/puppetlabs/Razor-Microkernel/wiki/An-Overview-of-the-Razor-Microkernel" target="_blank"><strong>An Overview of the Razor Microkernel</strong></a> – provides users with a high-level overview of the Razor Microkernel itself, including detailed discussions of the interactions between the Razor Microkernel and the Razor Server</li>
<li><strong><a href="https://github.com/puppetlabs/Razor-Microkernel/wiki/Building-a-Microkernel-ISO" target="_blank">Building a Microkernel ISO</a></strong> – describes the process of building your own Microkernel ISO (in detail) using the tools that are provided by the Razor-Microkernel project</li>
</ul>
<p>Once again, we’d like to welcome you all to the new Razor-Microkernel project.  As always, comments and feedback are welcome.</p>
<div class="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://nickapedia.com/2012/06/05/api-all-the-things-razor-api-wiki/" rel="bookmark" class="crp_title">API All The Things! : Razor API Wiki</a></li><li><a href="http://nickapedia.com/2012/05/25/alternate-pxeipxe-config-razor/" rel="bookmark" class="crp_title">Alternate PXE/iPXE Config : Razor</a></li><li><a href="http://nickapedia.com/2012/06/05/quick-videos-razor-webinar-more/" rel="bookmark" class="crp_title">Quick Videos : Razor Webinar &#038; More</a></li><li><a href="http://nickapedia.com/2012/05/21/lex-parsimoniae-cloud-provisioning-with-a-razor/" rel="bookmark" class="crp_title">Lex Parsimoniae : Cloud Provisioning with a Razor</a></li><li><a href="http://nickapedia.com/2012/10/22/hello-again-my-life-up-to-this-point/" rel="bookmark" class="crp_title">Hello Again : My life up to this point</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://nickapedia.com/2012/06/25/razor-oss-2-public-release-of-mk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quick Videos : Razor Webinar &amp; More</title>
		<link>http://nickapedia.com/2012/06/05/quick-videos-razor-webinar-more/</link>
		<comments>http://nickapedia.com/2012/06/05/quick-videos-razor-webinar-more/#comments</comments>
		<pubDate>Tue, 05 Jun 2012 19:19:26 +0000</pubDate>
		<dc:creator>nick</dc:creator>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Videos]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[gource]]></category>
		<category><![CDATA[provisioning]]></category>
		<category><![CDATA[puppet]]></category>
		<category><![CDATA[razor]]></category>

		<guid isPermaLink="false">http://nickapedia.com/?p=2094</guid>
		<description><![CDATA[This is just a quick post with some videos relevant to the Razor project. First off is the Puppet Webinar around Razor with live demo and Q &#38; A. Puppet Razor Webinar Next is a couple videos generated using Gource to show the work on both the Razor project and the Razor Microkernel project. Just for fun but pretty cool stuff: .nick Related Posts:Behind the theme music : Chad’s WorldCreating a vApp : UBER UIMBeing a vSpec : One year under the beltvSphere Mini Monitor : New Video by David DavisExcited about EMCWorld 2011? : Show it off]]></description>
			<content:encoded><![CDATA[<p>This is just a quick post with some videos relevant to the Razor project.</p>
<p>First off is the Puppet Webinar around Razor with live demo and Q &amp; A.</p>
<div id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:be045ce3-e563-419b-ae8b-6ab3de6c47b8" class="wlWriterEditableSmartContent" style="margin: 0px; display: inline; float: none; padding: 10px;">
<div><object id="player" width="480" height="320" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="src" value="http://cc.readytalk.com/cc/download/rss/61ew4o/embed.swf" /><param name="allowscriptaccess" value="sameDomain" /><param name="allowfullscreen" value="true" /><param name="wmode" value="transparent" /><embed id="player" width="480" height="320" type="application/x-shockwave-flash" src="http://cc.readytalk.com/cc/download/rss/61ew4o/embed.swf" allowFullScreen="true" allowscriptaccess="sameDomain" allowfullscreen="true" wmode="transparent" /></object></div>
<div style="width: 480px; clear: both; font-size: .8em;">Puppet Razor Webinar</div>
</div>
<p>Next is a couple videos generated using Gource to show the work on both the Razor project and the Razor Microkernel project. Just for fun but pretty cool stuff:</p>
<p><iframe src="http://player.vimeo.com/video/43470163" frameborder="0" width="500" height="281" hspace="10" vspace="10"></iframe> <iframe src="http://player.vimeo.com/video/43470026" frameborder="0" width="500" height="281" hspace="10" vspace="10"></iframe></p>
<p>.nick</p>
<div class="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://nickapedia.com/2010/12/27/behind-the-theme-music-chads-world/" rel="bookmark" class="crp_title">Behind the theme music : Chad’s World</a></li><li><a href="http://nickapedia.com/2010/12/27/creating-a-vapp-uber-uim/" rel="bookmark" class="crp_title">Creating a vApp : UBER UIM</a></li><li><a href="http://nickapedia.com/2011/02/22/being-a-vspec-one-year-under-the-belt/" rel="bookmark" class="crp_title">Being a vSpec : One year under the belt</a></li><li><a href="http://nickapedia.com/2010/03/14/vsphere-mini-monitor-new-video-by-david-davis/" rel="bookmark" class="crp_title">vSphere Mini Monitor : New Video by David Davis</a></li><li><a href="http://nickapedia.com/2011/03/18/excited-about-emcworld-2011-show-it-off/" rel="bookmark" class="crp_title">Excited about EMCWorld 2011? : Show it off</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://nickapedia.com/2012/06/05/quick-videos-razor-webinar-more/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>API All The Things! : Razor API Wiki</title>
		<link>http://nickapedia.com/2012/06/05/api-all-the-things-razor-api-wiki/</link>
		<comments>http://nickapedia.com/2012/06/05/api-all-the-things-razor-api-wiki/#comments</comments>
		<pubDate>Tue, 05 Jun 2012 18:21:57 +0000</pubDate>
		<dc:creator>nick</dc:creator>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[EMC]]></category>
		<category><![CDATA[Scripts]]></category>
		<category><![CDATA[Slider_Featured]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Automation]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[open souce]]></category>
		<category><![CDATA[provisioning]]></category>
		<category><![CDATA[puppet]]></category>
		<category><![CDATA[razor]]></category>

		<guid isPermaLink="false">http://nickapedia.com/?p=2089</guid>
		<description><![CDATA[I mentioned in a slightly important recent post that Razor, the new cloud provisioning tool for bare &#38; virtual metal, has a full RESTful API. Now I back that up with some documentation. Freshly added to the Razor Wiki on github is a overview of the Razor API. This includes examples on the JSON format and code samples for Adding, Removing, Updating, and Getting Razor configuration. And I took the time to provide code samples for each section in Ruby, Perl, Python, Java, C# and PowerShell (for my PS buddies, you know who you are). Go read it here : Razor API Overview This is the tip of the spear and there will be more documents on API elements for each Razor Slice. The Razor project is in beta and so the API may change as things move forward. Also, since this is a community project. If you have ideas or code that will improve anything please fork and submit a pull request. Feedback &#38; comments appreciated. .nick Related Posts:Alternate PXE/iPXE Config : RazorHello Again : My life up to this pointQuick Videos : Razor Webinar &#038; MoreVMware &#038; Puppet : One More Step ForwardRazor OSS #2 : Public Release of MK]]></description>
			<content:encoded><![CDATA[<p><a href="http://nickapedia.com/wp-content/uploads/2012/06/API.jpg"><img style="display: inline; margin: 10px;" title="API" src="http://nickapedia.com/wp-content/uploads/2012/06/API_thumb.jpg" alt="API" width="240" height="174" align="right" /></a>I mentioned in a <a href="http://nickapedia.com/2012/05/21/lex-parsimoniae-cloud-provisioning-with-a-razor/" target="_blank">slightly important recent post</a> that Razor, the new cloud provisioning tool for bare &amp; virtual metal, has a full RESTful API.</p>
<p>Now I back that up with some documentation. Freshly added to the <a href="https://github.com/puppetlabs/Razor/wiki" target="_blank">Razor Wiki on github</a> is a overview of the Razor API. This includes examples on the JSON format and code samples for Adding, Removing, Updating, and Getting Razor configuration. And I took the time to provide code samples for each section in Ruby, Perl, Python, Java, C# and PowerShell (for my PS buddies, you know who you are).</p>
<p><a href="https://github.com/puppetlabs/Razor/wiki/Razor-API-Overview" target="_blank">Go read it here : Razor API Overview</a></p>
<p>This is the tip of the spear and there will be more documents on API elements for each Razor Slice.</p>
<p>The Razor project is in beta and so the API may change as things move forward. Also, since this is a community project. If you have ideas or code that will improve anything please fork and submit a pull request.</p>
<p>Feedback &amp; comments appreciated.</p>
<p>.nick</p>
<div class="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://nickapedia.com/2012/05/25/alternate-pxeipxe-config-razor/" rel="bookmark" class="crp_title">Alternate PXE/iPXE Config : Razor</a></li><li><a href="http://nickapedia.com/2012/10/22/hello-again-my-life-up-to-this-point/" rel="bookmark" class="crp_title">Hello Again : My life up to this point</a></li><li><a href="http://nickapedia.com/2012/06/05/quick-videos-razor-webinar-more/" rel="bookmark" class="crp_title">Quick Videos : Razor Webinar &#038; More</a></li><li><a href="http://nickapedia.com/2013/02/27/vmware-puppet-one-more-step-forward/" rel="bookmark" class="crp_title">VMware &#038; Puppet : One More Step Forward</a></li><li><a href="http://nickapedia.com/2012/06/25/razor-oss-2-public-release-of-mk/" rel="bookmark" class="crp_title">Razor OSS #2 : Public Release of MK</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://nickapedia.com/2012/06/05/api-all-the-things-razor-api-wiki/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Alternate PXE/iPXE Config : Razor</title>
		<link>http://nickapedia.com/2012/05/25/alternate-pxeipxe-config-razor/</link>
		<comments>http://nickapedia.com/2012/05/25/alternate-pxeipxe-config-razor/#comments</comments>
		<pubDate>Fri, 25 May 2012 18:32:53 +0000</pubDate>
		<dc:creator>nick</dc:creator>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Fixes]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[broadcom]]></category>
		<category><![CDATA[chainloading]]></category>
		<category><![CDATA[dell servers]]></category>
		<category><![CDATA[dhcp]]></category>
		<category><![CDATA[ipxe]]></category>
		<category><![CDATA[provisioning]]></category>
		<category><![CDATA[puppet]]></category>
		<category><![CDATA[pxe]]></category>
		<category><![CDATA[razor]]></category>

		<guid isPermaLink="false">http://nickapedia.com/?p=2084</guid>
		<description><![CDATA[Certain user may encounter issues with PXE/iPXE and Razor with specific broadcom networking cards. There is an alternate way to configure DHCP for Razor and I have created a Wiki page on the Razor project to walk your through setting it up. Go here to read the page: https://github.com/puppetlabs/Razor/wiki/Alternate-Pre-boot-Options-for-Compatibility .nick Related Posts:API All The Things! : Razor API WikiHello Again : My life up to this pointQuick Videos : Razor Webinar &#038; MoreVMware &#038; Puppet : One More Step ForwardRazor OSS #2 : Public Release of MK]]></description>
			<content:encoded><![CDATA[<p>Certain user may encounter issues with PXE/iPXE and Razor with specific broadcom networking cards.</p>
<p>There is an alternate way to configure DHCP for Razor and I have created a Wiki page on the Razor project to walk your through setting it up.</p>
<p>Go here to read the page: <a title="https://github.com/puppetlabs/Razor/wiki/Alternate-Pre-boot-Options-for-Compatibility" href="https://github.com/puppetlabs/Razor/wiki/Alternate-Pre-boot-Options-for-Compatibility">https://github.com/puppetlabs/Razor/wiki/Alternate-Pre-boot-Options-for-Compatibility</a></p>
<p>.nick</p>
<div class="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://nickapedia.com/2012/06/05/api-all-the-things-razor-api-wiki/" rel="bookmark" class="crp_title">API All The Things! : Razor API Wiki</a></li><li><a href="http://nickapedia.com/2012/10/22/hello-again-my-life-up-to-this-point/" rel="bookmark" class="crp_title">Hello Again : My life up to this point</a></li><li><a href="http://nickapedia.com/2012/06/05/quick-videos-razor-webinar-more/" rel="bookmark" class="crp_title">Quick Videos : Razor Webinar &#038; More</a></li><li><a href="http://nickapedia.com/2013/02/27/vmware-puppet-one-more-step-forward/" rel="bookmark" class="crp_title">VMware &#038; Puppet : One More Step Forward</a></li><li><a href="http://nickapedia.com/2012/06/25/razor-oss-2-public-release-of-mk/" rel="bookmark" class="crp_title">Razor OSS #2 : Public Release of MK</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://nickapedia.com/2012/05/25/alternate-pxeipxe-config-razor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lex Parsimoniae : Cloud Provisioning with a Razor</title>
		<link>http://nickapedia.com/2012/05/21/lex-parsimoniae-cloud-provisioning-with-a-razor/</link>
		<comments>http://nickapedia.com/2012/05/21/lex-parsimoniae-cloud-provisioning-with-a-razor/#comments</comments>
		<pubDate>Tue, 22 May 2012 05:42:46 +0000</pubDate>
		<dc:creator>nick</dc:creator>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[EMC]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Manic Innovation Challenge]]></category>
		<category><![CDATA[Slider_Featured]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[bare-metal]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[ESXi]]></category>
		<category><![CDATA[Node.js]]></category>
		<category><![CDATA[open souce]]></category>
		<category><![CDATA[provisioning]]></category>
		<category><![CDATA[puppet]]></category>
		<category><![CDATA[puppetlabs]]></category>
		<category><![CDATA[razor]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://nickapedia.com/?p=2051</guid>
		<description><![CDATA[Blogging has been very difficult for me over the last 4 months. My move to the Office of the CTO within EMC changed much of what I did and left me searching for content I could write about. Most of what I was dealing with on a daily basis was either too early to mention or too secret to reveal. Today, this changes with the release of a project I have spent the majority of my days and nights working on this year. Without long-worded wind up I am proud to announce the release of Razor, a cloud-provisioning tool to change the way we look at provisioning hardware for cloud stacks. Razor is a software application, which is a combination of Ruby (main logic) and Node.js (API, Image Service) for rapidly provisioning operating systems and hypervisors for BOTH physical and virtual servers. It is designed to make standing up the base substrate underneath cloud deployments both simple and transactional. Now at this point, many of you are thinking: “Great, another *cloud* provisioning tool.” And I don’t blame you at all. So what makes Razor different than many other tools out there like Cobbler, Dell’s Crowbar, or other deployment services? Just about everything. The real answer to that question is related to the reason this project is named Razor. We based much of our design theory after Ockham&#8217;s razor. It is based on the belief that OS/hypervisor deployment should be simple, succinct, and incredibly flexible. Many products out there try to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://nickapedia.com/wp-content/uploads/2012/05/Razor_of_Ockham.png"><img style="background-image: none; margin: 0px 0px 10px 20px; padding-left: 0px; padding-right: 0px; display: inline; float: right; padding-top: 0px; border: 0px;" title="Razor_of_Ockham" src="http://nickapedia.com/wp-content/uploads/2012/05/Razor_of_Ockham_thumb.png" alt="Razor_of_Ockham" width="266" height="361" align="right" border="0" /></a>Blogging has been very difficult for me over the last 4 months. <a href="http://nickapedia.com/tag/cto-office/" target="_blank">My move to the Office of the CTO</a> within EMC changed much of what I did and left me searching for content I could write about. Most of what I was dealing with on a daily basis was either too early to mention or too secret to reveal.</p>
<p>Today, this changes with the release of a project I have spent the majority of my days and nights working on this year. Without long-worded wind up I am proud to announce the release of <strong>Razor</strong>, a cloud-provisioning tool to change the way we look at provisioning hardware for cloud stacks.</p>
<p>Razor is a software application, which is a combination of <a href="http://www.ruby-lang.org/en/" target="_blank">Ruby</a> (main logic) and <a href="http://nodejs.org/" target="_blank">Node.js</a> (API, Image Service) for rapidly provisioning operating systems and hypervisors for BOTH physical and virtual servers. It is designed to make standing up the base substrate underneath cloud deployments both simple and transactional.</p>
<p>Now at this point, many of you are thinking: “Great, another *cloud* provisioning tool.” And I don’t blame you at all. So what makes Razor different than many other tools out there like <a href="http://en.wikipedia.org/wiki/Cobbler_(software)" target="_blank">Cobbler</a>, <a href="http://content.dell.com/us/en/gen/d/cloud-computing/crowbar-software-framework" target="_blank">Dell’s Crowbar</a>, or other deployment services? Just about everything.</p>
<p>The real answer to that question is related to the reason this project is named Razor. We based much of our design theory after <a href="http://en.wikipedia.org/wiki/Occam's_razor" target="_blank">Ockham&#8217;s razor</a>. It is based on the belief that OS/hypervisor deployment should be simple, succinct, and incredibly flexible. Many products out there try to solve ALL the problems for every layer instead of focusing on their layer correctly. They try and make their software layer the most important piece. Razor is designed to enable other tools rather than replace them.</p>
<p>As part of this, Razor was designed to be extremely simple to extend and manage. Unlike other popular tools out there right now. Razor allows you to add support for an entirely new operating system with a single file. It allows you to create multiple versions of an operating system model by changing a few lines. And with this release it fully supports <a href="https://my.vmware.com/web/vmware/info/slug/datacenter_cloud_infrastructure/vmware_vsphere/5_0?rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=1&amp;ved=0CIwBEBYwAA&amp;url=http://www.vmware.com/go/download-vsphere&amp;ei=NCu7T9EVqNOIAuq5tO0N&amp;usg=AFQjCNH8BxQtnSL49XtiBsAOpEm3d1Va_Q" target="_blank">VMware’s ESXi 5</a>, <a href="http://www.centos.org/" target="_blank">Centos 6</a>, <a href="http://www.opensuse.org/en/" target="_blank">openSUSE 12</a>, <a href="http://www.ubuntu.com/" target="_blank">Ubuntu</a> <a href="http://releases.ubuntu.com/11.10/" target="_blank">Oneiric</a> &amp; <a href="http://releases.ubuntu.com/12.04/" target="_blank">Precise</a>, and <a href="http://www.debian.org/releases/testing/" target="_blank">Debian Wheezy</a> with our first release.</p>
<p>But the ability to extend Razor is just part of the magic. Another critical design decision is how Razor links to upper-level configuration. Early on, the team I belong to was researching and exploring different newer provisioning tools. We found that many had very limited support. Others were just glorified scripts. And some were even linked to <a href="http://en.wikipedia.org/wiki/DevOps" target="_blank">DevOps</a> tools (awesome) but chose a design where they wrapped a state machine around the DevOps state machine (not so awesome). And I won’t even start on the horrible installers we ran into. If it takes 60-120 minutes of manual work to setup a DevOps integrated tool &#8211; then you are not getting the point behind DevOps.<br />
We ended up at a point where we said to ourselves, “If I could have a new cloud provisioning tool, what would it look like?”. And we came up with some core ideas:</p>
<ol>
<li>Adding new OS or Hypervisor distributions should be simple &#8211; Mentioned this above, but many tools require major work to extend.</li>
<li>Must be event-driven instead of user-driven &#8211; Many tools claim automation but require a user to have to select the 24 servers and push a button. We wanted Razor to enable users to create policy that automatically accomplishes what is needed when given physical or virtual hardware.</li>
<li>Should have powerful vendor-agnostic discovery or physical or virtual compute resources &#8211; A powerful tool is useful whether it is a 5 year old HP server, KVM virtual machine, or brand new Cisco UCS Blade. It should be able to discover, understand, and provision to any of these and all of these based on a user’s needs.</li>
<li>It should scale well &#8211; No monolithic structure. You should be able to run one instance or 50 instances without issue. This is a major reason behind why we chose Node.js for the API and Image Service layers. Event-driven and fast.</li>
<li>It should directly integrate with DevOps toolsets to allow for cloud configuration &#8211; The biggest and most important requirement. And unlike tools that wrap and cripple a DevOps tool &#8211; Razor should integrate with them without affecting their ability to scale or manage resources.</li>
<li>The control structure must support REST interface control out of the box &#8211; If you are going to build a system for automation- make sure it can be automated by another system.</li>
</ol>
<p>With these requirements Razor was born. So, let me walk you through how Razor works and why this is so powerful.</p>
<h2></h2>
<h2>Discovery</h2>
<p><a href="http://nickapedia.com/wp-content/uploads/2012/05/razor_discovery.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; float: right; padding-top: 0px; border: 0px;" title="razor_discovery" src="http://nickapedia.com/wp-content/uploads/2012/05/razor_discovery_thumb.jpg" alt="razor_discovery" width="252" height="361" align="right" border="0" /></a>Razor uses a powerful discovery mechanism that has a single purpose: find out what a compute node is made of. With Razor we designed what we call the MicroKernel (known as the MK) for Node discovery. When a server is booted your DHCP server will point the server to a static PXE provided by Razor. This PXE file will point the server at the Razor API and automatically pull down the MK and load it. The MK is tiny, around 20MB in size and is an in-memory Linux kernel that will boot, inventory, contact the Razor server, and register the node with Razor. It will then sit idle and check-in with a lightweight ping waiting for Razor to tell it what to do. The control link between Razor and the MK on the nodes is via REST to Razor’s Node.js API.</p>
<p>The MK then uses <a href="http://projects.puppetlabs.com/projects/facter" target="_blank">Puppet Lab’s Facter</a> to gather information on every piece of hardware as well as what kind of server (virtual or physical) and even what kind of virtualization it is on (VMware, KVM, Xen). The MK sends this information back to Razor and even updates, should you change hardware on the fly. The end result is that Razor can automatically discover and know the makeup of hundreds of physical or virtual servers. It will know what CPU version, server vendor, how many NICs, how many physical disks, and much much more. All of which becomes very important soon. This information is available for every node within Razor (screenshot) via the CLI or REST interface.</p>
<h2></h2>
<h2>Tagging</h2>
<p>The next step is taking this inventory of nodes and classifying and carving into something useful for deployment. This is where tagging comes in. In Razor you have a construct called a Tag Rule. A Tag Rule applies a Tag to a Node (discovered compute node). A Tag rule contains qualifying rules called Matchers. It may seem a little complex but is actually incredibly simple.</p>
<p><a href="http://nickapedia.com/wp-content/uploads/2012/05/razor_tagging.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; float: left; padding-top: 0px; border: 0px;" title="razor_tagging" src="http://nickapedia.com/wp-content/uploads/2012/05/razor_tagging_thumb.jpg" alt="razor_tagging" width="264" height="360" align="left" border="0" /></a>Let’s say you have 64 servers. 16 of them are brand new Cisco UCS blades. 18 of them are HP servers about 3 years old. And finally you have 24 old Dell servers that are quite dated. What you want to do is separate these servers by type so you can deploy and configure them differently. You want to put the Cisco UCS blades into a vSphere cluster for running Cloud Foundry. You want to take the HP servers and stand up an <a href="http://openstack.org/" target="_blank">OpenStack</a> test bed. And since the Dell’s are a bit dated, you want to provision them as development servers running Ubuntu for use by a development team.</p>
<p>Part of the beauty of Razor’s discovery mechanism is that it has already gathered all the information you need. Each Node contains attributes for both vendor and product name from the MK registration.</p>
<p>Tagging allows you to group these servers by applying a common tag. You create a Tag Rule called ‘CiscoUCS’. And then you add a single Matcher to that rule that says: if ‘vendor’ equals ‘Cisco’ then apply the Tag. Immediately every Node Razor has that matches that rule with be tagged: ‘Cisco’. Likewise you can setup tag rules for the HP and Dell servers. You can also tag on things like how much memory or CPU version and create helpful tags like ‘big_server’, ‘medium_server’, or ‘small_server’. And Tags stack also. So you can create multiple Tag Rules that can apply and classify complex servers. You can have a Node with [‘Cisco’,’big_server’,’4_nics’,’cluster_01’,’Dallas’] describing size, location, and grouping. Tag Rules also allow you to insert attributes into the Tag. So you can create rules that automatically name like ‘memory_96GB’ for one server and ‘memory_48GB’ for another.</p>
<h2>Policy</h2>
<p><a href="http://nickapedia.com/wp-content/uploads/2012/05/razor_provisioning.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; float: right; padding-top: 0px; border: 0px;" title="razor_provisioning" src="http://nickapedia.com/wp-content/uploads/2012/05/razor_provisioning_thumb.jpg" alt="razor_provisioning" width="276" height="417" align="right" border="0" /></a>So in our example use case we now have taken our 64 servers and applied a bunch of useful Tags to them. We now need to make those Tags useful and do something based on them. This is where Policy in Razor comes into play. A Policy in Razor is a rule that takes a Model (more on this in a second) and applies it to a Node (remember, discovered servers) based on matching against Tags. This is incredibly simple to setup. In our case we would have a Model called ‘<em>ESXi5Standard’</em> which deploys VMware’s vSphere hypervisor to a Node. We would create a new Policy that says: if a Node matches the Tags ‘Cisco’,’big_server’,’cluster_01’ then apply my ‘<em>ESXi5Standard’</em> model to this Node.</p>
<p>Now what makes this very very cool is this is completely automatic. As the Node checks-in from the MK, the Razor Engine checks the Policies to see if there is a match. Policies work like a firewall rule list. It starts at the top and moves down till it finds a match. When it finds that match it applies the Policy and binds the Model as the Active Model to the Node. This immediately starts applying whatever the Model is to the Node. In our case above, each one of our 16 UCS servers would quickly reboot and begin installing ESXi 5 to each node. What is more important to understand is that if only 1 Node was on when the rule was created only 1 would be installed. But as long as the Policy is enabled you could turn on the remaining 15 Nodes as you want and have them bind to the same Model and move on to become part of the vSphere Cluster.</p>
<p>In our use cases we would build 3 Policies. One for our UCS blades, one to install Redhat on our HP servers for OpenStack, and one to install Ubuntu Precise on our Dell servers. Any servers not fitting the Policies remain idle. If you were handed 16 more UCS blades and wanted them to deploy to the same cluster, you would just have to turn them on and let Razor continue to enforce the appropriate Policy.</p>
<h2></h2>
<h2>Models</h2>
<p>Let me take a second to describe how Models work. You have two components to the Model structure; the Model Template and the Model itself. The Model Template is one or many files that describe how to do something. They are actually very simple to write and Razor comes with a bunch of Model Templates for installing a ton of common stuff. The Model is an instance of a Model Template plus some metadata required (like password, license key, hostname, etc). You may want to install ESXi or Ubuntu differently depending on if the destination is production, development or based on factors like location. So, you have the ability to use the Ubuntu Precise Model Template to create a Model for <em>UbuntuProduction </em>and a Model for <em>UbuntuDevelopment</em> with different settings for things like username, password, domain, etc. Or, you can use one Model for all and let upper-level tools like DevOps manage the configuration differences. I won’t go into how to create your own Model Template in this blog but even the Model Template can be customized for the same OS but different needs.</p>
<h2></h2>
<h2>Brokers</h2>
<p>So far I have covered how Razor allows for dynamic provisioning of OS/Hypervisor layers. But, if I stopped here then all I would have done is talked about a slightly better mousetrap. The creation of Razor was based on the principle of the simplest solution being the most elegant. And the point of deploying Ubuntu or vSphere is to host something at a higher level. That is where Brokers come into play and where the real magic of Razor is important.</p>
<p>If I want to deploy something like OpenStack I want to do it with a system that is designed to do it right. We looked at DevOps products like <a href="http://projects.puppetlabs.com/projects/openstack" target="_blank">Puppet Labs</a> and realized they are much better at managing configurations for cloud stacks. So by design Razor is integrated to enable the Handoff of a provisioning Node to a system that will manage it long-term.</p>
<p>To do this, Razor uses a Broker Plugin. A Broker is an external system like a Puppet Master from Puppet Labs that will properly configure a Node for its true purpose in life. Out of the box we have worked hand-in-hand with Puppet Labs to include a Broker Plugin for Puppet that enables both agent handoff (Linux variants) and proxy handoff (vSphere ESXi). There are a couple really important things to point out here. First, we don’t wrap Puppet or attempt to control the Puppet Master from Razor (like the other guys do). Razor’s purpose in life is to get the Node attached to the right Model and get it to a state where it can give the Node to Puppet. It delivers all the metadata it gathered along the way also including tags. But once Puppet gives the thumbs up – Razor is done.</p>
<p>When a Broker like Puppet receives the Node, it can use the tags passed with it to make decisions on the configuration. You can link similarly tagged ESXi Nodes into the same cluster. You can setup one node as a Swift Proxy and the next 5 as Swift Object servers based on tagging. The important thing here is that Puppet is able to consume the hardware details and classification and in sequence, turn provisioned Nodes into stacks of application and services.</p>
<p>Which means in the end- when everything is setup, Razor and Puppet can take groups of servers and turn them into deployed services automatically. They can scale them incrementally. With the way binding works with Razor, you can even re-provision quickly.</p>
<p>&nbsp;</p>
<p>This blog post is getting long enough as it is. I will leave much of the configuration details for the videos below. I won’t cover how the entire control structure is completely available via REST API (proper GET, POST, PUT, DELETE). I won’t mention the slick Image Service <a href="http://nickapedia.com/wp-content/uploads/2012/05/razor_hand_off.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; float: left; padding-top: 0px; border: 0px;" title="razor_hand_off" src="http://nickapedia.com/wp-content/uploads/2012/05/razor_hand_off_thumb.jpg" alt="razor_hand_off" width="354" height="338" align="left" border="0" /></a>that allows you to load ISO’s into Razor and choose which Models to attach to. I will even skip the lightning fast Node.js layer which dynamically serves the API and the Image Service for all Nodes. And I won’t mention the detailed logging you get with provisioning tasks including the ability to define your own state machine within a Model.</p>
<p>But I will mention the best part about the Razor announcement. EMC has decided to donate the Razor code for release under Puppet Labs community with an open-source <a href="http://en.wikipedia.org/wiki/Apache_License" target="_blank">Apache license</a>. We feel strongly that releasing Razor as open-source software for enabling the next-generation of cloud computing and integrated proper DevOps toolsets is critical to the community. We are looking forward to the cloud community helping us create something that can benefit everyone.</p>
<p>At this point you may be asking, how you can start using Razor. Unlike some other tools, Razor is incredibly simple to install and run. You can manually download the required pieces and clone from the github repo. But the slick cloud-magician way is to actually use Puppet and deploy Razor quickly and easily. Because what good is a DevOps integrated tool if you cannot deploy it with DevOps toolset?</p>
<p>Here is a quick video by Nan Liu of Puppet Labs showing how easy it is to install Razor via Puppet on Ubuntu Precise.</p>
<p><iframe src="http://player.vimeo.com/video/42693968" width="500" height="375" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe></p>
<p>This video is a quick example of deployment with ESXi Models and handoff to Puppet Labs for automatic install of vSphere and configuration of clusters and virtual machines.</p>
<p><iframe src="http://player.vimeo.com/video/42670335" width="500" height="375" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe></p>
<p>And finally here are some critical links to get started on working with Razor.</p>
<ul>
<li> MUST READ. Awesome quick guide by Puppet Labs on how to deploy and use Razor with Puppet. <a href="http://puppetlabs.com/blog/puppet-razor-module/?utm_campaign=blog&#038;utm_medium=socnet&#038;utm_source=twitter&#038;utm_content=motwrazor">http://puppetlabs.com/blog/puppet-razor-module/?utm_campaign=blog&#038;utm_medium=socnet&#038;utm_source=twitter&#038;utm_content=motwrazor</a></li>
<li>The Puppet Labs press release regarding Razor: <a href="http://puppetlabs.com/company/news/press-releases/puppet-labs-announces-next-generation-provisioning-solution/" target="_blank">http://puppetlabs.com/company/news/press-releases/puppet-labs-announces-next-generation-provisioning-solution/</a></li>
<li>Great Cloudcast podcast with myself, Dan Hushon, and the Puppet Labs team: <a href="http://www.thecloudcast.net/2012/05/cloudcast-eps38-project-razor-google.html" target="_blank">http://www.thecloudcast.net/2012/05/cloudcast-eps38-project-razor-google.html</a></li>
<li>The Razor code at Puppet Labs github account: <a href="https://github.com/puppetlabs/Razor" target="_blank">https://github.com/puppetlabs/Razor</a></li>
<li>A great post by my boss and cloud veteran, Dan Hushon: <a href="http://www.vdatacloud.com/blogs/?p=106">http://www.vdatacloud.com/blogs/?p=106</a></li>
<li>Good EMC insider viewpoint from the one and only Chuck Hollis: <a href="http://chucksblog.emc.com/chucks_blog/2012/05/of-puppet-and-razor.html">http://chucksblog.emc.com/chucks_blog/2012/05/of-puppet-and-razor.html</a></li>
</ul>
<p>I  will be following up this blog post with videos on how to use each component of Razor and examples of using the REST API, and much, much more.</p>
<p>Feel free to leave comments and questions here. But please use the resources Puppet Labs has setup for the community projects as well.</p>
<p>Thanks for reading this long post – and have fun cutting some servers up,</p>
<p>.nick</p>
<div class="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://nickapedia.com/2012/06/05/api-all-the-things-razor-api-wiki/" rel="bookmark" class="crp_title">API All The Things! : Razor API Wiki</a></li><li><a href="http://nickapedia.com/2012/05/25/alternate-pxeipxe-config-razor/" rel="bookmark" class="crp_title">Alternate PXE/iPXE Config : Razor</a></li><li><a href="http://nickapedia.com/2012/10/22/hello-again-my-life-up-to-this-point/" rel="bookmark" class="crp_title">Hello Again : My life up to this point</a></li><li><a href="http://nickapedia.com/2012/06/05/quick-videos-razor-webinar-more/" rel="bookmark" class="crp_title">Quick Videos : Razor Webinar &#038; More</a></li><li><a href="http://nickapedia.com/2013/02/27/vmware-puppet-one-more-step-forward/" rel="bookmark" class="crp_title">VMware &#038; Puppet : One More Step Forward</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://nickapedia.com/2012/05/21/lex-parsimoniae-cloud-provisioning-with-a-razor/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>
