Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 23 additions & 1 deletion microservices/gatewayJobScheduler/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from clients.namespace import NamespaceService
from cryptography import x509
from cryptography.hazmat.backends import default_backend
from clients.keycloak import admin_api

logger = logging.getLogger(__name__)

Expand Down Expand Up @@ -130,4 +131,25 @@ def transform_data_by_ns(routes, certs, cert_snis):
return ns_dict
except Exception as err:
traceback.print_exc()
logger.error("Error transforming data. %s" % str(err))
logger.error("Error transforming data. %s" % str(err))

def get_namespaces_with_perm_data_plane(perm_data_plane_value):
"""
Fetch namespaces from Keycloak group 'ns' with attribute perm-data-plane matching the given value
"""
kc = admin_api()
namespaces = []
# Find the 'ns' group
ns_groups = kc.get_groups()
ns_group = next((g for g in ns_groups if g['name'] == 'ns'), None)
if not ns_group:
return namespaces

# Get subgroups (namespaces)
subgroups = kc.get_group(ns_group['id']).get('subGroups', [])
for subgroup in subgroups:
attrs = subgroup.get('attributes', {})
perm_data_plane = attrs.get('perm-data-plane', [])
if perm_data_plane_value in perm_data_plane:
namespaces.append(subgroup['name'])
return namespaces
12 changes: 11 additions & 1 deletion microservices/gatewayJobScheduler/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from sys import exc_info
import logging
import traceback
from app import transform_data_by_ns
from app import transform_data_by_ns, get_namespaces_with_perm_data_plane
from clients.kong import get_records
import traceback
import schedule
Expand Down Expand Up @@ -33,7 +33,17 @@ def sync_routes():
clear('sync-routes')
exit(1)

# Get Gold namespaces from Keycloak
perm_data_plane_value = os.getenv('DATA_PLANE')
namespaces = get_namespaces_with_perm_data_plane(perm_data_plane_value)

data = transform_data_by_ns(routes, certs, cert_snis)

# Add missing namespaces with no routes
for ns in namespaces:
if ns not in data:
data[ns] = []

for ns in data:
url = os.getenv('KUBE_API_URL') + '/namespaces/%s/routes/sync' % ns
response = requests.post(url, headers=headers, json=data[ns], auth=(
Expand Down
44 changes: 39 additions & 5 deletions microservices/gatewayJobScheduler/poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions microservices/gatewayJobScheduler/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ python-dotenv = "^0.19.1"
pytest = "^8.2.0"
pytest-cov = "^5.0.0"
pytest-mock = "^3.14.0"
coverage = "<8.0"

[tool.coverage.run]
relative_files = true
Expand Down
Loading
Loading