import subprocess import os import json import requests import sys import csv import re class PaaSSetupCheck(): def run_test(self, site_name): try: network_ok = False namespace_ok = False network_unreachable = False cc_unreachable = False url = 'https://middleware.vcpfe.vzwops.com/orchestration/remote-regions/' + site_name + '/site-details' network_setup_url = 'https://middleware.vcpfe.vzwops.com/orchestration/remote-regions/' + site_name + '/setup-network' namespace_setup_url = 'https://middleware.vcpfe.vzwops.com/orchestration/setup-cluster/' + site_name #url = 'http://middleware.meter.vzwops.com:3080/orchestration/remote-regions/' + site_name + '/site-details' #network_setup_url = 'http://middleware.meter.vzwops.com:3080/orchestration/remote-regions/' + site_name + '/setup-network' #namespace_setup_url = 'http://middleware.meter.vzwops.com:3080/orchestration/setup-cluster/' + site_name #namespace_setup_url_1 = 'https://middleware.vcpfe.vzwops.com/orchestration/setup-cluster/' + site_name + '?network_setup=false' #url = 'http://localhost:8000/orchestration/remote-regions/' + site_name + '/site-details' #network_setup_url = 'http://localhost:8000/orchestration/remote-regions/' + site_name + '/setup-network' #namespace_setup_url = 'http://localhost:8000/orchestration/setup-cluster/' + site_name auth = ('SVC-Far-Edge','QxbV44IU4P7t7rN44dxK4xyPB'); resp = requests.get(url, auth=auth, verify=False) if resp.status_code == 500: network_unreachable = True print(site_name + ' ssh network unreachable') else: print(resp.json()) cc_status = resp.json()['setup_details']['online_status'] if not cc_status: cc_unreachable = True else: namespaces = resp.json()['setup_details']['namespaces'] for namespace in namespaces: print('namespace: ' + namespace) if 'Unable to connect to the server' in namespace: network_unreachable = True print(site_name + ' k8s network unreachable') break else: x = re.search("^wsbomagj-.*[0-9]$", namespace.split(' ')[0]) if x: # check secrets secrets = resp.json()['setup_details']['ns_secrets'] total_secrets = 0 for secret in secrets: if 'admin-registry-secret' in secret: total_secrets = total_secrets + 1 if 'ceph-pool-kube-rbd' in secret: total_secrets = total_secrets + 1 if 'default-token' in secret: total_secrets = total_secrets + 1 if 'vran-serviceaccount-token' in secret: total_secrets = total_secrets + 1 if total_secrets == 4: # check service accounts total_sa = 0 serviceaccounts = resp.json()['setup_details']['ns_service_accounts'] for sa in serviceaccounts: if 'default' in sa: total_sa = total_sa + 1 if 'vran-serviceaccount' in sa: total_sa = total_sa + 1 if total_sa == 2: print(site_name + ': ' + namespace + ' namespace is created') namespace_ok = True if not network_unreachable and not cc_unreachable: network_no = len(resp.json()['setup_details']['network_details']) if network_no and network_no >= 15: print(site_name + ' network setup succeeded') network_ok = True; if namespace_ok: if network_ok: print(site_name + " both namespace and network setup correct. yay.") else: print(site_name + ' namespace is okay, network setup failed.') print('calling setup-network for: ' + site_name) # call network_setup network_setup_resp = requests.put(network_setup_url, auth=auth, verify=False) else: if network_ok: print(site_name + " namespace setup failed, network okay.") print('calling setup-cluster with network_setup=false query parameter.') payload = {'network_setup': 'false'} namespace_setup_resp = requests.get(namespace_setup_url, auth=auth, params=payload, verify=False) else: print(site_name + 'both namespace and network NOT setup') namespace_setup_resp = requests.get(namespace_setup_url, auth=auth, verify=False) print('called setup-cluster') except Exception as e: print(e) return network_ok, namespace_ok, network_unreachable, cc_unreachable if __name__ == '__main__': if len(sys.argv) < 1: print("Usage:") print(" python paas-set-check.py ") exit(0) site_list_file = sys.argv[1] print("Input WR installed site list file:" + site_list_file) paasSetupCheck = PaaSSetupCheck() with open('network_setup_succeed.csv', mode='w') as succeed_file: with open('network_setup_fail.csv', mode='w') as fail_file: with open('namespace_setup_succeed.csv', mode='w') as namespace_succeed_file: with open('namespace_setup_fail.csv', mode='w') as namespace_fail_file: with open('network-namespace_setup_succeed.csv', mode='w') as network_namespace_succeed_file: with open('network-unreachable.csv', mode='w') as network_unreachable_file: with open('cc-unreachable.csv', mode='w') as cc_unreachable_file: writer0 = csv.writer(succeed_file, delimiter=' ', quotechar='"', quoting=csv.QUOTE_MINIMAL) writer1 = csv.writer(fail_file, delimiter=' ', quotechar='"', quoting=csv.QUOTE_MINIMAL) writer2 = csv.writer(namespace_succeed_file, delimiter=' ', quotechar='"', quoting=csv.QUOTE_MINIMAL) writer3 = csv.writer(namespace_fail_file, delimiter=' ', quotechar='"', quoting=csv.QUOTE_MINIMAL) writer4 = csv.writer(network_namespace_succeed_file, delimiter=' ', quotechar='"', quoting=csv.QUOTE_MINIMAL) writer5 = csv.writer(network_unreachable_file, delimiter=' ', quotechar='"', quoting=csv.QUOTE_MINIMAL) writer6 = csv.writer(cc_unreachable_file, delimiter=' ', quotechar='"', quoting=csv.QUOTE_MINIMAL) with open(site_list_file) as csv_file: csv_reader = csv.reader(csv_file, delimiter=',') line_count = 0 ok_count = 0 bad_count = 0 network_ok_count = 0 network_not_ok_count = 0 namespace_ok_count = 0 namespace_not_ok_count= 0 cc_unreachable_count = 0 for row in csv_reader: print(f'\t{row[0]}') #site_name = 'wsbomagj-d325030-001'; site_name = row[0]; network_ok, namespace_ok, network_unreachable, cc_unreachable = paasSetupCheck.run_test(site_name) print(network_ok, namespace_ok) if network_ok and namespace_ok: writer4.writerow({site_name}) ok_count += 1 if network_unreachable: writer5.writerow({site_name}) bad_count += 1 if cc_unreachable: writer6.writerow({site_name}) cc_unreachable_count += 1 if network_ok: writer0.writerow({site_name}) network_ok_count += 1 elif not network_unreachable: writer1.writerow({site_name}) network_not_ok_count += 1 print(site_name + ' network setup failed') if namespace_ok: writer2.writerow({site_name}) namespace_ok_count += 1 elif not network_unreachable: writer3.writerow({site_name}) namespace_not_ok_count += 1 print(site_name + ' namespace setup failed') line_count += 1 print(f'Processed {line_count} lines.') print(f'{ok_count} of {line_count} ready-to-go sites. file: network-namespace_setup_succeed.csv') print(f'{bad_count} of {line_count} bad sites. file: network-unreachable.csv') print(f'{cc_unreachable_count} of {line_count} central controller unreachable sites. file: cc-unreachable.csv') print(f'{network_ok_count} of {line_count} sites with no network problem. file: network_setup_succeed.csv') print(f'{network_not_ok_count} of {line_count} sites with network problem. file: network_setup_fail.csv') print(f'{namespace_ok_count} of {line_count} sites with no namespace problem. file:namespace_setup_succeed.csv') print(f'{namespace_not_ok_count} of {line_count} sites with namespace problem. file: namespace_setup_fail.csv')