No idea what Veewee’s all about? Watch my screencast!

A couple of days ago I wrote a post about Veewee, the automated boxgrinder for Virtualbox boxes. But if you had no idea what Veewee was, all that detail wouldn’t have made much sense to you. So I threw together a quick screencast on YouTube. Here it is!

Tags: , , ,

Technology Preview: Chef Cookbook integration testing with Test Kitchen 1.0

Chris Kimball of Cook's Illustrated at the American Museum of Natural History. (CC licensed.)

Chris Kimball of Cook’s Illustrated at the American Museum of Natural History. (CC-Att-NC)

How do you test your Chef cookbooks without firing up a real machine and uploading the recipes to a Chef Server?

I get asked this question all the time, especially after I’ve taught the basics of Chef at Opscode’s public training classes. For unit testing, there is ChefSpec — RSpec plus Chef primitives to allow you to make assertions about your recipes. However, that only goes so far without actually converging a real node & running external tests on the services that were configured.

Last year, Opscode released Test Kitchen, allowing you to use workstation-based virtualization (in the form of VirtualBox) to fire up test nodes, converge them, and run Minitests and Cucumber behavioural-driven development (BDD) tests on them after the converge. In this article, I’ll show you how to set up Test Kitchen 1.0 with Vagrant 1.1 to write and run integration tests.

Continue reading…

Book Review: “Instant Chef Starter”

Packt Publishing has released “Instant Chef Starter“, a tiny (70 pages!) book on getting up and running quickly with Chef. I’ve posted a full review over at Opscode’s corporate blog.

Reviving veewee after Vagrant 1.1

Recently, Mitchell Hashimoto released a major rewrite of Vagrant, the tool that lets you build, provision, and rebuild virtualized development environments at the click of a button. While the rewrite is great — it has many new features, chief amongst them the ability to use virtualization providers other than VirtualBox — it was a major architectural change, and this broke many tools that work with Vagrant. One of them is veewee, a popular tool from Patrick Debois that allows anyone to rebuild fresh Vagrant boxes. Here’s how I fixed my veewee installation for now. Continue reading…

Tags: , ,

Autoscaling Builds with Jenkins’ EC2 Plugin and Chef

One of my last projects at SecondMarket was to automate and rebuild the Jenkins infrastructure. We’d previously had a static setup in the NYC office with a build master and three slaves that ran all the time, but this handled developer check-in storms very poorly. For example, when developers were trying to make code cutoff for a feature, many builds would be queued for lack of available executors. But at other times, these agents would be completely idle. It made more sense to move the entire setup to the cloud and implement some kind of auto-scaling for Jenkins. Continue reading…

I’m joining Opscode!

opscode logoTomorrow I’ll be joining Opscode as a senior consultant for Chef. My job responsibilities will be diverse, encompassing training, evangelism, and also working on projects for customers large and small.

I’m extremely excited to be working for a company whose product has been revolutionizing the job responsibilities of the traditional system administrator, and even those of the software engineer. It’s easier to break down the walls between operations and development when all your infrastructure is code, and Chef makes that a no-brainer. Frankly, it’s also more fun for everyone — yes, it’s possible for web operations to be fun again, just like it was back in 1996 when I got into this sort of thing.

I’m looking forward to working with all of the really smart people at Opscode, and, if you’re part of the Chef community, with you as well. See you around, maybe at a conference, training session, or just in IRC!

When Application and Library Cookbooks Fail

Apologies in advance if you’re not interested in a post about the guts of Opscode Chef.

I recently started to adopt Bryan Berry’s application & library cookbook model as outlined in his excellent and funny blog post, "How to Write Reusable Chef Cookbooks, Gangnam Style". But I quickly ran into a blocker, because people are trying to solve problems using the compile phase and not the execute phase of Chef. Perhaps this calls into question the entire viability of compile-phase providers like chef_gem. Continue reading…

Retweets Aren’t Endorsements: Why Not?

not equalsAfter seeing yet another person whose Twitter profile says “retweets ≠ endorsements”, I feel compelled to say something. “RT ≠ endorsement” doesn’t distance you from something you’re retweeting. Rather, it’s the electronic equivalent of the annoying phrase just sayin’: a passive-aggressive way of making a statement while pretending not to have made a statement. Sorry, but I call shenanigans.

I understand that sometimes you want to comment on someone’s opinions by simply showing their own words. In that situation, why not add your voice to the conversation by prepending a couple words to the retweet, or condensing/summarizing the original tweet using a MT (Modified Tweet)? People follow you on Twitter because they want to know your perspective on things. You shouldn’t just be a mouthpiece for other people.

In short: If you don’t completely agree with or endorse an opinion on Twitter, don’t just blindly retweet it and think that “RT ≠ endorsement” will cover you. Add some color to the retweet to clarify where you stand. Not only will you show that you’re not afraid to have an opinion, but your followers will thank you for continuing the conversation. Isn’t that what Twitter is about, after all?

Image from holeymoon on Flickr. CC-licensed.

What Your CDN Won’t Tell You: Optimizing a News Website for Speed and Stability

I was recently in San Diego giving a talk at LISA ’12 entitled “What Your CDN Won’t Tell You: Optimizing a News Website for Speed and Stability“. The paper was based on work my colleague Blake Crosby and I did at the Canadian Broadcasting Corporation to rearchitect their website & integrate it successfully with Akamai‘s EdgeSuite content delivery network, enabling it to serve over a million unique visitors daily with high availability.

I’m pleased to announce that the slides from the presentation are now available, and the video (eek!) will be shortly.

Hope everyone’s having a great holiday and I promise there will be more blog posts in the New Year.

Automating Atlassian JIRA, Confluence, and Crowd Installation with Chef

As a user, I’ve always been impressed with Atlassian‘s products for software development, issue tracking and documentation. For companies who take these things seriously, JIRA, Greenhopper and Confluence are quickly becoming the go-to products, and with good reason: the products are easy to get started with but have the enterprise features that allow a company to customize workflows as their business changes. I hate to slam open-source products but just try doing what JIRA does with Bugzilla or Trac.

The products themselves, though, can be a nightmare to install, despite the fact that they are mostly just Java web applications living in a WAR file. The products have improved immensely from the days when setting them up involved hacking up a multitude of XML files in WEB-INF (though there still is some of that), and it’s still annoying that Atlassian doesn’t support running the applications as unexploded WARs within Tomcat or another servlet container, probably for the aforementioned reasons. All that aside, though, it’s satisfying when everything is working together and users can single-sign-onto the entire Atlassian suite because of the magic of Crowd, Atlassian’s SSO directory server.

Last week, I released a set of Chef cookbooks I wrote at SecondMarket to ease the installation of the Atlassian tools on a server. I’m still looking to automate more parts of this, including the ability to edit the aforementioned XML files in-place in an idempotent way, so pull requests against our GitHub repo would be welcome.

Special Note on Using Atlassian Products in the Amazon Cloud

I should also mention that my first attempt to set up Atlassian’s products using Amazon Relational Database Service (RDS) as a backing store was a failure. To spare you the pain of finding this out yourself, I’ll just mention the reason: Crowd, JIRA and Confluence expect MySQL to be configured with READ-COMMITTED transaction isolation level, which means you need to configure MySQL to have row-based binary-logging. Unfortunately, binlog_format is not a parameter you can configure in RDS’s DB Parameter Groups, for obvious reasons; it would affect all other clients on that MySQL instance. This has been confirmed with Amazon support, so JIRA/Crowd/Confluence with RDS is a no-go.

Tags: , , , ,