Skip to content

Instantly share code, notes, and snippets.

@8parth
Last active February 15, 2021 06:32
Show Gist options
  • Save 8parth/993d2fc0f2139ab5da5cb0c952013d00 to your computer and use it in GitHub Desktop.
Save 8parth/993d2fc0f2139ab5da5cb0c952013d00 to your computer and use it in GitHub Desktop.
Adds machine's external ip address to gcloud sql instance's whitelisted ip list

Description

Adds machine's external ip address to gcloud sql instance's whitelisted ip list.

Installation

  1. Generate service account json file as mentioned in gcloud authentication guide. https://github.com/googleapis/google-cloud-common/tree/master/authentication

  2. Install dependencies pip install -r requirements.txt

Usage

python add_ip_to_instance.py {PROJECT-ID} --name {INSTANCE}

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)
appnope==0.1.2
backcall==0.2.0
cachetools==4.1.1
certifi==2020.11.8
cffi==1.14.4
chardet==3.0.4
decorator==4.4.2
google-api-core==1.23.0
google-api-python-client==1.12.5
google-auth==1.23.0
google-auth-httplib2==0.0.4
google-cloud-core==1.5.0
google-cloud-storage==1.35.0
google-crc32c==1.1.0
google-resumable-media==1.2.0
googleapis-common-protos==1.52.0
httplib2==0.18.1
idna==2.10
ifaddr==0.1.7
ipykernel==5.4.2
ipython==7.19.0
ipython-genutils==0.2.0
jedi==0.17.2
jupyter-client==6.1.7
jupyter-core==4.7.0
lxml==4.6.2
miniupnpc==2.0.2
parso==0.7.1
pexpect==4.8.0
pickleshare==0.7.5
prompt-toolkit==3.0.8
protobuf==3.13.0
ptyprocess==0.6.0
pyasn1==0.4.8
pyasn1-modules==0.2.8
pycparser==2.20
Pygments==2.7.3
python-dateutil==2.8.1
pytz==2020.4
pyzmq==20.0.0
requests==2.25.0
requests-toolbelt==0.9.1
rsa==4.6
six==1.15.0
tornado==6.1
traitlets==5.0.5
upnpclient==1.0.3
uritemplate==3.0.1
urllib3==1.26.1
wcwidth==0.2.5
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment