I started my current job on May 21, 2012 – a tad over a year ago. This date also being my birthday, I had wished to mark my birthday and 1-year job anniversary with a general post on my tech kung-fu acquired over the past year to be published on May 21, 2013, – but eh, that didn’t happen. I suppose late is better than never!
I’ve gained a lot of experience and skills over the past year – and in many different fields of knowledge. It would be difficult to capture everything I’ve learned in this one post. Fortunately, I have a chart to help me illustrate at least one field of knowledge: DevOps.
A year ago, I was definitely the monkey from this chart – err, the bare metal system administrator. When I started at the MSU lab, however, we were transitioning to VMware ESXi hypervisors, and so I was introduced to virtualization. I embraced this technology and quickly deployed scripts for weekly and monthly image-level backups of our virtual servers. (Before I automated these backups, I think the procedure was to manually copy-and-paste
.vmdk and other files from the hypervisor to a local hard drive…) The backups have run flawlessly and I am able to spend more time developing code.
In Jorge Castro’s OpenStack conference presentation presentation (from which I pilfered the evolutionary chart above), Jorge has this to say:
At the end of the day, nobody – except the people at this conference – sets up a cloud for, like, no reason. Right? ‘Check it out, I set up an OpenStack cloud’ – What are you gonna do, just have it sit there?
Well, this spring I did set up my cloud for no reason. And check it out, because it is cool!
I remember spending the first week after finally nailing my OpenStack configuration (i.e. it was working) just accessing the web console from my smartphone to spool up Ubuntu instances over the internet. From the bar. I didn’t even do anything with the machines, and it was the coolest thing ever. (For this dork, anyway…)
I had no particular goal for the cluster, no application ready to deploy on it… So it did just sit there for awhile. I am, however, finally finding uses for it at work. I’m just getting into automated deployments, so I guess I’m staddling the evolutionary link between Homo erectus (cloud computing) and Cro-Magnon man (configuration management).
At this time, my projects use
python-novaclient to access the OpenStack Nova API to provision machine instances and
fabric to drive remote shell execution to configure my machines. It works.
This is my first foray into automated deployments and configuration management, and I know it’s not ideal. For instance, my Fabric configuration scripts are not going to be idempotent (running the same configuration script multiple times for one server could cause havoc). There are further libraries to explore, such as Puppet and Chef – but I’ve so far resisted these solid Ruby projects to see how far I could push Python. My understanding is also that Puppet or Chef alone don’t provision machines from an environment (e.g. OpenStack or AWS) – so mating Fabric with something like
python-novaclient which can provision machines stretches the scope of what’s possible. I can also easily extend the script to drive django management commands like
Ultimately, I’m probably going to embrace Canonical’s Juju project when I out-grow Fabric remote shell execution. (I’ll be a Skynet terminator in no time.)
Of course, the bulk of what I’ve learned over the past year regards web development.
I’ve grown tremendously in my proficiency with the Django web development framework and have made excellent use of some new, cool Python libraries:
The next year
This next year, I hope to tip-toe into Ruby on Rails. I’ve had a lark to get involved with the Victory Kit project, a FOSS application for running campaigns, but have been inhibited by not knowing Ruby. So there’s a task.
The other tech I plan on learning this year is the aforementioned Juju for cloud service orchestration.
Of course, I don’t usually end up learning what I set out to learn (e.g. RoR and Juju) but rather what tools I absolutely need to learn to get the next task done. I intend to write a post like this next year, so we’ll see…