From 292f63df4e56a9efbbe59f147c47dbf238be6188 Mon Sep 17 00:00:00 2001 From: Romil Date: Fri, 16 Dec 2022 20:56:11 +0530 Subject: [PATCH 1/6] clean username for cluster name generation --- sky/backends/backend_utils.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/sky/backends/backend_utils.py b/sky/backends/backend_utils.py index 5a196267372..01a2b9fe5d4 100644 --- a/sky/backends/backend_utils.py +++ b/sky/backends/backend_utils.py @@ -1127,7 +1127,12 @@ def check_local_gpus() -> bool: def generate_cluster_name(): # TODO: change this ID formatting to something more pleasant. # User name is helpful in non-isolated accounts, e.g., GCP, Azure. - return f'sky-{uuid.uuid4().hex[:4]}-{getpass.getuser()}' + # We clean up the username by making it all lowercase, removing any + # non-alphanumeric characters (including hyphens) and removing any numbers + # at the start of the username. e.g. 1SkY-PiLot2 becomes skypilot2. + cleaned_username = re.sub(r'^\d+', '', re.sub('[^a-z0-9]', '', + getpass.getuser().lower())) + return f'sky-{uuid.uuid4().hex[:4]}-{cleaned_username}' def query_head_ip_with_retries(cluster_yaml: str, max_attempts: int = 1) -> str: From 202d3faef4b83e8918b119d2293c8bd35b6ef775 Mon Sep 17 00:00:00 2001 From: Romil Date: Fri, 16 Dec 2022 21:02:58 +0530 Subject: [PATCH 2/6] lint --- sky/backends/backend_utils.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sky/backends/backend_utils.py b/sky/backends/backend_utils.py index 01a2b9fe5d4..cae45bcc7d0 100644 --- a/sky/backends/backend_utils.py +++ b/sky/backends/backend_utils.py @@ -1130,8 +1130,9 @@ def generate_cluster_name(): # We clean up the username by making it all lowercase, removing any # non-alphanumeric characters (including hyphens) and removing any numbers # at the start of the username. e.g. 1SkY-PiLot2 becomes skypilot2. - cleaned_username = re.sub(r'^\d+', '', re.sub('[^a-z0-9]', '', - getpass.getuser().lower())) + cleaned_username = re.sub( + r'^\d+', '', re.sub('[^a-z0-9]', '', + getpass.getuser().lower())) return f'sky-{uuid.uuid4().hex[:4]}-{cleaned_username}' From be922b5c21eb8d1f971df7d902f6573038000b53 Mon Sep 17 00:00:00 2001 From: Romil Date: Sat, 17 Dec 2022 18:52:29 +0530 Subject: [PATCH 3/6] fix interactive nodes, allow hyphens --- sky/backends/backend_utils.py | 29 ++++++++++++++++++++++------- sky/cli.py | 2 +- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/sky/backends/backend_utils.py b/sky/backends/backend_utils.py index cae45bcc7d0..b11cd37426f 100644 --- a/sky/backends/backend_utils.py +++ b/sky/backends/backend_utils.py @@ -1127,13 +1127,28 @@ def check_local_gpus() -> bool: def generate_cluster_name(): # TODO: change this ID formatting to something more pleasant. # User name is helpful in non-isolated accounts, e.g., GCP, Azure. - # We clean up the username by making it all lowercase, removing any - # non-alphanumeric characters (including hyphens) and removing any numbers - # at the start of the username. e.g. 1SkY-PiLot2 becomes skypilot2. - cleaned_username = re.sub( - r'^\d+', '', re.sub('[^a-z0-9]', '', - getpass.getuser().lower())) - return f'sky-{uuid.uuid4().hex[:4]}-{cleaned_username}' + return f'sky-{uuid.uuid4().hex[:4]}-{get_cleaned_username()}' + + +def get_cleaned_username() -> str: + """ + Cleans the current username to be used as a cluster name. + + Clean up includes: + 1. Making all characters lowercase + 2. Removing any non-alphanumeric characters (excluding hyphens) + 3. Removing any numbers and/or hyphens at the start of the username. + 4. Removing any hyphens at the end of the username + + e.g. 1SkY-PiLot2- becomes sky-pilot2. + """ + username = getpass.getuser() + username = username.lower() + username = re.sub(r'[^a-z0-9-]', '', username) + username = re.sub(r'^[0-9-]+', '', username) + username = re.sub(r'-$', '', username) + return username + def query_head_ip_with_retries(cluster_yaml: str, max_attempts: int = 1) -> str: diff --git a/sky/cli.py b/sky/cli.py index 06a0bdbb602..49945c17ee7 100644 --- a/sky/cli.py +++ b/sky/cli.py @@ -606,7 +606,7 @@ def _default_interactive_node_name(node_type: str): # same-username user. E.g., sky-gpunode-ubuntu. Not a problem on AWS # which is the current cloud for interactive nodes. assert node_type in _INTERACTIVE_NODE_TYPES, node_type - return f'sky-{node_type}-{getpass.getuser()}' + return f'sky-{node_type}-{backend_utils.get_cleaned_username()}' def _infer_interactive_node_type(resources: sky.Resources): From 928753e0f566c2218bd2d9001a6d4f486f4c548f Mon Sep 17 00:00:00 2001 From: Romil Date: Sat, 17 Dec 2022 18:58:20 +0530 Subject: [PATCH 4/6] lint --- sky/backends/backend_utils.py | 1 - sky/cli.py | 1 - 2 files changed, 2 deletions(-) diff --git a/sky/backends/backend_utils.py b/sky/backends/backend_utils.py index b11cd37426f..e083572dc09 100644 --- a/sky/backends/backend_utils.py +++ b/sky/backends/backend_utils.py @@ -1150,7 +1150,6 @@ def get_cleaned_username() -> str: return username - def query_head_ip_with_retries(cluster_yaml: str, max_attempts: int = 1) -> str: """Returns the ip of the head node from yaml file.""" backoff = common_utils.Backoff(initial_backoff=5, max_backoff_factor=5) diff --git a/sky/cli.py b/sky/cli.py index 49945c17ee7..f3f187dfe20 100644 --- a/sky/cli.py +++ b/sky/cli.py @@ -30,7 +30,6 @@ import copy import datetime import functools -import getpass import os import shlex import subprocess From aeae6b34ce2eb541626b4eea1ca85869855d0e34 Mon Sep 17 00:00:00 2001 From: Romil Bhardwaj Date: Mon, 19 Dec 2022 11:51:02 +0530 Subject: [PATCH 5/6] comments Co-authored-by: Zongheng Yang --- sky/backends/backend_utils.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sky/backends/backend_utils.py b/sky/backends/backend_utils.py index e083572dc09..26911eb6a31 100644 --- a/sky/backends/backend_utils.py +++ b/sky/backends/backend_utils.py @@ -1131,8 +1131,7 @@ def generate_cluster_name(): def get_cleaned_username() -> str: - """ - Cleans the current username to be used as a cluster name. + """Cleans the current username to be used as part of a cluster name. Clean up includes: 1. Making all characters lowercase @@ -1141,6 +1140,9 @@ def get_cleaned_username() -> str: 4. Removing any hyphens at the end of the username e.g. 1SkY-PiLot2- becomes sky-pilot2. + + Returns: + A cleaned username that will pass the regex in check_cluster_name_is_valid(). """ username = getpass.getuser() username = username.lower() From 1b2f661a50c20358f7cd5434b3fa118f0e211c9a Mon Sep 17 00:00:00 2001 From: Romil Date: Mon, 19 Dec 2022 12:04:45 +0530 Subject: [PATCH 6/6] lint --- sky/backends/backend_utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sky/backends/backend_utils.py b/sky/backends/backend_utils.py index 26911eb6a31..ea15d612c4f 100644 --- a/sky/backends/backend_utils.py +++ b/sky/backends/backend_utils.py @@ -1140,7 +1140,7 @@ def get_cleaned_username() -> str: 4. Removing any hyphens at the end of the username e.g. 1SkY-PiLot2- becomes sky-pilot2. - + Returns: A cleaned username that will pass the regex in check_cluster_name_is_valid(). """