Advertisement
Guest User

Untitled

a guest
Sep 28th, 2016
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 9.08 KB | None | 0 0
  1. #!/usr/bin/env python3
  2. import paramiko
  3. import psycopg2
  4. import os
  5. import socket
  6. from pymongo import MongoClient
  7.  
  8. def find_sitesheet_record(site):
  9.     client = MongoClient("mongodb://sitedata:Gibson9371@172.18.64.35/sitesheets")
  10.     db = client.get_default_database()
  11.     sitedata = db['sitedata']
  12.     record = sitedata.find_one({"site_id" : site})
  13.     return record
  14.  
  15. def site_timezone(site):
  16.     EST5EDT = [ "CTHA1", "DCWA1", "DCWA2", "FLFM1", "FLJA1", "FLMI1", "FLMI2", "FLOR1", "FLTA1", "FLWP1",
  17.                "GAAT1", "KYLE1", "KYLO1", "MABO1", "MASP1", "MDBA2", "MEPO1", "MIDE1", "MIFL1",
  18.                "MIGR1", "NCCH1", "NCGR1", "NCRA1", "NYAL1", "NYBU1", "NYNY1", "NYRO1", "NYSY1",
  19.                "OHCI1", "OHCL1", "OHCO1", "OHDA1", "OHTO1", "OHYO1", "PAHA1", "PAJO1", "PAPH2",
  20.                "PAPI1", "PAWB1", "RIPR1", "SCGR1", "TNKN1", "TNTC1", "VANO1", "VARI1", "VARO1",
  21.                "VTBU1", "WVCH1", "TNCH1", "QCMO2", "QCMO3", "FLOR2", "FLTA2", "GASA1", "NYNY2",
  22.                "SCCO1", "SCCH1", "INFW1", "MILA1", "MITC1", "SCMB1", "NCGV1", "FLTH1", "GAMA1",
  23.                "NTV1", "CTV2", "CTV3", "CTV4", "CTV5", "CTV6", "CTV7", "CTV8", "CTV9", "DTV1", "DTV2",
  24.                "MWDV1", "MWDV2", "MABO2", "MABO3", "MABO4", "ONTO1", "ONTO2", "ONTO3", "QCMO1", "FLGA1",
  25.                "ININ1", "INSB1", "SCTV1", "SCTV2", "SCTV3", "SCTV4", "GAAU1", "GACO1", "NCWI1", "WVWH1",
  26.                "GAAL1", "MEBA1", "PAER1", "INTH1", "MDSA1", "NYUT1", "VAHA1", "WVBB1", "WVCL1",
  27.                "WVPA1", "MIMQ1", "NYBI1", "NYWA1", "OHLI1", "NYEM1", "INLA1", "OHZA1", "MIAL1",
  28.                "MIGR1", "NCCH1", "NCGR1", "NCRA1", "NYAL1", "NYBU1", "NYNY1", "NYRO1", "NYSY1",
  29.                "VACH1", "MEPI1" ]
  30.     CST6CDT = [ "ALBI1", "ALMO1", "ARLR1", "IACR1", "IADA1", "IADM1", "ILCH1", "ILCH2", "INEV1",
  31.                 "KSKC1", "KSWI1", "KYPA1", "LANO1", "LASH1", "MNMI1", "MOSL1", "NEOM1", "TXWA1",
  32.                 "OKOC1", "OKTU1", "TNME1", "TNNA1", "TXAU1", "TXDA1", "TXDA2", "TXHO1", "TXHO2",
  33.                 "TXSA1", "WIGB1", "WIMA1", "WIMI1", "MSJA1", "MOSP1", "LABR1", "ALHU1", "ILCP1",
  34.                 "TXBR1", "KSTO1", "ALMG1", "ARFS1", "ILPE1", "LALA1", "TXAM1", "TXLU1", "TXTY1",
  35.                 "TXCC1", "MSBI1", "MOCO1", "MOJO1", "MSTU1", "LAMO1", "NDFA1", "NELI1", "WILC1",
  36.                 "WIWA1", "TXBE1", "ILRO1", "IASC1", "TXWF1", "TXOM1", "SDSF1", "MNDU1", "FLPC1",
  37.                 "MNRO1", "MSHA1", "NDBI1", "TXAB1", "ALDO1", "LALC1", "LAAL1", "KYBG1", "TXSN1",
  38.                 "ARJO1", "ILQU1", "MSME1", "TXLA1", "MSGR1", "TXSH1", "IAOT1", "TNJA1", "TXVI1",
  39.                 "MNMA1", "NENP1", "MOSJ1" ]
  40.     MST7MDT = [ "COCS1", "CODE1", "CODE2", "IDBO1", "NMAL1", "TXEP1", "UTSL1", "ABCA1", "ABED1",
  41.                 "MTBI1", "MTMI1", "IDTF1", "IDIF1", "SDRC1", "WYCH1", "MTBU1", "COGJ1", "MTHE1",
  42.                 "MTGF1", "WYCA1", "MTGL1" ]
  43.     Phoenix = [ "AZPH1", "AZTU1", "AZYU1" ]
  44.     PST8PDT = [ "CAFR1", "CALA1", "CALA2", "CASA1", "CASD1", "CASF1", "CASF2", "NVLV1", "ORPO1",
  45.                 "WASE1", "WASP1", "NVLV2", "CASF3", "CASF4", "CABA1", "NVRE1", "BCVA1", "CASF3",
  46.                 "CAMO1", "CAPS1", "OREU1", "WAYA1", "CACH1", "ORME1", "ORBE1", "CAEU1",
  47.                 "CASB1", "CTV1W", "NTV1W", "PAWC1" ]
  48.     Anchorage = [ "AKAN1", "AKFA1", "AKJU1" ]
  49.     if site in EST5EDT:
  50.         return "EST5EDT"
  51.     elif site in CST6CDT:
  52.         return "CST6CDT"
  53.     elif site in MST7MDT:
  54.         return "MST7MDT"
  55.     elif site in PST8PDT:
  56.         return "PST8PDT"
  57.     elif site in Phoenix:
  58.         return "America/Phoenix"
  59.     elif site in Anchorage:
  60.         return "America/Anchorage"
  61.     elif site == "HIHO1":
  62.         return "Pacific/Honolulu"
  63.     elif site == "NSHA1":
  64.     elif site == "NSHA1":
  65.         return "America/Halifax"
  66.     else:
  67.         return "Unknown"
  68.  
  69. def central_site(cmd):
  70.     import telnetlib
  71.     central = '172.18.64.250'
  72.     tn = telnetlib.Telnet(host=central)
  73.     tn.read_until("Enter Choice>")
  74.     tn.write('TACL\n')
  75.     tn.write('logon mw.v188\n')
  76.     tn.read_until()
  77.  
  78. def is_host_up(ip):
  79.     import subprocess
  80.     r = subprocess.Popen(['timeout', '0.8' , 'ping', '-c1', ip], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
  81.     r.wait()
  82.     if r.returncode == 0:
  83.         return True
  84.     else:
  85.         return False
  86.  
  87. def get_version(ip):
  88.     client = paramiko.SSHClient()
  89.     keys = []
  90.     keys.append(os.environ['HOME'] + '/.ssh/mw8')
  91.     keys.append(os.environ['HOME'] + '/.ssh/mw14')
  92.     client.load_system_host_keys()
  93.     client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  94.     try:
  95.         client.connect(ip, username='mediawatch', key_filename=keys)
  96.     except socket.error:
  97.         print("Could not connect to " , ip)
  98.         return "Unknown"
  99.     stdin,stdout,stderr = client.exec_command('rpm -qa |  grep -- -manager- |  sort')
  100.     result = stdout.read()
  101.     version2output = "gnome-volume-manager-2.17.0-8.fc8\ntns-manager-digital-1.6-1.0\ntns-manager-remops2-2.0.5-1.fc8\n"
  102.     version3output = "gnome-volume-manager-2.17.0-8.fc8\nmediawatch-config-postgresql-manager-1.0.0-1.fc8\ntns-manager-digital-1.7-1.1\ntns-manager-remops3-3.0.0-1.fc8\n"
  103.     version4output = "mediawatch-4-manager-4.0.0-1.fc14.i686\nmediawatch-4-manager-base-4.0.3-1.fc14.i686\nmediawatch-config-postgresql-manager-1.0.0-4.fc14.i686\n"
  104.     stdin.close()
  105.     stdout.close()
  106.     stderr.close()
  107.     client.close()
  108.     if result == version2output:
  109.         return "2"
  110.     elif result == version3output:
  111.         return "3"
  112.     elif result.startswith("mediawatch-4-manager-4."):
  113.         return "4"
  114.     else:
  115.         print("Debug: ", result)
  116.         return "Unknown"
  117.  
  118. def get_service_tag(ip):
  119.     client = paramiko.SSHClient()
  120.     keys = []
  121.     keys.append(os.environ['HOME'] + '/.ssh/mw8')
  122.     keys.append(os.environ['HOME'] + '/.ssh/mw14')
  123.     try:
  124.         client.load_system_host_keys()
  125.         client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  126.         client.connect(ip, username='mediawatch', key_filename=keys)
  127.         stdin,stdout,stderr = client.exec_command('sudo dmidecode -s system-serial-number')
  128.         result = stdout.read()
  129.         stdin.close()
  130.         stderr.close()
  131.         client.close()
  132.         return result.rstrip('\n')
  133.     except:
  134.         return "Error in get_service_tag"
  135.  
  136. def guess_hostname(ip):
  137.     import subprocess, unidecode
  138.     from bs4 import BeautifulSoup
  139.     try:
  140.         useless1, useless2, subnet, host = ip.split('.')
  141.     except ValueError:
  142.         return  "Error in split " +str(ip)
  143.     cmd = 'curl -v --silent http://172.18.64.38/index.php?title=Sitesheets:Subnets 2>&1 |  grep -B1 "<td> ' +str(subnet)+ ' </td>"'
  144.     result = subprocess.check_output(cmd, shell=True)
  145.     soup = BeautifulSoup(result, 'lxml')
  146.     to_process = unidecode.unidecode(soup.text)
  147.     try:
  148.         name, subnet, useless = to_process.split('\n')
  149.     except ValueError:
  150.         return  "Error in split " +str(ip)
  151.     res_site = name.strip(' ')
  152.     res_subnet = subnet.strip(' ')
  153.     if host == '10':
  154.         host_guess = 'MGR'
  155.     elif host == '41':
  156.         host_guess = 'C1'
  157.     elif host == '42':
  158.         host_guess = 'C2'
  159.     elif host == '43':
  160.         host_guess = 'C3'
  161.     elif host == '44':
  162.         host_guess = 'C4'
  163.     elif host == '45':
  164.         host_guess = 'C5'
  165.     else:
  166.         host_guess = 'UNK'
  167.     output = res_site + '-' + host_guess
  168.     return output
  169.  
  170. def get_hostname(ip):
  171.     client = paramiko.SSHClient()
  172.     keys = []
  173.     keys.append(os.environ['HOME'] + '/.ssh/mw8')
  174.     keys.append(os.environ['HOME'] +'/.ssh/mw14')
  175.     client.load_system_host_keys()
  176.     client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  177.     try:
  178.         client.connect(ip, username='mediawatch', key_filename=keys)
  179.         stdin,stdout,stderr = client.exec_command('hostname')
  180.         result = stdout.read()
  181.         stdin.close()
  182.         stderr.close()
  183.         client.close()
  184.         return result.rstrip('\n')
  185.     except:
  186.         return "Error in hostname determination " + str(ip) + " (" + str(guess_hostname(ip)) + ") "
  187.  
  188. def get_site_list():
  189.     sitel = []
  190.     conn = psycopg2.connect(database="oplogs", host="mwops.tnsmi-cmr.com", user="remote", password="littleblue")
  191.     cursor = conn.cursor()
  192.     sitesq = cursor
  193.     sitesq.execute("SELECT * from sitelist WHERE nonsite='f' AND webremops='t' ORDER BY site;")
  194.     sites = sitesq.fetchall()
  195.     for site in sites:
  196.         sitel.append(site[0])
  197.     return sitel
  198.  
  199. def execute_command(ip, command):
  200.     try:
  201.         client = paramiko.SSHClient()
  202.         keys = []
  203.         keys.append(os.environ['HOME'] + '/.ssh/mw8')
  204.         keys.append(os.environ['HOME'] +'/.ssh/mw14')
  205.         client.load_system_host_keys()
  206.         client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  207.         client.connect(ip, username='mediawatch', key_filename=keys)
  208.         stdin,stdout,stderr = client.exec_command(command)
  209.         stdoutr = stdout.read()
  210.         stderrr = stderr.read()
  211.         stdin.close()
  212.         stdout.close()
  213.         stderr.close()
  214.         client.close()
  215.         return stdoutr, stderrr
  216.     except:
  217.         return "Error running command", "Error running command"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement