Making It Live
At this stage we’ve only been using machines that were created by Cucumber-Chef. While we have had some exposure to the core concepts that make up Chef cookbook and recipe development, we haven’t yet had to solve the challenge of building a machine from scratch using Chef.
Interestingly, this is perhaps one of the most impressive demonstrations it’s possible to give. We’re able, with a single command, to go from nothing more than Amazon and Opscode credentials to a fully functioning machine, delivering requirements specified by the business in executable acceptance tests.
The bootstrap process is straightforward. Chef, like Cucumber-Chef, uses Fog to provision an EC2 node. Fog returns a compute object, which Chef is able to connect to using Net::SSH. Having established a connection, the bootstrap process renders an erb template and populates it with values from the Knife configuration. The result of this template is a shell script which is run on the remote server. This shell script installs Chef on the remote machine and populates a JSON file with details of the run list that should be applied to the node when Chef runs for the first time. Chef is then run, the node authenticates with the Opscode platform, the node is built, the cookbooks synchronized, the resource collection built, the node configured and saved, and exception and report handlers are run. At the end of a single run, an everyday EC2 AMI has converged to comply with a policy set out in the form of resources ...