Skip to content

Commit

Permalink
feat: updated exporter & nextgen to support export of x/hybrid
Browse files Browse the repository at this point in the history
  • Loading branch information
anaik91 committed Jan 28, 2025
1 parent 9cb6c5c commit 3ad59f7
Show file tree
Hide file tree
Showing 2 changed files with 283 additions and 57 deletions.
81 changes: 46 additions & 35 deletions exporter.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import os
import json
from classic import ApigeeClassic
from nextgen import ApigeeNewGen
from utils import create_dir, run_parallel, write_file, write_json
from base_logger import logger

Expand Down Expand Up @@ -69,9 +70,12 @@ def __init__(self, baseurl, org, token, auth_type, ssl_verify): # noqa pylint:
self.org = org
self.token = token
self.auth_type = auth_type
self.opdk = ApigeeClassic(baseurl, org,
token, self.auth_type,
ssl_verify=ssl_verify)
self.apigee = ( ApigeeNewGen(org, token, 'ENVIRONMENT_TYPE_UNSPECIFIED')
if 'apigee.googleapis.com' in baseurl else
ApigeeClassic(baseurl, org,
token, self.auth_type,
ssl_verify=ssl_verify))
self.apigee_type = 'x' if 'apigee.googleapis.com' in baseurl else 'edge'
self.env_object_types = {
'targetservers': 'targetServers',
'keyvaluemaps': 'kvms',
Expand Down Expand Up @@ -102,7 +106,7 @@ def export_env(self):
environment-specific configurations.
"""
logger.info("--Exporting environments--")
envs = self.opdk.list_environments()
envs = self.apigee.list_environments()

for env in envs:
self.export_data['envConfig'][env] = {}
Expand All @@ -115,13 +119,17 @@ def export_vhosts(self):
Stores the virtual host configuration in the
export_data dictionary.
"""
envs = self.export_data['envConfig'].keys()
for env in envs:
self.export_data['envConfig'][env]['vhosts'] = {}
vhosts = self.opdk.list_env_vhosts(env)
for vhost in vhosts:
vhost_data = self.opdk.get_env_vhost(env, vhost)
self.export_data['envConfig'][env]['vhosts'][vhost] = vhost_data # noqa
if self.apigee_type == 'x':
env_groups = self.apigee.list_env_groups()
self.export_data['orgConfig']['envgroups'] = env_groups
else:
envs = self.export_data['envConfig'].keys()
for env in envs:
self.export_data['envConfig'][env]['vhosts'] = {}
vhosts = self.apigee.list_env_vhosts(env)
for vhost in vhosts:
vhost_data = self.apigee.get_env_vhost(env, vhost)
self.export_data['envConfig'][env]['vhosts'][vhost] = vhost_data # noqa

def export_env_objects(self, env_objects_keys, export_dir):
"""Exports environment-level objects.
Expand All @@ -138,7 +146,7 @@ def export_env_objects(self, env_objects_keys, export_dir):
"""
for env in self.export_data.get('envConfig', {}):
for each_env_object_type in env_objects_keys:
env_objects = self.opdk.list_env_objects(
env_objects = self.apigee.list_env_objects(
env, each_env_object_type)
if each_env_object_type == 'resourcefiles':
logger.info("--Exporting Resourcefiles--")
Expand All @@ -148,7 +156,7 @@ def export_env_objects(self, env_objects_keys, export_dir):
f"Exporting Resourcefile {each_env_object['name']}") # noqa
create_dir(
f"{export_dir}/resourceFiles/{each_env_object['type']}") # noqa pylint: disable=W1203
obj_data = self.opdk.get_env_object(
obj_data = self.apigee.get_env_object(
env, each_env_object_type, each_env_object)
write_file(
f"{export_dir}/resourceFiles/{each_env_object['type']}/{each_env_object['name']}", obj_data) # noqa pylint: disable=C0301
Expand All @@ -164,15 +172,15 @@ def export_env_objects(self, env_objects_keys, export_dir):
logger.info(f"Exporting keystore {each_env_object}") # noqa pylint: disable=W1203
create_dir(
f"{export_dir}/keystore_certificates/env-{env}/{each_env_object}") # noqa pylint: disable=C0301
obj_data = self.opdk.get_env_object(
obj_data = self.apigee.get_env_object(
env, each_env_object_type, each_env_object)
obj_data['alias_data'] = {}
for alias in obj_data.get('aliases', []):
create_dir(
f"{export_dir}/keystore_certificates/env-{env}/{each_env_object}/{alias.get('aliasName')}") # noqa pylint: disable=C0301
alias_data = self.opdk.get_env_object(
alias_data = self.apigee.get_env_object(
env, f"keystores/{each_env_object}/aliases", alias.get('aliasName')) # noqa pylint: disable=C0301
certificate = self.opdk.get_env_object(
certificate = self.apigee.get_env_object(
env, f"keystores/{each_env_object}/aliases", f"{alias.get('aliasName')}/certificate") # noqa pylint: disable=C0301
with open(f"{export_dir}/keystore_certificates/env-{env}/{each_env_object}/{alias.get('aliasName')}/certificate.pem", "wb") as f: # noqa pylint: disable=C0301
f.write(certificate)
Expand All @@ -185,7 +193,7 @@ def export_env_objects(self, env_objects_keys, export_dir):
for each_env_object in env_objects:
logger.info( # noqa pylint: disable=W1203
f"Exporting {each_env_object_type} {each_env_object}") # noqa
obj_data = self.opdk.get_env_object(
obj_data = self.apigee.get_env_object(
env, each_env_object_type, each_env_object)
self.export_data['envConfig'][env][self.env_object_types[each_env_object_type] # noqa pylint: disable=C0301
][each_env_object] = obj_data # noqa
Expand All @@ -207,14 +215,14 @@ def export_org_objects(self, org_objects_keys):
}
if each_org_object_type == 'org_keyvaluemaps':
each_org_object_type = 'keyvaluemaps'
org_objects = self.opdk.list_org_objects(each_org_object_type)
org_objects = self.apigee.list_org_objects(each_org_object_type)

if each_org_object_type == 'resourcefiles':
org_objects = org_objects['resourceFile']
for each_org_object in org_objects:
logger.info( # noqa pylint: disable=W1203
f"Exporting {each_org_object_type} {each_org_object}")
obj_data = self.opdk.get_org_object(
obj_data = self.apigee.get_org_object(
each_org_object_type, each_org_object)
self.export_data['orgConfig'][self.org_object_types[each_org_object_type]][each_org_object['name']] = { # noqa pylint: disable=C0301
'name': each_org_object['name'],
Expand All @@ -225,19 +233,19 @@ def export_org_objects(self, org_objects_keys):
for each_org_object in org_objects:
logger.info( # noqa pylint: disable=W1203
f"Exporting {each_org_object_type} {each_org_object}")
obj_data = self.opdk.get_org_object(
obj_data = self.apigee.get_org_object(
each_org_object_type, each_org_object)
self.export_data['orgConfig'][self.org_object_types['org_keyvaluemaps'] # noqa
][each_org_object] = obj_data
else:
if each_org_object_type in self.opdk.can_expand:
if each_org_object_type in self.apigee.can_expand:
self.export_data['orgConfig'][self.org_object_types[each_org_object_type] # noqa pylint: disable=C0301
] = self.opdk.list_org_objects_expand(each_org_object_type) # noqa pylint: disable=C0301
] = self.apigee.list_org_objects_expand(each_org_object_type) # noqa pylint: disable=C0301
else:
for each_org_object in org_objects:
logger.info( # noqa pylint: disable=W1203
f"Exporting {each_org_object_type} {each_org_object}") # noqa
obj_data = self.opdk.get_org_object(
obj_data = self.apigee.get_org_object(
each_org_object_type, each_org_object)
self.export_data['orgConfig'][self.org_object_types[each_org_object_type]][each_org_object] = obj_data # noqa pylint: disable=C0301

Expand All @@ -247,10 +255,10 @@ def developers_list(self):
Returns:
dict: A dictionary of developers, keyed by developerId.
"""
developers = self.opdk.list_org_objects('developers')
developers = self.apigee.list_org_objects('developers')
developers_dict = {}
for developer in developers:
developer_data = self.opdk.get_org_object('developers', developer)
developer_data = self.apigee.get_org_object('developers', developer)
developers_dict[developer_data['developerId']] = developer
return developers_dict

Expand All @@ -265,16 +273,16 @@ def export_api_metadata(self, api_types):
"""
for each_api_type in api_types:
logger.info(f"--Exporting {each_api_type} metadata--") # noqa pylint: disable=W1203
apis = self.opdk.list_org_objects(each_api_type)
apis = self.apigee.list_org_objects(each_api_type)

for each_api in apis:
logger.info(f"Exporting {each_api_type} {each_api}") # noqa pylint: disable=W1203
# extract revisions
revs = self.opdk.list_api_revisions(each_api_type, each_api)
revs = self.apigee.list_api_revisions(each_api_type, each_api)
self.export_data['orgConfig'][each_api_type][each_api] = revs

# extract env level info
deployments = self.opdk.api_env_mapping(each_api_type, each_api) # noqa
deployments = self.apigee.api_env_mapping(each_api_type, each_api) # noqa
for env in deployments['environment']:
env_name = env.get('name')
revisions = []
Expand All @@ -298,11 +306,11 @@ def export_api_proxy_bundles(self, export_dir, api_types):
"""
for each_api_type in api_types:
logger.info(f"--Exporting {each_api_type} proxy bundle--") # noqa pylint: disable=W1203
# apis=self.opdk.list_apis(each_api_type)
# apis=self.apigee.list_apis(each_api_type)
apis = self.export_data['orgConfig'][each_api_type].keys()
args = (
(each_api_type, api, f"{export_dir}/{each_api_type}") for api in apis) # noqa
run_parallel(self.opdk.fetch_proxy, args)
run_parallel(self.apigee.fetch_proxy, args)

def get_export_data(self, resources_list, export_dir): # noqa pylint: disable=R0912
"""Orchestrates the export process.
Expand Down Expand Up @@ -336,6 +344,9 @@ def get_export_data(self, resources_list, export_dir): # noqa pylint: disable=R
org_objects = []
api_types = []

if self.apigee_type == 'x':
self.org_object_types['envgroups'] = 'envgroups'

if 'all' in resources_list:
self.export_vhosts()
for env_object in self.env_object_types:
Expand Down Expand Up @@ -443,17 +454,17 @@ def get_dependencies_data(self, dependencies):
for dependency in dependencies:
dependencies_data[dependency] = {}
if dependency == 'references':
envs = self.opdk.list_environments()
envs = self.apigee.list_environments()
for env in envs:
dependencies_data[dependency][env] = {}
references = self.opdk.list_env_objects(env, dependency)
references = self.apigee.list_env_objects(env, dependency)
for reference in references:
dependencies_data[dependency][env][reference] = self.opdk.get_env_object( # noqa pylint: disable=C0301
dependencies_data[dependency][env][reference] = self.apigee.get_env_object( # noqa pylint: disable=C0301
env, dependency, reference)
else:
org_objects = self.opdk.list_org_objects(dependency)
org_objects = self.apigee.list_org_objects(dependency)
for each_org_object in org_objects:
dependencies_data[dependency][each_org_object] = self.opdk.get_org_object( # noqa pylint: disable=C0301
dependencies_data[dependency][each_org_object] = self.apigee.get_org_object( # noqa pylint: disable=C0301
dependency, each_org_object)

return dependencies_data
Loading

0 comments on commit 3ad59f7

Please sign in to comment.