Skip to content

Commit

Permalink
Merge branch 'develop' into overrides-in-config
Browse files Browse the repository at this point in the history
  • Loading branch information
aktech authored Feb 19, 2024
2 parents d951d94 + 32f62f8 commit a185bc0
Show file tree
Hide file tree
Showing 6 changed files with 46 additions and 1 deletion.
5 changes: 5 additions & 0 deletions src/_nebari/stages/kubernetes_services/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,7 @@ class JupyterLab(schema.Base):
default_settings: typing.Dict[str, typing.Any] = {}
idle_culler: IdleCuller = IdleCuller()
initial_repositories: typing.List[typing.Dict[str, str]] = []
preferred_dir: typing.Optional[str] = None


class InputSchema(schema.Base):
Expand Down Expand Up @@ -367,6 +368,9 @@ class JupyterhubInputVars(schema.Base):
argo_workflows_enabled: bool = Field(alias="argo-workflows-enabled")
jhub_apps_enabled: bool = Field(alias="jhub-apps-enabled")
cloud_provider: str = Field(alias="cloud-provider")
jupyterlab_preferred_dir: typing.Optional[str] = Field(
alias="jupyterlab-preferred-dir"
)


class DaskGatewayInputVars(schema.Base):
Expand Down Expand Up @@ -506,6 +510,7 @@ def input_vars(self, stage_outputs: Dict[str, Dict[str, Any]]):
jhub_apps_enabled=self.config.jhub_apps.enabled,
initial_repositories=str(self.config.jupyterlab.initial_repositories),
jupyterlab_default_settings=self.config.jupyterlab.default_settings,
jupyterlab_preferred_dir=self.config.jupyterlab.preferred_dir,
)

dask_gateway_vars = DaskGatewayInputVars(
Expand Down
7 changes: 7 additions & 0 deletions src/_nebari/stages/kubernetes_services/template/jupyterhub.tf
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,11 @@ variable "jupyterlab-profiles" {
description = "JupyterHub profiles to expose to user"
}

variable "jupyterlab-preferred-dir" {
description = "Directory in which the JupyterLab should open the file browser"
type = string
}

variable "initial-repositories" {
description = "Map of folder location and git repo url to clone"
type = string
Expand Down Expand Up @@ -151,4 +156,6 @@ module "jupyterhub" {

jupyterlab-pioneer-enabled = var.jupyterlab-pioneer-enabled
jupyterlab-pioneer-log-format = var.jupyterlab-pioneer-log-format

jupyterlab-preferred-dir = var.jupyterlab-preferred-dir
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ locals {
kernel_cull_connected = var.idle-culler-settings.kernel_cull_connected ? "True" : "False" # for Python compatible boolean values
kernel_cull_busy = var.idle-culler-settings.kernel_cull_busy ? "True" : "False" # for Python compatible boolean values
server_shutdown_no_activity_timeout = var.idle-culler-settings.server_shutdown_no_activity_timeout
jupyterlab_preferred_dir = var.jupyterlab-preferred-dir != null ? var.jupyterlab-preferred-dir : ""
}
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,22 @@ if [ "$#" -lt 1 ] || [ "$1" = "--help" ]; then
[ "$1" = "--help" ] && exit 0 || exit 1
fi

fix_parent_dir_permissions() {
# Fix parent directory permissions to allow the JupyterLab user to access the cloned repository

local folder_path="$1"

# Retrieve the very first parent directory
local parent_dir=$(echo "$folder_path" | cut -d '/' -f1)

# Check if the parent directory has the correct permissions
if [ "$(stat -c "%u:%g" "$parent_dir")" != "1000:100" ]; then
echo "Fixing permissions for parent directory: $parent_dir"
chown -R 1000:100 "$parent_dir" || { echo "Error: Unable to set ownership for $parent_dir"; return 1; }
chmod -R 755 "$parent_dir" || { echo "Error: Unable to set permissions for $parent_dir"; return 1; }
fi
}

clone_update_repository() {
# Clone or update a Git repository into a specified folder,
# and create a `.firstrun` file to mark the script's execution.
Expand All @@ -47,6 +63,8 @@ clone_update_repository() {
mkdir -p "$folder_path"
fi

fix_parent_dir_permissions "$folder_path" || return 1

if [ -d "$folder_path/.git" ]; then
echo -e "Updating Git repository in ${folder_path}..."
(cd "$folder_path" && git pull)
Expand All @@ -55,7 +73,13 @@ clone_update_repository() {
(git clone "$git_repo_url" "$folder_path")
fi

echo -e "Creating .firstrun file in ${folder_path}..."
touch "$firstrun_file"

# User permissions for JupyterLab user to newly created git folders
echo -e "Setting permissions for ${folder_path}..."
chown -R 1000:100 "$folder_path" || { echo "Error: Unable to set ownership for $folder_path"; return 1; }

echo -e "Execution for ${folder_path} completed. ${GREEN}${NC}"
fi
}
Expand All @@ -72,7 +96,6 @@ for pair in "$@"; do
echo -e "${RED}Invalid argument format: \"${pair}\". Please provide folder path and Git repository URL in the correct order.${NC}" >> "$ERROR_LOG"
else
clone_update_repository "$folder_path" "$git_repo_url" || echo -e "${RED}Error executing for ${folder_path}.${NC}" >> "$ERROR_LOG"
chown -R 1000:100 "$folder_path" # User permissions for JupyterLab user
fi
done

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@
c.ContentsManager.allow_hidden = True
c.FileContentsManager.allow_hidden = True

# Set the preferred path for the frontend to start in
preferred_dir = ${jupyterlab_preferred_dir}
c.FileContentsManager.preferred_dir = preferred_dir if preferred_dir else None

# Timeout (in seconds) in which a terminal has been inactive and ready to
# be culled.
c.TerminalManager.cull_inactive_timeout = ${terminal_cull_inactive_timeout} * 60
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,11 @@ variable "jupyterlab-pioneer-log-format" {
type = string
}

variable "jupyterlab-preferred-dir" {
description = "Directory in which the JupyterLab should open the file browser"
type = string
}

variable "cloud-provider" {
description = "Name of cloud provider."
type = string
Expand Down

0 comments on commit a185bc0

Please sign in to comment.