<?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>IT Partners Blog</title>
	<atom:link href="http://www.goitpartners.com/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.goitpartners.com/blog</link>
	<description>Thoughts from the IT Partners consulting team.</description>
	<lastBuildDate>Fri, 23 Mar 2012 03:04:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Building a Better IT Guy (or Gal)</title>
		<link>http://www.goitpartners.com/blog/?p=305</link>
		<comments>http://www.goitpartners.com/blog/?p=305#comments</comments>
		<pubDate>Thu, 22 Mar 2012 17:17:47 +0000</pubDate>
		<dc:creator>Doug Baer</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.goitpartners.com/blog/?p=305</guid>
		<description><![CDATA[Recently, I&#8217;ve become aware of a rise in the number of technical industry / vendor certifications stressing the importance of communication with consumers of IT resources &#8212; call them customers if that sounds less clinical and makes you more comfortable. This got me thinking. Two such certifications currently live in my repository, so I believe [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>Recently, I&#8217;ve become aware of a rise in the number of technical industry / vendor certifications stressing the importance of communication with consumers of IT resources &#8212; call them <em>customers</em> if that sounds less clinical and makes you more comfortable. This got me thinking. Two such certifications currently live in my repository, so I believe I can speak from experience:</p>
<ul>
<li><a title="VCDX Info" href="http://mylearn.vmware.com/mgrReg/plan.cfm?plan=9657&amp;ui=www">VMware Certified Design Expert (VCDX)</a></li>
<li><a href="http://www.hp.com/certification/data_card/HP_MASE_Converged_Infrastructure_Architect_2011.html">HP Master Accredited System Engineer &#8211; Converged Infrastructure Architect (MASE-CI)</a></li>
</ul>
<p>Talk with the customers? That&#8217;s crazy talk! Honestly, I find myself trying to understand why this is such a revelation. I am not saying that I disagree with this direction; on the contrary, I see this as a critical component of any responsible design process.  My challenge today is understanding what is all of a sudden driving the industry to emphasize a seemingly intuitive concept.</p>
<p><strong>Background</strong></p>
<p>In my background I have experience in both IT infrastructure support and software development.  Because of the software development component, characteristics of a workload have always been near and dear to me: I was that crazy developer who <strong>needed</strong> to understand the footprint of my application on the infrastructure. In fact, I believed that I was unable to effectively develop for a platform unless I understood how that platform handled resources like CPU, memory, disk and network.</p>
<p>Remember when we had a 64K envelope in which to develop our applications?  Imagine how much efficiency had to be coded into the applications to balance functionality with size. This created a serious learning curve for me whenever I was asked to develop for new platform. Sure, I could have just taken my existing code and &#8220;search and replace&#8221; ported it, but that wouldn&#8217;t have been very efficient and I was not about to compromise.  Apparently, I can be kind of a pain to work with, but I like to think that I produced more efficient solutions tailored to specific platforms.</p>
<p><strong>Efficiency</strong></p>
<p>Speaking of efficiency, most of us in the IT industry are familiar with the &#8220;over-size&#8221; engineering concept: build a box big enough that whatever we try to put into it will fit.  The potential for waste is pretty obvious, and became very evident during the x86 server sprawl of the late 90&#8242;s/early 2000&#8242;s.  Virtualization (server, storage, network&#8230;) was the hammer brought to bear here to collapse silos of trapped capacity and allow sharing of resources without the need to change the over-sized boxes we put our stuff into.</p>
<p>Unfortunately, virtualization can only do so much to drive inefficiency out of an environment.  At some point, the components which have been virtualized must be &#8220;right-sized&#8221; to accurately reflect the needs of the workloads running within them. Doing that requires understanding of what those workloads are doing, how they are used, and any cycles associated with that use: monthly batch jobs, specialized backup processes, or seasonal demand.</p>
<p><strong>A Fundamental Difference</strong></p>
<p>I don&#8217;t think anyone would argue that infrastructure teams have evolved with a different focus and mindset than development groups.  Most infrastructure teams have grown up from &#8220;IT support&#8221; teams whose job was to keep the existing computer systems up and running.  That&#8217;s it: make sure the file/print/mail/database server doesn&#8217;t go down&#8230; and make sure the PCs can talk to them.  In my experience, a vast majority of teams retain this focus and understanding <strong>how the systems are being used</strong> is barely on their radar.  I&#8217;ve heard loud and clear from a lot of &#8220;old school&#8221; IT support personnel that they really don&#8217;t (and shouldn&#8217;t need to!) care about <strong>how</strong> the platform they provide is being used:</p>
<p><em>&#8220;That&#8217;s not my job. I&#8217;m just here to provide infrastructure that is resilient. As long as it&#8217;s running, the users should be happy.&#8221; </em></p>
<p>I may be in a consulting position now, but I&#8217;ve been there and I can&#8217;t disagree enough. Sure, it is possible to build IT infrastructure without talking to consumers about actual requirements.  I see it all the time: we&#8217;re building the network with a 10Gb core because <em>we</em> don&#8217;t want that to be the bottleneck. Or, similarly: we&#8217;re building a SAN and we need 16Gb FC and 75TB capacity so we don&#8217;t run out of space.</p>
<p>Maybe you can design and build the best network/storage/virtualization infrastructure on the planet, but <strong>does it meet the needs</strong> of your consumers? What if your consumers&#8217; workloads are compute heavy and barely touch the existing 100Mb network and 2Gb SAN connections?  You just spent your money in the wrong place and <strong>way</strong> over-built and overpaid for your amazing solution&#8230; in the wrong areas.</p>
<p>In development, we have a parallel concept: spend your time optimizing the code that will be executed the most.  If I have code that is executed once a day and code that is executed several times a minute, where do you think I should spend my time optimizing? You got it. The typical challenge is in determining where to focus our energies.  For that, you need requirements. From consumers.</p>
<p><em><strong>KEY POINT:</strong></em> Don&#8217;t build something in a vacuum and just assume it will be useful.</p>
<p>As a developer, I&#8217;ve got a challenge that forces me down a certain path: how can I even begin to develop <strong>anything</strong> without first capturing <strong>some</strong> requirements?  Sure, I can build an application or server shell, but what if the actual requirements for the project turn out to involve building a plugin for an existing system rather than a standalone solution?  Yup, back to the drawing board.</p>
<p><strong>Cloud?</strong></p>
<p>When I think about it, this is a fundamental challenge of IaaS cloud solutions, aside from the more common ones: connectivity, security, portability, etc.  Cloud models are all about sharing, agility and cost efficiency.  In order to most effectively utilize resources and drive costs down in an IaaS cloud, understanding of the workloads within the compute units (VMs) is required.  For many, though, that level of transparency is in direct violation of the whole &#8216;cloud&#8217; model.  How do we strike a balance between providers and consumers to ensure adequate performance for minimal cost while maintaining enough translucency to provide security?</p>
<p><strong>Thought</strong></p>
<p>Working with resource consumers to both gather requirements and convey what is possible using a given technology or platform is a key workflow for any software development activity. It should likewise be a critical path component for any infrastructure implementation, including specification of cloud solutions. Fortunately, it seems that the industry is catching on: becoming a better IT guy (or gal) requires skills in gathering requirements from the consumer.  This is true whether you are a salesperson, consultant, or internal IT department resource.</p>
<p>Obtaining the required information from the workload owners is a whole different story and one I&#8217;d like to discuss in a future post.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.goitpartners.com/blog/?feed=rss2&#038;p=305</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>vCenter Management Appliance Certificates</title>
		<link>http://www.goitpartners.com/blog/?p=217</link>
		<comments>http://www.goitpartners.com/blog/?p=217#comments</comments>
		<pubDate>Thu, 12 Jan 2012 17:58:34 +0000</pubDate>
		<dc:creator>Doug Baer</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.goitpartners.com/blog/?p=217</guid>
		<description><![CDATA[If you&#8217;re like me, you are annoyed by the message warning that the certificate being presented by your vCenter machine is “untrusted.” Yeah, you all know the one I mean: A little bit of OCD? For me, I don’t like to just check the box at the bottom and pretend it doesn’t exist.  Aside from [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>If you&#8217;re like me, you are annoyed by the message warning that the certificate being presented by your vCenter machine is “untrusted.” Yeah, you all know the one I mean:</p>
<p style="text-align: center"><a href="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/14-vcenter-operations.png"><img class="size-full wp-image-224 aligncenter" src="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/14-vcenter-operations.png" alt="vSphere Client Certificate Warning" width="510" height="266" /></a></p>
<h2>A little bit of OCD?</h2>
<p>For me, I don’t like to just check the box at the bottom and pretend it doesn’t exist.  Aside from the fact that the checkbox doesn’t always make the messages cease, I like to have a <strong>real</strong> solution instead of sweeping it under the rug.  When you think about it, the team at VMware implemented certificates for a reason.  I’m sure it had mostly to do with encrypting the connection between vSphere clients, vCenter and the hosts, but those scary certificate things can do more, too!</p>
<h2>Prerequisites</h2>
<p>In this posting, I will focus on the VMware vCenter Management Appliance (VCMA) since the process for getting certificates registered on that appliance has been difficult to find.  If you want to know how to do it for ‘regular’ (i.e. Windows-based) vCenter, or the ESXi hosts, I think the processes are documented in the <a title="vSphere 5.0 Security Guide" href="http://pubs.vmware.com/vsphere-50/topic/com.vmware.ICbase/PDF/vsphere-esxi-vcenter-server-50-security-guide.pdf" target="_blank">vSphere Security Guide</a> &#8211; check Chapter 5 for more information.  (The actual generation of the key and CSR files and retrieval of the certificates follows the same process I outline here, but you push the files to the ESXi hosts to replace the <strong>rui.key</strong> and <strong>rui.crt</strong> files in the <strong>/etc/vmware/ssl</strong> directory.)</p>
<p>Also, for the sake of this posting, I will assume that you have some form of public key infrastructure (PKI) in place – that would be a certificate infrastructure used at your company – and the capability to have a server authentication-type certificate request fulfilled.  These certificates are commonly used by web servers, so being able to do that is probably a good indication that you can get the appropriate certificates created.  Creating a PKI just to make the warnings go away is a little crazy and actually does your environment a disservice: the CA needs to be a <strong>trusted authority</strong> within your organization and should be designed accordingly rather than stood up in an hour.  If you pay for all of your certificates to be issued from a public CA, that’s fine as well.</p>
<p>Getting off my soapbox and back to the task at hand, let’s make sure you have the following in your environment:</p>
<ol>
<li>A vCenter Management appliance deployed on top of an ESXi host – it will run under Workstation 8. I haven’t tried previous versions, but this works if you want to play around.</li>
<li>puTTY, or your favorite SSH client – I like accessing the VCMA via SSH so I can paste the long commands into the console.</li>
<li>Some way to transfer the CSR and CER files to/from the VCMA.  Technically, you can copy and paste the text using puTTY, but I use FileZilla in my example.</li>
<li>A vSphere client installed</li>
<li>A compatible web browser</li>
<li>A properly functioning PKI, public key (certificate) infrastructure, is currently in place</li>
</ol>
<h2>High Level Overview</h2>
<ol>
<li>Deploy the VCMA from the OVF</li>
<li>Configure some initial parameters within the VCMA’s Linux OS</li>
<li>Create a certificate request (CSR) on the VCMA</li>
<li>Submit the CSR to the certificate authority (CA)</li>
<li>Apply the resulting certificate to the VCMA</li>
</ol>
<p>This should be simple, right?</p>
<h3>Arrival</h3>
<p>I am assuming that step #1 has been completed.  It is best if you start with a fresh, clean VCMA in order to ensure that the process works.  Once your database has been populated, I think the process works, but I don’t know if there are any snags – caveat emptor.</p>
<p style="text-align: center"><a href="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/screenshot.1537.png"><img class="aligncenter size-full wp-image-228" src="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/screenshot.1537.png" alt="VCMA Main" width="526" height="295" /></a></p>
<h3>2. Configure some initial parameters within the VCMA’s Linux OS</h3>
<h4>Set Hostname</h4>
<p>In my testing, I’ve found that it is helpful to set the hostname and ensure name resolution on the VCMA prior to messing with anything else.  From the console of the VCMA, select the Login option and login as the root user (default username is <strong>root</strong> and the password is <strong>vmware</strong> – at least as of build 472350).</p>
<p>This is a good time to present my hostname and IP address &#8212; I&#8217;ll use these throughout the example.</p>
<ul>
<li>VCMA Hostname: <strong>vcma01</strong></li>
<li>VCMA Domain: <strong>itplab.local</strong></li>
<li>VCMA FQDN: <strong>vcma01.itplab.local</strong></li>
<li>VCMA IP Address: <strong>192.168.199.128</strong></li>
</ul>
<p>Once logged in on the console as <strong>root</strong>, set the hostname and activate the change</p>
<p><code># echo vcma01.itplab.local &gt;/etc/HOSTNAME</code></p>
<p><code> </code></p>
<p><code># hostname –file /etc/HOSTNAME</code></p>
<p>Once that is done, logout and back in to make sure the prompt changes appropriately.  On the console, this looks something like the following:</p>
<p><a href="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/screenshot.1541.png"><img class="aligncenter size-full wp-image-230" src="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/screenshot.1541.png" alt="Set Hostname" width="523" height="128" /></a></p>
<p><a href="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/screenshot.1542.png"><img class="aligncenter size-full wp-image-229" src="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/screenshot.1542.png" alt="Verify Hostname" width="497" height="128" /></a></p>
<p>I make a KEYS directory in the root user’s home directory to contain the files I’ll be using here. Feel free to do so, or not, but my examples assume this setup.</p>
<p><code># mkdir KEYS<br />
</code></p>
<p><code> </code></p>
<h4>Name resolution</h4>
<p>I always forget to do this, but if you don’t have DNS resolution configured, either do that or append a line to your /etc/hosts file to provide name resolution.</p>
<p><code># echo 192.168.199.128 vcma01.itplab.local vcma01 &gt;&gt;/etc/hosts<br />
</code></p>
<p>I like to test pinging by name to ensure that I didn’t make a mistake.</p>
<h3>3. Creating a Certificate Signing Request (CSR) on the VCMA</h3>
<p>Now back to our regularly scheduled program. Switch to the KEYS directory and create the CSR.</p>
<p><code># cd KEYS<br />
# openssl req -out vcma01.csr -new -newkey rsa:2048 -nodes -keyout vcma01.key<br />
</code></p>
<p>Walk through the process, answering the questions as they apply to you.  Be careful to answer the <strong>Common Name (eg, YOUR name)</strong> prompt with the FQDN of the VCMA, <strong>not</strong> YOUR name.</p>
<p style="text-align: center"><a href="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/screenshot.1547.png"><img class="aligncenter size-full wp-image-233" src="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/screenshot.1547.png" alt="Create CSR" width="584" height="327" /></a></p>
<p>..continued</p>
<p style="text-align: center"><a href="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/screenshot.1548.png"><img class="aligncenter size-full wp-image-234" src="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/screenshot.1548.png" alt="Create CSR 2" width="545" height="200" /></a></p>
<h4>Transfer the Certificate Signing Request (CSR) to the Certificate Authority (CA)</h4>
<p>Once the CSR has been generated according to the process above, there will be two new files in your directory: a <strong>.csr</strong> file and a <strong>.key</strong> file.</p>
<p><a href="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/screenshot.15491.png"><img class="aligncenter size-full wp-image-236" src="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/screenshot.15491.png" alt="List KEYS" width="309" height="55" /></a></p>
<p>You need to get the CSR file’s contents to your CA to request and create the certificate. FileZilla is a free way to do this using the already-running SSH process on the VCMA.  Provide the IP address or hostname, credentials, and port number for the connection (22):</p>
<p style="text-align: center"><a href="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/screenshot.1550.png"><img class="aligncenter size-full wp-image-237" src="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/screenshot.1550.png" alt="Download key" width="562" height="97" /></a></p>
<p>Accept the SSH key for the connection &#8212; if you don&#8217;t check the box, it will only accept the key for this session.</p>
<p><a href="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/screenshot.1551.png"><img class="aligncenter size-full wp-image-238" src="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/screenshot.1551-e1326385405344.png" alt="Accept SSH Key" width="455" height="167" /></a></p>
<p>If you like,  you can verify the fingerprint from the command line of the VCMA:</p>
<p><code># ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub</code></p>
<p>Just check that the resulting fingerprint matches the one in the FileZilla box above and you&#8217;re good.</p>
<p>FileZilla presents a simple two-pane file manager – the VCMA is on the right and your local machine is on the left.  Navigate to the <strong>KEYS </strong>directory on the VCMA and pull the <strong>vcma01.csr</strong> file to your machine: drag it from the right pane into the left pane and wait for the transfer.</p>
<p style="text-align: center"><a href="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/FileZilla-small.png"><img class="aligncenter size-full wp-image-242" src="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/FileZilla-small.png" alt="FileZilla-small" width="567" height="412" /></a></p>
<p>In the example, I got a little crazy with the mouse and copied both files – you only need the CSR.</p>
<h2>4. Requesting the Certificate</h2>
<p>In my environment, we have a Microsoft Windows Certificate Server deployed, so this process uses that infrastructure.</p>
<p>Browse to the web portal for the CA by using the proper URL.</p>
<p style="text-align: center"><a href="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/screenshot.1554.png"><img class="size-full wp-image-244 aligncenter" src="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/screenshot.1554.png" alt="CA Web URL" width="459" height="31" /></a></p>
<p>This displays the following Welcome page. Note that you may need to authenticate before it gets there.</p>
<p style="text-align: center"><a href="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/01_CA-Welcome.png"><img class="size-medium wp-image-245 aligncenter" src="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/01_CA-Welcome-300x140.png" alt="" width="300" height="140" /></a></p>
<p>Click on the <strong>Request a certificate</strong> link in the <strong>Select a task</strong> list.</p>
<p><a href="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/02_CA-Request.png"><img class="size-medium wp-image-247 aligncenter" src="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/02_CA-Request-300x151.png" alt="" width="300" height="151" /></a>Depending on your access to the CA and the types of certificates it has been enabled to deploy, you may see different options here.  Regardless, you want to click on the <strong>advanced certificate request</strong> link.</p>
<p><a href="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/03_CA-AdvRequest.png"><img class="size-medium wp-image-248 aligncenter" src="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/03_CA-AdvRequest-300x78.png" alt="" width="300" height="78" /></a></p>
<p>Since we have already generated the certificate request (CSR), we want the second option here.  Don’t worry, even though the link text is longer, it means fewer boxes for us to fill out. Here, you want to select the <strong>Web Server</strong> certificate type from the <strong>Certificate Template</strong> drop-down.  If that certificate type is not in the list, your CA  Administrator may have disabled it, or you may not be authorized to  create that type – you’ll need to contact the appropriate person to get  that resolved.</p>
<p style="text-align: center"><a href="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/04_CA-SubmissionPage.png"></a><a href="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/screenshot.1559.png"><img class="size-medium wp-image-253 aligncenter" src="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/screenshot.1559-300x247.png" alt="" width="300" height="247" /></a></p>
<p>Open the CSR file from the VCMA in Wordpad, Notepad, or your favorite text editor, copy the <strong>entire </strong>contents &#8211; be sure to include the</p>
<p><code>-----BEGIN CERTIFICATE REQUEST-----</code></p>
<p>and<br />
<code><br />
-----END CERTIFICATE REQUEST-----</code></p>
<p>lines.</p>
<p style="text-align: center"><a href="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/05_CopyCSRText.png"><img class="size-medium wp-image-250 aligncenter" src="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/05_CopyCSRText-300x181.png" alt="" width="300" height="181" /></a></p>
<p>&#8230;and paste it into the <strong>Saved Request</strong> box:</p>
<p style="text-align: center"><a href="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/06_CA-PasteCSRText.png"><img class="size-medium wp-image-251 aligncenter" src="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/06_CA-PasteCSRText-300x185.png" alt="" width="300" height="185" /></a></p>
<p>When you click <strong>Submit</strong>, the certificate request process implemented in your environment is set in motion.  If certificates require approval, you’ll have to get that process completed and come back once it is done.  Otherwise, the next screen will be presented.</p>
<p><a href="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/screenshot.1562-e1326387295585.png"><img class="size-medium wp-image-257 aligncenter" src="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/screenshot.1562-e1326387295585-300x167.png" alt="" width="300" height="167" /></a></p>
<p>Be sure to change the radio button from <strong>DER encoded</strong> to <strong>Base 64 encoded</strong> before continuing.  It just makes the process simpler.  Once that is done, click the <strong>Download certificate</strong> link and save the file somewhere that makes sense to you, and with a name that is easy to type.  I tend to use the VCMA’s hostname to keep things simple.</p>
<p style="text-align: center"><a href="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/screenshot.1563.png"><img class="size-medium wp-image-256 aligncenter" src="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/screenshot.1563-300x199.png" alt="Save Certificate" width="300" height="199" /></a></p>
<p><strong>NOTE:<em> </em></strong>In our lab environment, the root CA actually issues our certificates.  If you’ve got a mature or large PKI, there is normally an intermediate issuing CA that you’re accessing, and you may need to download the whole chain.  My assumption here is that your root and any intermediate CAs are already trusted by your client – i.e., your PKI is properly in place.</p>
<p>Once the certificate has been created and saved, use FileZilla to push the file onto the VCMA using the reverse of the process you used to download the CSR.</p>
<h3>Checking the Certificate</h3>
<p>From the VCMA CLI, verify that the files are where you think they are.</p>
<p><a href="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/screenshot.1567.png"><img class="size-medium wp-image-258 aligncenter" src="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/screenshot.1567-e1326387489733-300x43.png" alt="Verify Upload" width="300" height="43" /></a></p>
<p>I always check the fingerprint of my certificates so I know which ones I’m replacing and which ones I’m installing.  An added benefit is that it ensures a proper transfer occurred:</p>
<p><code># /usr/bin/openssl x509 -fingerprint -noout -in vcma01.cer</code></p>
<h3>Aside: DOS line endings</h3>
<p>One thing I noticed was that CER files from DOS machines came across with CR/LF line endings that tend to muck things up in Linux – when it comes to certificate files and keys, at least.  I realize that you can take care of this in a variety of ways – use your favorite method.</p>
<p>To see what I mean, use the vi editor to open the certificate</p>
<p><a href="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/screenshot.1570.png"><img class="size-medium wp-image-260 aligncenter" src="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/screenshot.1570-300x152.png" alt="see DOS endings" width="300" height="152" /></a></p>
<p>If you look at the bottom line (highlighted in red in the above image), it contains the filename in double quotes followed by [dos].  This means that the file contains CR/LF line endings used by DOS and Windows operating systems.  It may not seem like a big deal, but those hidden extras can bite you.</p>
<p>For fixing things up, I like <strong>awk</strong>.  With a simple command, you can replace all that DOS/Windows nastiness with *nix goodness:</p>
<p><code># awk '{sub (/\r$/,"");print}' vcma01.cer &gt;vcma01.crt</code></p>
<p>Check the new file with <strong>vi</strong> and notice that the [dos] is gone. Notice that I fixed the file into a new file rather than clobbering the original.  We&#8217;ll deal with the<strong> .crt </strong>file from this point forward.</p>
<h3>Configure the VCMA</h3>
<h4>Accept the EULA</h4>
<p>Before you can do anything useful with the VCMA, you must accept the EULA.  You can do that via the web interface of the VCMA https://YOUR_VCMA_IP_ADDRESS:5480, or from the command line.  We’re already there, so I use that.  If you prefer to click rather than type, go nuts.  I’ll wait while your web browser loads the UI and you login.</p>
<p><code># vpxd_servicecfg eula accept</code></p>
<p style="text-align: center"><a href="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/screenshot.1573.png"><img class="aligncenter size-full wp-image-261" src="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/screenshot.1573.png" alt="Accept EULA" width="572" height="308" /></a></p>
<p>Accepting the EULA does all kinds of things for us, but the most important part is the <strong>VC_CFG_RESULT=0</strong> line at the end.  That indicates that our <strong>vpxd_servicecfg</strong> command was successful.  Don’t worry about any of the other red or yellow stuff at this point.</p>
<h4>Initialize the Database</h4>
<p>Why do you have to configure the database now?  Well, if you don’t, the certificate swapping function in <strong>vpxd_servicecfg</strong> fails.  Beyond that, I have no idea. In this example, I’m using the embedded database.  You can use an external database and configure it via the command line as well, but I don’t have an external Oracle DB in my test environment.</p>
<p><code># vpxd_servicecfg db write embedded</code></p>
<p><a href="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/screenshot.1574.png"><img class="aligncenter size-full wp-image-262" src="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/screenshot.1574.png" alt="Initialize VCMA Database" width="486" height="142" /></a></p>
<p>See those <strong>Host name lookup failure</strong> lines? As I mentioned before, I&#8217;d forgotten to configure name resolution during this run. Don&#8217;t worry, the database initialized fine. Be warned, however, that this can take a long time if you’re doing it against slow storage.  As before, the important line is the <strong>VC_CFG_RESULT=0</strong>.</p>
<p>As I mentioned before, I’m big into checking certificate thumbprints. The first two keys&#8217; fingerprints should match, but will be different from the one you want to install (the third one):</p>
<p><code># /usr/bin/openssl x509 –fingerprint –noout –in /opt/vmware/etc/lighttpd/server.pem</code></p>
<p><code> </code></p>
<p><code># /usr/bin/openssl x509 –fingerprint –noout –in /opt/vmware-vpx/ssl/rui.crt</code></p>
<p><code># /usr/bin/openssl x509 –fingerprint –noout –in ~/KEYS/vcma01.crt</code></p>
<p>Making the certificate swap is accomplished with a single command</p>
<p><code># vpxd_servicecfg certificate change vcma01.crt vcma01.key</code></p>
<p>Note that you will get an error, <strong>VC_CFG_RESULT=653</strong>, if you were jumping ahead (as in the following picture) and got the service started before we got the certificates swapped.</p>
<p>The following command will take care of that so you can get back on track:</p>
<p><code># service vmware-vpxd stop</code></p>
<p style="text-align: center"><a href="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/screenshot.1579.png"><img class="aligncenter size-full wp-image-264" src="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/screenshot.1579-e1326388665881.png" alt="OOPS-Service Running" width="590" height="151" /></a></p>
<p>When all goes as planned, you get the <strong>VC_CFG_RESULT=0</strong></p>
<p style="text-align: center"><a href="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/screenshot.1580.png"><img class="aligncenter size-full wp-image-266" src="http://www.goitpartners.com/blog/wp-content/uploads/2012/01/screenshot.1580-e1326388771210.png" alt="" width="596" height="47" /></a></p>
<p>Re-checking the fingerprints of the same files as before, we see that they all match, indicating that the certificate swap was a success.</p>
<p><code># /usr/bin/openssl x509 –fingerprint –noout –in /opt/vmware/etc/lighttpd/server.pem</code></p>
<p><code> </code></p>
<p><code># /usr/bin/openssl x509 –fingerprint –noout –in /opt/vmware-vpx/ssl/rui.crt</code></p>
<p><code> </code></p>
<p><code># /usr/bin/openssl x509 –fingerprint –noout –in ~/KEYS/vcma01.crt</code></p>
<p>&nbsp;</p>
<p>Go ahead and login to the VCMA with your vSphere client and you should no longer receive a certificate warning.</p>
<p>&nbsp;</p>
<p><strong>NOTE</strong>: I have noticed that the vSphere Web Client on the VCMA (https://YOUR_VCMA_IP_ADDRESS:9443/vsphere-client/) appears to use a different certificate.</p>
<p>That will have to wait for another blog post&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.goitpartners.com/blog/?feed=rss2&#038;p=217</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Perl and Powershell… TOGETHER?!?</title>
		<link>http://www.goitpartners.com/blog/?p=202</link>
		<comments>http://www.goitpartners.com/blog/?p=202#comments</comments>
		<pubDate>Wed, 21 Dec 2011 23:45:12 +0000</pubDate>
		<dc:creator>Doug Baer</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.goitpartners.com/blog/?p=202</guid>
		<description><![CDATA[I’ve been meaning to write this post for a long time.  That’s nothing special since there are several posts that I’ve been meaning to write for quite a while.  As a quick aside, I have to highlight that I have a great deal of respect for @DuncanYB, @FrankDenneman, @scott_lowe, and the countless other bloggers who [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>I’ve been meaning to write this post for a long time.  That’s nothing special since there are several posts that I’ve been meaning to write for quite a while.  As a quick aside, I have to highlight that I have a great deal of respect for @DuncanYB, @FrankDenneman, @scott_lowe, and the countless other bloggers who manage to post quality technical content just about every day – consistently and continuously.  Honestly, I don’t know how they do it.</p>
<p>Ever since the Windows Powershell cmdlets for VI3 were released, in the VMware community, there has been a friendly rivalry between the Perl and Powershell camps &#8212; I seem to recall an epic VMworld 2010 air hockey battle between @lamw (Perl) and @alanrenouf (Powershell):</p>
<div id="attachment_206" class="wp-caption aligncenter" style="width: 600px">
	<a href="http://www.goitpartners.com/blog/wp-content/uploads/2011/12/1554539351.jpg"><img class="size-full wp-image-206" src="http://www.goitpartners.com/blog/wp-content/uploads/2011/12/1554539351.jpg" alt="" width="600" height="359" /></a>
	<p class="wp-caption-text">Perl vs. Powershell - Epic Air Hockey Battle - Photo from @mattliebowitz</p>
</div>
<p>I realize that there are other ways to access the vSphere API these days, including Java, C# (via the <a href="http://communities.vmware.com/community/vmtn/developer/forums/managementapi">vSphere Web Services SDK</a>), and even <a href="http://communities.vmware.com/thread/303739">Ruby</a> (and a VMware Labs fling <a href="http://labs.vmware.com/flings/rvc">here</a>).  Unfortunately, I lack experience with those versions, so I will restrict this post to Perl and Powershell.  If you’re interested about the SDKs in general, more information is available on <a href="http://www.vmware.com/support/pubs/sdk_pubs.html">VMware&#8217;s support site</a>.</p>
<h2>My Experience</h2>
<p>Before I begin, I’d like to tell you a little about me so you know where I’m coming from.</p>
<p><strong>Perl</strong></p>
<p>I have been using Perl for various tasks since 1993 when I picked up a copy of <em>Learning Perl</em> (&#8220;the llama book&#8221;) by Randal Schwartz  so I could more easily manage a website I was working on at the time.  I had a slightly more scenic road than your average Perl novice since I was learning Perl on a Macintosh. Before they were UNIX-based or even had a command line. Fun? If you&#8217;ve ever embedded Hypercard XCMDs in a Perl script, you know what I&#8217;m talking about. I published <a href="http://archives.bengrosser.com/avid/1998-09/msg00931.htm">something </a>in 1998 when the AutoStart 9805 worm was running rampant on Macs around the world.  My code was <strong>not </strong>pretty, but the first version was written in an afternoon and did what I needed it to do.</p>
<p><strong>Powershell</strong></p>
<p>I did not encounter Powershell until 2008 when the VMworld scripting lab team offered me the opportunity to assist in developing the material.  Originally, I agreed because I thought my Perl experience would be helpful and I wanted to spend some time digging around the VI API.  As it turned out, there were already some Perl ninjas on the team and more help was needed with the Powershell material.  I am no @alanrenouf, but I spent many late night hours playing with both plain Powershell and the VMware add-ons so I could understand how the language was put together.  I learned a lot during those days, and even more helping attendees in the labs.</p>
<p><strong>Bias?</strong></p>
<p>I don’t feel that I have a language bias either way, and I tend to develop in whichever language is supported on the target platform(s).  Sure, I can run Perl on a Windows machine, but it still feels unnatural when Powershell is available natively.  Likewise, if it makes more sense to run a certain script from the vMA or from my Mac, I’ll use Perl.  I’ve spent some time on the VMware Community Forums translating from Perl into Powershell and vice versa.  You can do it!</p>
<p>Maybe it is just my perception because I learned Perl first, but I discovered that any significantly  complex Powershell script looks a heck of a lot like Perl.  I&#8217;ll demonstrate this later.</p>
<h2>Perl vs.(?) Powershell</h2>
<p>As a team for the scripting lab, we came up with the (crazy?) idea to fork the single 2008 scripting lab into Perl and Powershell options <em>that worked through the same exercises</em>.  The cool thing was that I was able to experience both methods of accessing the virtual infrastructure to accomplish our defined tasks &#8212; attendees could go through the lab twice, or switch between languages as well.</p>
<p>While coding and testing the solutions to our lab exercises, it became clear that either language could be used to perform whatever action we required, and the complexity varied based on availability of Powershell cmdlets or pre-existing scripts and understanding of the API.  Some tasks were dead easy in Powershell but quite painful in Perl. Believe it or not, some tasks were <em>easier </em>in Perl because navigating the API&#8217;s object structure is common practice in Perl and just felt <em>wrong</em> in Powershell.  At least, until you got the hang of it.</p>
<h2>Cmdlets and Scripts</h2>
<p>From a Powershell perspective, the cmdlets included with the <em>VMware Infrastructure Toolkit for Windows</em> (now known as <em>vSphere PowerCLI</em>) provide convenient shortcuts for common actions.  The old <em>VMware Infrastructure Perl Toolkit</em> (now <em>vSphere SDK for Perl</em>), includes some pre-written scripts for performing common actions.  The added benefit of the Perl SDK is that the code for the scripts is available so you can see how they work, copy them, tweak, and repurpose as needed.</p>
<h2>Interactivity</h2>
<p>Hands down, PowerCLI provides superior interactivity.  Before you think I&#8217;m bashing Perl, let me explain.  Powershell was designed differently than Perl: it is an interactive shell that allows batch execution of commands while Perl is an interpreted language.  Think of Powershell more like your traditional command interpreters like csh, bash, ksh, or even (dare I say it?) DOS.</p>
<p>When using the Perl SDK, a per-script binding is created with the virtual infrastructure (login), the code is executed, and the binding is destroyed (logout).  Because Powershell is an interactive shell and PowerCLI extends that, a binding can persist beyond the lifetime of a single script’s execution.  In fact, it is possible to interact with the environment via that binding by executing cmdlets against the objects within the environment, accessed via the persistent binding or bindings.  Don’t misunderstand, it is possible to do some of this using the Perl SDK, but that’s not how it is normally used. Perl is like a swiss army knife or duct tape: if you can dream it, you can probably make Perl do it &#8212; thank you Larry Wall!</p>
<p>Along these lines, I noticed that VMware has grouped their various APIs and SDK-related tools according to the intended audience:</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="115" valign="top"><strong>Audience</strong></td>
<td width="310" valign="top"><strong>vSphere</strong></td>
</tr>
<tr>
<td width="115" valign="top"><strong>Developer</strong></td>
<td width="310" valign="top">vSphere Web Services SDK 4.1</td>
</tr>
<tr>
<td width="115" valign="top"><strong>Developer</strong></td>
<td width="310" valign="top">vSphere SDK for Perl 4.1</td>
</tr>
<tr>
<td width="115" valign="top"><strong>Developer</strong></td>
<td width="310" valign="top">vSphere SDK for Java (Tech Preview)</td>
</tr>
<tr>
<td width="115" valign="top"><strong>Administrator</strong></td>
<td width="310" valign="top">vSphere Management Assistant 4.1</td>
</tr>
<tr>
<td width="115" valign="top"><strong>Administrator</strong></td>
<td width="310" valign="top">vSphere Command Line Interface (vCLI) 4.1</td>
</tr>
<tr>
<td width="115" valign="top"><strong>Administrator</strong></td>
<td width="310" valign="top">vSphere PowerCLI 4.1</td>
</tr>
</tbody>
</table>
<h3>A Simple Example</h3>
<p>All of that talk about theory and technical differences&#8230; but no code yet.  Who&#8217;s bored?  Okay, here comes my first set of examples.  In this one, based on exercises from the VMworld US 2008 Scripting lab, we compare the task of getting a list of all <em>development </em>VMs registered in a vCenter and report their current power state. To make things manageable, each development VM has the string “DEV” in its name:</p>
<p><em>Powershell</em></p>
<pre>$vc = Connect-VIServer -Server MYVC
Get-VM *DEV*
Disconnect-VIServer -Server $vc -Confirm:$false</pre>
<p><em>Perl</em></p>
<pre>#!/usr/bin/perl -w
# Import runtime libraries
use strict;
use warnings;
use VMware::VIRuntime;
use VMware::VILib;

# Read and validate command-line parameters
Opts::parse();
Opts::validate();

# Connect to the server and login
Util::connect();

# Perform the requested action
my $List = GetVmByName('DEV');
PrintVmPowerState($List);

# Close server connection
Util::disconnect();

##############################################################################

sub GetVmByName {
  my $vmname  = shift;
  return Vim::find_entity_views(
  view_type =&gt; 'VirtualMachine',
  filter =&gt; {
    name =&gt; qr/$vmname/i
  });
}

sub PrintVmPowerState {
  my $vms = shift;
  foreach my $vm (@$vms) {
    print "Virtual machine " .
    $vm-&gt;name . " power state is: " .
    $vm-&gt;runtime-&gt;powerState-&gt;val . "\n";
  }
}</pre>
<p>To execute this script, it needs to be saved into a file and called:<br />
<code>perl GetVmByName.pl --server MYVC --username MYUSER</code></p>
<p>That may look very complicated, but, to be fair, the only code that needs to be written is the two subroutines (under the line of hash marks, pound signs, capital 3&#8242;s &#8230; whatever you want to call them) and their calls from the main program.  The rest is a template created to handle the setup and teardown of the vSphere API connection.  I’ve also taken care to make this script readable – Perl ninjas can shrink this thing down to a few lines if that sort of thing is important.</p>
<h2>So, what does that mean?</h2>
<p>In the labs, we had several people come in without <strong>any </strong>scripting experience.  I was totally impressed – it was fantastic to see so much interest in scripting among the VI administrator community.  When we asked whether they were interested in Perl or Powershell scripting, we were asked most of the time for a suggestion.  We came up with one simple question:</p>
<ol>
<li>What operating system(s) are you most comfortable with and which do you intend to use for running your scripts?</li>
</ol>
<p>If the answer was Linux or MacOS we’d suggest Perl, otherwise we suggested Powershell.  We found that Powershell was much more accessible to people who had never written scripts before.  Sure, writing “hello world” in either Perl or Powershell is just as trivial, but accessing the vSphere API can be more daunting in the Perl world than Powershell&#8217;s simple <code>Connect-VIServer</code> cmdlet followed by <code>Get-VM</code>.  More success faster = happier new users.</p>
<h2>What do I do?</h2>
<p>I don’t keep the vSphere API in my head – I swear that @lamw does! I would probably be able to knock out a Perl script to do whatever I wanted pretty quickly if I spent a lot of my time writing that kind of code, but I forget things if I don&#8217;t use them regularly.  At this point in my life, I have few development responsibilities, so I may have short periods of scripting with LONG periods of other work in between.  Like many of you, I am typically looking for a quick, simple script to report on or change some aspect of my environment.  I need to be able to dust off my scripting brain and crank out the report. For that, PowerCLI works very well.</p>
<h2>Better Together?</h2>
<p>Looking back on my recent work, I noticed something interesting:  when I need to understand how an object “looks” in the API, I regularly jump to the PowerCLI console, even if I am going to write the final script in Perl.  Why would I do that?  The answer goes back to the interactivity of Powershell.  Sure, I could fire up a web browser and go to the vSphere API Reference or even go to the Managed Object Browser (MOB), but there is something about the command line that just feels better to me: I can see how my script will see the objects, minus any translation or filtering.</p>
<h3>Examples</h3>
<h4>Reporting</h4>
<p>In this case, I want to take a look at an Advanced Setting on my VMs to ensure that it is set properly. Setting it properly would be nice, too. Once I understand how the object is constructed and how I can access that data, I can construct either Perl or Powershell code to access the object.  Here, the vSphere API Reference or MOB are good for getting an idea of where I should look, but I like to poke around on my own sometimes just to see what&#8217;s out there.</p>
<p>My example VM is called &#8220;MYVM&#8221; and we&#8217;re looking at the &#8220;isolation.tools.paste.disable&#8221; setting. Here&#8217;s how I find it:</p>
<p><em>Powershell</em></p>
<pre>PowerCLI C:\&gt; $vmView = Get-VM MYVM | Get-View
PowerCLI C:\&gt; $vmView

Capability           : VMware.Vim.VirtualMachineCapability
<strong>Config               : VMware.Vim.VirtualMachineConfigInfo</strong>
Layout               : VMware.Vim.VirtualMachineFileLayout
…

PowerCLI C:\&gt; $vmView.Config

ChangeVersion                : 2011-12-20T16:10:43.434877Z
Modified                     : 1/1/1970 12:00:00 AM
Name                         : wintest2
GuestFullName                : Microsoft Windows Server 2008 R2 (64-bit)
Version                      : vmx-07
…
<strong>ExtraConfig                  : {nvram, virtualHW.productCompatibility, pci…</strong>
CpuFeatureMask               :
…

PowerCLI C:\&gt; $vmView.Config.ExtraConfig

Key                           Value
---                           -----
nvram                         wintest2.nvram
virtualHW.productCompatibi... hosted
pciBridge0.present            true
sched.scsi0:0.throughputCap   off
disk.EnableUUID               true
pciBridge4.present            true
snapshot.action               keep
deploymentPlatform            windows
… (that's a LONG list... let's filter it!)

PowerCLI C:\&gt; $vmView.Config.ExtraConfig | ? {$_.Key -like "isolation*"} | ft -a

Key                                  Value
---                                  -----
isolation.device.connectable.disable true
isolation.tools.connectable.disable  true
isolation.tools.copy.disable         true
isolation.tools.diskShrink.disable   true
isolation.tools.diskWiper.disable    true
isolation.tools.dnd.disable          true
<strong>isolation.tools.paste.disable        true</strong>
isolation.tools.setGUIOptions.enable false
isolation.tools.setinfo.disable      true</pre>
<p>I now know that the value of the “isolation.tools.paste.disable” Advanced Setting is accessible on my VM at the following location: VM-&gt;Config.ExtraConfig[isolation.tools.paste.disable]  For the sake of this example, we’ll assume that the key is present and set to something (true).</p>
<p><em>Perl</em></p>
<p>I know I may take some heat from the Perl purists who know that they can  achieve the same result using Perl SDK and some simple print/printf or Data::Dumper  commands, but the above process is how I tend to work.  (For more information on using  Data::Dumper with vSphere, you can go <a href="http://pubs.vmware.com/vsphere-50/index.jsp?topic=/com.vmware.perlsdk.pg.doc_50/viperl_advancedtopics.5.7.html">here.</a>) Armed with an understanding of where the data that interests me lives, I can create some Perl code to perform the appropriate query in the same manner.  Note the process is pretty much the same as in Powershell:</p>
<ol>
<li>Obtain a View of the VM</li>
<li>Grab the Config-&gt;extraConfig property</li>
<li>Find the key(s) in question</li>
<li>Print the value(s) associated with the key(s)</li>
</ol>
<pre># Connect to the server and login
Util::connect();

my $vm_name = 'MYVM';
my $check_key = 'isolation.tools.paste.disable';
my $vm_view = Vim::find_entity_view(
view_type =&gt; 'VirtualMachine',
filter =&gt; {'name' =&gt; qr/$vm_name/i}
);

my $extraConf = $vm_view-&gt;config-&gt;extraConfig;

foreach(@$extraConf) {
  my $vm_key = lc($_-&gt;key);
  if($vm_key =~ m/$check_key/) {
    print "$vm_key\t" . lc($_-&gt;value) ."\n";
  }
}

# Close server connection
Util::disconnect();</pre>
<h4>Making Changes</h4>
<p>Making changes is a little more difficult, but looks even more similar between languages:</p>
<p><em>Perl</em></p>
<pre>my $vm_name = 'MYVM';
my $vm_view = Vim::find_entity_view(
  view_type =&gt; 'VirtualMachine',
  filter =&gt; {'name' =&gt; qr/$vm_name/i}
);

my $virtualMachineConfigSpec =
  VirtualMachineConfigSpec-&gt;new (
    extraConfig =&gt; [OptionValue-&gt;new(
      key =&gt; 'isolation.tools.paste.disable',
      value =&gt; 'true' ),] );

$vm_view-&gt;ReconfigVM( spec =&gt; $virtualMachineConfigSpec);</pre>
<p><em>Powershell</em></p>
<pre>$vmView = Get-VM MYVM | Get-View

$vmConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec
$vmConfigSpec.extraConfig += New-Object VMware.Vim.optionvalue
$vmConfigSpec.extraConfig[-1].Key = "isolation.tools.paste.disable"
$vmConfigSpec.extraConfig[-1].Value = "true"

$vmView.ReconfigVM($vmConfigSpec)</pre>
<p>I hope this is useful, or at least interesting for people to see. If you made it this far, thanks for reading!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.goitpartners.com/blog/?feed=rss2&#038;p=202</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Storage Migration with (and without) RDMs, part II</title>
		<link>http://www.goitpartners.com/blog/?p=157</link>
		<comments>http://www.goitpartners.com/blog/?p=157#comments</comments>
		<pubDate>Tue, 20 Dec 2011 15:49:10 +0000</pubDate>
		<dc:creator>Doug Baer</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.goitpartners.com/blog/?p=157</guid>
		<description><![CDATA[This is a continuation of Storage Migration with (and without) RDMs, part I As of the last posting, we had identified the need to migrate a batch of vSphere 4.1 VMs configured with physical mode RDMs (pRDMs) from one storage array to another.  During this process, we decided that it would be nice to convert [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>This is a continuation of <a title="Part I" href="http://www.goitpartners.com/blog/?p=131">Storage Migration with (and without) RDMs, part I </a></p>
<p>As of the last posting, we had identified the need to migrate a batch of vSphere 4.1 VMs configured with physical mode RDMs (pRDMs) from one storage array to another.  During this process, we decided that it would be nice to convert the (legacy) pRDMs to VMDKs in order to conform to the customer&#8217;s new standard configuration.</p>
<p>Doing them one at a time can be a lot of work, is error-prone, and I&#8217;m lazy when it comes to tasks that can be scripted.  There had to be some way PowerCLI could be brought to bear. What follows is our solution.  Note that relocating and converting the pRDM to a VMDK must be done with the VM powered off.  The script will check for that and let you know.</p>
<p>I based the following function (heavily) on <code>Set-ThinDisk</code> from the <em>VMware vSphere PowerCLI Reference: Automating vSphere Administration</em>.  You can get it on Amazon(US) <a href="http://www.amazon.com/VMware-vSphere-PowerCLI-Reference-ebook/dp/B004V4ES7M/ref=pd_rhf_gw_p_t_1">here</a>.  I probably could have put this together without their framework, but it would have taken much longer and been nowhere near as elegant. <img src='http://www.goitpartners.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<pre><span style="color: #00008b">function</span><span style="color: #000000"> </span><span style="color: #8a2be2">Convert-RdmToVmdk</span><span style="color: #000000"> </span><span style="color: #000000">{</span><span style="color: #000000"> </span>
<span style="color: #006400">&lt;#
.VERSION
   1.1 - 12/19/2011
.SYNOPSIS
   Converts an physical mode RDM to a thick provisioned VMDK hard disk
.DESCRIPTION
   Makes a thick provisioned copy of an RDM disk on a new
   datastore and configures the virtual machine to use the thick
   provisioned copy
.NOTES
   Author: Doug Baer
   Inspiration: Automating vSphere Administration by Luc Dekens,
             Arnim van Lieshout, Jonathan Medd,
             Alan Renouf, Glenn Sizemore
.PARAMETER HardDisk
   Specify the hard disks you want to convert
.PARAMETER datastoreName
   Specify the name of the datastore which will host the VMDK(s)
.PARAMETER credential
   A PSCredential object used to authenticate the VMHost server
.PARAMETER user
   The user account used to authenticate the VMHost server
.PARAMETER password
   The password for the account specified by the -User parameter
.PARAMETER replace
   Optional parameter to delete the original thick file
.EXAMPLE PS&gt; Get-VM VM001 | Get-HardDisk | Convert-RdmToVmdk -Credential `
                  $hostCred -datastoreName "MyNewDatastore"
.EXAMPLE PS&gt; $hd = Get-VM VM001 | Get-HardDisk | `
                 ?{$_.Name -eq "Hard disk 2"}
         PS&gt; Convert-RdmToVmdk -hardDisk $hd -user "root" -password `
                "password" -replace  -datastoreName "MyNewDatastore"
#&gt;</span>

<span style="color: #000000">   </span><span style="color: #00008b">Param</span><span style="color: #000000"> </span><span style="color: #000000">(</span><span style="color: #000000"> </span>
<span style="color: #000000">      </span><span style="color: #a9a9a9">[</span><span style="color: #add8e6">parameter</span><span style="color: #000000">(</span><span style="color: #000000">valuefrompipeline</span><span style="color: #000000"> </span><span style="color: #a9a9a9">=</span><span style="color: #000000"> </span><span style="color: #ff4500">$true</span><span style="color: #a9a9a9">,</span><span style="color: #000000"> </span><span style="color: #000000">Mandatory</span><span style="color: #000000"> </span><span style="color: #a9a9a9">=</span><span style="color: #000000"> </span><span style="color: #ff4500">$true</span><span style="color: #a9a9a9">,</span><span style="color: #000000"> </span><span style="color: #000000">HelpMessage</span><span style="color: #000000"> </span><span style="color: #a9a9a9">=</span><span style="color: #000000"> </span><span style="color: #8b0000">"Enter a hard disk entity"</span><span style="color: #000000">)</span><span style="color: #a9a9a9">]</span><span style="color: #000000"> </span>
<span style="color: #000000">         </span><span style="color: #008080">[VMware.VimAutomation.ViCore.Types.V1.VirtualDevice.HardDisk]</span><span style="color: #ff4500">$hardDisk</span><span style="color: #a9a9a9">,</span><span style="color: #000000"> </span>
<span style="color: #000000">      </span><span style="color: #a9a9a9">[</span><span style="color: #add8e6">Parameter</span><span style="color: #000000">(</span><span style="color: #000000">Mandatory</span><span style="color: #000000"> </span><span style="color: #a9a9a9">=</span><span style="color: #000000"> </span><span style="color: #ff4500">$true</span><span style="color: #a9a9a9">,</span><span style="color: #000000"> </span><span style="color: #000000">HelpMessage</span><span style="color: #000000"> </span><span style="color: #a9a9a9">=</span><span style="color: #000000"> </span><span style="color: #8b0000">"Enter the target datastore name"</span><span style="color: #000000">)</span><span style="color: #a9a9a9">]</span><span style="color: #000000"> </span>
<span style="color: #000000">      </span><span style="color: #a9a9a9">[</span><span style="color: #add8e6">ValidateNotNullOrEmpty</span><span style="color: #000000">(</span><span style="color: #000000">)</span><span style="color: #a9a9a9">]</span><span style="color: #000000"> </span>
<span style="color: #000000">         </span><span style="color: #008080">[string]</span><span style="color: #ff4500">$datastoreName</span><span style="color: #a9a9a9">,</span>
<span style="color: #000000">      </span><span style="color: #a9a9a9">[</span><span style="color: #add8e6">Parameter</span><span style="color: #000000">(</span><span style="color: #000000">Mandatory</span><span style="color: #000000"> </span><span style="color: #a9a9a9">=</span><span style="color: #000000"> </span><span style="color: #ff4500">$true</span><span style="color: #a9a9a9">,</span><span style="color: #000000"> </span><span style="color: #000000">ParameterSetName</span><span style="color: #000000"> </span><span style="color: #a9a9a9">=</span><span style="color: #000000"> </span><span style="color: #8b0000">"cred"</span><span style="color: #a9a9a9">,</span><span style="color: #000000"> </span><span style="color: #000000">HelpMessage</span><span style="color: #000000"> </span><span style="color: #a9a9a9">=</span><span style="color: #000000"> </span><span style="color: #8b0000">"Enter a PSCredential object"</span><span style="color: #000000">)</span><span style="color: #a9a9a9">]</span><span style="color: #000000"> </span>
<span style="color: #000000">         </span><span style="color: #008080">[System.Management.Automation.PSCredential]</span><span style="color: #ff4500">$credential</span><span style="color: #a9a9a9">,</span><span style="color: #000000"> </span>
<span style="color: #000000">      </span><span style="color: #a9a9a9">[</span><span style="color: #add8e6">Parameter</span><span style="color: #000000">(</span><span style="color: #000000">ParameterSetName</span><span style="color: #000000"> </span><span style="color: #a9a9a9">=</span><span style="color: #000000"> </span><span style="color: #8b0000">"user"</span><span style="color: #000000">)</span><span style="color: #a9a9a9">]</span><span style="color: #000000"> </span>
<span style="color: #000000">      </span><span style="color: #a9a9a9">[</span><span style="color: #add8e6">ValidateNotNullOrEmpty</span><span style="color: #000000">(</span><span style="color: #000000">)</span><span style="color: #a9a9a9">]</span><span style="color: #000000"> </span>
<span style="color: #000000">         </span><span style="color: #008080">[string]</span><span style="color: #ff4500">$user</span><span style="color: #000000"> </span><span style="color: #a9a9a9">=</span><span style="color: #000000"> </span><span style="color: #8b0000">"root"</span><span style="color: #a9a9a9">,</span>
<span style="color: #000000">      </span><span style="color: #a9a9a9">[</span><span style="color: #add8e6">Parameter</span><span style="color: #000000">(</span><span style="color: #000000">Mandatory</span><span style="color: #000000"> </span><span style="color: #a9a9a9">=</span><span style="color: #000000"> </span><span style="color: #ff4500">$true</span><span style="color: #a9a9a9">,</span><span style="color: #000000"> </span><span style="color: #000000">ParameterSetName</span><span style="color: #000000"> </span><span style="color: #a9a9a9">=</span><span style="color: #000000"> </span><span style="color: #8b0000">"user"</span><span style="color: #a9a9a9">,</span><span style="color: #000000"> </span><span style="color: #000000">HelpMessage</span><span style="color: #000000"> </span><span style="color: #a9a9a9">=</span><span style="color: #000000"> </span><span style="color: #8b0000">"Enter the root account password"</span><span style="color: #000000">)</span><span style="color: #a9a9a9">]</span><span style="color: #000000"> </span>
<span style="color: #000000">         </span><span style="color: #008080">[string]</span><span style="color: #ff4500">$password</span><span style="color: #a9a9a9">,</span><span style="color: #000000"> </span>
<span style="color: #000000">         </span><span style="color: #008080">[switch]</span><span style="color: #ff4500">$replace</span><span style="color: #000000">)</span><span style="color: #000000"> </span>
<span style="color: #000000">   </span>
<span style="color: #000000">   </span><span style="color: #00008b">process</span><span style="color: #000000"> </span><span style="color: #000000">{</span><span style="color: #000000"> </span>
<span style="color: #000000">      </span><span style="color: #00008b">if</span><span style="color: #000000"> </span><span style="color: #000000">(</span><span style="color: #ff4500">$hardDisk</span><span style="color: #a9a9a9">.</span><span style="color: #000000">Parent</span><span style="color: #a9a9a9">.</span><span style="color: #000000">PowerState</span><span style="color: #000000"> </span><span style="color: #a9a9a9">-eq</span><span style="color: #000000"> </span><span style="color: #8b0000">"PoweredOff"</span><span style="color: #000000">)</span><span style="color: #000000"> </span><span style="color: #000000">{</span><span style="color: #000000"> </span>
<span style="color: #000000">         </span><span style="color: #00008b">if</span><span style="color: #000000"> </span><span style="color: #000000">(</span><span style="color: #ff4500">$hardDisk</span><span style="color: #a9a9a9">.</span><span style="color: #000000">DiskType</span><span style="color: #000000"> </span><span style="color: #a9a9a9">-eq</span><span style="color: #000000"> </span><span style="color: #8b0000">"RawPhysical"</span><span style="color: #000000">)</span><span style="color: #000000"> </span><span style="color: #000000">{</span><span style="color: #000000"> </span>
<span style="color: #000000">            </span><span style="color: #0000ff">Write-Host</span><span style="color: #000000"> </span><span style="color: #8b0000">"...Connecting to host $esxhost"</span>
<span style="color: #000000">            </span><span style="color: #00008b">if</span><span style="color: #000000"> </span><span style="color: #000000">(</span><span style="color: #ff4500">$credential</span><span style="color: #000000">)</span><span style="color: #000000"> </span><span style="color: #000000">{</span><span style="color: #000000"> </span>
<span style="color: #000000">               </span><span style="color: #ff4500">$esxHost</span><span style="color: #000000"> </span><span style="color: #a9a9a9">=</span><span style="color: #000000"> </span><span style="color: #0000ff">Connect-VIServer</span><span style="color: #000000"> </span><span style="color: #000080">-Server</span><span style="color: #000000"> </span><span style="color: #ff4500">$hardDisk</span><span style="color: #a9a9a9">.</span><span style="color: #000000">Parent</span><span style="color: #a9a9a9">.</span><span style="color: #000000">host</span><span style="color: #a9a9a9">.</span><span style="color: #000000">name</span><span style="color: #000000"> </span><span style="color: #000080">-Credential</span><span style="color: #000000"> </span><span style="color: #ff4500">$credential</span><span style="color: #000000"> </span><span style="color: #000080">-NotDefault</span>
<span style="color: #000000">            </span><span style="color: #000000">}</span><span style="color: #000000"> </span><span style="color: #00008b">else</span><span style="color: #000000"> </span><span style="color: #000000">{</span><span style="color: #000000"> </span>
<span style="color: #000000">               </span><span style="color: #ff4500">$esxHost</span><span style="color: #000000"> </span><span style="color: #a9a9a9">=</span><span style="color: #000000"> </span><span style="color: #0000ff">Connect-VIServer</span><span style="color: #000000"> </span><span style="color: #000080">-Server</span><span style="color: #000000"> </span><span style="color: #ff4500">$hardDisk</span><span style="color: #a9a9a9">.</span><span style="color: #000000">Parent</span><span style="color: #a9a9a9">.</span><span style="color: #000000">host</span><span style="color: #a9a9a9">.</span><span style="color: #000000">name</span><span style="color: #000000"> </span><span style="color: #000080">-User</span><span style="color: #000000"> </span><span style="color: #ff4500">$user</span><span style="color: #000000"> </span><span style="color: #000080">-Password</span><span style="color: #000000"> </span><span style="color: #ff4500">$password</span><span style="color: #000000"> </span><span style="color: #000080">-NotDefault</span><span style="color: #000000"> </span>
<span style="color: #000000">            </span><span style="color: #000000">}</span>
<span style="color: #000000">            </span><span style="color: #ff4500">$vmdkFile</span><span style="color: #000000"> </span><span style="color: #a9a9a9">=</span><span style="color: #000000"> </span><span style="color: #ff4500">$hardDisk</span><span style="color: #a9a9a9">.</span><span style="color: #000000">Filename</span><span style="color: #000000"> </span><span style="color: #a9a9a9">-replace</span><span style="color: #000000"> </span><span style="color: #000000">(</span><span style="color: #8b0000">'\[.*\]'</span><span style="color: #a9a9a9">,</span><span style="color: #8b0000">"[$datastoreName]"</span><span style="color: #000000">)</span>
<span style="color: #000000">            </span><span style="color: #ff4500">$datastore</span><span style="color: #000000"> </span><span style="color: #a9a9a9">=</span><span style="color: #000000"> </span><span style="color: #ff4500">$hardDisk</span><span style="color: #a9a9a9">.</span><span style="color: #000000">Filename</span><span style="color: #a9a9a9">.</span><span style="color: #000000">split</span><span style="color: #000000">(</span><span style="color: #8b0000">'['</span><span style="color: #000000">)</span><span style="color: #a9a9a9">[</span><span style="color: #800080">1</span><span style="color: #a9a9a9">]</span><span style="color: #a9a9a9">.</span><span style="color: #000000">split</span><span style="color: #000000">(</span><span style="color: #8b0000">']'</span><span style="color: #000000">)</span><span style="color: #a9a9a9">[</span><span style="color: #800080">0</span><span style="color: #a9a9a9">]</span><span style="color: #000000"> </span>
<span style="color: #000000">            </span><span style="color: #ff4500">$esxHardDisk</span><span style="color: #000000"> </span><span style="color: #a9a9a9">=</span><span style="color: #000000"> </span><span style="color: #0000ff">Get-HardDisk</span><span style="color: #000000"> </span><span style="color: #000080">-server</span><span style="color: #000000"> </span><span style="color: #ff4500">$esxHost</span><span style="color: #000000"> </span>`
<span style="color: #000000">               </span><span style="color: #000080">-Datastore</span><span style="color: #000000"> </span><span style="color: #ff4500">$datastore</span><span style="color: #000000"> </span>`
<span style="color: #000000">               </span><span style="color: #000080">-DatastorePath</span><span style="color: #000000"> </span><span style="color: #ff4500">$hardDisk</span><span style="color: #a9a9a9">.</span><span style="color: #000000">Filename</span>
<span style="color: #000000">            </span><span style="color: #0000ff">Write-Host</span><span style="color: #000000"> </span><span style="color: #000000">(</span><span style="color: #8b0000">"Copying RDM@ "</span><span style="color: #000000"> </span><span style="color: #a9a9a9">+</span><span style="color: #000000"> </span><span style="color: #ff4500">$hardDisk</span><span style="color: #a9a9a9">.</span><span style="color: #000000">Filename</span><span style="color: #000000"> </span><span style="color: #a9a9a9">+</span><span style="color: #000000"> </span><span style="color: #8b0000">"`n`t to VMDK "</span><span style="color: #000000"> </span><span style="color: #a9a9a9">+</span><span style="color: #000000"> </span><span style="color: #ff4500">$vmdkFile</span><span style="color: #000000">)</span>
<span style="color: #000000">            </span><span style="color: #0000ff">Copy-HardDisk</span><span style="color: #000000"> </span><span style="color: #000080">-HardDisk</span><span style="color: #000000"> </span><span style="color: #ff4500">$esxHardDisk</span><span style="color: #000000"> </span>`
<span style="color: #000000">               </span><span style="color: #000080">-DestinationPath</span><span style="color: #000000"> </span><span style="color: #ff4500">$vmdkFile</span><span style="color: #000000"> </span>`
<span style="color: #000000">               </span><span style="color: #000080">-DestinationStorageFormat</span><span style="color: #000000"> </span><span style="color: #8b0000">"thick"</span><span style="color: #000000"> </span><span style="color: #a9a9a9">|</span><span style="color: #000000"> </span><span style="color: #0000ff">Out-Null</span><span style="color: #000000"> </span>
<span style="color: #000000">            </span><span style="color: #0000ff">Write-Host</span><span style="color: #000000"> </span><span style="color: #8b0000">"...Disconnecting from host $esxhost"</span>
<span style="color: #000000">            </span><span style="color: #0000ff">Disconnect-VIServer</span><span style="color: #000000"> </span><span style="color: #ff4500">$esxHost</span><span style="color: #000000"> </span><span style="color: #000080">-Confirm:</span><span style="color: #ff4500">$false</span>
<span style="color: #000000">               </span>
<span style="color: #000000">         </span><span style="color: #006400"># Change the VM to use the VMDK instead of the pRDM</span>
<span style="color: #000000">         </span><span style="color: #ff4500">$spec</span><span style="color: #000000"> </span><span style="color: #a9a9a9">=</span><span style="color: #000000"> </span><span style="color: #0000ff">New-Object</span><span style="color: #000000"> </span><span style="color: #8a2be2">VMware.Vim.VirtualMachineConfigSpec</span>
<span style="color: #000000">         </span><span style="color: #ff4500">$spec</span><span style="color: #a9a9a9">.</span><span style="color: #000000">deviceChange</span><span style="color: #000000"> </span><span style="color: #a9a9a9">=</span><span style="color: #000000"> </span><span style="color: #0000ff">New-Object</span><span style="color: #000000"> </span>`
<span style="color: #000000">            </span><span style="color: #8a2be2">VMware.Vim.VirtualDeviceConfigSpec[]</span><span style="color: #000000">(</span><span style="color: #800080">2</span><span style="color: #000000">)</span>
<span style="color: #000000">         </span><span style="color: #ff4500">$spec</span><span style="color: #a9a9a9">.</span><span style="color: #000000">deviceChange</span><span style="color: #a9a9a9">[</span><span style="color: #800080">0</span><span style="color: #a9a9a9">]</span><span style="color: #000000"> </span><span style="color: #a9a9a9">=</span><span style="color: #000000"> </span><span style="color: #0000ff">New-Object</span><span style="color: #000000"> </span>`
<span style="color: #000000">            </span><span style="color: #8a2be2">VMware.Vim.VirtualDeviceConfigSpec</span><span style="color: #000000"> </span>
<span style="color: #000000">         </span><span style="color: #ff4500">$spec</span><span style="color: #a9a9a9">.</span><span style="color: #000000">deviceChange</span><span style="color: #a9a9a9">[</span><span style="color: #800080">0</span><span style="color: #a9a9a9">]</span><span style="color: #a9a9a9">.</span><span style="color: #000000">operation</span><span style="color: #000000"> </span><span style="color: #a9a9a9">=</span><span style="color: #000000"> </span><span style="color: #8b0000">"remove"</span><span style="color: #000000"> </span>
<span style="color: #000000">   </span>
<span style="color: #000000">         </span><span style="color: #00008b">if</span><span style="color: #000000"> </span><span style="color: #000000">(</span><span style="color: #ff4500">$replace</span><span style="color: #000000">)</span><span style="color: #000000"> </span><span style="color: #000000">{</span><span style="color: #000000"> </span>
<span style="color: #000000">            </span><span style="color: #ff4500">$spec</span><span style="color: #a9a9a9">.</span><span style="color: #000000">deviceChange</span><span style="color: #a9a9a9">[</span><span style="color: #800080">0</span><span style="color: #a9a9a9">]</span><span style="color: #a9a9a9">.</span><span style="color: #000000">fileOperation</span><span style="color: #000000"> </span><span style="color: #a9a9a9">=</span><span style="color: #000000"> </span><span style="color: #8b0000">"destroy"</span><span style="color: #000000"> </span>
<span style="color: #000000">         </span><span style="color: #000000">}</span><span style="color: #000000"> </span>
<span style="color: #000000">   </span>
<span style="color: #000000">         </span><span style="color: #ff4500">$spec</span><span style="color: #a9a9a9">.</span><span style="color: #000000">deviceChange</span><span style="color: #a9a9a9">[</span><span style="color: #800080">0</span><span style="color: #a9a9a9">]</span><span style="color: #a9a9a9">.</span><span style="color: #000000">device</span><span style="color: #000000"> </span><span style="color: #a9a9a9">=</span><span style="color: #000000"> </span><span style="color: #ff4500">$hardDisk</span><span style="color: #a9a9a9">.</span><span style="color: #000000">ExtensionData</span><span style="color: #000000"> </span>
<span style="color: #000000">         </span><span style="color: #ff4500">$spec</span><span style="color: #a9a9a9">.</span><span style="color: #000000">deviceChange</span><span style="color: #a9a9a9">[</span><span style="color: #800080">1</span><span style="color: #a9a9a9">]</span><span style="color: #000000"> </span><span style="color: #a9a9a9">=</span><span style="color: #000000"> </span><span style="color: #0000ff">New-Object</span><span style="color: #000000"> </span><span style="color: #8a2be2">VMware.Vim.VirtualDeviceConfigSpec</span><span style="color: #000000"> </span>
<span style="color: #000000">         </span><span style="color: #ff4500">$spec</span><span style="color: #a9a9a9">.</span><span style="color: #000000">deviceChange</span><span style="color: #a9a9a9">[</span><span style="color: #800080">1</span><span style="color: #a9a9a9">]</span><span style="color: #a9a9a9">.</span><span style="color: #000000">operation</span><span style="color: #000000"> </span><span style="color: #a9a9a9">=</span><span style="color: #000000"> </span><span style="color: #8b0000">"add"</span><span style="color: #000000"> </span>
<span style="color: #000000">         </span><span style="color: #ff4500">$spec</span><span style="color: #a9a9a9">.</span><span style="color: #000000">deviceChange</span><span style="color: #a9a9a9">[</span><span style="color: #800080">1</span><span style="color: #a9a9a9">]</span><span style="color: #a9a9a9">.</span><span style="color: #000000">device</span><span style="color: #000000"> </span><span style="color: #a9a9a9">=</span><span style="color: #000000"> </span><span style="color: #0000ff">New-Object</span><span style="color: #000000"> </span><span style="color: #8a2be2">VMware.Vim.VirtualDisk</span>
<span style="color: #000000">         </span><span style="color: #ff4500">$spec</span><span style="color: #a9a9a9">.</span><span style="color: #000000">deviceChange</span><span style="color: #a9a9a9">[</span><span style="color: #800080">1</span><span style="color: #a9a9a9">]</span><span style="color: #a9a9a9">.</span><span style="color: #000000">device</span><span style="color: #a9a9a9">.</span><span style="color: #000000">key</span><span style="color: #000000"> </span><span style="color: #a9a9a9">=</span><span style="color: #000000"> </span><span style="color: #800080">-100</span><span style="color: #000000"> </span>
<span style="color: #000000">         </span><span style="color: #ff4500">$spec</span><span style="color: #a9a9a9">.</span><span style="color: #000000">deviceChange</span><span style="color: #a9a9a9">[</span><span style="color: #800080">1</span><span style="color: #a9a9a9">]</span><span style="color: #a9a9a9">.</span><span style="color: #000000">device</span><span style="color: #a9a9a9">.</span><span style="color: #000000">backing</span><span style="color: #000000"> </span><span style="color: #a9a9a9">=</span><span style="color: #000000"> </span><span style="color: #0000ff">New-Object</span><span style="color: #000000"> </span><span style="color: #8a2be2">VMware.Vim.VirtualDiskFlatVer2BackingInfo</span><span style="color: #000000"> </span>
<span style="color: #000000">         </span><span style="color: #ff4500">$spec</span><span style="color: #a9a9a9">.</span><span style="color: #000000">deviceChange</span><span style="color: #a9a9a9">[</span><span style="color: #800080">1</span><span style="color: #a9a9a9">]</span><span style="color: #a9a9a9">.</span><span style="color: #000000">device</span><span style="color: #a9a9a9">.</span><span style="color: #000000">backing</span><span style="color: #a9a9a9">.</span><span style="color: #000000">fileName</span><span style="color: #000000"> </span><span style="color: #a9a9a9">=</span><span style="color: #000000"> </span><span style="color: #ff4500">$vmdkFile</span>
<span style="color: #000000">         </span><span style="color: #ff4500">$spec</span><span style="color: #a9a9a9">.</span><span style="color: #000000">deviceChange</span><span style="color: #a9a9a9">[</span><span style="color: #800080">1</span><span style="color: #a9a9a9">]</span><span style="color: #a9a9a9">.</span><span style="color: #000000">device</span><span style="color: #a9a9a9">.</span><span style="color: #000000">backing</span><span style="color: #a9a9a9">.</span><span style="color: #000000">diskMode</span><span style="color: #000000"> </span><span style="color: #a9a9a9">=</span><span style="color: #000000"> </span><span style="color: #8b0000">"persistent"</span><span style="color: #000000"> </span>
<span style="color: #000000">         </span><span style="color: #ff4500">$spec</span><span style="color: #a9a9a9">.</span><span style="color: #000000">deviceChange</span><span style="color: #a9a9a9">[</span><span style="color: #800080">1</span><span style="color: #a9a9a9">]</span><span style="color: #a9a9a9">.</span><span style="color: #000000">device</span><span style="color: #a9a9a9">.</span><span style="color: #000000">backing</span><span style="color: #a9a9a9">.</span><span style="color: #000000">thinProvisioned</span><span style="color: #000000"> </span><span style="color: #a9a9a9">=</span><span style="color: #000000"> </span><span style="color: #ff4500">$false</span>
<span style="color: #000000">         </span><span style="color: #ff4500">$spec</span><span style="color: #a9a9a9">.</span><span style="color: #000000">deviceChange</span><span style="color: #a9a9a9">[</span><span style="color: #800080">1</span><span style="color: #a9a9a9">]</span><span style="color: #a9a9a9">.</span><span style="color: #000000">device</span><span style="color: #a9a9a9">.</span><span style="color: #000000">controllerKey</span><span style="color: #000000"> </span><span style="color: #a9a9a9">=</span><span style="color: #000000"> </span><span style="color: #ff4500">$hardDisk</span><span style="color: #a9a9a9">.</span><span style="color: #000000">ExtensionData</span><span style="color: #a9a9a9">.</span><span style="color: #000000">ControllerKey</span><span style="color: #000000"> </span>
<span style="color: #000000">         </span><span style="color: #ff4500">$spec</span><span style="color: #a9a9a9">.</span><span style="color: #000000">deviceChange</span><span style="color: #a9a9a9">[</span><span style="color: #800080">1</span><span style="color: #a9a9a9">]</span><span style="color: #a9a9a9">.</span><span style="color: #000000">device</span><span style="color: #a9a9a9">.</span><span style="color: #000000">unitNumber</span><span style="color: #000000"> </span><span style="color: #a9a9a9">=</span><span style="color: #000000"> </span><span style="color: #ff4500">$hardDisk</span><span style="color: #a9a9a9">.</span><span style="color: #000000">ExtensionData</span><span style="color: #a9a9a9">.</span><span style="color: #000000">UnitNumber</span><span style="color: #000000"> </span>
<span style="color: #000000">         </span>
<span style="color: #000000">         </span><span style="color: #ff4500">$vm</span><span style="color: #000000"> </span><span style="color: #a9a9a9">=</span><span style="color: #000000"> </span><span style="color: #0000ff">Get-View</span><span style="color: #000000"> </span><span style="color: #000080">-Id</span><span style="color: #000000"> </span><span style="color: #ff4500">$hardDisk</span><span style="color: #a9a9a9">.</span><span style="color: #000000">ParentID</span><span style="color: #000000"> </span>
<span style="color: #000000">         </span><span style="color: #0000ff">Write-Host</span><span style="color: #000000"> </span><span style="color: #8b0000">"...Reconfiguring VM to use VMDK"</span>
<span style="color: #000000">         </span><span style="color: #ff4500">$vm</span><span style="color: #a9a9a9">.</span><span style="color: #000000">ReconfigVM_Task</span><span style="color: #000000">(</span><span style="color: #ff4500">$spec</span><span style="color: #000000">)</span><span style="color: #000000"> </span><span style="color: #a9a9a9">|</span><span style="color: #000000"> </span><span style="color: #0000ff">Out-Null</span><span style="color: #000000"> </span>
<span style="color: #000000">         </span><span style="color: #000000">}</span><span style="color: #000000"> </span><span style="color: #00008b">else</span><span style="color: #000000"> </span><span style="color: #000000">{</span><span style="color: #000000"> </span>
<span style="color: #000000">            </span><span style="color: #0000ff">Write-Host</span><span style="color: #000000"> </span><span style="color: #000000">(</span><span style="color: #8b0000">"Virtual disk "</span><span style="color: #000000"> </span><span style="color: #a9a9a9">+</span><span style="color: #000000"> </span><span style="color: #ff4500">$hardDisk</span><span style="color: #a9a9a9">.</span><span style="color: #000000">Name</span><span style="color: #000000"> </span><span style="color: #a9a9a9">+</span><span style="color: #000000"> </span><span style="color: #8b0000">" is "</span><span style="color: #000000"> </span><span style="color: #a9a9a9">+</span><span style="color: #000000"> </span><span style="color: #ff4500">$hardDisk</span><span style="color: #a9a9a9">.</span><span style="color: #000000">DiskType</span><span style="color: #000000"> </span><span style="color: #a9a9a9">+</span><span style="color: #000000"> </span><span style="color: #8b0000">", not a physical mode RDM"</span><span style="color: #000000">)</span>
<span style="color: #000000">         </span><span style="color: #000000">}</span>
<span style="color: #000000">      </span><span style="color: #000000">}</span><span style="color: #000000"> </span><span style="color: #00008b">else</span><span style="color: #000000"> </span><span style="color: #000000">{</span>
<span style="color: #000000">            </span><span style="color: #0000ff">Write-Error</span><span style="color: #000000"> </span><span style="color: #8b0000">"Virtual machine must be powered off"</span><span style="color: #000000"> </span>
<span style="color: #000000">      </span><span style="color: #000000">}</span>
<span style="color: #000000">   </span><span style="color: #000000">}</span><span style="color: #000000"> </span><span style="color: #006400">#process</span>
<span style="color: #000000">}</span><span style="color: #000000"> </span><span style="color: #006400">#function</span>

<span style="color: #006400">###</span></pre>
<p>Note that the <code>Copy-HardDisk</code> cmdlet requires acting against a specific host, in vSphere 4.x, at least.  I believe in vSphere 5.0, this requirement is gone and only the vCenter binding is required.  </p>
<p>Once we created the host credential object (using <code>Get-Credential</code>) and connected to vCenter (using <code>Connect-VIserver</code>), we were able to use the function as follows:<br />
<code>Get-VM MyVM | Get-HardDisk | `<br />
Convert-RdmToVmdk -Credential $hostCred -datastoreName "MyVMFSDatastore"</code><br />
&#8230; as long as MyVM is currently powered off. This will walk through the Hard Disks attached to the VM and convert all of the encountered pRDMs to VMDKs on the datastore called &#8220;MyVMFSDatastore&#8221;.  </p>
<p>To move different pRDMs to separate datastores, use something like the following:<br />
<code>$hd = Get-VM MyVM | Get-HardDisk | ?{$_.Name -eq "Hard disk 2"}<br />
Convert-RdmToVmdk -hardDisk $hd -Credential $hostCred `<br />
-datastoreName "MyOtherDatastore"<br />
</code></p>
<p><em>DISCLAIMER: As with any code, it is your responsibility to test the code&#8217;s suitability in your environment.  I have successfully tested this function in our lab and have used it to migrate production workloads in a vSphere 4.1 environment &#8212; it works for me, but YMMV.<br />
</em></p>
<p><strong>The Result</strong><br />
After running this script for each VM and powering them back up in the production environment, we manually cleaned up the old mapping files and un-presented the LUNs from the old array.  So far, so good.</p>
<p><strong>Issues?</strong><br />
When testing in my lab against a Windows 2008 R2 VM, I encountered an odd issue.  Note that we did not encounter this in any of our production moves, and I have had a difficult time recreating it in the lab.  However, I include it here in the event that someone runs into it &#8212; maybe it&#8217;ll save someone a little time.</p>
<p>The problem looked like this: Windows did not assign the drive letter back to the partition on the migrated disk and Disk Management console wouldn&#8217;t touch it.  The error reported was, &#8220;The operation failed to complete because the Disk Management console view is not up to date.&#8221;  I even tried using <code>diskpart</code>, but it wouldn&#8217;t even recognize that there was a partition on the disk. In my research of this issue, I turned up a lot of confused people on various support forums asking the same question, mostly with respect to removable drives.  </p>
<p>The bottom line appears to be that Windows recognized a change in the device that confused the driver (kind of like the OS saying, &#8220;Hey, <strong>that&#8217;s</strong> not the same disk! What are you trying to pull here?&#8221;  I came up with a workaround and what I think is a solution.  Whatever you do, DO NOT FORMAT THE DRIVE!! &#8212; I don&#8217;t care what the articles on the forums say.  (For the record, <code>diskpart</code>&#8216;s <code>clean [all]</code> command <em>is </em>destructive)  There were many, many people who formatted their disks while trying to figure this one out.  I believe that &#8216;fixes&#8217; the problem, but in a rather destructive way (i.e. you&#8217;ve got a working partition but no data).</p>
<p><em>Workaround</em><br />
The workaround is to shut down the VM and change the SCSI ID of the VMDK &#8212; just bump it from SCSI0:2 to SCSI0:3, power up and Windows will recognize it properly (it won&#8217;t think you&#8217;re trying to pull something), mount the partition and assign the drive letter.  Unfortunately, moving the VMDK back to the original SCSI ID resurfaced the problem.</p>
<p><em>Solution?</em><br />
Digging around in Windows Device Manager when the VM exhibited the problem (I don&#8217;t love doing that) led me to what I think is a solution.  In this instance, Windows apparently detected enough of a change in the disk to create another instance of a storage object, but only a partially functional one.  Deleting this object and rescanning for new hardware (a good old-fashioned reboot would be best, of course) gave me my drive back.</p>
<p>Unfortunately (fortunately?) I was unable to duplicate the issue on demand in order to get a screenshot and record the ghost device&#8217;s name.  In my various trials, the only &#8216;problem&#8217; I could consistently create had to do with the VMDK-based drive needing to be &#8216;Onlined&#8217; in Disk Management after the swap.  Just be aware that it could show up &#8212; If I am able to re-create it, I will be sure to post screenshots here.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.goitpartners.com/blog/?feed=rss2&#038;p=157</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Storage Migration with (and without) RDMs, part I</title>
		<link>http://www.goitpartners.com/blog/?p=131</link>
		<comments>http://www.goitpartners.com/blog/?p=131#comments</comments>
		<pubDate>Mon, 19 Dec 2011 21:08:13 +0000</pubDate>
		<dc:creator>Doug Baer</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.goitpartners.com/blog/?p=131</guid>
		<description><![CDATA[First, I&#8217;ve got to apologize for my lack of attention to this blog in the past months.  I have been working with a customer to integrate new storage into their environment and prepare for disaster-recovery enhancement across the board.  In fact, that engagement led me to the topic of this posting. The Setup So, as [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>First, I&#8217;ve got to apologize for my lack of attention to this blog in the past months.  I have been working with a customer to integrate new storage into their environment and prepare for disaster-recovery enhancement across the board.  In fact, that engagement led me to the topic of this posting.</p>
<p><strong>The Setup</strong></p>
<p>So, as I mentioned above, over the past few weeks, I have been working with a customer to migrate data between two storage arrays.  In this case, they&#8217;re both HP EVA-class arrays: an older 6000 and a new P6500.  Staying within the same class of arrays tends to make the migration of certain data easier because array-to-array replication options exist.  In this phase of the engagement, the data was a mixture of physical Windows hosts and Windows virtual machines hosted on vSphere 4.1.</p>
<p><strong>Windows 2003 and 2008</strong></p>
<p>For the physical Windows hosts, we used array replication technology &#8212; HP Continuous Access EVA (CA EVA) &#8212; to replicate the data by nailing up a DR Group and allowing the primary and replica to synchronize while the hosts remained online servicing user requests.  Once the initial replication was complete and the arrays kept the Vdisks/LUNs in sync, we shut down each Windows box, flipped the DR groups to activate the replicas and suspended the original.  Once the copies on the new array were active, we brought each Windows host back online.  This is a pretty standard and well-documented process, and tends to run without issue as long as the correct steps are followed.  In this case, we didn’t even have to mess with reassigning drive letters or volume IDs on the Windows 2003 cluster machine!</p>
<p><strong>vSphere &#8211; Two Flavors</strong></p>
<p>For the vSphere-based VMs, it turns out that we had two distinct flavors of VMs: plain and pRDM.  For the plain VMs, we simply created new (matching) datastores on the target array and used Storage vMotion to migrate between arrays.  There was no downtime required for those VMs, and PowerCLI was used to automate the process somewhat:</p>
<p><code>Get-Datastore OLD-DSNAME | Get-VM | Move-VM -Datastore (Get-Datastore NEW-DSNAME)</code></p>
<p>For the VMs with physical mode RDMs (pRDMs), we explored a few different options:</p>
<ol>
<li>Treat the Windows VMs with RDMs like physical Windows machines and migrate using array replication</li>
<li>Convert the RDMs to VMDKs and be done with it</li>
</ol>
<p>The initial plan was to use CA to replicate the RDMs because that method was consistent with the rest of the machines and simplified our planning: fewer variables due to fewer variations in the process.  During our testing and POC, we ran into some interesting behavior using this process:</p>
<ul>
<li>HP CA maintains the WWN of the Vdisk when transferring it between arrays.  This results in the same NAA ID being assigned to the activated copy in vSphere, so the VM does not require a reconfiguration to function:
<ul>
<li>Shut down VM</li>
<li>Flip CA DR group (activate the copy as primary)</li>
<li>Rescan storage at the host level</li>
<li>Power up the VM</li>
</ul>
</li>
</ul>
<p>On the surface, this looks great and the VM powers up fine.  Unfortunately, something in the process caused vMotion to break.  This didn’t manifest itself right away and we probably wouldn’t have caught it if we weren’t simultaneously walking through the hosts in the cluster to upgrade RAM.</p>
<p><strong>What Happened?</strong></p>
<p>Everything seemed to work properly.  We even vMotioned the VM with the newly- migrated pRDM to another host in the cluster so we could shut the host down for upgrade. When the host was rebooted and we tried to put the VM back, it was no longer possible to vMotion the VM onto that host.  What? All we did was reboot!</p>
<p>The error we were seeing (red in the <em>Migrate Virtual Machine</em> window&#8217;s <em>Compatibility </em>pane) was this:</p>
<blockquote><p>Virtual Disk &#8216;hard disk #&#8217; is a mapped direct access LUN and its not accessible</p></blockquote>
<p>As a test, we upgraded another host’s RAM and rebooted it.  Sure enough, that host was removed from the pool of vMotion compatible hosts for our VM.  Following standard vMotion compatibility troubleshooting methodology, we powered off the VM and cold-migrated it to one of the rebooted hosts.  We were able to power the VM up on that host without any problems.  When we attempted to use vMotion, the pool of possible hosts was the inverse of before: any host that had been rebooted was a possible target while the others were not.</p>
<p>After some digging using our trusty Google, we came upon the <a href="http://kb.vmware.com/kb/1016210">VMKB article # 1016210</a>, which explains a related stuation:</p>
<blockquote><p>vMotion  compatibility for RDM  LUNs is dependent on the vml identifier instead  of the unique identifier (such  as the NAA, EUI, or T10) for the LUN&#8230;</p></blockquote>
<p>So, as it turns out, the vml ID of the pRDM hosted on the new array was <em>slightly</em> different from the original, but it wasn’t updated until the host was rebooted.  Typically, HP CA likes the host to be powered off when the Vdisk&#8217;s DR personalities are swapped and we thought that shutting down the VM would be good enough.  Apparently, it is not.</p>
<p><strong>How did we proceed?</strong></p>
<p>Troubleshooting this looked to be time-consuming, so we took a step back and looked at the reasons that these VMs were using pRDMs to determine where we should most effectively spend our time.  Unfortunately, the administrators who had originally created these VMs were no longer with the company, but there were none of the usual compelling reasons to implement pRDMs (SAN integration, MSCS clusters).</p>
<p>Our conclusion was that the machines were configured in this manner due to the perception that RDMs provided better performance than VMFS.  As it turns out, the current staff was considering a future migration away from the RDM configuration in order to simplify the environment, so we altered our migration process a little to accommodate that and eliminate the need for another outage in the future.</p>
<p>In my experience, there was one way to do this: use <code>vmkfstools</code> with the <code>-i</code> option to copy the pRDM through its VMDK mapping file into a new VMDK on a VMFS datastore.  This works fine, but requires logging into the ESX/i console to perform the action, and each RDM must be handled individually:</p>
<ol>
<li>Shut down the VM</li>
<li>For each pRDM associated with the VM
<ol>
<li>Document the current SCSI configuration (controller and address)</li>
<li>Execute <code>vmkfstools </code>to copy the data</li>
<li>Disconnect the pRDM mapping from the VM</li>
<li>Connect the VMDK copy</li>
</ol>
</li>
<li>Power up the VM</li>
</ol>
<p>While we didn’t have hundreds of these things, there were some VMs that had several drives, and even a mix of VMDKs and pRDMs.  I’m big into automation and bigger into having a repeatable process that requires less thinking on my part during outage windows.  So, I tossed together a PowerCLI function to help here.  Fortunately, I have a copy of the excellent <em>VMware vSphere PowerCLI Reference: Automating vSphere Administration</em> written by Luc Dekens, Alan Renouf, Glenn Sizemore, Arnim van Lieshout, and Jonathan Medd, and was able to leverage some of their examples to accelerate my work.</p>
<p>In part II, I will present the <code>Convert-RdmToVmdk</code> function and explain how we used it to migrate our VMs with pRDMs.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.goitpartners.com/blog/?feed=rss2&#038;p=131</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>HP Image of ESXi 5.0&#8230; Random vCenter disconnects</title>
		<link>http://www.goitpartners.com/blog/?p=114</link>
		<comments>http://www.goitpartners.com/blog/?p=114#comments</comments>
		<pubDate>Fri, 07 Oct 2011 17:34:54 +0000</pubDate>
		<dc:creator>Doug Baer</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.goitpartners.com/blog/?p=114</guid>
		<description><![CDATA[Issue I was having an issue with a newly-deployed VMware vSphere ESXi v5.0 host.  Everything looked fine, but when I pulled it into vCenter, it disconnected. I&#8217;ve seen that happen before when there was &#8220;network weirdness&#8221; &#8212; you know, firewalls between vCenter and the host that were blocking some ports, bad DNS, broadcast storms &#8212; [...]]]></description>
			<content:encoded><![CDATA[<p></p><p><em><strong>Issue</strong></em></p>
<p>I was having an issue with a newly-deployed VMware vSphere ESXi v5.0 host.  Everything looked fine, but when I pulled it into vCenter, it disconnected.</p>
<p>I&#8217;ve seen that happen before when there was &#8220;network weirdness&#8221; &#8212; you know, firewalls between vCenter and the host that were blocking some ports, bad DNS, broadcast storms &#8212; and I simply reconnected.  The host stayed connected, so I didn&#8217;t worry too much &#8212; must be a glitch of some sort.  However, when I went to configure NTP on the host, it disconnected again. Weird. I pulled a second host into the environment and IT DID THE SAME THING!  Okay, now I had to figure out what was going on.</p>
<p>I remembered that one of our customers (Thanks Scott!) mentioned something about this and they had talked to VMware and HP support about the issue.  I had deployed my host from HP&#8217;s custom ESXi 5.0 image &#8212; available by going to <a href="http://www.hp.com/go/vmware">http://www.hp.com/go/vmware</a>. The file I used was called <strong>5.0_Aug_2011_ESXi_HD_USB_SDImgeInstlr_Z7550_00204.iso</strong> For the record, I find it crazy that the ESXi build number is not included in that filename &#8212; why not tack it on the end? Would that make the filename too long?</p>
<p>Logging into the host directly using the vSphere Client revealed that there was a problem writing to the &#8220;/etc/vmware/vmware.lic&#8221; file:</p>
<p><em>Write failed file:/etc/vmware/vmware.lic when adding license to host</em></p>
<p>Using the CLI on the ESXi host, I saw that the file was owned by root and permissions were Read Only (octal 444: r&#8211; r&#8211; r&#8211;).  I messed a little with those and tried to get the host to stay in vCenter, but that didn&#8217;t work: vpxuser wouldn&#8217;t touch the license file&#8230;</p>
<p>I saw possibly related error in vCenter on the host object:<br />
<em>Agent unable to save configuration to disk: Error syncing firmware configuration: vim.fault.TooManyWrites<br />
</em><br />
That sounds REALLY bad!</p>
<p><em><strong>Resolution</strong></em></p>
<p>When all else fails, RTFM, right?  After reading the release notes (available as a separate download on the HP ESXi image page), I discovered that the HP-specific ESXi image has a license pre-installed so you don&#8217;t need to run in Evaluation mode.  Now, this is one of the &#8216;freebie&#8217; vSphere Hypervisor license, so it can&#8217;t be managed by a vCenter that has a non-Evaluation license.</p>
<p>There&#8217;s an entry in the &#8220;Important notes and recommendations&#8221; section of the Release Notes:<br />
&#8220;When the HP custom image for VMware ESXi 5.0 is downloaded and installed, problems will be encountered when applying a temporary or permanent license to the host server&#8221;</p>
<p>Yes, that sounds about right.  Ultimately, it appears that the license file integrated in the ESXi 5.0 image is improperly formatted and causes some problems.  I read the notes, which indicate how to REPLACE that license with a good one.  My fix was to yank the bad license since I have my own licenses to apply:</p>
<p>Either enable SSH and login to the host or connect to the host&#8217;s console, enable ESXi Tech Support Mode and remove the HP-installed license:<br />
<code><br />
~ #<br />
~ # esxcli software vib remove -n hp-esx-license --no-live-install<br />
Removal Result<br />
Message: The update completed successfully, but the system needs to be rebooted for the changes to be effective.</code></p>
<p><code>Reboot Required: true<br />
VIBs Installed:<br />
VIBs Removed: Hewlett-Packard_bootbank_hp-esx-license_1.0-03<br />
VIBs Skipped:<br />
~ #<br />
</code></p>
<p>Then reboot&#8230;</p>
<p>Sure enough, following a reboot the <em>/etc/vmware/vmware.lic</em> file had the correct permissions (octal 600: rw- &#8212; &#8212;) and the host remains connected in vCenter.</p>
<p><strong>NOTE:</strong> There is an <a href="http://bit.ly/o4AnGD">HP Customer Advisory</a> on this topic, although it is past the &#8220;mid-September&#8221; date identified for a fixed image to be posted.</p>
<p>&nbsp;</p>
<p><em><strong>So, what&#8217;s cool about the HP Image of ESXi?</strong></em><br />
I get this question a lot.  Normally, right after, &#8220;What do you mean there is a custom HP image of ESXi?&#8221;</p>
<p>The HP ESXi 5.0 Customized Image includes the following:</p>
<ul>
<li> HP Management Tools:
<ul>
<li> HP CIM Providers</li>
<li> HP NMI Driver</li>
<li> HP iLO Driver</li>
<li> HP CRU Driver</li>
<li> HPONCONFG Utility</li>
<li> HPBOOTCFG Utility</li>
</ul>
</li>
<li> VMware IOVP Certified Device Drivers added to HP ESXi 5.0 installation images for HP device enablement.</li>
<li> VMware’s Standard ESXi 5.0 image</li>
</ul>
<p>The drivers are probably the biggest benefit that most users see immediately &#8212; no need to slipstream them into the install.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.goitpartners.com/blog/?feed=rss2&#038;p=114</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>My VMworld 2011 Recap</title>
		<link>http://www.goitpartners.com/blog/?p=91</link>
		<comments>http://www.goitpartners.com/blog/?p=91#comments</comments>
		<pubDate>Wed, 07 Sep 2011 17:20:14 +0000</pubDate>
		<dc:creator>Doug Baer</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.goitpartners.com/blog/?p=91</guid>
		<description><![CDATA[I&#8217;ve read several articles and blog postings about the &#8216;top VMworld takeaways,&#8217; product announcements, or information garnered from the conference.  At this point, it seems almost redundant for me to toss my thoughts out to the world, but that&#8217;s not going to stop me.  As I mentioned in previous postings, I have attended a majority [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>I&#8217;ve read several articles and blog postings about the &#8216;top VMworld takeaways,&#8217; product announcements, or information garnered from the conference.  At this point, it seems almost redundant for me to toss my thoughts out to the world, but that&#8217;s not going to stop me.  As I mentioned in previous postings, I have attended a majority of the VMworld events, so maybe I do have a perspective worth sharing.</p>
<p>For starters, this was the largest VMworld ever. There were almost 20,000 people this year, up from 17,021 in 2010 &#8212; it would have been larger if not for the impact of Hurricane/Tropical Storm Irene on the eastern US.</p>
<p><a href="http://www.goitpartners.com/blog/wp-content/uploads/2011/09/screenshot.1355.png"><img class="aligncenter size-full wp-image-95" src="http://www.goitpartners.com/blog/wp-content/uploads/2011/09/screenshot.1355.png" alt="" width="474" height="279" /></a></p>
<p>Before I begin, I want to get it out there that I think it was <strong>very </strong>wise of VMware to make the vSphere 5 licensing change announcements prior to VMworld.  If they had waited to drop that bomb at VMworld, I think the atmosphere would have been very different &#8212; in a bad way.  As it was, I don&#8217;t think I heard anyone talking about the licensing changes during the conference.  Nice job to whomever architected that announcement.</p>
<p>For me, these conferences are more about reconnecting with colleagues and hearing VMware&#8217;s vision than the technology itself.  Believe me, I never thought I would say that, but I am more interested now in how we&#8217;re going to apply the technology than how the technology works. Don&#8217;t get me wrong, I still care <em>a lot</em> about how it works, but I also realize that amazing technology by itself doesn&#8217;t provide value.  This year, I spent a lot more time in the Solution Exchange than I had in the past.  I noticed a few trends this year:</p>
<ul>
<li>There are a lot of products designed to provide better storage performance to virtualized environments.  If you&#8217;ve got VMs, you know that they place unique demands on storage systems, and there are many ways to skin that cat.</li>
<li>Many of the larger booths were the hardware OEMs, but just as many seemed to be companies providing management, monitoring, and automation software &#8212; that&#8217;s a good sign.</li>
<li>A lot fewer companies with &#8220;cloud&#8221; in their names, but a lot more providing something as a service (XaaS).  Has the industry realized that &#8216;cloud&#8217; is essentially providing services and that the word &#8216;cloud&#8217; is terribly overused?</li>
</ul>
<p>From a product perspective, there is a lot of excitement about End User Computing (EUC) this year, specifically around Desktop enablement.  My opinion is that virtual desktops are simply a bridge between individual user desktop machines and an application-centric user computing environment.  Along those lines, it was nice to hear VMware execs indicate that perhaps the desktop metaphor is no longer as relevant as it was back in the 80&#8242;s.  Obviously, some kind of desktop-based environment will remain as long as useful applications have not been rewritten to take advantage of the new <em>desktop-less</em> paradigm, but I think we&#8217;re moving in the right direction.  Should the IT department really care what device I am using? Do they need to be responsible for securing an entire OS if I&#8217;m not using all of those components?</p>
<p>&lt;soapbox&gt;Arguably, bringing my own device implies that I have accepted a lot of the responsibility for securing my device, and I should work with the IT folks to achieve the common goal of a secure environment. &lt;/soapbox&gt;</p>
<p>With technologies like Project Octopus, Horizon Mobile, ThinApp Factory, and AppBlast, it is apparent that VMware is charging into the EUC market full force.  Before you get too excited, remember that most of these are enabling technologies, technology previews, or pre-announcement demonstrations meant to showcase what VMware is currently working on.  Who knows, several of these may be productized and ready for proper announcement by VMworld Europe (October 18-20, 2011), but most of them are <strong>not available for purchase now</strong>.</p>
<p>For me, the labs are always a highlight, and technologies that support fundamental changes in both infrastructure use management are more interesting than the end user stuff.  I&#8217;m mostly an infrastructure guy, but I was particularly impressed with vFabric Data Director and SQLFire:</p>
<ul>
<li><em><strong>vFabric Data Director </strong></em>introduces Data as a Service (DaaS?) to the VMware stack and allows DBAs to provision their own databases without requiring involvement from the server teams &#8212; the OS underlying the database has become a non-issue in this implementation.  If you&#8217;ve ever spent time tuning, patching, and troubleshooting OSes that support database servers, you&#8217;ll comprehend how much operational savings is possible here.  Today, DD supports a tuned and vSphere-optimized version of PostgreSQL, but plans are in the works to support Microsoft SQL and Oracle in a similar manner.  You can get more information about Data Director <a href="http://www.vmworld.com/servlet/JiveServlet/downloadBody/5621-102-1-8608/VMware-vFabric-Data-Director-Datasheet.pdf">here</a>.</li>
<li><em><strong>vFabric SQLFire</strong></em> is an in-memory SQL implementation based on the GemFire technology that VMware acquired last year.  The goal is to provide extremely fast access to data for highly-transactional workloads without the need to rewrite an application to support a specialized database coding.  Additionally, it supports continuous availability within or across data centers via a horizontal scaling model. From an infrastructure perspective, this is very attractive since the application can handle its own availability requirements internally. You can get more information about SQLFire <a href="http://www.vmworld.com/servlet/JiveServlet/downloadBody/5624-102-1-8611/VMware-vFabric-SQLFire-Datasheet.pdf">here</a>.</li>
</ul>
<p>These two were the gems of the show for me, although the vFabric Cloud Application Platform is also very intriguing. I&#8217;ve been waiting for something like that since VMware acquired SpringSource, but I ran out of time during the show and did not have the chance to dig into it.  I will definitely need to pull the session slides and see what is going on there.</p>
<p>From a local perspective, we have Tech Talks later this month that will specifically cover the conference, sessions and announcements in greater detail.  If you&#8217;re interested in hearing more, contact your IT Partners account executive and we&#8217;ll get you the details.</p>
<p>Finally, it was great to reconnect with people from my past, the  community in general (forums, blogs, twitter, past presenters) and my  fellow VCDXes.  For those I missed, I look forward to catching up next  year in San Francisco.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.goitpartners.com/blog/?feed=rss2&#038;p=91</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VMware Memories, part 3</title>
		<link>http://www.goitpartners.com/blog/?p=83</link>
		<comments>http://www.goitpartners.com/blog/?p=83#comments</comments>
		<pubDate>Thu, 01 Sep 2011 01:12:44 +0000</pubDate>
		<dc:creator>Doug Baer</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.goitpartners.com/blog/?p=83</guid>
		<description><![CDATA[The following year, 2008, I worked on a VMware Professional Services (PSO) engagement with Richard Lebedeff and Jeff Baylor. I worked on the VCB portion of a large VI3 P&#38;D engagement and it was interesting to witness how VMware PSO worked; these guys are professionals Later that year, I was connected to David Deeths of [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>The following year, 2008, I worked on a VMware Professional Services (PSO) engagement with Richard Lebedeff and Jeff Baylor.  I worked on the VCB portion of a large VI3 P&amp;D engagement and it was interesting to witness how VMware PSO worked; these guys are professionals</p>
<p>Later that year, I was connected to David Deeths of VMware who was the ‘lab captain’ in charge of the team responsible for the scripting lab at VMworld 2008.  That meant the Perl SDK and the freshly-released VMware PowerShell Toolkit.  Since I had both VMware Infrastructure experience and a software development background, joining that team made sense.  I was lucky to work with a fantastic team made up of VMware employees Shridhar Deuskar, Lisa Guinn, Terry Lyons, Aaron Miller, Alket Memushaj, Brian Watrous, and Alton Yu in addition to Owen Thomas from New Age Technologies.  I had the privilege of meeting and working with the team for a couple of days at VMware’s Promontory campus and we created two complete labs: one in Perl and one in PowerShell. Our goal was to work through the same exercises in both languages so that attendees could compare the toolkits in an apples-to-apples manner.  I learned a lot of PowerShell and had a tremendous amount of fun working with the VMworld Lab Staff and assisting students in our sessions.  I think our lab was one of the top-rated sessions that year and you can still download the manuals on the VMworld.com website.</p>
<p>In 2009, we got (most of) the band back together and revised the scripting labs.  We added Phil Anthony, Chirag Patel, and Josh Thomas – we even had Carter Shanklin as a guest presenter and Yavor Boychev of Project Onyx fame around for additional support. With the expansion of VMware’s product line, I don&#8217;t think there was enough space for two labs on scripting, so we combined, updated, and extended the Perl and PowerCLI labs from 2008 and allowed students to select a language when they attended the lab. Logistics were a little funny since we had to pair up Perl and PowerShell attendees, but it mostly worked out. Not cloud, but getting there.</p>
<p>This was also big year for me because I submitted a design and application for the VMware Certified Design Expert (VCDX) defense.  I arrived in San Francisco a few days prior to VMworld to go through the defense and to get the lab environment prepared for the show.  My defense took place at the Promontory campus, so at least I knew how to get there.  None of the candidates really knew what to expect – there weren’t any blog posts back then to help us out and we had to wing it. Builds character, right?  It was quite an experience.  The following week at VMworld, I received an email, stopped by the onsite testing center, and was told that I’d passed&#8230; Whew!</p>
<p>With the focus on “cloud” in general and self-service in particular, the VMworld 2010 labs were reformatted and no longer required dedicated presentation staff for each one – or, it was more cost effective to have VMware employees handle the tasks rather than bringing in outside (Partner) resources.  I was seriously bummed not to be part of the labs, but we had worked out a partnership with a small company that was coming out of “stealth mode” during VMworld, so I had booth responsibilities.  Unfortunately, that company dissolved just before the conference and I was left as “just an attendee” for the first time ever.  </p>
<p>To be honest, I didn’t know at first what to do about my free time, but I found all kinds of sessions that interested me and had been asked by the folks at VIBriefing.com if I would blog about the conference.  We set up a feed using an Evernote notebook and Mariah West took care of making sense of my ramblings and posting them to the web.  I hear they got pretty good traffic, so that was nice.  I stopped by the massive VMware lab room to see how my VMware-badged lab veterans were doing, to catch up, and to snap some pictures of the environment.  Also at this show, I attended a lunch with Paul Maritz (I got to sit at the same table!), met most of the current VCDXes and Susan Gudenkauf (VCP #1!), and received a jacket for being one of the first 50 VCDX-certified individuals.  It was especially cool to finally meet Duncan Epping in person and talk a little with John Arrasjid, whose sessions I had attended since the beginning of my VMworld journey.</p>
<p>This year, I looked forward to seeing a lot of my past coworkers, current customers, and VMware-badged friends at the show.  I ran into Jim Rast who was a member of the original Phoenix VMUG &#8212; it was nice to discuss current technology applications and customer challenges. I tracked down Frank Denneman in person, having worked with him a little this past year on the vSphere 5 Clustering Technical Deep Dive book that he and Duncan published. Those guys gave me a signed copy of the book; very nice.  It was interesting to catch up with Andreas Groth via Twitter and realize that we had presented together at another VMworld so many years ago.  As an unexpected bonus, I caught up with Paul Strong, VMware&#8217;s CTO for Global Customer &amp; Field Initiatives. He&#8217;s quite possibly the smartest guy I&#8217;ve ever talked to and I look forward to doing it again soon.</p>
<p>I’m certain that I haven’t mentioned all of the people I’ve encountered over the years, and I apologize to those whom I have not mentioned – there have been so many and this post is already a lot longer than I thought it would be. As for the guys from the local Phoenix VMware team that I work with most often: Jared Byrd, George Peck, I look forward to seeing you again soon, too.</p>
<p>Wow, I guess this qualifies me as the ultimate VMware fan boy, doesn&#8217;t it?  Looking forward to next year&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.goitpartners.com/blog/?feed=rss2&#038;p=83</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VMware Memories, part 2</title>
		<link>http://www.goitpartners.com/blog/?p=82</link>
		<comments>http://www.goitpartners.com/blog/?p=82#comments</comments>
		<pubDate>Tue, 30 Aug 2011 17:11:02 +0000</pubDate>
		<dc:creator>Doug Baer</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.goitpartners.com/blog/?p=82</guid>
		<description><![CDATA[I was unaware of VMworld at this point, but Christine Holland got me in touch with Rob Smoot, who I believe is still with VMware. Rob was organizing a panel discussion at this VMworld conference in Las Vegas and wanted someone to talk about using their products for testing and development. I was excited to [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>I was unaware of VMworld at this point, but Christine Holland got me in touch with Rob Smoot, who I believe is still with VMware.  Rob was organizing a panel discussion at this VMworld conference in Las Vegas and wanted someone to talk about using their products for testing and development.  I was excited to be a part of the group that included some much bigger implementations, and I hoped that I could add some value to the panel discussion and Q&amp;A.  That year, I also received an award for my part in the Core Customer program. I believe I had the second highest number of ‘points,’ losing out to Steve Beaver, a legend in my mind, at least on  the VMTN Forums. Unfortunately, he was not present, so I never got to meet him. However, I was privileged enough to sit next to Diane Greene at the recognition luncheon.  Only my first VMworld and I’d already gotten to meet the CEO. How cool was that!</p>
<p>I decided to pursue certification (VCP2), and attended the ESX2 and VirtualCenter Installation and Configuration class.  Based on my level of experience, the class was a lot of review, but did a lot to help solidify my understanding of the fundamentals. My instructor, Damian Wraa, was excellent, and I believe he is still with VMware today.  I think it says a lot that I remember his name since I only saw the guy for a week during a class over 6 years ago!</p>
<p>VMware was growing like crazy (doubling in size every month, it seemed), and a sales team was built in the southwest region where I was working.  Kenon’s responsibilities were directed elsewhere and Shak Malik was assigned as my new VMware SE, along with Eric Rakotz as a local sales contact.  Both Shak, who works for HP now, and Eric, now VCE, took good care of me, although I don’t think I required too much care and feeding. I continued my relationship with Chris Holland and the Core Customer Program, became more involved on the VMTN forums (I got my chess piece!) and our little VMUG.  The VMUG here in Phoenix was originally run by Jason Ambrose and Josh Wright from Agilysis, and we had meetings in a small conference room at the HP office.  Back then, we had a presentation from any vendor who would buy us sodas and sandwiches (for 10 people or so).</p>
<p>By 2006, I discovered that I enjoyed talking to people about the benefits of server virtualization and guiding them through the process of justification, design and implementation much better than my operational IT responsibilities.  Through VMware, I worked with the team at OutCast Communications on a few media activities – telling my story to reporters, discussing VMware’s upcoming features, and how I would implement them.  Here, I met Andrew Schmitt (OutCast), Sarah Bresee (OutCast), Amber Rowland (VMware), and Karthik Rau (VMware) – all of them are great people to work with and I had a lot of fun promoting VMware&#8217;s products. It was a tough decision, but I turned in my Customer status at the end of 2006 to become a Partner.  The decision was made so I could focus my efforts, further develop my skills, and help more people by spreading the VMware message even more.  That year, I was also asked to step in and present a session at VMworld in Los Angeles on upgrading to VI3.  It was a last minute thing and I scrambled to come up with the content.  I ended up with twice the amount of content than could be presented in a 45 minute period, and a few of my customers and coworkers were there to heckle me. Overall, a great time again.</p>
<p>I had such a great time that I submitted my own session idea in 2007 regarding different infrastructure layers where virtualization technologies could be implemented.  Apparently, a few others had a similar idea and a session called “Virtualization Architectures, Options and Approaches” was born.  I was honored to be in the company of Scott Davis (VMware), Ram Rao (HP) and Andreas Groth (IBM).  That session was incredibly popular: standing room only and a Fire Marshall&#8217;s nightmare. We ran long and had to be kicked out of the room – it rocked!  Each of those guys are amazing in their own way and we could have done a 2 hour session with ease.  That year, I randomly had the opportunity to grab a few minutes with Dr. Mendel Rosenblum while he was waiting for Diane Greene on their way out of town and back home.  Diane was like a rockstar or the President: she needed people to flank her and extract her from conversations so that she could make it to her appointments on time.</p>
<p>With that kind of start, how could I NOT want to continue to be a part of this community?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.goitpartners.com/blog/?feed=rss2&#038;p=82</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>VMware Memories, part 1</title>
		<link>http://www.goitpartners.com/blog/?p=74</link>
		<comments>http://www.goitpartners.com/blog/?p=74#comments</comments>
		<pubDate>Tue, 30 Aug 2011 06:19:01 +0000</pubDate>
		<dc:creator>Doug Baer</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.goitpartners.com/blog/?p=74</guid>
		<description><![CDATA[Sitting here on the eve of my 7th VMworld conference (yeah, I missed the first one in 2004), I think back on VMware journey up to this point and the people who have influenced me along the way.  I’m a fairly inconspicuous guy, so I don’t get recognized a lot, even though I’ve been around [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>Sitting here on the eve of my 7th VMworld conference (yeah, I missed the first one in 2004), I think back on VMware journey up to this point and the people who have influenced me along the way.  I’m a fairly inconspicuous guy, so I don’t get recognized a lot, even though I’ve been around the VMware scene for quite some time.</p>
<p>In the beginning, I used VMware Workstation (2.x) when I was a software developer.  None of us ever wrote buggy code and had to reload Windows (3.1!) onto our development machines, but Workstation was there as a testing environment, just in case.  What a timesaver!  To be honest, my history with VMs goes back before that with RealPC, VirtualPC, SoftPC, and the other emulators that ran x86 machines on Macintoshes (it worked, but was NOWHERE near fast).  I always wanted something like that when I was developing software on my Mac – but that never happened. At least, not during my developer days: vSphere 5 allows it if all of the prerequisites are met!</p>
<p>In 2002, I continued my use of Workstation (3.x) during project planning and new software testing when I moved from the app/dev side of the house to infrastructure.  In those days, I did a lot of directory services work, and testing integration plugins or new Netware client builds/patches without nuking my production machine&#8217;s configuration was the primary use case.  Moving beyond my own machine, we licensed GSX Server for Windows in 2004 and collapsed two racks of lab hardware onto a pair of servers.  Our lab room immediately became much quieter, cooler, and more available.  Those who understand the ‘waterfall’ model of lab gear acquisition get that labs are regularly built from the oldest junk in an organization &#8212; and hardware support is not even within the realm of possibility.</p>
<p>After such great success in our lab, and with the 2.0 release of VMware ESX Server, we decided to take a look at what that could buy us beyond our GSX Server – we’d heard good things about less overhead and higher densities.  Back in those days, you were required to engage VMware resources in order to even try out ESX Server.  Enter Melissa Ercoli and Kenon Owens – these people were my first experience with corporate VMware, and helped me get started.  I believe Melissa got married and is still with VMware while Kenon has since moved on to work at Microsoft.  Both of these individuals invested the time with me to ensure that I understood this new ESX Server thing by answering all of my questions, both technical and licensing-related.  For that, I am very grateful.</p>
<p>In late 2004, armed with an understanding of the ESX Server architecture, and a trial implementation in the lab, I submitted a proposal to our management to stand up a POC environment in production – 2 SAN-attached ESX Server 2.5 hosts.  I was immediately met with the “all of our eggs in one basket” argument.  Fortunately for me, VirtualCenter 1.0 had been released and I was on top of the amazing VMotion (notice the capital &#8220;V&#8221;!) technology enabled therein.  My POC environment was kind of sad – we basically took two of our standard x86 servers (HP DL360 G3), bumped the RAM a bit, and shoved an FC HBA into it.  There was pretty much no redundancy (single power supply, single SAN path, single NIC port for Service Console, one for VMotion, and two for VM traffic), but the thing worked.  My first demo of VMotion blew everyone’s mind: “there’s NO WAY that just worked!”</p>
<p>In August of 2004, a hardware failure on a production server expedited the migration of our VMware POC into production.  We were presented with the option of blowing away the POC environment in order to repurpose its hardware as a replacement for the failed box, or repurposing a VM currently running on that environment.  The path of least resistance, and quicker TTR, was obvious, and we became production ESX Server and VirtualCenter users.  From there, the thing spread like wildfire, just like the stories we hear today &#8212; you know, the Legend of VMware.</p>
<p>This stuff was getting to be fairly complicated and I had invested a lot of time into understanding how the pieces fit together.  I registered on the VMware Community forums in October of 2004 in order to get answers to my more complicated questions and to share my experiences with others.  First off, I was amazed at the sense of community &#8212; people helping people without being compensated beyond the satisfaction of sharing knowledge.  This was a group I immediately liked quite a bit.  It was there that I ran across the VMware Core Customer program, which ultimately led me to Christine Holland.  Chris was interested in my environment and how we were using VMware’s technologies in both production and testing, so she introduced me to the PR people and they quoted me as part of the ESX Server 2.5 release.  We had a <a href="http://www.vmware.com/files/pdf/customers/05Q1_cs_vmw_Desert_schools_english.pdf">case study</a> published in early 2005 and a <a href="http://www.vmware.com/company/news/articles/credit_union_journal_032706.html">related article</a> as well.</p>
<p>From there, Charles Babcock (Network Computing) and Jennifer Mears (Network World) talked to me a bit about the ESX 3.0 and VirtualCenter 2.0 launch, and the much-anticipated HA and DRS features. I had some coverage there, including a quickly-snapped photo of me at VMworld. I’ve got to say it was pretty cool to get a magazine with my (goofy) picture in it!</p>
<p>&nbsp;</p>
<p>To be continued&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.goitpartners.com/blog/?feed=rss2&#038;p=74</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

