From 8daa29a8d29d08b8f4eb112eda873876c69bcf9d Mon Sep 17 00:00:00 2001 From: Kam Kasravi Date: Fri, 20 Jul 2018 10:50:58 -0700 Subject: [PATCH] change {username}{servername} to {userid} to avoid volume length restrictions of 63 characters (#1200) * shorten pvc, pod names * change {username}{servername} to {userid} to avoid volume length restrictions * remove extraneous changes * avoid identifier length limitations for pvc and pod by removing prefix accounts.google: for iap and truncating escaped self.user.name to 63 characters * add comment about overriding KubeSpawner method * fix _parse_user_name error * add TODO unit test for _parse_user_name --- kubeflow/core/kubeform_spawner.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/kubeflow/core/kubeform_spawner.py b/kubeflow/core/kubeform_spawner.py index b1591fc0862..300e0cfb9c2 100644 --- a/kubeflow/core/kubeform_spawner.py +++ b/kubeflow/core/kubeform_spawner.py @@ -1,5 +1,7 @@ import json import os +import string +import escapism from kubespawner.spawner import KubeSpawner from jhub_remote_user_authenticator.remote_user_auth import RemoteUserAuthenticator from oauthenticator.github import GitHubOAuthenticator @@ -111,6 +113,34 @@ def get_env(self): env['GOOGLE_APPLICATION_CREDENTIALS'] = '{}/{}.json'.format(SERVICE_ACCOUNT_SECRET_MOUNT, gcp_secret_name) return env + # TODO(kkasravi): add unit test + def _parse_user_name(self, username): + safe_chars = set(string.ascii_lowercase + string.digits) + name = username.split(':')[-1] + legacy = ''.join([s if s in safe_chars else '-' for s in name.lower()]) + safe = escapism.escape(name, safe=safe_chars, escape_char='-').lower() + return legacy, safe, name + + def _expand_user_properties(self, template): + # override KubeSpawner method to remove prefix accounts.google: for iap + # and truncate to 63 characters + + # Set servername based on whether named-server initialised + if self.name: + servername = '-{}'.format(self.name) + else: + servername = '' + + legacy, safe, name = self._parse_user_name(self.user.name) + rname = template.format( + userid=self.user.id, + username=safe, + unescaped_username=name, + legacy_escape_username=legacy, + servername=servername + )[:63] + return rname + ################################################### # JupyterHub Options