|
import argparse |
|
import requests |
|
import socket |
|
from googleapiclient import discovery |
|
|
|
# { "settings": { "ipConfiguration": { "authorizedNetworks": [ { "name": "TEST-NET", "value": "", "kind": "sql#aclEntry" } ] } } } |
|
def main(project, zone, instance_name, keyname, wait=True): |
|
print('Project: ', project) |
|
print('Zone: ', zone) |
|
print('Instance name: ', instance_name) |
|
print('Key: ', keyname) |
|
externalIpAddr = getExternalIp() |
|
if(externalIpAddr): |
|
print('External IP: ', externalIpAddr) |
|
try: |
|
service = discovery.build('sqladmin', 'v1beta4') |
|
resp = service.instances().get(instance=instance_name, project=project).execute() |
|
if(resp and resp['settings']): |
|
authotizedNetworks = resp['settings']['ipConfiguration']['authorizedNetworks'] |
|
authotizedNetworks |
|
authotizedNetwork = next((authotizedNetwork for authotizedNetwork in authotizedNetworks if authotizedNetwork['value'] == externalIpAddr), None) |
|
if(authotizedNetwork is None): |
|
authotizedNetworks.append({ "name": keyname, "value": externalIpAddr, "kind": "sql#aclEntry" }) |
|
print('Adding IP...') |
|
print(authotizedNetworks) |
|
req_body = { "settings": { "ipConfiguration": { "authorizedNetworks": authotizedNetworks } } } |
|
service.instances().patch(instance=instance_name, project=project, body=req_body).execute() |
|
print('IP added successfully!') |
|
else: |
|
print('IP already exists!') |
|
except Exception as e: |
|
print('Internal Error: ', e) |
|
else: |
|
print('Not connected to Internet.') |
|
|
|
def getExternalIp(): |
|
try: |
|
return requests.get('https://checkip.amazonaws.com').text.strip() |
|
except Exception as e: |
|
print('Error during IP fetch: ', e) |
|
return None |
|
|
|
if __name__ == '__main__': |
|
parser = argparse.ArgumentParser( |
|
description=__doc__, |
|
formatter_class=argparse.RawDescriptionHelpFormatter) |
|
parser.add_argument('project_id', help='Your Google Cloud project ID.') |
|
parser.add_argument( |
|
'--zone', |
|
default='asia-south1-b', |
|
help='Compute Engine zone to deploy to.') |
|
parser.add_argument( |
|
'--name', default='demo-instance', help='New instance name.') |
|
parser.add_argument( |
|
'--keyname', default=socket.gethostname()) |
|
|
|
args = parser.parse_args() |
|
|
|
main(args.project_id, args.zone, args.name, args.keyname) |