In one of my rants, I asked people to kindly stop with the "All Network Guys will Need to be Programmers" FUD. My recommendation was basically for Networkers to be open to change, and to start broadening their horizons. DevOps is coming to networking and that is a FACT. You might be wondering what skills a Network DevOps Engineer needs and here I attempt to answer that.
It's still about NETWORKING
I'm going to state this upfront here. You need to be good at Networking for any of the other skills here to be useful. Continue along vendor certification tracks, follow the IETF, join NANOG, experiment with new technologies. This is all invaluable.
Software Engineering Fundamentals
A lot of the DevOps skills have roots in Software Engineering. Being a Network Guy ™ this may seem like a little bit of a paradigm shift but here's something cool. Would you believe that some of these software engineering concepts have more to do with engineering best practice than with software, and are in fact relevant to the work you are doing today? Also, your SysAdmin buddies already know this and started their DevOps pilgrimage a while ago.
Unit/Functional/Integration Testing, Version Control, Agile, Test-Driven Development (TDD) and Behaviour Driven Development (BDD) are all things that you could benefit from today.
Fortunately, there is an easy way to pick these skills up. The folks over at Software Carpentry have put together a set of Tutorials to help research scientists get to grips with Python and supporting tools. The Lessons are put together in such a way that they are easy to understand for mere mortals (unlike a lot of CS textbooks/lectures)
Know your *nix
An understanding of Linux is going to stand you in good stead in the transition from NetOps to DevOps. As much as people like to talk about "Death of the CLI" they don't realise how much time Developers and SysAdmins spend in the Terminal. Whether this be checking in code with
git, extracting information from
Open vSwitch or using the OpenStack CLI clients you will likely spend a lot of time in the terminal too. Learning how to be productive here is essential and a good understanding of Linux will help when troubleshooting complex issues.
There are vendor neutral *nix certifications which are worth a look like LPIC-1. While I haven't gone through this myself, I have read some LPIC study materials and found this infinitely useful. If you want a vendor certification, Red Hat have certifications available too.
Have some fun
Learning Linux doesn't have to be boring. I prefer a more practical approach so you may find attempting one of the following a nice project to hone your Linux-Fu:
- Install Arch Linux
- Replace your ESXi Lab with KVM, Libvirt and Open vSwitch
- Write command aliases to save yourself some typing
vim, and make yourself a
Learn some Python
I'm biased towards Python, but I feel it's the most approachable Programming Language for Network Engineers to pick up.
- It has an "Interactive Interpreter" which is a lot like a CLI and let's you enter statements to see what happens
- It can be used to basic scripting or beautifully designed object-oriented software but it doesn't force you to do things one way or another.
- There is a rich ecosystem of libraries that simplify doing everyday tasks
- It's being embedded in Network Devices AND network vendors are providing Python libraries for their software.
You don't need to know Python much to start getting real value. Think of how many things you could automate! People joke about automation not saving time (as it takes time to automate) but during that time you are getting a better understanding of Python, so it's not a total loss. Whether it's your weekly report, Mining the Social Web or something more Network-centric, undertaking a Python project will be really worthwhile... and if you can, host the result up on GitHub.
There are hundreds of good tutorials online, but if you are just getting stated I would recommend CodeAcademy
Get your head around "Infrastructure as Code"
"Infrastructure as Code" is the battle cry of DevOps. To really understand what this is about and to get a handle on the what/why/how for Networking I'd recommend that you spend some time with:
Run through the tutorials, boostrap a server with Chef, use Puppet to deploy a LAMP server and if you are feeling brave, write a Chef Cookbook/Puppet Manifest. I couldn't mention this and not mention the awesome working being done on the Netdev library for Puppet and Chef.
What about some SDN?
You could take a course on Coursera, but why not get some practical experience? Download OpenDaylight and follow one of Brent Salisbury's awesome tutorials. You can simulate massive networks using Mininet and have some fun pushing paths using the REST API or experimenting with OpenStack integration. The nice thing about the OpenStack integration piece is that this requires you to get DevStack working, which is not easy, and it gives you some OpenStack experience.
Looking in to my crystal ball, I would predict that the Network DevOps engineer will need:
- Strong Networking Skills
- Knowledge of Linux System Administration
- Experience with Puppet/Chef/Ansible/CFEngine/SaltStack would be desirable
- Scripting skills in Bash, PHP, Ruby or Python
- Ability to work under Source Control (git)
- Experience in consuming (REST) APIs
- Experience with OpenStack and OpenStack Networking
- Appreciation of Software Defined Networking (SDN)
- Knowledge of Agile Methodologies
- Knowledge of Test-Driven Development
- Ability to write Unit and Integration Tests
Hopefully the links above will help you find resources to start developing skills in these areas. If you have resources you have found useful and would like to recommend, please leave a comment and I'll update the post!