Skip to content

Commit

Permalink
Merge pull request #83 from Analect/handle-named-servers
Browse files Browse the repository at this point in the history
Handle named-servers functionality enabled by jupyterhub 0.8x
  • Loading branch information
yuvipanda committed Oct 7, 2017
2 parents c73968c + dca00c5 commit 3755877
Showing 1 changed file with 22 additions and 18 deletions.
40 changes: 22 additions & 18 deletions kubespawner/spawner.py
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ def _namespace_default(self):
)

pod_name_template = Unicode(
'jupyter-{username}',
'jupyter-{username}{servername}',
config=True,
help="""
Template to use to form the name of user's pods.
Expand All @@ -199,7 +199,7 @@ def _namespace_default(self):
)

pvc_name_template = Unicode(
'claim-{username}',
'claim-{username}{servername}',
config=True,
help="""
Template to use to form the name of user's pvc.
Expand Down Expand Up @@ -606,15 +606,23 @@ def _hub_connect_port_default(self):
)

def _expand_user_properties(self, template):
# Make sure username matches the restrictions for DNS labels
# Make sure username and servername match the restrictions for DNS labels
safe_chars = set(string.ascii_lowercase + string.digits)

# Set servername based on whether named-server initialised
if self.name:
servername = '-{}'.format(self.name)
else:
servername = ''

legacy_escaped_username = ''.join([s if s in safe_chars else '-' for s in self.user.name.lower()])
safe_username = escapism.escape(self.user.name, safe=safe_chars, escape_char='-').lower()
return template.format(
userid=self.user.id,
username=safe_username,
legacy_escape_username=legacy_escaped_username
)
legacy_escape_username=legacy_escaped_username,
servername=servername
)

def _expand_all(self, src):
if isinstance(src, list):
Expand Down Expand Up @@ -655,6 +663,10 @@ def get_pod_manifest(self):
'hub.jupyter.org/username': escapism.escape(self.user.name)
}

if self.name:
# FIXME: Make sure this is dns safe?
labels['hub.jupyter.org/servername'] = self.name

labels.update(self._expand_all(self.singleuser_extra_labels))

return make_pod(
Expand Down Expand Up @@ -694,6 +706,11 @@ def get_pvc_manifest(self):
'hub.jupyter.org/username': escapism.escape(self.user.name)
}

# check if a named-server servername has been set and if so, extend pvc labels.
if self.name:
# FIXME: make sure this is DNS safe?
labels['hub.jupyter.org/servername'] = self.name

labels.update(self._expand_all(self.user_storage_extra_labels))
return make_pvc(
name=self.pvc_name,
Expand Down Expand Up @@ -854,16 +871,3 @@ def get_args(self):
args[i] = '--hub-api-url="%s"' % (self.accessible_hub_api_url)
break
return args

def get_env(self):
# HACK: This is deprecated, and should be removed soon.
# We set these to be compatible with DockerSpawner and earlie KubeSpawner
env = super(KubeSpawner, self).get_env()
env.update({
'JPY_USER': self.user.name,
'JPY_COOKIE_NAME': self.user.server.cookie_name,
'JPY_BASE_URL': self.user.server.base_url,
'JPY_HUB_PREFIX': self.hub.server.base_url,
'JPY_HUB_API_URL': self.accessible_hub_api_url
})
return env

0 comments on commit 3755877

Please sign in to comment.