|
import sys |
|
import json |
|
|
|
from pprint import pprint |
|
|
|
from googleapiclient import discovery |
|
from oauth2client.client import GoogleCredentials |
|
|
|
|
|
def get_forwarding_rules(service, project): |
|
request = service.forwardingRules().aggregatedList(project=project) |
|
nextFn = service.forwardingRules().aggregatedList_next |
|
return _aggregated_list(request, nextFn) |
|
|
|
|
|
def get_firewalls(service, project): |
|
request = service.firewalls().list(project=project) |
|
nextFn = service.firewalls().list_next |
|
return _list(request, nextFn) |
|
|
|
|
|
def get_routes(service, project): |
|
request = service.routes().list(project=project) |
|
nextFn = service.routes().list_next |
|
return _list(request, nextFn) |
|
|
|
|
|
def get_subnets(service, project): |
|
request = service.subnetworks().aggregatedList(project=project) |
|
nextFn = service.subnetworks().aggregatedList_next |
|
return _aggregated_list(request, nextFn) |
|
|
|
|
|
def get_networks(service, project): |
|
request = service.networks().list(project=project) |
|
nextFn = service.networks().list_next |
|
return _list(request, nextFn) |
|
|
|
|
|
def get_service_projects(service, project): |
|
request = service.projects().getXpnResources(project=project) |
|
nextFn = service.projects().getXpnResources_next |
|
items_key='resources' |
|
return _list(request, nextFn, items_key) |
|
|
|
|
|
def get_routers(service, project): |
|
request = service.routers().aggregatedList(project=project) |
|
nextFn = service.routers().aggregatedList_next |
|
return _aggregated_list(request, nextFn) |
|
|
|
|
|
def _list(request, nextFn, items_key='items'): |
|
results = [] |
|
try: |
|
while request is not None: |
|
response = request.execute() |
|
|
|
for item in response[items_key]: |
|
results.append(item) |
|
|
|
request = nextFn(previous_request=request, previous_response=response) |
|
except: |
|
pass |
|
return results |
|
|
|
|
|
def _aggregated_list(request, nextFn, items_key='items'): |
|
results = {} |
|
try: |
|
while request is not None: |
|
response = request.execute() |
|
|
|
for name, values in response[items_key].items(): |
|
results[name] = values |
|
request = nextFn(previous_request=request, previous_response=response) |
|
except: |
|
pass |
|
return results |
|
|
|
|
|
def _main(project): |
|
credentials = GoogleCredentials.get_application_default() |
|
|
|
service = discovery.build('compute', 'v1', credentials=credentials) |
|
results = {} |
|
|
|
results['firewalls'] = get_firewalls(service, project) |
|
results['forwardingRules'] = get_forwarding_rules(service, project) |
|
results['routes'] = get_routes(service, project) |
|
results['routers'] = get_routers(service, project) |
|
results['networks'] = get_networks(service, project) |
|
results['serviceProjects'] = get_service_projects(service, project) |
|
results['subnets'] = get_subnets(service, project) |
|
|
|
|
|
print(json.dumps(results, sort_keys=True, indent=4)) |
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
if len(sys.argv) > 1: |
|
project = sys.argv[1] |
|
_main(project) |
|
else: |
|
print('usage: network_report.py {project ID}') |