diff --git a/cesnet-central/deployments/fullhub.yaml b/cesnet-central/deployments/fullhub.yaml index 203fd25d626f0452f4c46408b52ba5b204f3a867..144b2ab9eb5dc5c6adc80cebc35569b3ec559f68 100644 --- a/cesnet-central/deployments/fullhub.yaml +++ b/cesnet-central/deployments/fullhub.yaml @@ -25,16 +25,8 @@ singleuser: hostPath: path: /cvmfs type: Directory - - name: b2drop - # sizeLimit problematic in this environment, - # not needed for remote mounts - empty_dir: - name: owncloud-home empty_dir: - - name: owncloud-shared - empty_dir: - - name: owncloud-spaces - empty_dir: # - name: scratch # ephemeral: # volumeClaimTemplate: @@ -47,14 +39,8 @@ singleuser: extraVolumeMounts: - name: cvmfs-host mountPath: "/cvmfs:shared" - - name: b2drop - mountPath: '/home/jovyan/b2drop:shared' - name: owncloud-home mountPath: '/home/jovyan:shared' - - name: owncloud-shared - mountPath: '/owncloud/Shared:shared' - - name: owncloud-spaces - mountPath: '/owncloud/Spaces:shared' # - name: scratch # mountPath: '/scratch' memory: @@ -206,30 +192,29 @@ hub: b2drop_pwd = base64.b64decode(secret.data.get("b2drop-pwd", "")).decode() if b2drop_user and b2drop_pwd: volume_mounts = [ - {"mountPath": "/b2drop:shared", "name": "b2drop"}, + {"mountPath": "/owncloud:shared", "name": "owncloud-home"}, ] spawner.extra_containers.append( { "name": "b2drop", - "image": "eginotebooks/webdav-sidecar:sha-e5e8df2", + "image": "eginotebooks/webdav-rclone-sidecar:sha-0a62679", "env": [ {"name": "WEBDAV_URL", "value": "https://b2drop.eudat.eu/remote.php/webdav"}, {"name": "WEBDAV_PWD", "value": b2drop_pwd}, {"name": "WEBDAV_USER", "value": b2drop_user}, - {"name": "MOUNT_PATH", "value": "/b2drop"}, + {"name": "WEBDAV_VENDOR", "value": "other"}, + {"name": "MOUNT_PATH", "value": "/owncloud/b2drop"}, + {"name": "MOUNT_WAIT_POINT", "value": "webdav-fs: /owncloud fuse.rclone"}, ], "resources": self.sidecar_resources, "securityContext": { - "runAsUser": 0, + "runAsUser": 1000, + "fsUser": 1000, + "fsGroup": 100, "privileged": True, "capabilities": {"add": ["SYS_ADMIN"]}, }, "volumeMounts": volume_mounts, - "lifecycle": { - "preStop": { - "exec": {"command": ["umount", "-l", "/b2drop"]} - }, - }, } ) if b2drop_remember: @@ -280,25 +265,32 @@ hub: if owncloud_url is None: return + if type == "home": + subpath = "" + else: + subpath = "/" + type.capitalize() + env = [ + {"name": "WEBDAV_URL", "value": owncloud_url}, + {"name": "WEBDAV_VENDOR", "value": "owncloud"}, + # XXX: strict permissions needed for .local/share/jupyter/runtime/jupyter_cookie_secret + # quicker directory cache and polling + {"name": "MOUNT_OPTS", "value": "--file-perms=0600 --dir-perms=0770 --dir-cache-time=1m0s --poll-interval=0m20s"}, + {"name": "MOUNT_PATH", "value": "/owncloud" + subpath}, + # default mode is "full" + {"name": "VFS_CACHE_MODE", "value": "full"}, + ] + if type != "home": + env.append({"name": "MOUNT_WAIT_POINT", "value": "webdav-fs: /owncloud fuse.rclone"}) volume_mounts = [ - {"mountPath": "/owncloud:shared", "name": "owncloud-" + type}, + {"mountPath": "/owncloud:shared", "name": "owncloud-home"}, {"mountPath": self.token_mount_path, "name": self.token_secret_volume_name, "readOnly": True}, ] spawner.extra_containers.append( { "name": "owncloud-" + type, - "image": "eginotebooks/webdav-rclone-sidecar:sha-95b4f95", + "image": "eginotebooks/webdav-rclone-sidecar:sha-0a62679", "args": ["bearer_token_command=cat " + self.token_path], - "env": [ - {"name": "WEBDAV_URL", "value": owncloud_url}, - {"name": "WEBDAV_VENDOR", "value": "owncloud"}, - # XXX: strict permissions needed for .local/share/jupyter/runtime/jupyter_cookie_secret - # quicker directory cache and polling - {"name": "MOUNT_OPTS", "value": "--file-perms=0600 --dir-perms=0770 --dir-cache-time=1m0s --poll-interval=0m20s"}, - {"name": "MOUNT_PATH", "value": "/owncloud"}, - # default mode is "full" - {"name": "VFS_CACHE_MODE", "value": "full"}, - ], + "env": env, "resources": self.sidecar_resources, "securityContext": { "runAsUser": 1000, @@ -328,10 +320,11 @@ hub: "Authorization": "Bearer %s" % access_token, } - # ownCloud user home await self.append_owncloud_sidecar(spawner, "home", self.OCIS_PERSONAL_SPACE, headers=headers) - await self.append_owncloud_sidecar(spawner, "shared", self.OCIS_SHARED_WITH_ME, headers=headers) + await self.append_owncloud_sidecar(spawner, "shares", self.OCIS_SHARED_WITH_ME, headers=headers) await self.append_owncloud_sidecar(spawner, "spaces", self.OCIS_SPACES, headers=headers) + else: + self.log.info("No auth state, skipping ownCloud") c.JupyterHub.spawner_class = WebDavOIDCSpawner