So we’ve checked out the basics of Chef on Windows in Part 1 and Part 2 of Chef On Windows, and with the recent release of the Windows Management Framework 5.0 Preview September 2014 I thought it was time to stick a toe into the water of the Desired State Configuration side of configuration management on Windows.
As quite a lot of intros focus very heavily on the theory and don’t necessarily show a lot of results up front, I’m going to continue the precedent of the preview Chef articles and show you the shortest path to something tangible, hopefully gaining some familiarity with the tech involved along the way.
In Part 1 we’re going to use the WMF 5.0 preview, DSC, and a little bit of OneGet/PowerShellGet (name seems to be up for discussion the moment), to install WordPress 4.0 on to a blank VM. In order to do this we’re going to follow the guide laid out in the quick-start of the WordPress PowerShell/DSC module, so all credit goes to the wonderful people who created this module for providing our first entry point into DSC!
Important: You don’t need WMF 5.0 to use DSC, it’s been around since PS 4.0, but the WordPress PowerShell/DSC module we’ll be using requires WMF 5.0 for OneGet.
Important #2: This guide uses a WMF 5.0 preview and DSC modules that are labelled x for eXperimental, don’t use these in production
- Blank Windows 2012 R2 VM
- Powershell Understanding Basic: Microsoft Virtual Academy Getting Started With PowerShell
We won’t need the VMs we created in the Chef series as we’ll be focussing on just DSC for today.
1) Preparing the VM
As the WordPress PowerShell/DSC module we’ll be using requires WMF 5.0 for OneGet, we need to go and grab the September 2014 Preview!
Download WMF 5.0 to your 2012 VM from http://www.microsoft.com/en-us/download/details.aspx?id=44070
Now we need to install the xWordPress module and its dependencies.
Whoa whoa whoa, don’t download it from the link! What is this, the 90s? We’ve *just * installed PowerShell 5.0 and with it, OneGet, let’s use it!
Open up a PowerShell console and run
Install-Module xWebAdministration -MinimumVersion 1.3.2 -Force
and accept the offer to download NuGet_anycpu.exe.
Now install the remaining modules.
Install-Module xPSDesiredStateConfiguration -MinimumVersion 3.0.1 -Force Install-Module xMySql -MinimumVersion 1.0 -Force Install-Module xWordPress -MinimumVersion 1.0 -Force Install-Module xPhp -MinimumVersion 1.0.1 -Force
Excellent! Okay, where did they go?
Awesome! Since when has that been a thing? WMF 5.0? I assume, but I’m not sure. Getting modules to load automatically has always been a bit of a per-user PITA in the past, so if this is user-agnostic way of installing PowerShell modules, it’s only a good thing!
2) Prepare the Configuration
Now we need to grab the sample files from the xWordPress module and customise them to our needs.
Copy the contents of
C:\Program Files\WindowsPowerShellModules\xWordPresssamples to your Documents folder
SingleNodeEndToEndWordPress.ps1 in the PowerShell ISE and check that the Download URLs are still correct for PHP and MySQL.
I only had to change PHP to http://windows.php.net/downloads/releases/archives/php-5.5.14-nts-Win32-VC11-x64.zip, but double check MySQL as well, as it may have changed by the time you read this!
3) Executing the Configuration
Go back to your PowerShell window, cd into your documents folder and execute
This will perform the following tasks (at least):
- Install IIS
- Install PHP and dependencies
- Install MySQL
- Install WordPress into IIS with * port 80 HTTP bindings.
After some time, your system will restart to complete the installation.
Once it’s restarted, DSC will continue to configure the computer, to see the progress, go to the DSC event log. (Event Viewer > Applications and Services Log > Microsoft > Windows > Desired State Configuration > Operational)
Once you see “Warning” “The local configuration manager was shut down”, your new WordPress site should be ready! Check out Localhost in IE!
Ooh, this is the first time I’ve seen WordPress 4.0 default installation! First impressions are very monochrome, but eh, that’s what themes are for!
So what have we achieved here?
We’ve used community provided modules for DSC/PowerShell to install WordPress and all its dependencies, including IIS, PHP, and MySQL.
Was this easier than doing all the work ourselves, clicking through installers and typing out config ourselves? Much!
Does it mean we no longer need Chef and all that work we did in the past couple of posts was unnecessary? Not at all!
Does this illustrate the power and flexibility of DSC and OneGet? No, we’re just getting started!
I’ll be writing a subsequent post to dig in and write our own DSC module/template/whatever-the-correct-nomenclature–is but I suspect that bringing what we’ve learned today into Chef with Chef’s new DSC evaluation release recipes will be the post immediately following this one.
- GitHub PowerShell Community DSC Modules
- Building a Desired State Configuration Infrastructure- Building a Desired State Configuration Configuration
- Building a Desired State Configuration Configuration Part 2
- Building Desired State Configuration Custom Resources