Hello my friend,
After writing quite long and complicated previous blogpost about CI/CD with GitHub, I need
some therapy to write something light and chill. I decided to choose the setup of the working space for development and utilisation of the network automation and, in general, network design and operations. Though I don’t pretend to be absolutely objective and unbiased, as it is simply not possible, I intend to share some observations I did from my own experience and discussions with our network automation students, which I hope will be interesting for you.
No part of this blogpost could be reproduced, stored in a
retrieval system, or transmitted in any form or by any
means, electronic, mechanical or photocopying, recording,
or otherwise, for commercial purposes without the
prior permission of the author.
Why Is It Important?
During our Zero-to-Hero Network Automation Trainings, and other trainings as well, we talk a lot about choice of tools to build automation solutions: they shall be fit for purpose and easy to use. However, in addition to that, you should also feel a fun, when you utilise them. It may sound odd, as we are talking about work and software development; at the same time, if you don’t feel joy from what you are doing, you, unfortunately, won’t succeed in the network automation field (neither in any other area, we are afraid). So, the main criteria to chose anything we use to deal with network design, automation and operations are:
- Fit for purpose
- Ease of use
With these three criteria in mind, let’s validate the tool we use most of the time: our operating system. Not the network operating system we run on network devices and servers, but rather the operating system we run on our laptops and desktops. Arguable, the most widely used operating system is what we have on our smartphone or tablet, such as Android or iOS, but we will leave it aside.
Despite I had experience of literally writing Python code from my Android smartphone, I didn’t find this experience very pleasant due to enabled auto-correction and a screen’s size.
So, keeping in mind the purpose of the operating system, let’s try to think about tools that the network and automation engineer uses daily:
- Terminal client to connect to remote endpoints with SSH. It can be Putty and SecureCRT, which are two the most popular terminal clients for Windows hosts, or Xterm if you use MAC. There are also builtin clients in each operating system, but, for various reasons, a lot of people don’t use them; though, to be frank, I find builtin MAC terminal client quite a good one.
- IDE (Integrated Development Environment), which is a tool we use to develop the software, including network automation. My own preference here is Microsoft VSCode, as it gives us everything we need to develop software in any programming language, as it is super extensive and cross-platform due to it possibility to work in Microsoft Windows, MAC OS and Linux. There are a lot of other IDEs, such as PyCharm, IntelliJ, but so far my personal experience with VS Code was the best.
- Programming languages and products, such as Ansible, Python, SaltStack, and any further tool, which you actually use for the network automation.
Both Ansible and Python are in-depth covered in our Zero-to-Hero Network Automation Training.
- Virtualization environment (hypervisor) to help with the development of network automation solutions, as there is a very big probability that the operation system on your laptop/desktop will be different to the one you have on the host, from which you will run automation. Also, if you want to quickly lab some networking solutions or technologies, you would highly likely want to spin up the VM with a desired network operating system.
- Containerization environment to build the modern applications leveraging Linux containers (LXC) with Docker or any other tool of your choice.
- Documentation tools, such as Microsoft Visio, Draw.io or any other (thankfully, there is a huge range of available tools these days):
- Some of them are open source, some of them are commercial and you require to purchase them.
- Some of them cross-platform and some of them could run only on a specific operating system.
- Office tools, i.e. tools you need to use for standard office activities including but not limited to the following list:
- Text editors for writing all sort of technical (or not technical) documents, MoMs, job applications, etc.
- Spreadsheet processors for building any sort of structured data, such as financial or technical reports.
- Slide deck processors for creating all sort of materials for technical and marketing presentations, as besides writing a cool code, you need to be able to present it properly.
- Messengers, which are bread and butter of all modern business, including our own, as we use Slack extensively to communicate internally within the company and with our students.
- Mail clients to get the exchange information and communicate to people, whom we don’t communicate with in messengers.
There is one important note to the latter two categories: there is a growing market of cloud-based office and documentation tools. For example, you can use Microsoft Office 365 or Google services (Docs, Sheets, Slides) to perform activities, which you used to do locally. Obviously, this would require to have a stable Internet connectivity; however, these days almost everything requires Internet connectivity, especially, when we talk about network automation which implies remote connectivity to network devices or jump hosts.
Without any doubts, the list above it not exhaustive, and you can extend it further based on your own duties; however, it provides a good starting point to think about requirements, which you may have for your system.
What Are the Options?
Once we are clear with our requirements, let’s review what is the selection of operating systems, which we can run at our laptop or desktop:
- Microsoft Windows
- Apple MAC OS
- Linux (one of the numerous flavours)
I’ve run all of them on my laptop, for the aforementioned purpose and, thus, know a bit about advantages and disadvantages of using them. Let’s start our review.
I’ve used Microsoft Windows since its release Microsoft Windows 95. I even saw Windows 3.11, when my dad had first desktops in his company, but that time I was barely understanding what computers were for. Since Windows 95 through Windows 98 and till Windows XP that was a quick transition for me. Microsoft Windows XP was the first system I used for something more useful than video games and Internet browsing. It was relatively stable, though annoying BSoDs (Blue Screen of Death) were biting me here and there at various circumstances. I started learning software development with Turbo Pascal and Borland Delphi. Luckily, it was working quite okay for my purpose, which was sort of “Hello World” applications and basic interactions with underlying operating system. In Windows XP it was the first time I saw VMware Workstation and the wonderful world of virtualization. After that I moved to Windows 7 and then 10, and that were the systems which I used for a long period time during my transformation into a network automation engineer.
At this point we will conclude the historical part and will take a look at facts:
- It was perfectly suitable for all sort of office activities, such as Microsoft Office/Visio/Project.
- A lot of collaboration tools, such as Teams, Slack, Skype were originally created for Windows and, therefore, was working well.
- Availability of type-2 hypervisors (VMWare Player and Oracle VirtualBox).
- Developing software in Python and Perl, what I did quite a bit back in past, was quite a pain: some (a lot) of the libraries simply didn’t work in Windows, because they required certain system APIs, which don’t exist in Windows.
At that time these drawbacks were solved by using virtual machines (VMs) with Linux CentOS or Ubuntu. It was an overhead, as I would need at least 2 GB of RAM to spin up VM. At the average enterprise laptop with 2-4 GB RAM it was often quite a challenging task, though. A memory upgrade till 8 GB RAM and installation of 64-bit Windows, eased the problem, but still I was not able to do any meaningful job without VMs with Linux.
I stopped using Windows in the mid of 2019, right after Windows Subsystem for Linux (WSL2) was finally stabilized. As such, I don’t really have experience or a particular opinion on this technology. However, thinking about the name “Windows Subsystem for Linux”: if I spend most of my time in that subsystem, why do I need Windows at all? But, I’m jumping the gun here.
Apple MAC OS
After using Windows for about 15 years, I switched to Apple MAC OS. After Microsoft Windows, I felt very happy that I could run Python and Ansible natively. That not only reduced amount of resources I need for my network automation development, as I didn’t need anymore VM for my automation host and, therefore, I could use these CPU cores and GBs of RAM for virtual routers and switches, but also decreased the time I need to wait before starting developing the automation. For the purpose of the network automation development, that was a clear win.
From the perspective of the standard office and documentation tools, it was also quite a good experience. I did some experience with MAC back in 2015-17, and that time working with Microsoft office was just terrible: it was constantly crashing. However, in 2019 I was positively surprised that this was not a problem anymore. Obviously, Microsoft Teams was crashing time to time, but that is what the Microsoft Teams is created for, isn’t it?
There is no offense to Microsoft, just Teams reputation is, unfortunately, not the greatest and, therefore, became a meme.
Compared to Microsoft Windows, Apple MAC OS was much more stable, which can be explained by Unix roots of MAC OS, and in 3 years I had a system crash only once, after upgrade to some newer release.
Then I migrated to the newest laptop, though it is not the newest anymore, with M1 CPU. Being generally a great thing, I apparently found myself unable to use tools I used to use, such as Oracle VirtualBox, which helped a lot with creating local labs with network functions during automation development. Yes, there are alternative type-2 hypervisors, such as Parallels or VMware Fusion. However, the bigger problem is that a lot of images with network automation functions simply cannot run on ARM architecture, which is what M1 is. Probably, if I was a web application developer, such a transition would come almost unnoticed, but it was not the case for myself. So, I decided to move on…
… And I finally landed in the Linux-only land. Maybe, such a transition was a logical: if I anyway develop automation to be run from *nix, predominantly Linux systems, and I run VMs or containers, why shall I not try to run Linux natively on my laptop? Obviously, I had some concerns about compatibility of Linux with standard office applications, as well as how good all the peripheral devices, such as webcams, mics, etc, would work on Linux. So I had to do some research.
The most popular Linux these days, both in the server and in the desktop Linux is Ubuntu. Despite I mainly used CentOS previously, and our Zero-to-Hero Network Automation Training was structured around it as well (it is not the case anymore). I checked that laptop I want to buy on eBay (cost control is everything for small and medium business :-)) is officially certified by that vendor to run Ubuntu 20.04, which made me feel more comfortable about the idea to run Linux and I decided to do it.
So, for 2 months already I run Ubuntu Linux natively and using it for all the aforementioned activities and so far I have only positive experience:
- I can develop and run network automation and web services using Python, Java Script, and Go natively at my VM without VMs or containers, if I don’t want to use them.
- I can run network topologies with various network functions without problems are my laptop’s architecture is x86_64 and KVM provides decent performance for VMs.
- I can use all the office tools with Open Source Libre office (or cloud-based Microsoft Office or Google Docs/Sheets/Slides).
- I can even share my screen and control remote ones via Zoom calls as well, not saying that video and audio work well both in Zoom and Skype. Slack also works perfectly.
- I can also natively run Docker containers.
- VS Code works perfectly.
So, all tick boxes for network automation and operational guys are ticket, what else to dream about?
How Is This related to the Network Automation Related?
Right, you need to have a a great platform to study and develop automation. And we are here to guide you in the world of network automation to be successful.
We offer the following training programs:
- Zero-to-Hero Network Automation Training
- High-scale automation with Nornir
- Ansible Automation Orchestration with Ansble Tower / AWX
During these trainings you will learn the following topics:
- Success and failure strategies to build the automation tools.
- Principles of software developments and tools for that.
- Data encoding (free-text, XML, JSON, YAML, Protobuf)
- Model-driven network automation with YANG, NETCONF, RESTCONF, GNMI.
- Full configuration templating with Jinja2 based on the source of truth (NetBox).
- Best programming languages (Python, Bash) for developing automation, configuration management tools (Ansible) and automation frameworks (Nornir).
- Network automation infrastructure (Linux, Linux networking, KVM, Docker).
- Orchestration of automation workflows with AWX and its integration with NetBox, GitHub, as well as custom execution environments for better scalability.
Moreover, we put all mentions technologies in the context of real use cases, which our team has solved and are solving in various projects in the service providers, enterprise and data centre networks and systems across the Europe and USA. That gives you opportunity to ask questions to understand the solutions in-depts and have discussions about your own projects. And on top of that, each technology is provided with online demos and labs to master your skills thoroughly. Such a mixture creates a unique learning environment, which all students value so much. Join us and unleash your potential.
The main lessons that I’ve learned is that many fears are irrational and the best way to tackle them is to try things yourself. I had a number of ex- and present colleagues, who tried to run Linux on their laptops or desktops and failed, at various times. There problems were similar: their laptops were getting hanged, during the usage of some aforementioned tools. May be, I was lucky enough not to use the same applications, or, my laptop is more suitable to run Ubuntu. At the same time, I won’t have my current setup, which suits for building and automating networks, if I didn’t try to run Linux on it. Try and find out.
To conclude, looking back in time, I feel that I had a natural evolution from Windows to Linux. I was doing first attempt to work with RedHat Linux back in 2005-2007, but I was not getting much success. Yes, I was able to install and launch it, but I was not yet developing anything to get the real power of Linux, whilst the collaboration and office tool that time was not the strongest side of Linux. At the same time, during my journey into network automation world I used to work with Linux CLI and mastered skills in Linux system administration in general. That’s why running Ubuntu Linux as a single operating system for all software development and business activities is quite straightforward. If you are into network automation world, I definitely urge you to try Linux as an operating system for your laptop/desktop, which also would be a boost for your automaton skills. Take care and good bye.
Need Help? Contract Us
If you need a trusted and experienced partner to automate your network and IT infrastructure, get in touch with us.
If you have further questions or you need help with your networks, we are happy to assist you, just send us a message. Also don’t forget to share the article on your social media, if you like it.