<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>CTO of AnsibleWorks.  I program stuff, photograph things, and make noise with synthesizers.   If you thought this blog was just about llamas, you are mistaken.</description><title>Michael DeHaan</title><generator>Tumblr (3.0; @mpdehaan)</generator><link>http://michaeldehaan.net/</link><item><title>Introducing AnsibleWorks</title><description>&lt;p&gt;While it&amp;#8217;s already over most of the internet so far (thanks GigaOM!), I haven&amp;#8217;t posted to THIS particular blog quite yet.&lt;/p&gt;
&lt;p&gt;Today is a great day.  I&amp;#8217;m sitting here in lovely Montecito, CA, and have just kicked off &lt;a href="http://ansibleworks.com"&gt;AnsibleWorks&lt;/a&gt;.  I&amp;#8217;ll be serving as CTO,with Said Ziouani, formerly of Red Hat and Eucalyptus, serving as CEO.   Great times are ahead.&lt;/p&gt;
&lt;p&gt;You can read a lot more on &lt;a href="http://blog.ansibleworks.com"&gt;blog.ansibleworks.com&lt;/a&gt; &amp;#8212; but I&amp;#8217;m hugely looking forward to taking Ansible to a whole new level and also continuing to continue [sic] all the great things that we&amp;#8217;ve done together as a group so far.&lt;/p&gt;
&lt;p&gt;The time has come to simplify IT to we can accelerate the pace of technological innovation &amp;#8212; not just configuration management, but software deployment, true multi-tier server orchestration, everything.  &lt;a href="http://ansibleworks.com"&gt;AnsibleWorks&lt;/a&gt; is going to be all about making that happen.   &lt;/p&gt;
&lt;p&gt;This is going to enable us to take Ansible forward in even more new directions, and also reach out to new audiences (you may wish to join us at &lt;a href="http://www.eventbrite.com/event/5593981750"&gt;AnsibleFEST&lt;/a&gt; in Boston this June, or stop by for a &lt;a href="http://www.ansibleworks.com/training/"&gt;training&lt;/a&gt; class) &amp;#8212; while helping enterprises take better control over their IT management.&lt;/p&gt;
&lt;p&gt;You can follow the company on twitter at &lt;a href="http://twitter.com/AnsibleWorks"&gt;@AnsibleWorks&lt;/a&gt; and me at &lt;a href="http://twitter.com/laserllama"&gt;@laserllama&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Warp factor nine, engage.&lt;/p&gt;</description><link>http://michaeldehaan.net/post/44672789597</link><guid>http://michaeldehaan.net/post/44672789597</guid><pubDate>Tue, 05 Mar 2013 20:52:00 -0500</pubDate></item><item><title>Preseeding Ubuntu 12.04 (for Ansible and other things)</title><description>&lt;p&gt;Preseeding Debian or Ubuntu can be a difficult experience compared to kickstart, which is a generally killer way to automate a distro installation.&lt;/p&gt;
&lt;p&gt;What follows in the gist below is an ansible tasks list (you&amp;#8217;ll have to do some legwork on your own) that templates out a preseed file for use with cobbler, and a template for a post.sh script that will run in the post of the preseed file to set up sudoers and authorized_keys.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://Gist%20preseed%20example"&gt;&lt;a href="https://gist.github.com/4707732"&gt;https://gist.github.com/4707732&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The real trick is that (A) the late_command line in a preseed can only be one line, and (B) much of the magic happens in a chroot, as indicated by &amp;#8216;in-target&amp;#8217;.&lt;/p&gt;
&lt;p&gt;Another major gotcha is that many items that appear to be setable in a preseed must still be set by kernel arguments.   The options I used, as shown from &amp;#8220;cobbler system dumpvars&amp;#8221; are shown in the gist.&lt;/p&gt;
&lt;p&gt;95% of the preseed syntax deals with base OS setup, and you will most definitely want to modify things, and search for {{ foo }} (Jinja2 variable substitution) and so on to replace values that were used in my templates that may not make sense for you.   Choose a sudoers configuration that is appropriate to your environment.&lt;/p&gt;
&lt;p&gt;The bottom line is that with sufficient legwork, yes, you can whip Ubuntu into shape, but kickstart remains a superior installation scripting solution.  &lt;/p&gt;</description><link>http://michaeldehaan.net/post/42279529597</link><guid>http://michaeldehaan.net/post/42279529597</guid><pubDate>Mon, 04 Feb 2013 11:22:19 -0500</pubDate></item><item><title>Ansible 1.0 released!</title><description>&lt;p&gt;Ansible 1.0 is a major milestone in the development of &lt;a href="http://ansible.cc"&gt;Ansible.cc&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;We have added 6 great new modules:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;pacman (package management for Arch linux)&lt;/li&gt;
&lt;li&gt;sysctl&lt;/li&gt;
&lt;li&gt;apt_key for installing new apt signing keys (Debian/Ubuntu)&lt;/li&gt;
&lt;li&gt;ec2_facts which contact the EC2 metadata service&lt;/li&gt;
&lt;li&gt;hg (Mercurial)&lt;/li&gt;
&lt;li&gt;pkgin (package management for Joyent Smart OS)&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;We have also acquired a wide variety of useful new features.  Some of the highlights include:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Support for alternative sudo implementations&lt;/li&gt;
&lt;li&gt;New conditionals &amp;#8216;when_failed&amp;#8217; and &amp;#8216;when_changed&amp;#8217;&lt;/li&gt;
&lt;li&gt;Being able to change the connection type in the middle of a playbook&lt;/li&gt;
&lt;li&gt;Task includes of infinite depth&lt;/li&gt;
&lt;li&gt;If you want hashes to &amp;#8220;merge&amp;#8221; instead of override each other when names collide, you can now configure that in the configuration file.&lt;/li&gt;
&lt;li&gt;Hostnames in the inventory file can now be indicated by alphabetic in addition to the previous numeric sequencing&lt;/li&gt;
&lt;li&gt;Inventory scripts can now define nested groups, just like the text file versions of inventory representations.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;This release also includes numerous new flags to the various modules in Ansible, including:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;The ability to use the &amp;#8216;raw&amp;#8217; module without a Python stack&lt;/li&gt;
&lt;li&gt;fixes to service detection, particularly on Ubuntu&lt;/li&gt;
&lt;li&gt;various improvements to the logic of the git module&lt;/li&gt;
&lt;li&gt;more data returned for the shell and command modules&lt;/li&gt;
&lt;li&gt;Various fixes around path expansion and relative path handling&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;The template engine also got a little smarter, making new variables like $template_name and $template_run_date available to annotate rendered templates.  Previously we had, and still have, variables like $ansible_managed that also help with this purpose.&lt;/p&gt;
&lt;p&gt;The EC2 module has gotten a lot of love, in particular from our friends at &lt;a href="http://www.eucalyptus.com/"&gt;Eucalyptus Systems&lt;/a&gt; and Seth Vidal from the &lt;a href="http://fedoraproject.org/"&gt;Fedora Project&lt;/a&gt;. It can now deploy multiple simultaneous instances and now is powered by boto, an excellent EC2 python library.&lt;/p&gt;
&lt;p&gt;Ansible has a major player in the open source configuration management and orchestration space too.   Just this week we&amp;#8217;ve passed the 1000 star/follower mark on &lt;a href="http://github.com/ansible/ansible"&gt;github&lt;/a&gt; and even more impressively were recognized by Black Duck Software as one of their &lt;a href="http://www.pcworld.com/article/2026718/10-open-source-projects-to-watch-this-year.html"&gt;2012 &amp;#8220;Rookies of the Year&amp;#8221;&lt;/a&gt; projects.   Over 10,000 people have seen the Ansible webpage in the last month.  We&amp;#8217;re currently one of the top watched Python projects on github this month too.  Exciting times, that I could not have predicted.&lt;/p&gt;
&lt;p&gt;I think there&amp;#8217;s a couple reasons for that.  (A) we are really liberating people by making it easy for them to handle hard to automate IT tasks and bringing some new capabilities that we previously not there before anywhere else, and (B) we have a really friendly, inclusive community that helps people of all skill levels and shares similar aesthetics about how to help each other.  We grow stronger from our collective knowledge.&lt;/p&gt;
&lt;p&gt;Thanks very much to everyone who has made this release, and all previous releases possible &amp;#8212; whether it&amp;#8217;s contributing a documentation fix, adding a new module, fixing a bug, contributing a core feature, helping a fellow user on IRC or the mailing list, or helping spread ansible at a local meetup, this is very much a community project, made for everyone.&lt;/p&gt;
&lt;p&gt;Contributors to this release with a change in git include: Daniel Hokka Zakrisson (79), Stephen Fromm (26), Michel Blanc (10), Dag Wieers (10), Tim Gerla (7), Seth Vidal (7), Jan-Piet Mens (7), Brian Coca (6), fdavis (5), Shaun Zinck (5), Gregory Duchatelet (5), Silviu Dicu (4), Norman J. Harman Jr (4), Lester Wade (4), Felix Sipma (4), willthames (3), afterburn (3), Lorin Hochstein (3), Les Aker (3), Junegunn Choi (3), Chelsea Robb (3), ron1 (2), jkleint (2), igor (2), Vincent Van der Kussen (2), Rodney Quillo (2), Pepe Barbe (2), Nandor Sivok (2), Jure Triglav (2), Juha Litola (2), Jayson Vantuyl (2), Brendan Taylor (2), Blair Zajac (2), vincent Van der Kussen (1), root (1), junyoung (1), diefans (1), davixx (1), Yeukhon Wong (1), Sergey Popov (1), Rune Kaagaard (1), Piotr Kweclich (1), Mark Theunissen (1), John Gosset (1), Jimmy Tang (1), Jeff Blaine (1), Javier Candeira (1), Gert Goet (1), Francis Besset (1), Francesc Esplugas (1), Christopher A. Snapp (1), Chris Berkhout (1), Bowe Strickland (1), Alexandre Bourget (1).  &lt;/p&gt;
&lt;p&gt;While I would like to thank everyone individually here, I cannot.  However Daniel Zakrisson deserves special thanks for fixing all sorts of issues in record time and knowing my own code better than myself, all the while being a tremendous resource in helping people with questions on IRC.&lt;/p&gt;
&lt;p&gt;This has been a fantastic first year for &lt;a href="http://ansible.cc"&gt;Ansible&lt;/a&gt; and I can only imagine the future will be even more exciting.  1.1 is going to bring &amp;#8220;check mode&amp;#8221; for all of you wanting dry run / comparison features, new options for handlers/notifiers, and many other things, many of which i can&amp;#8217;t even anticipate.  &lt;/p&gt;
&lt;p&gt;This last release was codenamed &amp;#8220;Eruption&amp;#8221;, following our Van Halen song themed release history.  It seemed fitting for a 1.0 and Ansible starting to get more mainstream.   A user suggested &amp;#8220;Mean Street&amp;#8221; for 1.1, and it is one of my favorite Van Halen albums, &amp;#8220;Fair Warning&amp;#8221;. &lt;/p&gt;
&lt;p&gt;Just as the CBS Sunday Morning show leaves you with pictures of little fluffy animals in the field and chirping bird effects, we too will leave you with a scene. I leave you with the chorus to Van Halen&amp;#8217;s Mean Street.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;It&amp;#8217;s always here and now, my friend &lt;/em&gt;&lt;br/&gt;&lt;em&gt; It ain&amp;#8217;t once upon a time &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;It&amp;#8217;s all over but the shouting &lt;/em&gt;&lt;br/&gt;&lt;em&gt; I&amp;#8217;ll come and I&amp;#8217;ll take what&amp;#8217;s mine&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt; We&amp;#8217;re searching for the latest thing &lt;/em&gt;&lt;br/&gt;&lt;em&gt; A break in this routine &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Talkin&amp;#8217; some new kicks &lt;/em&gt;&lt;br/&gt;&lt;em&gt; Ones like you ain&amp;#8217;t never seen&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;</description><link>http://michaeldehaan.net/post/42070248518</link><guid>http://michaeldehaan.net/post/42070248518</guid><pubDate>Fri, 01 Feb 2013 22:04:00 -0500</pubDate></item><item><title>Experiences with Cobbler deploying Ubuntu Precise (12.04 LTS)</title><description>&lt;p&gt;It&amp;#8217;s been a long time since I&amp;#8217;ve worked with Cobbler in any serious capacity.   While I encouraged the original Debian/Ubuntu support to happen, I never really used it for anything but Fedora, CentOS, and RHEL. So, when the very first thing I had to do for my new job was to fight some preseeds and set up a new Cobbler server, here&amp;#8217;s a few things I encountered. This may be helpful to others doing the same.&lt;/p&gt;
&lt;p&gt;apt-get install cobbler on Ubuntu Precise (12.04 LTS) installs Cobbler 2.2, not 2.4, out of the box.  This is mostly ok, though at minimum the &amp;#8220;reboot&amp;#8221; power management command is broken in this release.   I&amp;#8217;m not really sure what else in 2.4 I wanted, but suspect LTS won&amp;#8217;t update it.&lt;/p&gt;
&lt;p&gt;As a nice surprise, the /etc/cobbler/settings file is generated by the package rather than packaged in a default state.  As a result, the initial &amp;#8216;cobbler check&amp;#8217; command only reported one thing I needed to change, which to me was extremely well done, as a typical Red Hat install will not try to do things like fill in your hostname.  I still recommend reading /etc/cobbler/settings after installing to make sure it has what you want in it though.&lt;/p&gt;
&lt;p&gt;Some initial confusion out of the gate &amp;#8212; Ubuntu mislabels the /etc/cobbler template files for the preseed menu to be &amp;#8220;Ubuntu Maas&amp;#8221; even when MAAS is not installed. This is easy to fix by editing the template, but strikes me as an undesirable misappropriation of the project similar to the way I felt about Ubuntu Orchestra mostly being Cobbler-web.   I don&amp;#8217;t like folks taking credit from the community for software they didn&amp;#8217;t write.&lt;/p&gt;
&lt;p&gt;cobbler import works mostly as advertised on the Ubuntu 12.04 LTS DVD ISO.   That was great.  Glad to see that going after many many years of seeing people ask questions about why that didn&amp;#8217;t work as well as the Red Hat ones!   Awesome.  &lt;/p&gt;
&lt;p&gt;Of course, cobbler just drives PXE, and you still have kickstart/preseed/autoyast to deal with.   Preseeds are nicer than AutoYAST (not XML), but WAY more painful than Anaconda kickstarts, due to needs of stringing together late commands and needing to be overly verbose about the answers to lots of questions.   &lt;a href="https://github.com/CiscoSystems/puppet-cobbler/blob/master/templates/preseed.erb"&gt;Here&amp;#8217;s a link to one work is using&lt;/a&gt;.   &lt;/p&gt;
&lt;p&gt;On top of that, Precise 12.04 LTS exhibits a bug where the network interface set in the preseed is ignored and can only be set by kernel arguments.   Seems like it should have an option to just use the boot interface like Anaconda does.&lt;/p&gt;
&lt;p&gt;&amp;#8220;cobbler system edit &amp;#8212;name=foo &amp;#8212;kopts=&amp;#8221;netcfg/choose_interface=eth1&amp;#8221; fixes the problem&lt;/p&gt;
&lt;p&gt;Finally, the installer doesn&amp;#8217;t handle old LVM data well at all, requireing the following hack in the preseed that is, as far as I can tell, completely impossible for standard users to do manually without launching into the shell.&lt;/p&gt;
&lt;p&gt;The fix is just:&lt;/p&gt;
&lt;p&gt;d-i partman/early_command string vgs &amp;#8212;separator=: &amp;#8212;noheadings | cut -f1 -d: | while read vg&amp;#160;; do vgchange -an $vg&amp;#160;; done&amp;#160;; pvs &amp;#8212;separator=: &amp;#8212;noheadings | cut -f1 -d: | while read pv&amp;#160;; do pvremove -ff -y $pv&amp;#160;; done&lt;/p&gt;
&lt;p&gt;The sad part is, it has to be all on one line.&lt;/p&gt;
&lt;p&gt;Very minor &amp;#8212; I noticed the logrotate file for cobbler was also not packaged, so I picked up the one from upstream so logs wouldn&amp;#8217;t grow unbounded.   Still, it seemed like packaging was kind of quick and dirty in that regard and people didn&amp;#8217;t really use it in production, or didn&amp;#8217;t care about really huge log files.   I&amp;#8217;ll admit the logging in Cobbler is not very good anyway, and in 2.0, it is pretty noisy and needs controls &amp;#8212; even so, more need for logrotate.&lt;/p&gt;
&lt;p&gt;Another minor packaging error was that cobbler-register wasn&amp;#8217;t packaged, but some random NIH &amp;#8220;cobbler-enlist&amp;#8221; tool was instead, which was inexplicably a C program.  I am guessing this was used for MAAS at one point, but it seems misnamed, and I think all binaries packaged by the upstream package should be there.  Koan also didn&amp;#8217;t seem to be available, but I didn&amp;#8217;t need it &amp;#8212; guests are going to be installed via openstack and I don&amp;#8217;t need &amp;#8212;replace-self because I have actual power management hardware.  I filed a bug about this as well as the above issues.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ll note that the Cobbler 2.2 default Ubuntu preseed was pretty bad and didn&amp;#8217;t result in an automated install &amp;#8212; this is an upstream thing, not a packaging thing.  I have higher hopes for the one packaged with 2.4, and am hoping pxe_just_once and all that just works &amp;#8212; it would be much cooler if all the network templating stuff did as well &amp;#8212; but if not, that&amp;#8217;s ok.  Work has patched up our preseed pretty well to make things run all of the triggers and so forth.&lt;/p&gt;
&lt;p&gt;In all, I think things worked pretty well and most problems lie with the Ubuntu installer &amp;#8212; and Cobbler is able to manage pretty well, and the packaging for Ubuntu vs EPEL/Fedora rates a solid B.   App worked pretty darn well, really.&lt;/p&gt;
&lt;p&gt;In all, I&amp;#8217;m glad to see Cobbler in such a great state so many years later.  I don&amp;#8217;t quite agree with the additions of the &amp;#8220;config management&amp;#8221; features in Cobbler (they are pretty basic and you will have to replace them pretty quick, plus don&amp;#8217;t have good ways to manage them), but all in all, I&amp;#8217;d still pick Cobbler again for a new project, no question&amp;#8230;. and I&amp;#8217;m happy to see Cobbler+Debian has gotten a lot easier to install.  Cross platform is important and a huge factor in doubling the size of your community.&lt;/p&gt;
&lt;p&gt;Now if only Ubuntu and Debian would just switch completely over to Anaconda + kickstart, things would be much easier!&lt;/p&gt;</description><link>http://michaeldehaan.net/post/39496835943</link><guid>http://michaeldehaan.net/post/39496835943</guid><pubDate>Wed, 02 Jan 2013 15:34:00 -0500</pubDate></item><item><title>Thoughts on Approaches to Software Development</title><description>&lt;p&gt;Why do we do the things we do?   If we think about what we like, patterns start to emerge.   Am I in software because I like typing curly brackets?   Maybe it starts that way, but it&amp;#8217;s definitely not that.  In some essence, I like software because it&amp;#8217;s some sort of abstract organizational logical space, essentially math &amp;#8212; I like the design and planning &amp;#8212; the code is fun but a means to an end.  But it&amp;#8217;s more than that too.  I like it most because it&amp;#8217;s a creative space and I am addicted to whiteboards and bouncing ideas off of people and seeing where those ideas go.  I like being surprised.&lt;/p&gt;
&lt;p&gt;At a larger scale, I like to make things that cause ripple effects, that bring people together that wouldn&amp;#8217;t otherwise work together.   I like to work with people that can teach me things, and enable others to bring ideas forward in ways they didn&amp;#8217;t think they could before.   I am most inspired not by what I create, but what I see others evolve creations into, where things are used, and the things those things enable &amp;#8212; in many cases much more impressive than what the individual cogs did themselves.   This the dynamic that I think I&amp;#8217;m always searching for, and it sometimes can struggle to survive in industry environments, or even in personal projects.   We worry about small technical details too much, and miss the larger picture, or the experience and process of creation.&lt;/p&gt;
&lt;p&gt;Some of the best parts in working in open source spaces are to see people I&amp;#8217;ve worked with start other new projects, or come up with completely new ideas I didn&amp;#8217;t expect, that play off my own.   Success criteria is not the software feature, but a byproduct.  Did your idea about how to make XYZ faster lead to a scientific discovery, or ultimately end up helping someone (or several thousand people) in some country you have never been to save 15 minutes on their daily commute?   Did your program play a really small part in that movie you really liked?   Do you have bits of code running on all the continents?  (passes given for Antarctica, that one is hard).&lt;/p&gt;
&lt;p&gt;In earlier days as a developer I cared more about showing what I personally could do, lines of code, impressiveness of code, impact.   Ultimately, code is code, and if you look at code you wrote several years ago, you are hopefully going to hate it and realize you didn&amp;#8217;t know a whole lot.   That code in the past doesn&amp;#8217;t matter too much to your users or fellow contributors, nor should it matter much to you.  The most important contributions are your contributions to the flow of ideas, and only some of those come in code form.&lt;/p&gt;
&lt;p&gt;The change you make in an organization is not what you personally execute, it&amp;#8217;s what you enable everyone to execute on.   Good &amp;#8220;agility&amp;#8221; is not a project management idea or a way to get metrics, it&amp;#8217;s the idea that anyone, anywhere, can make an idea that, if correct, can actually change the way you are doing everything.  It is the idea that no decision is sacred.   However, in many cases, it&amp;#8217;s also knowing that some decisions are best made and moved on from, because there are more important decisions that need thinking over.   Getting stuck in a democratic discussion about a very small technical component is not agile either when it means you aren&amp;#8217;t maximizing impact elsewhere &amp;#8212; for your customers and users.&lt;/p&gt;
&lt;p&gt;Similarly, we should share what we know with others, but we should not hide behind the impression of absolute conviction, if that would allow us to learn and evolve less.   Help transfer knowledge and everyone grows as a result.  The best customer and user relationships are the ones where you can learn as much from the customer or user as they can learn from you.   They are transformative.   And most of the complaints about the quality of your app?  Learn and grow from them.   Those first impressions are rarely inaccurate.   Occasionally, you&amp;#8217;ll encounter bias, but realize everyone&amp;#8217;s brains do work differently and it&amp;#8217;s hard to please everyone.&lt;/p&gt;
&lt;p&gt;When running or creating software projects, create places that breed ideas. To paraphrase the Lord of the Rings somewhat, it is dangerous when you create a project because you don&amp;#8217;t know what it will turn into.  In any event, I think what you create is an environment where people create, rather than someone&amp;#8217;s own exclusive vision.&lt;/p&gt;
&lt;p&gt;Perhaps it&amp;#8217;s systemic in Western software development (seems to be), but I think there&amp;#8217;s an over emphasis in needing to be &amp;#8216;right&amp;#8217; that we need to try to squash.   We need to learn not to over stress smaller parts of the equation and to think more about the larger parts.  We have to continually squash the idea that all of the good ideas need to be ours, or that we need to build something of our own because this other guy&amp;#8217;s code didn&amp;#8217;t do some crazy small facet of something.  Nope, that other guy was smart to!  He&amp;#8217;s probably reasonable!  He probably accepts patches as well.   He might teach you something.&lt;/p&gt;
&lt;p&gt;It also becomes easier as developers if we consider that the stream of ideas is our product, not just the code.   It&amp;#8217;s often easy to get attached to code, and that&amp;#8217;s a trap.&lt;/p&gt;
&lt;p&gt;Teamwork in software contexts can be hard because if &amp;#8220;Hackers and Painters&amp;#8221; is an apt analogy, none of the European masters were that into collaborative painting &amp;#8212; how do you hold your own creative unified vision in that vein?   Maybe it&amp;#8217;s more like a group exhibition than a singular work.  As you work, resist the urge to paint over other people&amp;#8217;s work (let them feel creative too!), look into APIs and design by contract, but also don&amp;#8217;t view your code as something that must survive because it was your creation.&lt;/p&gt;
&lt;p&gt;But what we are doing is not producing code, it&amp;#8217;s more of a classical salon, where we are producing ideas.   Code is the absolute least interesting thing involved in what we create, and when we get bogged down in &amp;#8220;software craftsmenship&amp;#8221; we often loose focus about what the product really is, or what impact it really causes.&lt;/p&gt;
&lt;p&gt;A summary of advice from this rambling post?  Maximize ripple effects, in ways that you can magnify others to do more.   Create frameworks that create accelerating forces.   Enable yourself to bend.   Learn from everyone and share what you know with everyone.   Learn where you were wrong before.   It&amp;#8217;s much better than trying to be an awesome cyber ninja rockstar or what have you.   Judge your day by asking both &amp;#8220;what did I learn&amp;#8221; and &amp;#8220;what did I share with someone&amp;#8221;.&lt;/p&gt;
&lt;p&gt;If we do that, SkyNet happens faster (it will have more help), and maybe, when SkyNet happens, it will like us.&lt;/p&gt;</description><link>http://michaeldehaan.net/post/36242750291</link><guid>http://michaeldehaan.net/post/36242750291</guid><pubDate>Wed, 21 Nov 2012 18:31:00 -0500</pubDate></item><item><title>Tips on Using Debuggers With Ansible</title><description>&lt;p&gt;This blog post is intended to help some folks on the mailing list.  &lt;/p&gt;
&lt;p&gt;Because we strive to keep Ansible simple, it can attract contributions from a wide range of people, who are learning Python, and then want to start doing more and more with Python.  This is great!  One thing that is not well covered by most Python resources is how to use the debugger, so I wanted to share this with everyone. With Ansible, there are also some specific things that go on you also need to be aware of when using the debugger.&lt;/p&gt;
&lt;p&gt;Most people using python debuggers use &amp;#8220;pdb&amp;#8221;. This is a great debugger, but one we frequently use at work for Django and other things is &amp;#8220;epdb&amp;#8221;. The reason to use &amp;#8220;epdb&amp;#8221; over &amp;#8220;pdb&amp;#8221; is epdb contains a remote debugging feature that can sometimes be useful for debugging &amp;#8220;over the wire&amp;#8221; to processes where you don&amp;#8217;t have console access, as opposed to just debugging foreground applications. You may still wish to learn pdb.&lt;/p&gt;
&lt;p&gt;(What is super confusing is we&amp;#8217;re talking about &lt;a href="http://pypi.python.org/pypi/epdb/0.12" title="epdb"&gt;this&lt;/a&gt; epdb, not &lt;a href="http://code.google.com/p/epdb/"&gt;this&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;For starters, install epdb.   Pip will get the right one.&lt;/p&gt;
&lt;pre&gt;pip install epdb&lt;/pre&gt;
&lt;p&gt;&lt;!-- more --&gt;&lt;/p&gt;
&lt;p&gt;Next, in the place of the code where you are curious about, add a breakpoint. A local breakpoint is set with &amp;#8220;.st()&amp;#8221; like so:&lt;/p&gt;
&lt;pre&gt;import epdb
# ...
def some_function():
    x = some_random_object.something_interesting()
    epdb.st()
&lt;/pre&gt;
&lt;p&gt;When you run an interactive console program, this would launch you into the debugger.  If you are curious about the properties of x, you can do things like:&lt;/p&gt;
&lt;pre&gt;&amp;gt; dir(x)&lt;/pre&gt;
&lt;p&gt;And that will print out the methods and variables contained in x. Similarly, if x has an attribute bar, you can explore that as well:&lt;/p&gt;
&lt;pre&gt;&amp;gt; dir(x.bar)&lt;/pre&gt;
&lt;p&gt;And of course much more is possible. One gotcha when doing this with Ansible is that ansible by default runs things in parallel chunks, with the default value of forking being 5 parallel processes. This will interfere with your ability to debug things easily, so when debugging, run ansible like so:&lt;/p&gt;
&lt;pre&gt;ansible-playbook foo.yml --forks 1
&lt;/pre&gt;
&lt;p&gt;Another useful trick, possibly of use when debugging ansible modules is epdb&amp;#8217;s remote debugging feature. Instead of &amp;#8220;.st()&amp;#8221;, set the breakpoint as follows:&lt;/p&gt;
&lt;pre&gt;epdb.serve()
&lt;/pre&gt;
&lt;p&gt;From there, connect to the remote machine via regular command line SSH and do:&lt;/p&gt;
&lt;pre&gt;python -c "import epdb; epdb.connect()"&lt;/pre&gt;
&lt;p&gt;And you will then begin debugging the process &amp;#8220;over the wire&amp;#8221;.  Note that if the process does anything to daemonize itself and rewrite standard error or standard out, this will usually foul up the debugger. This is really not a problem with debugging Ansible modules, but you may encounter it later.&lt;/p&gt;
&lt;p&gt;There are some other remote debugging solutions posted on sites like Stack Overflow, but most seem to require some layer of custom coding, so it&amp;#8217;s nice to have this in a more or less canned solution.&lt;/p&gt;
&lt;p&gt;In summation, (A) always use &amp;#8212;forks 1 when debugging ansible, as it will make your life easier, (B) it may be interesting to explore remote debuggers for testing modules.  By remote, we do not mean server to client so much, but the ability to connect to a non-foreground process.&lt;/p&gt;</description><link>http://michaeldehaan.net/post/35403909347</link><guid>http://michaeldehaan.net/post/35403909347</guid><pubDate>Sat, 10 Nov 2012 08:25:00 -0500</pubDate></item><item><title>Music Theory with Python</title><description>&lt;p&gt;A while back I was working on a Ruby music theory library as a side project, and more recently heard about Mingus (a similar Python project) at PyCarolinas.  Mingus happens do most everything I was shooting for with my Ruby project, with the only downside being it&amp;#8217;s not very object oriented, and the huge upside being it&amp;#8217;s basically complete, where mine was not &amp;#8212; though admittedly, I was doing it to explore algorithmic composition more than anything.&lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s a pretty simple example of printing out a scale chart and the major/minor chords in the various scales.&lt;/p&gt;
&lt;p&gt;If you are interested in Mingus, check it out on &lt;a href="http://code.google.com/p/mingus/"&gt;Google Code&lt;/a&gt;.&lt;/p&gt;
&lt;pre&gt;# simple demo of mingus -- &lt;a href="http://code.google.com/p/mingus"&gt;http://code.google.com/p/mingus&lt;/a&gt;
# a python music theory library&lt;br/&gt;#&lt;br/&gt;# (C) Michael DeHaan, 2012&lt;br/&gt;# LICENSE: public domain&lt;br/&gt;&lt;br/&gt;import mingus.core.notes as notes
import mingus.core.diatonic as diatonic
import mingus.core.intervals as intervals
import mingus.core.chords as chords
import mingus.core.scales as scales

all_keys = diatonic.basic_keys
all_scales = [ 'diatonic', 'natural_minor', 'harmonic_minor', 'melodic_minor' ]

def ppc(chord):
    ''' print a chord nicely, without it looking like an array '''
    chord = [ "%-02s" % n for n in chord ]
    return " ".join(chord)

def simplify(chord):
    ''' I don't like reading things like C## and notes.remove_redundant_accidentals doesn't work '''
    if type(chord) == list:
        return [ notes.int_to_note(notes.note_to_int(n)) for n in chord ]
    return simplify([chord])[0]

# for all scales I want to print out
for scale in all_scales:
    
    # run the scale in all keys
    for key in all_keys:

       # print the header
       print "%s %s" % (scale, key)
       print "*****"

       # get the notes in the scale
       scale_notes = getattr(scales, scale)(key)

       # print each note, along with the major and minor chord
       # for each
       for note in scale_notes:

           print "%-15s | %-15s | %-15s" % (
               simplify(note),
               ppc(simplify(chords.major_triad(note))),
               ppc(simplify(chords.minor_triad(note)))
           )

       print ""
    print ""&lt;br/&gt;&lt;br/&gt;&lt;br/&gt; &lt;/pre&gt;</description><link>http://michaeldehaan.net/post/35237486013</link><guid>http://michaeldehaan.net/post/35237486013</guid><pubDate>Wed, 07 Nov 2012 19:45:00 -0500</pubDate></item><item><title>Interfacer is an elegant way to write nested CLIs in Python</title><description>&lt;p&gt;One of my apparent occupational hazards is the need to write a lot of command line tools.   I feel one of the best I&amp;#8217;ve ever written was the one for &lt;a href="http://cobbler.github.com"&gt;Cobbler&lt;/a&gt;, because it was a multi level command line. This is not something that is provided by the stock command line libraries used in Python. Further, it was quasi-modular, in that I could extend it by adding my own modules to it.&lt;/p&gt;
&lt;p&gt;You could do things like:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;cobbler&lt;/li&gt;
&lt;li&gt;cobbler distro&lt;/li&gt;
&lt;li&gt;cobbler distro add&lt;/li&gt;
&lt;li&gt;cobbler distro edit&lt;/li&gt;
&lt;li&gt;cobbler systems [&amp;#8230;]&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;By being &amp;#8220;multi-level&amp;#8221;, the CLI allowed for grouping of similar commands &amp;#8220;editing a distro&amp;#8221;, &amp;#8220;adding a distro&amp;#8221;, in a bucket of like command line items (distros, systems, etc).&lt;/p&gt;
&lt;p&gt;When building a new command line tool for &lt;a href="http://rpath.com"&gt;rPath&lt;/a&gt;, I wanted similar functionality, but to be able to release the core as a self-contained open source project. An example of why is that we can release a command line tool and allow a user to write their own extensions that make it still feel like a cohesive part of the larger command line.  Further, the next time someone wants to write a multi-level command line tool, they don&amp;#8217;t have to start from scratch.&lt;/p&gt;
&lt;p&gt;This work is now available on github as &lt;a href="http://github.com/mpdehaan/interfacer"&gt;Interfacer&lt;/a&gt;.&lt;/p&gt;</description><link>http://michaeldehaan.net/post/34114912375</link><guid>http://michaeldehaan.net/post/34114912375</guid><pubDate>Mon, 22 Oct 2012 16:25:00 -0400</pubDate></item><item><title>Ansible 0.8 Released!  Prepare for 0.9!</title><description>&lt;p&gt;I&amp;#8217;ve just finished releasing &lt;a href="http://ansible.cc"&gt;Ansible&lt;/a&gt; 0.8, which is, coincidentally about 8 months from the start of our project. Growth has been, to put it bluntly, astronomically defying my expectations. The need to get up early to attend to 10 pull requests from Europe before the morning compute is simply been an amazing experience. &lt;/p&gt;
&lt;p&gt;We&amp;#8217;ve accumulated over 100 contributors, and are soon approaching 700 followers on github.  The mailing list is also huge and busy. Ideas are everywhere. It has been a wild ride. Thank you all for being a part of it.&lt;/p&gt;
&lt;p&gt;0.8 brings a lot of features form a lot of hard work from many individuals.&lt;/p&gt;
&lt;p&gt;While the full breadth is summarized in the &lt;a href="https://github.com/ansible/ansible/blob/devel/CHANGELOG.md"&gt;changelog&lt;/a&gt;, a few things are worth pointing out.&lt;/p&gt;
&lt;p&gt;Fireball Mode &amp;#8212; This is a 0mq accelerated connection type. While Ansible manages by SSH by default, and requires no daemons to manage your remote systems, fireball mode uses ansible to distribute an ephemeral time limited daemon that offers EXCEPTIONALLY fast connections, all encrypted over AES using shared keys exchanged over SSH as a secure channel. For those willing to accept the additional temporary daemon, it flies like no other. Using this with &amp;#8212;forks 50, and your infrastructure gets managed in no time. &lt;/p&gt;
&lt;p&gt;Playbooks can now import playbooks in other directories and those can import tasks in other directories relative to them. This allows for far greater options in terms of organization of how orchestration rules are defined.&lt;/p&gt;
&lt;p&gt;There is now a &amp;#8220;pause&amp;#8221; module (courtesy Tim Bielawa) for waiting for a defined amount of time or until a user decides to proceed. Ansible is not just a configuration management tool, it can be used to run a wide variety of processes, and the idea that a human may occasionally be required is now well handled. In addition there are also some other modules added for managing INI files and crontabs. Ansible now allows pluggablity of &amp;#8220;server side actions&amp;#8221;, like pause, so users can also write their own server side actions.&lt;/p&gt;
&lt;p&gt;There&amp;#8217;s also now a &amp;#8220;lookup plugin&amp;#8221; facility, which is used to implement, as a first example, &amp;#8220;with_fileglob&amp;#8221;, which is a way of easily enumerating a local directory for transfer to a remote.   It&amp;#8217;s great for templates, copying files, or transferring SSH keys. There will be many more modules using this facility in 0.9.&lt;/p&gt;
&lt;p&gt;One of the behind the scenes things that many people won&amp;#8217;t notice is that our module docs are now completely auto-generated, which was spearheaded by Jan Piet Mens. This is a great addition because it means when modules are improved or added, it doesn&amp;#8217;t take a seperate pull request to update the docs project. This means documentation is always going to be up to date and consistent.  &lt;/p&gt;
&lt;p&gt;Dag Wieers and Jeroen Hoekx have also started the &lt;a href="https://github.com/ansible/ansible-provisioning"&gt;ansible-provisioning&lt;/a&gt; project, which I have high hopes for.  If you have ideas for it, please stop by the mailing list.&lt;/p&gt;
&lt;p&gt;And now, without further ado, Ansible 0.9 begins, codenamed &amp;#8220;Dreams&amp;#8221; (keeping with the Van Halen songs motif). Among the major goals for 0.9 include the new &amp;#8220;when&amp;#8221; operator, which will provide syntactic sugar around conditional operations (we already have &amp;#8220;only_if&amp;#8221;), continued performance enhancements, the evolution of the Ansible REST API, and lots of other shiny things.&lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s a list of all the great people that helped bring you 0.8, &amp;#8220;Cathedral&amp;#8221;.  (Apologies again as gitstat massacres diacritics).&lt;/p&gt;
&lt;p&gt;Jan-Piet Mens (43), Daniel Hokka Zakrisson (40), Dag Wieers (39), Tim Bielawa (37), Marco Vito Moscaritolo (27), Lorin Hochstein (18), Stephen Fromm (14), Wes Johnson (6), Peter Sankauskas (6), Dane Summers (6), Brian Coca (6), Nigel Metheringham (5), Matt Wright (5), Jeroen Hoekx (5), Aurelien Bondis (5), Seth Vidal (4), Matthew Johnson (4), Mark Theunissen (4), Luke Antins (4), Jonathan Palley (4), John Callender (4), Aleksej Romanov (4), Timothy Appnel (3), Serge van Ginderachter (3), Romeo Theriault (3), Michel Blanc (3), John Kleint (3), Jesse Andrews (3), Derek Carter (3), willthames (2), Philipp Grau (2), Pepe Barbe (2), Michael Lambert (2), Maxim Burgerhout (2), Matt Coddington (2), Dietmar Schinnerl (2), Chris Geddings (2), Ashley Penney (2), Ali Asad Lotia (2), mxxcon (1), Stijn Opheide (1), Rodney Quillo (1), Ralph Bean (1), Piotr Kweclich (1), Petetin Ludovic (1), Nathan A. Feger (1), Max Spransy (1), Matthew Williams (1), Matt Klich (1), Martijn Koster (1), Marko Mikulicic (1), Ludovic Claude (1), Lennie (1), Dave Coutu (1), Daniel Neri (1), Collin Allen (1), Alan Orth (1), ADRIyas (1)&lt;/p&gt;
&lt;p&gt;Stay tuned.   Exciting things are happening in the world of systems management.&lt;/p&gt;</description><link>http://michaeldehaan.net/post/33928796137</link><guid>http://michaeldehaan.net/post/33928796137</guid><pubDate>Fri, 19 Oct 2012 21:25:00 -0400</pubDate></item><item><title>Photo</title><description>&lt;img src="http://25.media.tumblr.com/tumblr_mbwo9shvGI1rpzatso1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;</description><link>http://michaeldehaan.net/post/33601260550</link><guid>http://michaeldehaan.net/post/33601260550</guid><pubDate>Sun, 14 Oct 2012 19:08:14 -0400</pubDate></item><item><title>Photo</title><description>&lt;img src="http://24.media.tumblr.com/tumblr_mb627dqjXV1rpzatso1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;</description><link>http://michaeldehaan.net/post/32592984518</link><guid>http://michaeldehaan.net/post/32592984518</guid><pubDate>Sun, 30 Sep 2012 10:14:01 -0400</pubDate></item><item><title>Photo</title><description>&lt;img src="http://25.media.tumblr.com/tumblr_mb62658V2x1rpzatso1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;</description><link>http://michaeldehaan.net/post/32592949707</link><guid>http://michaeldehaan.net/post/32592949707</guid><pubDate>Sun, 30 Sep 2012 10:13:16 -0400</pubDate></item><item><title>Ansible learns to fly -- 0mq that sets up itself</title><description>&lt;p&gt;So one of my favorite things about &lt;a href="http://ansible.cc"&gt;Ansible&lt;/a&gt; is that it doesn&amp;#8217;t require any daemons to be installed on the machines you manage.  It&amp;#8217;s great for &amp;#8220;brown field&amp;#8221; deployments where you have to take over a lot of existing infrastructure, as well as cases where you have pristine cloud nodes running a bare-bones OS you want to start configuring and deploying software on it.&lt;/p&gt;
&lt;p&gt;While we&amp;#8217;re still in the process of optimizing the SSH internals of Ansible (Paramiko and native SSH with ControlPersist are both pretty good, but we can do more to reduce the number of ops we have to call, and in Paramiko&amp;#8217;s case, to try to leave connections open a bit longer to emulate ControlPersist) &amp;#8212; I had an interesting idea today which somehow I managed to code up in a few hours :)&lt;/p&gt;
&lt;p&gt;That idea is this &amp;#8212; We can bootstrap a temporary message bus daemon over SSH. &lt;/p&gt;
&lt;p&gt;The result is you have a systems management program that can achieve message-bus style speed and efficiency without the pain of keysigning and the NTP/DNS issues that often come along for the ride.   Func&amp;#8217;s certmaster for instance was pretty annoying as if your DNS or NTP was fscked up, things usually didn&amp;#8217;t work.  This is true of other systems management apps as well, and reprovisioning can cause problems.  Here, we completely avoid this problem.&lt;/p&gt;
&lt;p&gt;While what I have now is just a very rough prototype (meaning we can probably eke out some more speed still and we need to do things to make it nicer in multi-tenant cases), the Ansible-playbook syntax looks like this:&lt;/p&gt;
&lt;pre&gt;---
- hosts: all
  gather_facts: False
  tasks:
    - action: fireball


- hosts: all
  connection: fireball
  tasks:
    - action: shell echo 'I am running over a message bus now'    
&lt;/pre&gt;

&lt;p&gt;The first step deploys the ephemeral daemon (so you don&amp;#8217;t eat resources when you aren&amp;#8217;t managing the machine) and then you can address it however.   The fireball will run as whatever user you tell it to.  What&amp;#8217;s pretty cool is it&amp;#8217;s a pretty lightweight implementation, with fireball implemented as a connection plugin and module combo with only minimal tweaks to the core.&lt;/p&gt;
&lt;p&gt;Stay tuned for more details and upgrades on this.&lt;/p&gt;</description><link>http://michaeldehaan.net/post/32378722265</link><guid>http://michaeldehaan.net/post/32378722265</guid><pubDate>Thu, 27 Sep 2012 00:15:00 -0400</pubDate></item><item><title>Ansible 0.7 Released</title><description>&lt;p&gt;Warning: you had better sit down.  This may be too exciting for you. No, it&amp;#8217;s not the Democratic National Convention!   Though that&amp;#8217;s also tonight.  &lt;a href="http://ansible.github.com"&gt;Ansible&lt;/a&gt; 0.7 is out!&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ve written some about those features previously &lt;a href="http://michaeldehaan.net/post/29926483462/orchestration-extensibility-a-preview-of-ansible-0-7" title="here"&gt;here&lt;/a&gt;. But not all of them! You can also see the 0.7 changelog &lt;a href="https://github.com/ansible/ansible/blob/devel/CHANGELOG.md"&gt;here&lt;/a&gt; for the complete list.&lt;/p&gt;
&lt;p&gt;Just want some highlights?&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;9 New modules!  Count &amp;#8216;em! pip! easy_install! apt_repository! seboolean! selinux!  subversion! nagios! wait_for! lineinfile! In addition, other core modules have been improved and sport new options.&lt;/li&gt;
&lt;li&gt;Ansible is not just for deployments, but it really kills at multi-tier deployments now. Want to take 5 nodes at a time out of a load balanced pool, signal nagios that they are under a maintaince window, work on them, and then put them back in the pool? Super easy to wire up in 0.7.&lt;/li&gt;
&lt;li&gt;Avoid writing facts to get information about hosts! Use the new &amp;#8216;register&amp;#8217; keyword to run commands and use the results as variables.&lt;/li&gt;
&lt;li&gt;Everything&amp;#8217;s much more pluggable and extensible. Want to store Ansible results in your favorite monitoring system or make it send emails? Easy. Want ansible to make &amp;#8216;pew pew&amp;#8217; lasergun noises on OS X? We already wrote a plugin for that.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;a href="http://ansible.github.com"&gt;Read the docs for everything it can do.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Adoption is pretty staggering lately. Once again this month, we have more active developers than two of the leading Ruby frameworks, which is pretty cool. Tons of new users! I wish I could share all the users using things, but I can&amp;#8217;t&amp;#8230; but I can share a small list of those that have opted in &lt;a href="http://ansible.github.com/who_uses_ansible.html"&gt;here&lt;/a&gt;.    &lt;/p&gt;
&lt;p&gt;The great thing about our international uptake is I frequently get 8 pull requests while I&amp;#8217;m asleep! Thank you very much to everyone who sent in code for 0.7:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Stephen Fromm (16)&lt;/li&gt;
&lt;li&gt;Tim Bielawa (15)&lt;/li&gt;
&lt;li&gt;Pepe Barbe (14)&lt;/li&gt;
&lt;li&gt;Matt Wright (12)&lt;/li&gt;
&lt;li&gt;Seth Vidal (11)&lt;/li&gt;
&lt;li&gt;Daniel Hokka Zakrisson (10)&lt;/li&gt;
&lt;li&gt;Dietmar Schinnerl (6)&lt;/li&gt;
&lt;li&gt;Dane Summers (6)&lt;/li&gt;
&lt;li&gt;Anastasis Andronidis (6)&lt;/li&gt;
&lt;li&gt;Will Thames (6)&lt;/li&gt;
&lt;li&gt;Sundar Raman (4)&lt;/li&gt;
&lt;li&gt;Sebastien Bocahu (4)&lt;/li&gt;
&lt;li&gt;Jeroen Hoekx (4)&lt;/li&gt;
&lt;li&gt;Grzegorz Nosek (4)&lt;/li&gt;
&lt;li&gt;Ahmad Khayyat (4),&lt;/li&gt;
&lt;li&gt;Ingo Gottwald (3)&lt;/li&gt;
&lt;li&gt;Derek Carter (3)&lt;/li&gt;
&lt;li&gt;Dave Peticolas (3)&lt;/li&gt;
&lt;li&gt;Dag Wieers(3)&lt;/li&gt;
&lt;li&gt;Timothy Appnel (2),&lt;/li&gt;
&lt;li&gt;Mark Theunissen (2),&lt;/li&gt;
&lt;li&gt;Lorin Hochstein (2),&lt;/li&gt;
&lt;li&gt;Florian Diebold (2),&lt;/li&gt;
&lt;li&gt;Brian Coca (2),&lt;/li&gt;
&lt;li&gt;Sebastien Bocahu (1),&lt;/li&gt;
&lt;li&gt;Rodney Quillo (1)&lt;/li&gt;
&lt;li&gt;Maxim Burgerhout (1)&lt;/li&gt;
&lt;li&gt;Ludovic Claude (1)&lt;/li&gt;
&lt;li&gt;Jeremy Penner (1)&lt;/li&gt;
&lt;li&gt;Jan-Piet Mens (1)&lt;/li&gt;
&lt;li&gt;Dave Hatton (1)&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Also thanks to everyone that has helped out with docs, the mailing list, IRC, or sharing Ansible with others. I couldn&amp;#8217;t do it without you!&lt;/p&gt;
&lt;p&gt;Subscribe to the mailing list for news on Ansible 0.8!&lt;/p&gt;
&lt;p&gt;An additional note &amp;#8212; For those in the Southeastern United States, I will be presenting on Ansible at &lt;a href="http://blog.pycarolinas.org/post/30662488112/schedule-is-set"&gt;PyCarolinas on October 21st&lt;/a&gt; in Chapel Hill, North Carolina. If you&amp;#8217;re a user, be sure to say hi and we can go grab a LocoPop.&lt;/p&gt;</description><link>http://michaeldehaan.net/post/31024956936</link><guid>http://michaeldehaan.net/post/31024956936</guid><pubDate>Thu, 06 Sep 2012 20:15:00 -0400</pubDate></item><item><title>Photo</title><description>&lt;img src="http://24.media.tumblr.com/tumblr_m9knr6TkwK1rpzatso1_400.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;</description><link>http://michaeldehaan.net/post/30520569500</link><guid>http://michaeldehaan.net/post/30520569500</guid><pubDate>Thu, 30 Aug 2012 10:18:41 -0400</pubDate></item><item><title>NC Museum of Life And Science</title><description>&lt;p&gt;Taking the Fuji X-Pro1 to the Museum of Life and Science gave me a chance to use the  macro lens on some butterflies.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://photos.michaeldehaan.net/ncmls/e402e2f0c"&gt;&lt;img alt="Michael DeHaan: NC Museum of Life And Science &amp;amp;emdash; " src="http://photos.michaeldehaan.net/img/s4/v68/p1076768524-2.jpg" width="700"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;These are really this amazing blue color on the other side, but they really don&amp;#8217;t keep their wings open when they land.&lt;/p&gt;
&lt;p&gt;For more from Saturday, &lt;a href="http://photos.michaeldehaan.net/ncmls/h402e3caa#h402e2f0c"&gt;click here&lt;/a&gt; to start and then keep clicking to the right.   There&amp;#8217;s also this Breson-esque picture of a goat.&lt;/p&gt;</description><link>http://michaeldehaan.net/post/30265255145</link><guid>http://michaeldehaan.net/post/30265255145</guid><pubDate>Sun, 26 Aug 2012 16:53:00 -0400</pubDate></item><item><title>Orchestration &amp; Extensibility: A preview of Ansible 0.7</title><description>&lt;p&gt;In just a few weeks, &lt;a href="http://ansible.github.com"&gt;Ansible&lt;/a&gt; 0.7 will be released.&lt;/p&gt;
&lt;p&gt;Ansible is, without a doubt, the simplest deployment and config management tool to set up and use today, which leaves time for people to do interesting work &amp;#8212; setting up real things &amp;#8212; rather than fiddling with some complex framework. It recognizes that when rolling out web (and other)  infrastructure you are doing a lot more than just pushing config files &amp;#8212; you are interacting with a complex series of different systems, and, gosh darn it, order and when you do things often matters.&lt;/p&gt;
&lt;p&gt;0.7 takes those capabilities several steps further.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Orchestration!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;What seperates Ansible most from other tools is that it was designed for complex multi-machine orchestration environments from day one &amp;#8212; and doesn&amp;#8217;t require any additional software or agents on your remote machine. 0.7 takes the idea that you&amp;#8217;re not just dealing with one machine in a vacuum and makes it a central focus.&lt;/p&gt;
&lt;p&gt;The new &amp;#8216;serial&amp;#8217; directive to a playbook can be used to decide how many hosts should be executing a playbook in parallel on your infrastructure.  This means that if you want to do a rolling deployment of 1 host a time, or 5 at a time, or all in parallel &amp;#8212; you can decide that level of parallelism. If you pick &amp;#8220;5&amp;#8221;, your configuration will complete on only 5 hosts at a time, and they&amp;#8217;ll complete all the way through before moving on to the next 5. There&amp;#8217;s no danger of taking your infrastructure all down at once for an update. You&amp;#8217;re in control. Hosts aren&amp;#8217;t just going to check in and decide to &amp;#8220;do stuff&amp;#8221; when they feel like it.&lt;/p&gt;
&lt;p&gt;The new &amp;#8216;delegate_to&amp;#8217; directive is ideal for communicating with load balancers to take machines out of rotation and put them back &amp;#8212; or to speak with a monitoring service to signal an outage window. It allows you to say &amp;#8220;host over here, do X on behalf of this other host&amp;#8221;. It&amp;#8217;s pretty powerful stuff.   Combine that with &amp;#8216;serial&amp;#8217; and drop 5 machines out of a load balanced pool at a time and update those 5 in parallel, then put them back in and get the next 5 when done.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Not Just The Facts&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Puppet and Chef have the concept of facts&amp;#8230; but it&amp;#8217;s often tedious to have to write a fact, it requires writing custom code. Often you just want to run a command and use the result of that command as if it were a variable. The new &amp;#8216;register&amp;#8217; keyword does exactly that. If you want to write a playbook that does something to hosts with only a certain amount of diskspace (as contrived as that may be), it&amp;#8217;s now super easy to do.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Laser Focus!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ranged patterns allow you to carve out a portion of your infrastructure for updates, allowing you to target, say, 25% of your infrastructure for a rolling update, only to pick up with the remaining other quarters of your infrastructure when the time is right &amp;#8212; or deliver some new code to a few servers just to try it out.&lt;/p&gt;
&lt;p&gt;A new &amp;#8212;limit keyword allows selection of hosts based on &amp;#8220;AND&amp;#8221; criteria instead of just &amp;#8220;OR&amp;#8221; criteria. Need to easily target updates to just your webservers that just happen to be in a particular datacenter? Easily done. Do this without having to tweak your recipes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Modularity!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;#8220;Callbacks&amp;#8221; are now plugins. This means the way ansible behaves is totally customizable to meet any environment or integration needs. You could use ansible to update nagios or graphite, send logging to a special Enterprise logging service, or activate your office lava lamps. There&amp;#8217;s a new repo that hosts these and we even have one that makes &amp;#8220;pew pew&amp;#8221; laser gun noises on OS X. Yes, we are the first config management tool to have that feature. These plugins aren&amp;#8217;t included by default, but you can pick and choose which ones you&amp;#8217;d like to include. &lt;/p&gt;
&lt;p&gt;Inventory scripts, inspired largely by Puppet&amp;#8217;s external nodes system, are also plugins, though we&amp;#8217;ve never really called them that.  (We&amp;#8217;ve had those for a while though, but are part of the overall plugin theme)&lt;/p&gt;
&lt;p&gt;Finally, connection types are plugins as well!   While ansible offers two SSH options out of the box (paramiko and native openssh), and one local mode, perhaps you&amp;#8217;d like to experiment and speak over some other transport &amp;#8212; you can now do that, provided you write the daemon.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;This Is The Link That You Click On&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;0.7 is not released quite yet, but you can consume the development branch right now.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://github.com/ansible/ansible"&gt;github.com/ansible/ansible&lt;/a&gt;&lt;/p&gt;</description><link>http://michaeldehaan.net/post/29926483462</link><guid>http://michaeldehaan.net/post/29926483462</guid><pubDate>Tue, 21 Aug 2012 19:13:00 -0400</pubDate></item><item><title>Worldwide traffic distribution to http://ansible.github.com/...</title><description>&lt;img src="http://24.media.tumblr.com/tumblr_m8vekxUXTV1rpzatso1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Worldwide traffic distribution to &lt;a href="http://ansible.github.com"&gt;&lt;a href="http://ansible.github.com/"&gt;http://ansible.github.com/&lt;/a&gt;&lt;/a&gt; since March.  Larger circles show greater traffic. You might say “No Antarctica???”, but I prefer to think that Google just does not capture data on Antarctica. Lake Vostok, we are coming for you.&lt;/p&gt;
&lt;p&gt;Top 10 Cities:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;London&lt;/li&gt;
&lt;li&gt;San Francisco&lt;/li&gt;
&lt;li&gt;New York&lt;/li&gt;
&lt;li&gt;Paris&lt;/li&gt;
&lt;li&gt;Stockholm&lt;/li&gt;
&lt;li&gt;Austin&lt;/li&gt;
&lt;li&gt;Chicago&lt;/li&gt;
&lt;li&gt;Berlin&lt;/li&gt;
&lt;li&gt;Tokyo&lt;/li&gt;
&lt;li&gt;Kiev&lt;/li&gt;
&lt;/ul&gt;</description><link>http://michaeldehaan.net/post/29580025600</link><guid>http://michaeldehaan.net/post/29580025600</guid><pubDate>Thu, 16 Aug 2012 19:00:00 -0400</pubDate></item><item><title>With The Lights On</title><description>&lt;p&gt;I bought an &lt;a href="http://www.ikea.com/us/en/catalog/products/30173674/"&gt;IKEA Stranne&lt;/a&gt; octopus-plant-light-thingy on Amazon (costs like $20 more that way but cheaper than driving to Charlotte), so this mandated taking a new picture of my studio setup with the lights on. There&amp;#8217;s also a new rug and office chair. Oh boy!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://photos.michaeldehaan.net/music/h1e09d271#h1e09d271"&gt;&lt;img src="http://photos.michaeldehaan.net/img/s1/v55/p503960177-2.jpg" width="700"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Gear has been reconfigured substantially since the last time I took a picture.  I&amp;#8217;ve since sold the SEM and Future Retro XS in favor of the Minitaur and some Vermona gear &amp;#8212; I&amp;#8217;m starting to become a big fan of &lt;a href="http://www.vermona.com/"&gt;Vermona&lt;/a&gt;. Thankfully there&amp;#8217;s only room for one more small synth. What will it be? Or will another synth get voted off the island first?&lt;/p&gt;
&lt;p&gt;Meet the cast:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Moog Voyager (it glows blue and stuff!)&lt;/li&gt;
&lt;li&gt;Vermona Perfourmer mk2 (4 voice polyphonic!)&lt;/li&gt;
&lt;li&gt;Vermona DRM1 mk3 (drums!)&lt;/li&gt;
&lt;li&gt;Moog Minitaur (bass!)&lt;/li&gt;
&lt;li&gt;Elektron Monomachine (mostly sequencing these days)&lt;/li&gt;
&lt;li&gt;Yamaha Motif XS Rack&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;The rack contains an Empirical Labs Fatso, a Eventide 2016, and a Dangerous BAX Eq.&lt;/p&gt;
&lt;p&gt;Sidenote &amp;#8212; The central traffic light picture is an old favorite I &lt;a href="http://photos.michaeldehaan.net/disney_universal/h1e80a09e#h1e80a09e"&gt;took at the MGM backlot&lt;/a&gt; at Christmas, and was printed on metal by &lt;a href="http://magnachrome.com"&gt;Magnachrome&lt;/a&gt;, who I highly recommend.  Awesome service and they do great work.   The photo to the left is a black and white infrared shot of Umstead State park taken with a converted 20D that I don&amp;#8217;t have anymore.   The picture to the right is the space shuttle Columbia, and is not mine.&lt;/p&gt;
&lt;p&gt;I think the synths are almost more about the lights and the knobs and noise at this point.   When I was a kid there was this space shuttle mockup in the bottom level of the Nature Science Center, and I used to love hitting all the lights and buttons on it to make them all turn on and off.   I believe the thrusters also made noise.   It&amp;#8217;s exactly like that.&lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s my &lt;a href="http://soundcloud.com/mpdehaan"&gt;soundcloud&lt;/a&gt; page.  I still need to work on actually composing stuff more, as opposed to letting stuff evolve organically, but it&amp;#8217;s super fun either way.&lt;/p&gt;</description><link>http://michaeldehaan.net/post/29231905592</link><guid>http://michaeldehaan.net/post/29231905592</guid><pubDate>Sat, 11 Aug 2012 21:32:00 -0400</pubDate></item><item><title>Ansible 0.6 Released</title><description>&lt;p&gt;&lt;strong&gt;You go there once, You&amp;#8217;ll be there twice&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://ansible.github.com"&gt;Ansible&lt;/a&gt; 0.6, codenamed &amp;#8220;Cabo&amp;#8221;, is a big release, as indicated by an incredible &lt;a href="https://github.com/ansible/ansible/blob/release-0.6/CHANGELOG.md"&gt;changelog&lt;/a&gt; of features. I think what is most important here, though, is that ansible remains small and tight, and true to it&amp;#8217;s original goals &amp;#8212; but is seeing some incredibly uptake and proving it can hold it&amp;#8217;s own and then some. 0.6 is very much about refinements, and we&amp;#8217;ve collected much more than I expected for what should have been a &amp;#8220;summer vacation&amp;#8221; in open source land. All of these new features reflected on the &lt;a href="http://ansible.github.com"&gt;documentation site&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;New playbook language features&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Being able to add tags to individual tasks and import playbooks from other playbooks offers up a lot of control, and much needed flexibility. Now it&amp;#8217;s trivially easy to decide what you want to run on what machines by grouping all your webservers into one playbook, your database servers into another, and having a common playbook named &amp;#8220;site.yml&amp;#8221; that includes both. Just want to run NTP configuration on both of them? Easy, run &amp;#8220;site.yml&amp;#8221; with &amp;#8212;tags ntp. The way you structure things and order them are up to you, but I&amp;#8217;m really excited about using these two at the same time. In addition to this, new ways of storing per host and per group variables outside of your playbooks and inventory files allow additional ways to externalize your data.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Easier and faster modules&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We&amp;#8217;ve also made it tons easier to write modules, allowing Python modules the advantage of using a common module library, which is cleverly inserted into the module at runtime, along with it&amp;#8217;s arguments. While this was originally done for ease of development reasons, it has an even bigger advantage &amp;#8212; it makes Ansible about twice as fast as it was before. It flies. No waiting 30 minutes for your system to be configured here!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;New core modules&lt;/strong&gt; &amp;#8212; databases, get_url, mount&lt;/p&gt;
&lt;p&gt;We have a surplus of great new module additions in this release &amp;#8212; including modules for PostgreSQL and MySQL, as well as a mount module for actively mounting resources and configuring fstab. In addition, both the yum and apt modules have been enhanced, so if using &amp;#8220;with_items&amp;#8221; to install lists of packages, they do this in exactly one &amp;#8220;command hop&amp;#8221;. Most configuration management packages don&amp;#8217;t do this, so they can be slow when dealing with a lot of packages. Not Ansible. There&amp;#8217;s more modules than that too &amp;#8212; we also now have a get_url module that can download files from http://, https://, and ftp:// sources directly &amp;#8212; giving you more options in addition to the git module, and copy/template for transferring files.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;EC2 Integration&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;There&amp;#8217;s a new example inventory script for keeping your inventory in EC2, using EC2 tags and all of that. Sharp. I expect to see a lot of use of that from folks using Amazon infrastructure.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Other Stuff&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Last but not least in terms of features, there are numerous fixes and refinements &amp;#8212; and a colorized Ansible playbook.   Ubuntu users are also no longer deprived of cowsay upgrades.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Contribution Explosion&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We also can&amp;#8217;t end this announcement without talking about how awesome our community is.   This release was brought to you by almost 50 people. This is an all time high, and we have more contributors per month right now than many of the competing management tools (you know, those two big ones).  We also broke 500 followers on github this month.&lt;/p&gt;
&lt;p&gt;Thanks to everyone who helped provide ideas, testing, and helped spread the word, but thanks in particular to:&lt;/p&gt;
&lt;p&gt;Stephen Fromm (29), Daniel Hokka Zakrisson (20), Seth Vidal (17), Jeroen Hoekx (16), Dave Hatton (15), Mark Theunissen (11), Peter Sankauskas (9), Lorin Hochstein (9), John Kleint (9), Nikhil Singh (8), Derek Carter (8), Brad Olson (8), Jan-Piet Mens (6), Will Thames (5), Petros Moisiadis (5), Matthew Williams (5), Jim Richardson (5), Jeremy Smitherman (5), Ingo Gottwald (5), Fred Alger (5), Timothy Appnel (4), Ludovic Claude (4), Dag WieÃ«rs (4), Cosmin LuÈ›Äƒ (4), Christoph Seitz (4), willthames (3), u348095 (3), bradobro (3), Nathan A. Feger (3), Daniel NÃ©ri (3), Brendan Beveridge (3), felix (2), cocoy (2), alex (2), Wes Johnson (2), Rafal Lewczuk (2), Matt Goodall (2), Dag Wieers (2), Chin Fang (2), Rodney Quillo (1), Michel Blanc (1), K. Preyk (1), Joshua Tacoma (1), Jonte Norman (1), Jonathan Palley (1), Dane Summers (1), Ahmad Khayyat (1), Adam Denenberg (1)&lt;/p&gt;
&lt;p&gt;Ansible 0.6 was codenamed Cabo because it was going to be a nice summer vacation release, instead, everyone worked their butt off and it&amp;#8217;s one of our most meaningful releases to date.  We&amp;#8217;ve kept APIs very compatible, we&amp;#8217;ve augmented areas that needed improvement, and we&amp;#8217;ve very well tuned Ansible into a faster machine.   In hoping for more of the same, 0.7 will be codenamed Panama.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Model citizen, zero discipline.&lt;/strong&gt;&lt;/p&gt;</description><link>http://michaeldehaan.net/post/28871936578</link><guid>http://michaeldehaan.net/post/28871936578</guid><pubDate>Mon, 06 Aug 2012 20:30:50 -0400</pubDate></item></channel></rss>
