Visualizing Python Module for Network Libraries (Netmiko and PyEZ)

Ever wondering How a python custom module or class is manufactured ? How does the developer write the python code and glue it together to create this nice and amazing “x” module ? What’s going on under-the-hood?

Documentation is good start of course, but we all know that it’s not usually updated with every new step or detail that developer add.

For Example,

we all know the powerful netmiko library created and maintained by Kirk Byers that utilize another popular SSH library called Paramiko. but we don’t understand the details and how the classes are connected together. we just write the below code  to execute a specific command in Cisco IOS platform

from netmiko import ConnectHandler

device = {"device_type":"cisco_ios",
"ip":"10.10.99.110",
"username":"admin",
"password":"access123"}

 

net_connect = ConnectHandler(**device)
output = net_connect.send_command("show arp")

and booom, it’s working like charm

if you need to understand the magic behind the “self.charm” that netmiko use to return the result,  Please follow the below steps (require Pycharm IDE)

Netmiko Module

Step1:

Open the Netmiko location inside the python library location folder (usually C:\Python27\Lib\site-packages) in Pycharm IDE

clip_image001

Step 2:

Right click on python module and choose Diagrams then Show Diagram

clip_image002

it will take some time to generate the diagram based on Your Java xms settings ( usually I assign 1024MB for it to work properly)

Step 3:

Now save the resulting  image into your desktop

clip_image003

 

And Here’s it (click on it to enlarge and zoom as much as you can)

netmiko

Understand the result UML graph

Based on the resulting graph you can see that Netmiko is supporting a lot of vendors  like HP Comware, entrasys , Cisco ASA, Force10, Arista, Avaya,..etc and all of these classes are are inheriting from parent netmiko.cisco_base_connection.CicsoSSHConnection class (I think because they use the same SSH style as Cisco) which in turn inherit from another Big parent Class called netmiko.cisco_base_connection.BaseConnection

Also you can see that Juniper has it’s own class (netmiko.juniper.juniper_ssh.JuniperSSH) that connect directly to the Big parent

And finally we connect to the parent of all parents in python. The Object class (remember everything in Python is an object at the end)

Also you can find a lot of interesting things like SCP transfer class, SNMP class and with each one your will find the methods and parameters used to initialize this class

So the ConnectHandler method is primarily  used to check the device_type availability in above vendor classes and based on it , it will use the corresponding SSH Class. A well designed module really, Thanks Kirk Byers !

image

image

Juniper PyEZ Module

Applying the same procedure in Juniper Python wrapper (PyEZ) used to connect to JunOS based platforms. we can get another useful diagram as below (Again click to enlarge)

image

Also you can see the support for the netconf, serial and telnet connection and Views and Tables classes that Juniper use to define the facts about the device. Very clever.

That’s all. Please share any other interesting findings in python modules

I hope this has been informative for your and I’d like to thank you for reading.

Advertisements

Install Cacti on CentOS 7– The Definitive Guide in 2017

 

Cacti is one of the most robust  monitoring tool available in the market. It has a lot of features and options that able to give you a complete visibility for your infrastructure. In this guide I will walk through installing Cacti on CentOS 7, Configuring the MariaDB (The new Database for the CentOS 7 ), Adding few devices and finally plotting the result. Also  I will cover some troubleshooting points during the configuration. So Let’s start

  clip_image024

Read More »

Troubleshoot Openstack Networking with Python

As an Openstack Administrator for a while, I found the most complicated topic to be understood in openstack project is Networking and how instances ( formerly virtual machines) are communicated with each other and with external world.

Unlike VMWare ESXI, where you can just create vSwitch and attach a VM to it, Openstack Networking is much more complex that that. You need first to define Network type itself(Flat, VLAN, VxLAN, GRE), attach it to the subnet with IPv4 or IPv6 Block, Create a Floating IP address if this network will be connected externally to a provider network and optionally create an internal router to route between different networks and subnets. lots of steps!

image

Floating ip and neutron router in nutshellimage

Also Neutron itself doesn’t provide an actual networking to the instances. it just a wrapper to a drivers called “Mechanism Drivers” on which they provide the actual networking(switching, routing and so on). The most famous one is the OpenVswitch which provide basic and advanced switching between instances and external world

image

But openvswtich lack the capability of enforcing security policy over incoming and outgoing packets, That’s why Openstack community choose to connect the linuxBridge with OpenVswitch to solve this problem which introduce another layer of complexity!

Imagine that you need to attach one ethernet interface to instance. Openstack creates additional Four different interfaces to satisfy the need of OpenVswitch and LinuxBridge. Very complex approach really!. Below is an example of these interfaces. You can find more about it by clicking on image itslef!

So Where’s the problem?

when you face a problem in openstack networking like instance is not pingable from outside world, You can’t reach the instance gateway, You can’t get an IP address from DHCP pool or even you don’t see any incoming or outgoing traffic from it. Chances are you’ve missed something in networking configuration and you need to fix it.

Let’s start by answering the following questions:

1- How many interfaces assigned to an instance

2- What’s  the MAC address of each interface?

3- What’s the IP address of each interface?

4- What’s the internal VLAN assign by OVS to our interface?

5- How will the External Network (Provider Network) treat the traffic from each interface? (Strip VLAN, Add a VLAN, Modify a VLAN..etc)

6-Which ports in integration bridge (br-int) and External Bridge (br-ex) are connecting our instance ? and which flow table rules are applied on them

Answering the above questions will help us , a lot , in troubleshooting any networking problem in openstack.

You can use some useful commands like (ip a , ovs-vsctl show, neutron port-list ..etc) in your troubleshooting. However you will spent a lot of time trying to connecting everything together especially if you’ve environment with hundreds of instances and hundreds of networks.

So let’s Automate this job by using Python!

I wrote a python script that can do this job easily. it utilize two famous python libraries requests and netmiko  to connect to Openstack Keystone API service , grep the required information from it and parse the returned info and finally connecting the dots . it will print a nice report with all detailed information.

So How Does it Work?

First we define the Openstack Credentials (if you’ve multi-node installation then define the keystone ip address)

image

Then will send API request to Openstack Keystone to generate a Token. Token will be used later to authenticate us against any other openstack service

image

You can see the Openstack Token workflow in below picture. Don’t forget that Token has an expiration time so you have to use it before that date.

Next we will parse the returned output to find out the MAC address and IP address. I wrote a function on which you give it an instance name and it will do the rest. I thought it would be better to write it like that in case I need to use it later in any of my other projects

image

Unfortunately, OVS doesn’t provide an API interface like openstack. So I had to use the netmiko  library to send the required commands and parse the output using the linux text stream like cut and grep commands. The returned output require additional handling on which I choose to do from Python itself.

image

Finally I defined a function that use the above two methods to generate the required report. The returned output is concatenated together and grouped per physical (or should I say Virtual!) network interface

image

This is where you connect the dot for each part of neutron project either neutron itself or any defined mechanism drivers.

Testing:

image

Running this code against one my Openstack environment, I can easily identify how openstack networking handle and forward the traffic from each interface in my instance.

You can answer the above mentioned questions, whether the IP address, MAC , VLAN tagging and OVS bridge handling per Network interface attached to the instance

You can even visualize it Smile

image

Finally you can Find the code in my GitHub repo here

Wrapping Up

Many people find openstack is complex and hard to understand, I partially agree with them. However it provides a lot of tools and interfaces on which can be used to get the job done and make your life easy. Neutron is a great and modular project under openstack umbrella and you can automate a lot of neutron tasks by using Python. The Sky is your only limit.

I hope this has been informative for your and I’d like to thank you for reading. Feel free to comment or share your experience in troubleshooting problems in openstack

عن الوظايف والتوظيف والمهندسين

المهندسين دونا عن خلق الله كلهم
اكتر ناس بيعانوا من اول مبيدخلوا الكلية
5 سنين
عذاب يومي في الدراسة والمشاريع والامتحانات و و
بعد كدة يخبط في عمود اسمع مشروع التخرج
يدفعله مبلغ محترم في تعليم مفترض انه مجاني
واخيرا يرمي ده كله ورا ضهره ويبدء في ال
iti
او في كورسات في سنترز عشان يلاقي شغل
علي اساس ان الخمس سنين اللي درس فيهم وطلع عينه ولا ليهم لازمة
مش كافيين عشان يأهلوه لسوق العمل
كانوا هذار
ويبدء بأة يحفي علي المنتديات والمدونات وجروبات الفيس بوك علي اعلانات وظايف
وابعت يامعلم

ويروح في انترفيوهات اتش ار وتيكنيكال ومع كل واحد في الشركة..نظام بيتسلوا عليه
وهو اصلا بيبقي حافظ اسئلة الاتش ار وصاممها
شايف نفسك بعد 5 سنين ايه؟؟
قولي موقف صعب مر بيك؟؟
صحابك بيقولوا عليك ايه؟؟
قولي تحدي واجهته؟؟
انت عارف..وهما عارفين..وكلنا عارفين ان الاسئلة ديه جايبنها من علي النت وحافظينها
لا بتعبر عن الحقيقة..ولا ليها اي لازمة
بس عشان المسرحية تكمل يعني
بعد كدة بكل قرف..هنبقي نتصل بيك…بررررررررة
ولو كان محظوظ واتقبل في الشركة ديه
يتشرطوا عليه ويمضوه علي وصلات امانة او شرط جزائي ده غير ساعات العمل الغير ادمية
مش ببالغ والله اوشايف نص الكوباية الفاضي
بس اصل مش منطقي كل اللي بيحصل ده؟؟؟
يعني بشوف برة..المهندسين برة
بيتخرج..بياخد حاجة اسمها
Recommendation letter
من البروفيسور الي كان بيشرف عليه..انه شخص كويس وملتزم وبيحقق اهدافه
وديه علي فكرة ممكن تغير حياته بالكامل..مش اي حد بياحد الجواب ده الا لو كان مستاهله فعلا
بعد كدة بياخد كورس خفيف عن اساليب الادارة..اساليب الشغل في تيم…كورس عن تنظيم الوقت

وشكرا…بيقدم وبيشتغل عالطول..مبيعقدش بالسنين زي عندنا

ده راجع لسبب مهم
ان عندهم فعلا فرص شغل كتيرة وعايزين مهندسين..ونسبة المهندسين قليلة مش زي عندنا
وده منطقي عشان هما عندهم اكبر المصانع والشركات اللي بتشتغل في التكنولوجيا
انتل..مايكروسوفت..بي ام دبليو..ابل..الخ
بس هو في الاخر بيشتغل في هندسة…مش في مجال تاني
عندنا هنا في مصر…كارثة والله
مهندسين اتصالات بيقطعوا بعض بجد علي وظيفة….
call center
قاعد طول اليوم يرد علي العملاء..واحنا اسفين يافندم…طب حاضر..الخدمة هتوصل حالا….حضرتك مدفعتش فاتورة شهر يناير
ايه ده؟؟؟
ده شغل مهندس اتصالات في مصر؟؟؟؟؟؟؟؟
هل ده شغل هندسة؟؟
وياريت عاجب…ابدا…ده اللي يجيله الوظيفة ديه بيبقي هيطير من الفرح…وعنده حق عشان مفيش غيرها
او
تشتغل في شركات ال
embedded system
زي فاليو
بمرتب مش وحش..حوالي الفين ونص تقريبا…بس
tester
يعني مهندسين المانيا يكتبوا 80 في المية من الكود..ويتأكدوا انه شغال
والشركة عشان توفر وقت المهندسين دول..تروح باعتها للمهندسين في مصر يعملوا عليه
test
او يكتبوا هما ال
documentation
ومنطقهم في ده..ان كدة هيوفروا
حسب كلام واحد صاحبي
msayed
ان ساعة المهندس الالماني هناك ب 25 يورو
ساعة التيم الكامل في مصر ب 26 يورو
التيم ده ممكن 10 مثلا
ففي الاخر بترسي علي 2.5 يورو للفرد
فهو ليه يدفع 25 يورو لمهندس عشان مجرد يعمل تيست؟..طب موفرهم واخليه يعملي مشروع تاني..وابعت البروجكت ده للمصرييين او اللي في الشرق الاوسط وخلاص
هل ده شغل هندسة؟؟
نفس النظام بالمللي في ال
communications
بتفضل تلف محافظات مصر كلها عشان تركب ابراج

اللي هي الاخر العمال هما اللي بيعملوها..وبيبقي جايلك الديزاين جاهز والمكان وانت بس دورك تركب وتمشي
هل ده شغل هندسة؟؟
او في طبية لما تبقي كل المهارات المطلوبة انك تبقي شخص تقدر تقنع اللي قدامك انه يشتري الجهاز اللي الشركة اللي انت شغال فيها بتبيعه
مندوب مبيعات

هل ده شغل هندسة؟؟

الموضوع ده مش هينفع يتحل غير بحاجتين
اولا
لازم ماسورة الثانوية اللي بتطلع بس في كليتنا 2500 طالب جديد كل سنة تتقفل شوية
اعتقد كل سنة عدد خريجين هندسة فقط حوالي 30000 واحد
ده كل سنة…هيلاقوا امتي فرصة شغل قبل مالسنة الجديدة تيجي ويتخرج تلاتين الف تانين
ده تعليم حكومي فقط..مش الكليات الخاصة كمان
لازم متبقاش كلية الهندسة هي اعلي كلية في مجموعة علم رياضة
لازم يبقي فيه كليات تانية عالية وكويسة عشان تخف الحمل شوية
ويكون فيه اختبارات قبل الالتحاق بكلية الهندسة..ويكون فيه جوابات ترشيح من مدرسين ثانوي للطلاب…والجوابات ديه تبقي شرط اساسي للالتحاق بالكلية
ثانيا
لا يوجد اي امل انك تغير في تفكير الشركات الكبيرة وفي بصتها لينا علي اننا مستوي تاني من المهندسين
سواء فودافون او اورانج او فاليو..او اي شركة
هما معتبرين المصريين والهنود من ارخص العمالة الموجودين
بس الهنود حاليا بأة عندهم شركات وصناعة خاصة بيهم هما..واجبروا الشركات ديه انها تحترمهم وتخلقلهم فرص عمل تليق بيهم بجد
احنا لازم نكون مع نفسينا شركات بتشتغل في التكنولوجيا
جروب مهندسين من اتصالات وطبية وباور يعمل شركة
ويبدء ينتج ويشتغل هو مع نفسه..بدل ميشتغل في خدمة عملاء او مندوبين مبيعات
ده حصل علي فكرة في شركة ..مش متذكر اسمها حاليا
اعتقد
sysdsoft
بعد كام سنة من الشغل وبعد مبقي ليهم منتجاتهم
شركة انتل جت واشترت الشركة
دليل يعني انهم كانوا ناجحين جدااا
اعتقد مشكلتنا دايما هي في الخطوة الاولي

لازم ناخد خطوة عشان نغير الواقع السيء اللي احنا بنعيشه او اللي بيتفرض علينا من الشركات ديه
ناس كتير هتقول طب فين الخبرة..منعرفش نسوق منتاجتنا…طب لو خسرنا
هقولك هي الدنيا كدة…مكسب وخسارة…طبيعي هتخسر زي مهو طبيعي هتكسب
بس طول منتا بتخطط صح وباصص لقدام..وعارف السوق عايز ايه وامتي…..فثق انك هتنجح ان شاء الله
مفيش اي سبب يخليك تفشل..غير انت