Tuesday, September 27, 2016

Which programming language should I Start Learning for Automation?


Do I need to be programmer before learning Automation, SDN and NFV technologies: Gave a clear picture that you don’t need to be a programmer to learn these technologies? But knowledge of any basic scripting or programming language is always beneficial for carrier growth. Now the question arises which programming language to select out of the following:-

1. Python
2. XML
3. JSON
4. C/C++
5. Visual Basic
6. Perl
7. TCL
8. Ruby On Rails

Before the selection of any language we should understand that what the common among the languages are. As per my understanding, logic will remain be the same while implementing any of the languages. Secondly, all the languages have common understanding of defining variables, strings, functions, classes, inheritance, conditional statements, for and do-while loops, dictionaries, sockets, importing modules, file opening, error and exception handling. So it would be better if we first select any language and get the understanding of the basics functions. Once it is done, after that it would be very easy to become master in any of the language from understanding perspective. (Please mind that we are network engineers not programmers. The intent is to learn and understand the different puzzles with various buzz words and not to become master). Let the programming masters do their jobs. We will be helping them by extending the support.

Which programming language to select first and why?
I started my journey with C, C++, Visual Basic and Networking. After over period of time I can clearly differentiate among the languages. C is the mother or father of every language. During its writing time, it was designed to be very light. C++ was successor of C. It came with a concept of objects oriented programming. The basic problem with both the languages are platform dependent. That would be the reason it was used to build as base of other programming languages but never ever gain popularity over the web.

Java is widely opted because of its platform independent feature but it has lot of problems at server side. It was mainly a server side language rather than client side.

Python gained popularity in the last few years because of platform independent. Secondly it is very light in weight and have interactive shell too which most of the languages don’t have. It’s an easy to learn language and heavily adopted by every field. It has almost 88000 libraries available which can be used freely by anyone. Now even the lighter python version are also available which are called as PyEz (Python Easy). PyEz makes the code shorter by almost 85%. I have posted My First Step towards Automation: Controlling Junos with Python & PyEZ. Let’s understand how does it works with the help of an example.

A raw python script uses the paramiko library for the ssh connection and you have to define the rpc for show version (get-software-information), then open the socket to the device on the right port (830) and create the transport using that socket as the connection. Once it’s open, you can then send the rpc and then wait for the end of the rpc-reply. Then close the open session, close the transport and then close the socket. This python code is roughly about 50 lines.

The example can be implemented by writing 6 lines in PyEz.

Subsequently you can follow my already written post of My Second Step towards Automation: Install the PyEZ Library and Connect Your Remote Device and My Third Step towards Automation: How to map Junos Commands to PyEZ RPC.

So finally as closing comments I am not expert and can't explain the pros and cons each and every programming language but would suggest to start your learning with Python or PyEz and start writing your first famous “Hello World” program.

Click Here To Read Rest Of The Post...

Monday, September 26, 2016

Do I need to be programmer before learning Automation, SDN and NFV technologies?


Network Engineers are worried about the skills required to learn about the next generation technologies like SDN and NFV. Every time when someone talk about SDN and NFV, I always think that do I need to learn any kind of programming language like C, Python, Perl, SLAX, RUBY etc.? Does my CCNA, CCNP, CCIE, JNCIA, JNCIS skills are no more required? There are lot of questions comes in my mind about job security also. At times, I assume will companies hire or retain only those engineers who understand programming better than BGP or OSPF or ISIS.

Automation is the new buzz word in the industry. Every customer wants to automate their entire infrastructure without understanding how does it work. As per my understanding automation means is to shorten the completion cycle of current job by writing some scripts or loops. But as industry perspective, we think automation means programming and without having its knowledge how someone can automate any kind of job.

In IT industry, automation was being used since long. Ansible is the right example of IT Automation industry. But in networking automation was also used since long. The best example of automation is to run a script in the night which normally takes the backup of the current configurations of network elements. Second best example of automation in networking is Network Management System (Vendor Specific)

In Network we are already decoupling control and data plane by implementing route-reflector functionality.

Now the question arises if automation, SDN etc. technologies are already there then why we all are worrying about it. Is it something different of what we are already doing? I would say: Automation, SDN and NFV are bringing customer on boarding faster time to market. Earlier these technologies are only locked with specific vendor but not multi-vendor is required. Now a days if you require route-reflector functionality, in that case you need to order a dedicated router. The same functionality can be leverage by using route-reflector VNF. Route-Reflector VNF has full fledge functionality of route-reflector what we usually get in hardware router. The only difference is that in earlier case hardware and software were tightly coupled together but now it is decoupled.

Again the question is not answered what skills are required for multi-vendor SDN and NFV. Let’s examine the route-reflector example and it will help us to understand what kind of skills are required.


The above example in figure shows if we have to spin up VNF of virtual route reflector, in that case close integration is required among Compute, Networking and Storage. To get the integration done one must understand the below as listed:-
1. Linux OS Fundamentals
2. Basic Scripting or Programming to automate the stuff
3. Networking
4. Storage
5. API Calls
6. GIT
7. Orchestration tools like Pupper, Chef, Ansible and Salt Stack etc.
8. Open Stack

So it’s not all about programming to become Automation, SDN and NFV engineer. It’s all about how do you embrace these technologies with multiple skill set knowledge. It’s jack of all trade and master of none or one. All you need to understand how does the process works and how do you link each and every step with other.

Click Here To Read Rest Of The Post...

Monday, July 18, 2016

My Third Step towards Automation: How to map Junos Commands to PyEZ RPC


In JUNOS, it’s very easy to find any RPC equivalent of the existing command by running “show route | display xml rpc”. This helps to find what is equivalent RPC command of show route as per below output.

get-route-information

It’s very difficult to find every time on cli what is equivalent of RPC of any Junos command. So we can leverage PyEZ to find the same and in the upcoming posts, you can check how it can be leverage to pass the different values directly in the RPC calls. In PyEZ we can call display_xml_rpc library to get the information of any RPC equivalent Junos Command.

from jnpr.junos import Device
from jnpr.junos.exception import ConnectError
dev = Device(host='192.168.1.1', user='lab', passwd=’lab')
try:
dev.open()
except ConnectError as err:
print "Cannot connect to device: {0}".format(err)
sys.exit(1)
print dev.display_xml_rpc('show route',format='text')
print dev.display_xml_rpc('show interface',format='text')
print dev.display_xml_rpc('show ospf neighbor',format='text')
dev.close()
The output of above file is given below:-
C:\Python27>python.exe testing\connect_device_rpc.py
RPC of show route is:
get-route-information

RPC of show interface is:
get-interface-information

RPC of show ospf neighbor is:
get-ospf-neighbor-information

Click Here To Read Rest Of The Post...