2022-02-28 06:49:18 -06:00
|
|
|
# ##########################################################################
|
|
|
|
# #
|
|
|
|
# # pgAdmin 4 - PostgreSQL Tools
|
|
|
|
# #
|
2023-01-02 00:23:55 -06:00
|
|
|
# # Copyright (C) 2013 - 2023, The pgAdmin Development Team
|
2022-02-28 06:49:18 -06:00
|
|
|
# # This software is released under the PostgreSQL Licence
|
|
|
|
# #
|
|
|
|
# ##########################################################################
|
|
|
|
|
|
|
|
import urllib3
|
2022-03-11 03:03:30 -06:00
|
|
|
import ipaddress
|
2022-04-26 06:11:10 -05:00
|
|
|
from flask_security import current_user
|
|
|
|
from pgadmin.misc.bgprocess.processes import IProcessDesc
|
|
|
|
from pgadmin.model import db, Server
|
2022-04-29 05:48:28 -05:00
|
|
|
from flask_babel import gettext
|
2022-08-11 00:19:45 -05:00
|
|
|
from pgadmin.utils import get_server
|
2022-02-28 06:49:18 -06:00
|
|
|
|
|
|
|
|
|
|
|
def get_my_ip():
|
|
|
|
""" Return the public IP of this host """
|
2022-08-12 06:44:15 -05:00
|
|
|
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
|
|
|
|
http = urllib3.PoolManager(cert_reqs='CERT_NONE')
|
2022-02-28 06:49:18 -06:00
|
|
|
try:
|
2022-08-12 06:44:15 -05:00
|
|
|
external_ip = http.request('GET', 'https://ifconfig.me/ip').data
|
2022-02-28 06:49:18 -06:00
|
|
|
except Exception:
|
|
|
|
try:
|
2022-08-12 06:44:15 -05:00
|
|
|
external_ip = http.request('GET', 'https://ident.me').data
|
2022-02-28 06:49:18 -06:00
|
|
|
except Exception:
|
|
|
|
external_ip = '127.0.0.1'
|
|
|
|
|
2023-07-31 07:44:39 -05:00
|
|
|
if isinstance(external_ip, bytes):
|
2022-03-11 03:03:30 -06:00
|
|
|
external_ip = external_ip.decode('utf-8')
|
|
|
|
|
|
|
|
ip = ipaddress.ip_address(external_ip)
|
|
|
|
if isinstance(ip, ipaddress.IPv4Address):
|
|
|
|
return '{}/{}'.format(external_ip, 32)
|
|
|
|
elif isinstance(ip, ipaddress.IPv6Address):
|
|
|
|
return '{}/{}'.format(external_ip, 128)
|
|
|
|
|
2022-03-02 07:32:35 -06:00
|
|
|
return '{}/{}'.format(external_ip, 32)
|
2022-04-26 06:11:10 -05:00
|
|
|
|
|
|
|
|
|
|
|
def _create_server(data):
|
|
|
|
"""Create Server"""
|
|
|
|
server = Server(
|
|
|
|
user_id=current_user.id,
|
|
|
|
servergroup_id=data.get('gid'),
|
|
|
|
name=data.get('name'),
|
|
|
|
maintenance_db=data.get('db'),
|
|
|
|
username=data.get('username'),
|
|
|
|
cloud_status=data.get('cloud_status'),
|
2023-01-23 05:49:59 -06:00
|
|
|
connection_params={'sslmode': 'prefer', 'connect_timeout': 30}
|
2022-04-26 06:11:10 -05:00
|
|
|
)
|
|
|
|
|
|
|
|
db.session.add(server)
|
|
|
|
db.session.commit()
|
|
|
|
|
|
|
|
return server.id
|
|
|
|
|
|
|
|
|
|
|
|
class CloudProcessDesc(IProcessDesc):
|
|
|
|
"""Cloud Server Process Description."""
|
|
|
|
def __init__(self, _sid, _cmd, _provider, _instance_name):
|
|
|
|
self.sid = _sid
|
|
|
|
self.cmd = _cmd
|
|
|
|
self.instance_name = _instance_name
|
|
|
|
self.provider = 'Amazon RDS'
|
|
|
|
|
2023-04-28 04:46:22 -05:00
|
|
|
if _provider == 'aws':
|
2022-04-26 06:11:10 -05:00
|
|
|
self.provider = 'Amazon RDS'
|
|
|
|
elif _provider == 'azure':
|
2023-03-13 04:26:16 -05:00
|
|
|
self.provider = 'Azure Database'
|
|
|
|
elif _provider == 'google':
|
|
|
|
self.provider = 'Google Cloud SQL'
|
2022-04-26 06:11:10 -05:00
|
|
|
else:
|
2023-03-13 04:26:16 -05:00
|
|
|
self.provider = 'EDB BigAnimal'
|
2022-04-26 06:11:10 -05:00
|
|
|
|
|
|
|
@property
|
|
|
|
def message(self):
|
2022-04-29 05:48:28 -05:00
|
|
|
return gettext("Deployment on {0} is started for instance {1}.".format(
|
|
|
|
self.provider, self.instance_name))
|
2022-04-26 06:11:10 -05:00
|
|
|
|
|
|
|
def details(self, cmd, args):
|
2022-08-11 00:19:45 -05:00
|
|
|
server = getattr(get_server(self.sid), 'name', "Not available")
|
|
|
|
|
|
|
|
return {
|
|
|
|
"message": self.message,
|
2022-08-18 08:12:03 -05:00
|
|
|
"cmd": self.cmd,
|
2022-08-11 00:19:45 -05:00
|
|
|
"server": server,
|
|
|
|
"object": self.instance_name,
|
|
|
|
"type": self.provider,
|
|
|
|
}
|
2022-04-26 06:11:10 -05:00
|
|
|
|
|
|
|
@property
|
|
|
|
def type_desc(self):
|
2022-04-29 05:48:28 -05:00
|
|
|
return gettext("Cloud Deployment")
|