Skip to content

Commit 4e1ed51

Browse files
authored
Merge pull request #224 from bcgov/dev
Scheduler fix changes
2 parents befd02e + 76e6927 commit 4e1ed51

File tree

7 files changed

+277
-7
lines changed

7 files changed

+277
-7
lines changed

microservices/gatewayJobScheduler/app.py

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from clients.namespace import NamespaceService
55
from cryptography import x509
66
from cryptography.hazmat.backends import default_backend
7+
from clients.keycloak import admin_api
78

89
logger = logging.getLogger(__name__)
910

@@ -130,4 +131,25 @@ def transform_data_by_ns(routes, certs, cert_snis):
130131
return ns_dict
131132
except Exception as err:
132133
traceback.print_exc()
133-
logger.error("Error transforming data. %s" % str(err))
134+
logger.error("Error transforming data. %s" % str(err))
135+
136+
def get_namespaces_with_perm_data_plane(perm_data_plane_value):
137+
"""
138+
Fetch namespaces from Keycloak group 'ns' with attribute perm-data-plane matching the given value
139+
"""
140+
kc = admin_api()
141+
namespaces = []
142+
# Find the 'ns' group
143+
ns_groups = kc.get_groups()
144+
ns_group = next((g for g in ns_groups if g['name'] == 'ns'), None)
145+
if not ns_group:
146+
return namespaces
147+
148+
# Get subgroups (namespaces)
149+
subgroups = kc.get_group(ns_group['id']).get('subGroups', [])
150+
for subgroup in subgroups:
151+
attrs = subgroup.get('attributes', {})
152+
perm_data_plane = attrs.get('perm-data-plane', [])
153+
if perm_data_plane_value in perm_data_plane:
154+
namespaces.append(subgroup['name'])
155+
return namespaces

microservices/gatewayJobScheduler/main.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from sys import exc_info
44
import logging
55
import traceback
6-
from app import transform_data_by_ns
6+
from app import transform_data_by_ns, get_namespaces_with_perm_data_plane
77
from clients.kong import get_records
88
import traceback
99
import schedule
@@ -33,7 +33,17 @@ def sync_routes():
3333
clear('sync-routes')
3434
exit(1)
3535

36+
# Get Gold namespaces from Keycloak
37+
perm_data_plane_value = os.getenv('DATA_PLANE')
38+
namespaces = get_namespaces_with_perm_data_plane(perm_data_plane_value)
39+
3640
data = transform_data_by_ns(routes, certs, cert_snis)
41+
42+
# Add missing namespaces with no routes
43+
for ns in namespaces:
44+
if ns not in data:
45+
data[ns] = []
46+
3747
for ns in data:
3848
url = os.getenv('KUBE_API_URL') + '/namespaces/%s/routes/sync' % ns
3949
response = requests.post(url, headers=headers, json=data[ns], auth=(

microservices/gatewayJobScheduler/poetry.lock

Lines changed: 39 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

microservices/gatewayJobScheduler/pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ python-dotenv = "^0.19.1"
1818
pytest = "^8.2.0"
1919
pytest-cov = "^5.0.0"
2020
pytest-mock = "^3.14.0"
21+
coverage = "<8.0"
2122

2223
[tool.coverage.run]
2324
relative_files = true

0 commit comments

Comments
 (0)