Some SDN proponents claim that the way we configure networking devices (using CLI) is the biggest networking problem we’re facing today. They also conveniently forget that every scalable IT solution uses automation, text files and CLI… because they work, and allow experienced operators to work faster.
Since I wrote this blog post, the debate shifted to API is better than CLI, and I had a few choice things to say about that fake dilemma.
Published on , commented on July 10, 2022
Is CLI In My Way … or Is It Just a Symptom of a Bigger Problem?
My good friend Ethan recently published a blog post rightfully complaining how various vendor CLIs hamper our productivity. He’s absolutely correct from the productivity standpoint, and I agree with his conclusions (we need a layer of abstraction), but there’s more behind the scenes.
We’re all sick of CLI. I don’t think anyone would disagree. However, CLI is not our biggest problem. We happen to be exposed to the CLI on a daily basis due to lack of automation tools and lack of abstraction layer; occasional fights with the usual brown substance flowing down the application stack don’t help either.
The CLI problem is mostly hype. The “we need to replace CLI with (insert-your-favorite-gizmo)” hype was generated by SDN startups (one in particular) who want to sell their “disruptive” way of doing things to the venture capitalists. BTW, the best way to configure their tools is through CLI.
CLI is still the most effective way of doing things – ask any really proficient sysadmin, web server admin or database admin how they manage their environment. It’s not through point-and-click GUI, it’s through automation tools coupled with simple CLI commands (because automation tools don’t work that well when they have to simulate mouse clicks).
CLI generates vendor lock-in. Another pile of startup hype – in this case coming from startups that want to replace the network device lock-in with controller lock-in (here’s a similar story).
We’re Not Unique
Startups and pundits would like to persuade you how broken “traditional” networking is, but every other field in IT has to deal with the same problems – just try to manage Windows server with Linux commands, or create tables on Microsoft SQL server with MySQL or Oracle syntax … even Linux distributions don’t have the same command set.
The true difference between other IT fields and networking is that the other people did something to solve their problems while we keep complaining. Networking is no worse than any other IT discipline; we just have to start moving forward, create community tools (because vendors' track record isn't exactly stellar), and vote with our wallets.
Whenever you have a choice between two comparable products from different vendors, buy the one that offers greater flexibility and programmability1. Don’t know what to look for? Talk with your server- and virtualization buddies (I hope you’re on speaking term with them, or it’s high time you buy them a beer or two). If they happen to use Puppet or Chef to manage servers, you might try to use the same tools to manage your routers and switches. Your favorite boxes don’t support the tools used by the rest of your IT? Maybe it’s time to change the vendor.
-
For more details, read the Network Automation RFP Requirements blog post. ↩︎
As you say, perhaps its time for us to come up with our own answers, and stop asking the vendors to homogenize what they've traditionally sold as differentiators.
There's a longer conversation to be had here.
Also, here's a nice summary of why we are where we are ;)
http://www.ietf.org/mail-archive/web/v6ops/current/msg18631.html
http://www.nanog.org/meetings/nanog54/presentations/Tuesday/Morris.pdf
Obviously this particular solution is not publicly available because it's considered a secret sauce, but imagine what would happen if all the brainpower focusing on ODL would decide to do something like this.
My talk at Conext last year had some ideas in this space that might be interesting: https://www.dropbox.com/s/ud59gtxw1hk5dwc/conext_13_slides.pdf and http://conferences.sigcomm.org/co-next/2013/program/p235.pdf
Isn't it somewhat like asking for common api to do instrucitons to both Windows and Mac PCs? My understanding is that in the PC world, the Java VM has accomplished abstractions to some extent, but I'm not sure it will happen with our network devices. As a datacenter guy I do automations often, without expecting it'll happen in the foreseeable future. Most of my batch configuration tools first check sysdescr with each device, then call functions that are specific to the model, which I see is is a necessary evil. That said, some vendors sometimes fail to keep consistency across their own firmware versions and architectures, be it CLI, SNMP oids, or syslog message formats... which is not cool. -tami
I will say that I don't have much faith in the common network engineer to come up with clever ways of creating a great automation script to make their command line experience easier. Creating templates to solve repeating problems in the networking industry takes a lot of time in itself, but to see a network engineer take the time to say "Hey, maybe I can write a script in ABC language" is even more difficult to find. The command line is far from dead. If we want to make our command line experience better, we need to figure out WHAT problems we are facing, HOW we can fix them with automation, and DEMAND that these tools be built into future software versions.
http://www.jedelman.com/1/post/2014/02/the-power-of-a-programmable-abstraction-layer.html
The next challenge is working with those data structures: the elements in them have network-wide context, so we need network-wide abstractions to express this. I think this is where networking is trickier than DevOps - the config of a device depends much more on its role in a network than a server, for instance.
Python is a great choice - I covered some of the libraries we're using in AutoNetkit at PyCon AU: http://www.youtube.com/watch?v=EGK5jjyUBCQ
@Ivan: I'm not sure we even need Kickstarter. Most of the pieces are already there, and we can engage the academic community to help out. With the right architecture, a lot of the tasks map well to honors or masters projects.
Steven Iveson
Of course, I'm only semi-joking!
I've worked with many different versions of IOS, XR, NX-OS, PIX/ASA, WebNS, XDI/CatOS, Stratacom OS (whatever that was called), Kalpana OS, etc. etc. ad infinitum. And that's just Cisco... Plus other vendors’ OSs, including XOS and JunOS.
The hard part, to me, has *never* been the CLI. The hard part has always been understanding the task, understanding the technology, and making the right design. After that, it’s just commands... and who cares if that OSPF command is under the interface, under the process, or configured with a 'set' command? Meh.
I totally agree that some fundamental things in networking need to change. That includes stuff like locator/ID separation (not necessarily through LISP), policies based on address or physical port, troubleshooting larger setups (beyond ping, traceroute, commands to show mac address tables, connecting sniffers multiple places etc.), layer 2 adjacency ‘needs’, and tons of other things.
Most of the significant problems in networking is far closer to the top of the list than the CLI. Really.