Issue
I was recently asked to create a script, for monitoring by ping a specific service/IP .... and in the event of a fault for three consecutive times to take actions on NSX-T.
In my case, the action to be taken in NSX-T was to put a specific EDGE into maintenance.
Solution
First of all, what we want to realize is a bash script to run on a linux machine ... but, we also need to find out how to retrieve the NSX-T information we need via the REST API.
Let's start finding out how to retrieve information we need from the NSX-T Data Center REST API web site.
Having a linux environment available, my REST API calls will be executed using the curl command. Most API calls require authentication. NSX-T Data Center API supports several different authentication schemes, which are documented in link above. Multiple authentication schemes may not be used concurrently.
For our purpose is enough to use the Basic encoded Authentication. To do this, we modify the following call:
curl -k -u 'admin:VMware1!VMware1!' https://<nsx-mgr>/api/v1/logical-portsin the
curl -k -H "Authorization: Basic YWRtaW46Vk13YXJlMSFWTXdhcmUxIQ==" https://<nsx-mgr>/api/v1/logical-portsTo encode the string 'admin:VMware1!VMware1!' it's enough execute, on a linux machine the command
echo -n 'admin:VMware1!VMware1!' | base64Now, we need to retrieve the proper information regarding the EDGE (in my case "edge01a") we want to collect; executing the following command:
curl -k -H "Authorization: Basic YWRtaW46Vk13YXJlMSFWTXdhcmUxIQ==" https://<nsx-mgr>/api/v1/transport-nodesFrom the outcome let's look for the display name row with the edge name (in my case edge01a as shown below) and take note of the identifier "id" indicated in the line above ("id": "32340c58-6f28-412c-9f75-c455f8d11323").
If we run the modified command as below, we get detailed information about the edge.
curl -k -H "Authorization: Basic YWRtaW46Vk13YXJlMSFWTXdhcmUxIQ==" https://<nsx-mgr>/api/v1/transport-nodes/32340c58-6f28-412c-9f75-c455f8d11323
Now we have collected all the information we need we can create the bash script as the following
#!/bin/bash # # Author: Lorenzo Moglie (ver.1.0 28.05.2021) # # IP = Active Service/IP that we want monitoring by pinging every $sleeptime (in seconds). # After 3 unsuccessful attempts it performs (in our case) the failover forcing the maintenance of the EDGE (edge01a) # sleeptime = can be set (below), time between one ping and the next by default is 1 # NSX = NSX-T Manager on which we want to launch the command # WARNING : NSX-T Parameters to use in Basic Authorization according to your own needs, in my case: # Username = admin # Password = Vmware1!VMware1! # EDGE ID must be found earlier in my case 32340c58-6f28-412c-9f75-c455f8d11323 # IP='<IP>' sleeptime=1 NSX='<nsx-mgr>' NPing=0 while true; do if [ "$NPing" -eq 3 ] then NPing=0 curl -k -X POST -H "Authorization: Basic YWRtaW46Vk13YXJlMSFWTXdhcmUxIQ==" https://$NSX/api/v1/transport-nodes/32340c58-6f28-412c-9f75-c455f8d11323?action=enter_maintenance_mode else fi ping -c1 $IP 2>/dev/null 1>/dev/null if [ "$?" = 0 ] then NPing=0 echo "OK" else echo "Failure $NPing" NPing=`expr $NPing + 1` fi sleep $sleeptime donelet's see how the script it works below...... as soon as the IP become unreachable .... after three failed attempts.. send the command to put into maintenance mode the edge.
That's it.
Nessun commento:
Posta un commento