Skip to content

Commit c71c67d

Browse files
Turtdletheborch
authored andcommitted
feat:kube session attributes
1 parent 29f0d3c commit c71c67d

2 files changed

Lines changed: 28 additions & 4 deletions

File tree

src/pybritive/britive_cli.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -486,6 +486,18 @@ def _get_missing_env_properties(
486486
)
487487
return {}
488488

489+
def _fetch_session_attributes_for_profiles(self, accesses):
490+
session_attributes = {}
491+
unique_profile_ids = {profile_id for _, _, profile_id in accesses}
492+
for profile_id in unique_profile_ids:
493+
try:
494+
session_attrs = self.b.application_management.profiles.session_attributes.list(profile_id=profile_id)
495+
session_attributes[profile_id] = session_attrs
496+
except Exception:
497+
session_attributes[profile_id] = {}
498+
499+
return session_attributes
500+
489501
def _set_available_profiles(self, from_cache_command=False, profile_type: Optional[str] = None):
490502
if not self.available_profiles:
491503
data = []
@@ -503,6 +515,7 @@ def _set_available_profiles(self, from_cache_command=False, profile_type: Option
503515
accesses = [
504516
([a['appContainerId'], a['environmentId'], a['papId']]) for a in access_data.get('accesses', [])
505517
]
518+
session_attributes = self._fetch_session_attributes_for_profiles(accesses)
506519
access_output = []
507520
for app_id, env_id, profile_id in accesses:
508521
app = apps[app_id]
@@ -522,6 +535,7 @@ def _set_available_profiles(self, from_cache_command=False, profile_type: Option
522535
'profile_allows_console': app.get('consoleAccess', False),
523536
'profile_allows_programmatic': app.get('programmaticAccess', False),
524537
'profile_description': profile['papDescription'],
538+
'session_attributes': session_attributes.get(profile_id, []),
525539
'2_part_profile_format_allowed': app['requiresHierarchicalModel'],
526540
'env_properties': env['profileEnvironmentProperties']
527541
or self._get_missing_env_properties(
@@ -537,6 +551,7 @@ def _set_available_profiles(self, from_cache_command=False, profile_type: Option
537551
else:
538552
profiles = self.b.my_resources.list(size=resource_limit)
539553
profiles = profiles['data']
554+
session_attributes = self._fetch_session_attributes_for_profiles(accesses)
540555
for item in profiles:
541556
row = {
542557
'app_name': None,
@@ -551,6 +566,7 @@ def _set_available_profiles(self, from_cache_command=False, profile_type: Option
551566
'profile_id': item['profileId'],
552567
'profile_allows_console': False,
553568
'profile_allows_programmatic': True,
569+
'session_attributes': session_attributes.get(profile_id, []),
554570
'profile_description': None,
555571
'2_part_profile_format_allowed': False,
556572
'env_properties': item.get('resourceLabels', {}),
@@ -584,6 +600,7 @@ def construct_kube_config(self, from_cache_command=False):
584600
'profile': p['profile_name'],
585601
'url': url,
586602
'cert': cert,
603+
'session_attributes': p['session_attributes'],
587604
}
588605
)
589606

src/pybritive/helpers/kube_config_builder.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ def parse_profiles(profiles, aliases):
6969
cluster_names = {}
7070
assigned_aliases = []
7171
for profile in profiles:
72-
env_profile = f"{sanitize(profile['env'])}-{sanitize(profile['profile'].lower())}"
72+
env_profile = f'{sanitize(profile["env"])}-{sanitize(profile["profile"].lower())}'
7373
if env_profile not in cluster_names:
7474
app = BritiveCli.escape_profile_element(profile['app'])
7575
env = BritiveCli.escape_profile_element(profile['env'])
@@ -78,14 +78,17 @@ def parse_profiles(profiles, aliases):
7878
escaped_profile_str = f'{app}/{env}/{pro}'.lower()
7979
alias = aliases.get(escaped_profile_str, None)
8080
assigned_aliases.append(alias)
81+
keys_to_remove = ['id', 'attributeSchemaId', 'transitive', 'sessionAttributeType']
82+
[list(map(attr.pop, keys_to_remove)) for attr in profile['session_attributes']]
8183

8284
cluster_names[env_profile] = {
8385
'apps': [],
8486
'url': profile['url'],
8587
'cert': profile['cert'],
8688
'escaped_profile': escaped_profile_str,
87-
'profile': f"{profile['app']}/{profile['env']}/{profile['profile']}".lower(),
89+
'profile': f'{profile["app"]}/{profile["env"]}/{profile["profile"]}'.lower(),
8890
'alias': alias,
91+
'session_attributes': profile['session_attributes'],
8992
}
9093
cluster_names[env_profile]['apps'].append(sanitize(profile['app']))
9194
return [cluster_names, assigned_aliases]
@@ -129,7 +132,6 @@ def build_tenant_config(tenant, cluster_names, username, cli: BritiveCli):
129132
)
130133
contexts = []
131134
clusters = []
132-
133135
for env_profile, details in cluster_names.items():
134136
if len(details['apps']) == 1:
135137
names = [env_profile]
@@ -138,6 +140,7 @@ def build_tenant_config(tenant, cluster_names, username, cli: BritiveCli):
138140

139141
cert = details['cert']
140142
url = details['url']
143+
session_attributes = details['session_attributes']
141144

142145
if not valid_cert(cert=cert, profile=details['profile'], cli=cli):
143146
continue
@@ -162,7 +165,11 @@ def build_tenant_config(tenant, cluster_names, username, cli: BritiveCli):
162165
contexts.append(
163166
{
164167
'name': details.get('alias') or f'{tenant}-{name}',
165-
'context': {'cluster': f'{tenant}-{name}', 'user': username},
168+
'context': {
169+
'cluster': f'{tenant}-{name}',
170+
'user': username,
171+
**{attr['mappingName']: attr['attributeValue'] for attr in session_attributes},
172+
},
166173
}
167174
)
168175
return [clusters, contexts, users]

0 commit comments

Comments
 (0)