nebari-dev / nebari

๐Ÿชด Nebari - your open source data science platform
https://nebari.dev
BSD 3-Clause "New" or "Revised" License
279 stars 91 forks source link

[BUG] - Nebari-CLI returns an error when using DigitalOcean initialization #1840

Closed ericmjl closed 1 year ago

ericmjl commented 1 year ago

Describe the bug

Running the guided initialization results in an error. I have verified that I copied and pasted my token, ID, and access keys correctly.

Expected behavior

I expected the guided init to work without encountering the issues described above.

OS and architecture in which you are running Nebari

macOS Ventura 13.2.1 (22D68), M1 MacBook Air

How to Reproduce the problem?

nebari init --guided-init

        Welcome to the Guided Init wizard!

You will be asked a few questions to generate your nebari-config.yaml. For more details, refer to the Nebari docs:

        https://nebari.dev/docs/

 ๐Ÿชด  Nebari runs on a Kubernetes cluster: Where do you want this Kubernetes cluster deployed? is where you want this Kubernetes cluster deployed. For more details, refer to
the Nebari docs:

        https://nebari.dev/docs/get-started/deploy

        โ—๏ธ local requires Docker and Kubernetes running on your local machine. Currently only available on Linux OS.
        โ—๏ธ existing refers to an existing Kubernetes cluster that Nebari can be deployed on.

   Where would you like to deploy your Nebari cluster? do
Unable to locate your Digital Ocean credentials, refer to this guide on how to generate them:

        https://docs.digitalocean.com/reference/api/create-personal-access-token

Paste your DIGITALOCEAN_TOKEN:
Paste your SPACES_ACCESS_KEY_ID:
Paste your SPACES_SECRET_ACCESS_KEY:
โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ Traceback (most recent call last) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚ /Users/ericmjl/anaconda/bin/nebari:10 in <module>                                                โ”‚
โ”‚                                                                                                  โ”‚
โ”‚    7                                                                                             โ”‚
โ”‚    8 if __name__ == '__main__':                                                                  โ”‚
โ”‚    9 โ”‚   sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])                       โ”‚
โ”‚ โฑ 10 โ”‚   sys.exit(app())                                                                         โ”‚
โ”‚   11                                                                                             โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ        โ”‚
โ”‚ โ”‚ __annotations__ = {}                                                                  โ”‚        โ”‚
โ”‚ โ”‚    __builtins__ = <module 'builtins' (built-in)>                                      โ”‚        โ”‚
โ”‚ โ”‚      __cached__ = None                                                                โ”‚        โ”‚
โ”‚ โ”‚         __doc__ = None                                                                โ”‚        โ”‚
โ”‚ โ”‚        __file__ = '/Users/ericmjl/anaconda/bin/nebari'                                โ”‚        โ”‚
โ”‚ โ”‚      __loader__ = <_frozen_importlib_external.SourceFileLoader object at 0x100afcca0> โ”‚        โ”‚
โ”‚ โ”‚        __name__ = '__main__'                                                          โ”‚        โ”‚
โ”‚ โ”‚     __package__ = None                                                                โ”‚        โ”‚
โ”‚ โ”‚        __spec__ = None                                                                โ”‚        โ”‚
โ”‚ โ”‚             app = <typer.main.Typer object at 0x100bf06a0>                            โ”‚        โ”‚
โ”‚ โ”‚              re = <module 're' from '/Users/ericmjl/anaconda/lib/python3.9/re.py'>    โ”‚        โ”‚
โ”‚ โ”‚             sys = <module 'sys' (built-in)>                                           โ”‚        โ”‚
โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ        โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /Users/ericmjl/anaconda/lib/python3.9/site-packages/typer/main.py:328 in __call__                โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /Users/ericmjl/anaconda/lib/python3.9/site-packages/typer/main.py:311 in __call__                โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /Users/ericmjl/anaconda/lib/python3.9/site-packages/click/core.py:1130 in __call__               โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /Users/ericmjl/anaconda/lib/python3.9/site-packages/typer/core.py:778 in main                    โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /Users/ericmjl/anaconda/lib/python3.9/site-packages/typer/core.py:216 in _main                   โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /Users/ericmjl/anaconda/lib/python3.9/site-packages/click/core.py:1655 in invoke                 โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /Users/ericmjl/anaconda/lib/python3.9/site-packages/click/core.py:920 in make_context            โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /Users/ericmjl/anaconda/lib/python3.9/site-packages/click/core.py:1378 in parse_args             โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /Users/ericmjl/anaconda/lib/python3.9/site-packages/click/core.py:2360 in handle_parse_result    โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /Users/ericmjl/anaconda/lib/python3.9/site-packages/click/core.py:2322 in process_value          โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /Users/ericmjl/anaconda/lib/python3.9/site-packages/typer/main.py:988 in wrapper                 โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /Users/ericmjl/anaconda/lib/python3.9/site-packages/nebari/cli/init.py:338 in guided_init_wizard โ”‚
โ”‚                                                                                                  โ”‚
โ”‚   335 โ”‚   โ”‚   ).unsafe_ask()                                                                     โ”‚
โ”‚   336 โ”‚   โ”‚                                                                                      โ”‚
โ”‚   337 โ”‚   โ”‚   if not disable_checks:                                                             โ”‚
โ”‚ โฑ 338 โ”‚   โ”‚   โ”‚   check_cloud_provider_creds(ctx, cloud_provider=inputs.cloud_provider)          โ”‚
โ”‚   339 โ”‚   โ”‚                                                                                      โ”‚
โ”‚   340 โ”‚   โ”‚   # specific context needed when `check_project_name` is called                      โ”‚
โ”‚   341 โ”‚   โ”‚   ctx.params["cloud_provider"] = inputs.cloud_provider                               โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ                                  โ”‚
โ”‚ โ”‚            ctx = <click.core.Context object at 0x105371e50> โ”‚                                  โ”‚
โ”‚ โ”‚ disable_checks = False                                      โ”‚                                  โ”‚
โ”‚ โ”‚    guided_init = True                                       โ”‚                                  โ”‚
โ”‚ โ”‚         inputs = InitInputs(                                โ”‚                                  โ”‚
โ”‚ โ”‚                  โ”‚   cloud_provider='do',                   โ”‚                                  โ”‚
โ”‚ โ”‚                  โ”‚   project_name='',                       โ”‚                                  โ”‚
โ”‚ โ”‚                  โ”‚   domain_name='',                        โ”‚                                  โ”‚
โ”‚ โ”‚                  โ”‚   namespace='dev',                       โ”‚                                  โ”‚
โ”‚ โ”‚                  โ”‚   auth_provider='password',              โ”‚                                  โ”‚
โ”‚ โ”‚                  โ”‚   auth_auto_provision=False,             โ”‚                                  โ”‚
โ”‚ โ”‚                  โ”‚   repository=None,                       โ”‚                                  โ”‚
โ”‚ โ”‚                  โ”‚   repository_auto_provision=False,       โ”‚                                  โ”‚
โ”‚ โ”‚                  โ”‚   ci_provider=None,                      โ”‚                                  โ”‚
โ”‚ โ”‚                  โ”‚   terraform_state='remote',              โ”‚                                  โ”‚
โ”‚ โ”‚                  โ”‚   kubernetes_version=None,               โ”‚                                  โ”‚
โ”‚ โ”‚                  โ”‚   ssl_cert_email=None,                   โ”‚                                  โ”‚
โ”‚ โ”‚                  โ”‚   disable_prompt=False                   โ”‚                                  โ”‚
โ”‚ โ”‚                  )                                          โ”‚                                  โ”‚
โ”‚ โ”‚          qmark = '  '                                       โ”‚                                  โ”‚
โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ                                  โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /Users/ericmjl/anaconda/lib/python3.9/site-packages/nebari/cli/init.py:163 in                    โ”‚
โ”‚ check_cloud_provider_creds                                                                       โ”‚
โ”‚                                                                                                  โ”‚
โ”‚   160 โ”‚   โ”‚   โ”‚   hide_input=True,                                                               โ”‚
โ”‚   161 โ”‚   โ”‚   )                                                                                  โ”‚
โ”‚   162 โ”‚   โ”‚   os.environ["AWS_ACCESS_KEY_ID"] = os.getenv("SPACES_ACCESS_KEY_ID")                โ”‚
โ”‚ โฑ 163 โ”‚   โ”‚   os.environ["AWS_SECRET_ACCESS_KEY"] = os.getenv("AWS_SECRET_ACCESS_KEY")           โ”‚
โ”‚   164 โ”‚                                                                                          โ”‚
โ”‚   165 โ”‚   # AZURE                                                                                โ”‚
โ”‚   166 โ”‚   elif cloud_provider == ProviderEnum.azure.value.lower() and (                          โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ                                  โ”‚
โ”‚ โ”‚ cloud_provider = 'do'                                       โ”‚                                  โ”‚
โ”‚ โ”‚            ctx = <click.core.Context object at 0x105371e50> โ”‚                                  โ”‚
โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ                                  โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /Users/ericmjl/anaconda/lib/python3.9/os.py:684 in __setitem__                                   โ”‚
โ”‚                                                                                                  โ”‚
โ”‚    681 โ”‚                                                                                         โ”‚
โ”‚    682 โ”‚   def __setitem__(self, key, value):                                                    โ”‚
โ”‚    683 โ”‚   โ”‚   key = self.encodekey(key)                                                         โ”‚
โ”‚ โฑ  684 โ”‚   โ”‚   value = self.encodevalue(value)                                                   โ”‚
โ”‚    685 โ”‚   โ”‚   putenv(key, value)                                                                โ”‚
โ”‚    686 โ”‚   โ”‚   self._data[key] = value                                                           โ”‚
โ”‚    687                                                                                           โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚
โ”‚ โ”‚   key = b'AWS_SECRET_ACCESS_KEY'                                                             โ”‚ โ”‚
โ”‚ โ”‚  self = environ({                                                                            โ”‚ โ”‚
โ”‚ โ”‚         โ”‚   'COLORTERM': 'truecolor',                                                        โ”‚ โ”‚
โ”‚ โ”‚         โ”‚   'COMMAND_MODE': 'unix2003',                                                      โ”‚ โ”‚
โ”‚ โ”‚         โ”‚   'HOME': '/Users/ericmjl',                                                        โ”‚ โ”‚
โ”‚ โ”‚         โ”‚   'LANG': 'en_US.UTF-8',                                                           โ”‚ โ”‚
โ”‚ โ”‚         โ”‚   'LOGNAME': 'ericmjl',                                                            โ”‚ โ”‚
โ”‚ โ”‚         โ”‚   'PATH':                                                                          โ”‚ โ”‚
โ”‚ โ”‚         '/Users/ericmjl/.fly/bin:/Users/ericmjl/anaconda/bin:/Users/ericmjl/anaconda/cond'+โ€ฆ โ”‚ โ”‚
โ”‚ โ”‚         โ”‚   'PWD': '/Users/ericmjl/github/incubator/nebari-deploy',                          โ”‚ โ”‚
โ”‚ โ”‚         โ”‚   'SHELL': '/bin/zsh',                                                             โ”‚ โ”‚
โ”‚ โ”‚         โ”‚   'SHLVL': '2',                                                                    โ”‚ โ”‚
โ”‚ โ”‚         โ”‚   'SSH_AUTH_SOCK': '/private/tmp/com.apple.launchd.bmvzCZVRSy/Listeners',          โ”‚ โ”‚
โ”‚ โ”‚         โ”‚   ... +47                                                                          โ”‚ โ”‚
โ”‚ โ”‚         })                                                                                   โ”‚ โ”‚
โ”‚ โ”‚ value = None                                                                                 โ”‚ โ”‚
โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /Users/ericmjl/anaconda/lib/python3.9/os.py:756 in encode                                        โ”‚
โ”‚                                                                                                  โ”‚
โ”‚    753 โ”‚   โ”‚   encoding = sys.getfilesystemencoding()                                            โ”‚
โ”‚    754 โ”‚   โ”‚   def encode(value):                                                                โ”‚
โ”‚    755 โ”‚   โ”‚   โ”‚   if not isinstance(value, str):                                                โ”‚
โ”‚ โฑ  756 โ”‚   โ”‚   โ”‚   โ”‚   raise TypeError("str expected, not %s" % type(value).__name__)            โ”‚
โ”‚    757 โ”‚   โ”‚   โ”‚   return value.encode(encoding, 'surrogateescape')                              โ”‚
โ”‚    758 โ”‚   โ”‚   def decode(value):                                                                โ”‚
โ”‚    759 โ”‚   โ”‚   โ”‚   return value.decode(encoding, 'surrogateescape')                              โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ                                                                           โ”‚
โ”‚ โ”‚ encoding = 'utf-8' โ”‚                                                                           โ”‚
โ”‚ โ”‚    value = None    โ”‚                                                                           โ”‚
โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ                                                                           โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ
TypeError: str expected, not NoneType

Command output

Please see above error trace.

Versions and dependencies used.

$ mamba --version
mamba 0.14.1
conda 4.10.3
$ conda list | grep nebari
nebari                    2023.5.1           pyhd8ed1ab_0    conda-forge

Compute environment

None

Integrations

No response

Anything else?

I would label this low priority. I'm mostly test-driving this for personal use.

### Tasks
ericmjl commented 1 year ago

Update: Digging through the stack trace, it appears that I have to set the AWS_SECRET_ACCESS_KEY value even though I chose DigitalOcean as the cloud provider.

I did that and set the AWS_SECRET_ACCESS_KEY to some random string and was able to get past the error reported above. This feels like a bug, and probably should be fixed in the CLI.

However, progressing through the rest of the init lets me reach the next error:

$ nebari init --guided-init

        Welcome to the Guided Init wizard!

You will be asked a few questions to generate your nebari-config.yaml. For more details, refer to the Nebari docs:

        https://nebari.dev/docs/

 ๐Ÿชด  Nebari runs on a Kubernetes cluster: Where do you want this Kubernetes cluster deployed? is where you want this Kubernetes cluster deployed. For more details, refer to
the Nebari docs:

        https://nebari.dev/docs/get-started/deploy

        โ—๏ธ local requires Docker and Kubernetes running on your local machine. Currently only available on Linux OS.
        โ—๏ธ existing refers to an existing Kubernetes cluster that Nebari can be deployed on.

   Where would you like to deploy your Nebari cluster? do
Unable to locate your Digital Ocean credentials, refer to this guide on how to generate them:

        https://docs.digitalocean.com/reference/api/create-personal-access-token

Paste your DIGITALOCEAN_TOKEN:
Paste your SPACES_ACCESS_KEY_ID:
Paste your SPACES_SECRET_ACCESS_KEY:

 ๐Ÿชด  Next, give your Nebari instance a project name. This name is what your Kubernetes cluster will be referred to as.

        The project name must adhere to the following requirements:
        - Letters from A to Z (upper and lower case) and numbers
        - Maximum accepted length of the name string is 16 characters

   What project name would you like to use? test

 ๐Ÿชด  Great! Now you need to provide a valid domain name (i.e. the URL) to access your Nebri instance. This should be a domain that you own.

   What domain name would you like to use? ericmjl.com

 ๐Ÿชด  Nebari comes with Keycloak, an open-source identity and access management tool. This is how users and permissions are managed on the platform. To connect Keycloak with
an identity provider, you can select one now.

        โ—๏ธ password is the default option and is not connected to any external identity provider.

   What authentication provider would you like? password

 ๐Ÿชด  This next section is optional but recommended. If you wish to adopt a GitOps approach to managing this platform, we will walk you through a set of questions to get that
setup. With this setup, Nebari will use GitHub Actions workflows (or GitLab equivalent) to automatically handle the future deployments of your infrastructure.

   Would you like to adopt a GitOps approach to managing Nebari? No

 ๐Ÿชด  This next section is optional but recommended. If you want your Nebari domain to use a Let's Encrypt SSL certificate, all we need is an email address from you.

   Would you like to add a Let's Encrypt SSL certificate to your domain? Yes
   Which email address should Let's Encrypt associate the certificate with? ericmajinglong@gmail.com

 ๐Ÿชด  This next section is optional and includes advanced configuration changes to the Terraform state, Kubernetes Namespace and Kubernetes version.
 โš ๏ธ  caution is advised!

   Would you like to make advanced configuration changes? No
โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ Traceback (most recent call last) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚ /Users/ericmjl/anaconda/bin/nebari:10 in <module>                                                โ”‚
โ”‚                                                                                                  โ”‚
โ”‚    7                                                                                             โ”‚
โ”‚    8 if __name__ == '__main__':                                                                  โ”‚
โ”‚    9 โ”‚   sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])                       โ”‚
โ”‚ โฑ 10 โ”‚   sys.exit(app())                                                                         โ”‚
โ”‚   11                                                                                             โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ        โ”‚
โ”‚ โ”‚ __annotations__ = {}                                                                  โ”‚        โ”‚
โ”‚ โ”‚    __builtins__ = <module 'builtins' (built-in)>                                      โ”‚        โ”‚
โ”‚ โ”‚      __cached__ = None                                                                โ”‚        โ”‚
โ”‚ โ”‚         __doc__ = None                                                                โ”‚        โ”‚
โ”‚ โ”‚        __file__ = '/Users/ericmjl/anaconda/bin/nebari'                                โ”‚        โ”‚
โ”‚ โ”‚      __loader__ = <_frozen_importlib_external.SourceFileLoader object at 0x104774ca0> โ”‚        โ”‚
โ”‚ โ”‚        __name__ = '__main__'                                                          โ”‚        โ”‚
โ”‚ โ”‚     __package__ = None                                                                โ”‚        โ”‚
โ”‚ โ”‚        __spec__ = None                                                                โ”‚        โ”‚
โ”‚ โ”‚             app = <typer.main.Typer object at 0x1048687c0>                            โ”‚        โ”‚
โ”‚ โ”‚              re = <module 're' from '/Users/ericmjl/anaconda/lib/python3.9/re.py'>    โ”‚        โ”‚
โ”‚ โ”‚             sys = <module 'sys' (built-in)>                                           โ”‚        โ”‚
โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ        โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /Users/ericmjl/anaconda/lib/python3.9/site-packages/typer/main.py:328 in __call__                โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /Users/ericmjl/anaconda/lib/python3.9/site-packages/typer/main.py:311 in __call__                โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /Users/ericmjl/anaconda/lib/python3.9/site-packages/click/core.py:1130 in __call__               โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /Users/ericmjl/anaconda/lib/python3.9/site-packages/typer/core.py:778 in main                    โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /Users/ericmjl/anaconda/lib/python3.9/site-packages/typer/core.py:216 in _main                   โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /Users/ericmjl/anaconda/lib/python3.9/site-packages/click/core.py:1655 in invoke                 โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /Users/ericmjl/anaconda/lib/python3.9/site-packages/click/core.py:920 in make_context            โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /Users/ericmjl/anaconda/lib/python3.9/site-packages/click/core.py:1378 in parse_args             โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /Users/ericmjl/anaconda/lib/python3.9/site-packages/click/core.py:2360 in handle_parse_result    โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /Users/ericmjl/anaconda/lib/python3.9/site-packages/click/core.py:2322 in process_value          โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /Users/ericmjl/anaconda/lib/python3.9/site-packages/typer/main.py:988 in wrapper                 โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /Users/ericmjl/anaconda/lib/python3.9/site-packages/nebari/cli/init.py:526 in guided_init_wizard โ”‚
โ”‚                                                                                                  โ”‚
โ”‚   523 โ”‚   โ”‚   โ”‚   โ”‚   qmark=qmark,                                                               โ”‚
โ”‚   524 โ”‚   โ”‚   โ”‚   ).unsafe_ask()                                                                 โ”‚
โ”‚   525 โ”‚   โ”‚                                                                                      โ”‚
โ”‚ โฑ 526 โ”‚   โ”‚   handle_init(inputs)                                                                โ”‚
โ”‚   527 โ”‚   โ”‚                                                                                      โ”‚
โ”‚   528 โ”‚   โ”‚   rich.print(                                                                        โ”‚
โ”‚   529 โ”‚   โ”‚   โ”‚   (                                                                              โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚
โ”‚ โ”‚             ctx = <click.core.Context object at 0x108fe8e80>                                 โ”‚ โ”‚
โ”‚ โ”‚  disable_checks = False                                                                      โ”‚ โ”‚
โ”‚ โ”‚     guided_init = True                                                                       โ”‚ โ”‚
โ”‚ โ”‚          inputs = InitInputs(                                                                โ”‚ โ”‚
โ”‚ โ”‚                   โ”‚   cloud_provider='do',                                                   โ”‚ โ”‚
โ”‚ โ”‚                   โ”‚   project_name='test',                                                   โ”‚ โ”‚
โ”‚ โ”‚                   โ”‚   domain_name='ericmjl.com',                                             โ”‚ โ”‚
โ”‚ โ”‚                   โ”‚   namespace='dev',                                                       โ”‚ โ”‚
โ”‚ โ”‚                   โ”‚   auth_provider='password',                                              โ”‚ โ”‚
โ”‚ โ”‚                   โ”‚   auth_auto_provision=False,                                             โ”‚ โ”‚
โ”‚ โ”‚                   โ”‚   repository=None,                                                       โ”‚ โ”‚
โ”‚ โ”‚                   โ”‚   repository_auto_provision=False,                                       โ”‚ โ”‚
โ”‚ โ”‚                   โ”‚   ci_provider=None,                                                      โ”‚ โ”‚
โ”‚ โ”‚                   โ”‚   terraform_state='remote',                                              โ”‚ โ”‚
โ”‚ โ”‚                   โ”‚   kubernetes_version=None,                                               โ”‚ โ”‚
โ”‚ โ”‚                   โ”‚   ssl_cert_email='ericmajinglong@gmail.com',                             โ”‚ โ”‚
โ”‚ โ”‚                   โ”‚   disable_prompt=False                                                   โ”‚ โ”‚
โ”‚ โ”‚                   )                                                                          โ”‚ โ”‚
โ”‚ โ”‚ name_guidelines = '\n        The project name must adhere to the following requirements:\n   โ”‚ โ”‚
โ”‚ โ”‚                   - L'+132                                                                   โ”‚ โ”‚
โ”‚ โ”‚           qmark = '  '                                                                       โ”‚ โ”‚
โ”‚ โ”‚        ssl_cert = True                                                                       โ”‚ โ”‚
โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /Users/ericmjl/anaconda/lib/python3.9/site-packages/nebari/cli/init.py:67 in handle_init         โ”‚
โ”‚                                                                                                  โ”‚
โ”‚    64 โ”‚   if inputs.kubernetes_version == "latest":                                              โ”‚
โ”‚    65 โ”‚   โ”‚   inputs.kubernetes_version = None                                                   โ”‚
โ”‚    66 โ”‚                                                                                          โ”‚
โ”‚ โฑ  67 โ”‚   config = render_config(                                                                โ”‚
โ”‚    68 โ”‚   โ”‚   cloud_provider=inputs.cloud_provider,                                              โ”‚
โ”‚    69 โ”‚   โ”‚   project_name=inputs.project_name,                                                  โ”‚
โ”‚    70 โ”‚   โ”‚   nebari_domain=inputs.domain_name,                                                  โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ                                      โ”‚
โ”‚ โ”‚ inputs = InitInputs(                                    โ”‚                                      โ”‚
โ”‚ โ”‚          โ”‚   cloud_provider='do',                       โ”‚                                      โ”‚
โ”‚ โ”‚          โ”‚   project_name='test',                       โ”‚                                      โ”‚
โ”‚ โ”‚          โ”‚   domain_name='ericmjl.com',                 โ”‚                                      โ”‚
โ”‚ โ”‚          โ”‚   namespace='dev',                           โ”‚                                      โ”‚
โ”‚ โ”‚          โ”‚   auth_provider='password',                  โ”‚                                      โ”‚
โ”‚ โ”‚          โ”‚   auth_auto_provision=False,                 โ”‚                                      โ”‚
โ”‚ โ”‚          โ”‚   repository=None,                           โ”‚                                      โ”‚
โ”‚ โ”‚          โ”‚   repository_auto_provision=False,           โ”‚                                      โ”‚
โ”‚ โ”‚          โ”‚   ci_provider=None,                          โ”‚                                      โ”‚
โ”‚ โ”‚          โ”‚   terraform_state='remote',                  โ”‚                                      โ”‚
โ”‚ โ”‚          โ”‚   kubernetes_version=None,                   โ”‚                                      โ”‚
โ”‚ โ”‚          โ”‚   ssl_cert_email='ericmajinglong@gmail.com', โ”‚                                      โ”‚
โ”‚ โ”‚          โ”‚   disable_prompt=False                       โ”‚                                      โ”‚
โ”‚ โ”‚          )                                              โ”‚                                      โ”‚
โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ                                      โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /Users/ericmjl/anaconda/lib/python3.9/site-packages/nebari/initialize.py:415 in render_config    โ”‚
โ”‚                                                                                                  โ”‚
โ”‚   412 โ”‚   โ”‚   โ”‚   "hub_subtitle"                                                                 โ”‚
โ”‚   413 โ”‚   โ”‚   ] = f"{WELCOME_HEADER_TEXT} on Digital Ocean"                                      โ”‚
โ”‚   414 โ”‚   โ”‚   config["digital_ocean"] = DIGITAL_OCEAN.copy()                                     โ”‚
โ”‚ โฑ 415 โ”‚   โ”‚   set_kubernetes_version(config, kubernetes_version, cloud_provider)                 โ”‚
โ”‚   416 โ”‚                                                                                          โ”‚
โ”‚   417 โ”‚   elif cloud_provider == "gcp":                                                          โ”‚
โ”‚   418 โ”‚   โ”‚   config["theme"]["jupyterhub"][                                                     โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚
โ”‚ โ”‚       auth_auto_provision = False                                                            โ”‚ โ”‚
โ”‚ โ”‚             auth_provider = 'password'                                                       โ”‚ โ”‚
โ”‚ โ”‚               ci_provider = None                                                             โ”‚ โ”‚
โ”‚ โ”‚            cloud_provider = 'do'                                                             โ”‚ โ”‚
โ”‚ โ”‚                    config = {                                                                โ”‚ โ”‚
โ”‚ โ”‚                             โ”‚   'project_name': 'test',                                      โ”‚ โ”‚
โ”‚ โ”‚                             โ”‚   'provider': 'do',                                            โ”‚ โ”‚
โ”‚ โ”‚                             โ”‚   'domain': 'ericmjl.com',                                     โ”‚ โ”‚
โ”‚ โ”‚                             โ”‚   'certificate': {'type': 'self-signed'},                      โ”‚ โ”‚
โ”‚ โ”‚                             โ”‚   'security': {                                                โ”‚ โ”‚
โ”‚ โ”‚                             โ”‚   โ”‚   'authentication': {'type': 'password'},                  โ”‚ โ”‚
โ”‚ โ”‚                             โ”‚   โ”‚   'keycloak': {                                            โ”‚ โ”‚
โ”‚ โ”‚                             โ”‚   โ”‚   โ”‚   'initial_root_password': 'yrfCCOLl0z5i1MJd'          โ”‚ โ”‚
โ”‚ โ”‚                             โ”‚   โ”‚   }                                                        โ”‚ โ”‚
โ”‚ โ”‚                             โ”‚   },                                                           โ”‚ โ”‚
โ”‚ โ”‚                             โ”‚   'default_images': {                                          โ”‚ โ”‚
โ”‚ โ”‚                             โ”‚   โ”‚   'jupyterhub':                                            โ”‚ โ”‚
โ”‚ โ”‚                             'quay.io/nebari/nebari-jupyterhub:2023.5.1',                     โ”‚ โ”‚
โ”‚ โ”‚                             โ”‚   โ”‚   'jupyterlab':                                            โ”‚ โ”‚
โ”‚ โ”‚                             'quay.io/nebari/nebari-jupyterlab:2023.5.1',                     โ”‚ โ”‚
โ”‚ โ”‚                             โ”‚   โ”‚   'dask_worker':                                           โ”‚ โ”‚
โ”‚ โ”‚                             'quay.io/nebari/nebari-dask-worker:2023.5.1'                     โ”‚ โ”‚
โ”‚ โ”‚                             โ”‚   },                                                           โ”‚ โ”‚
โ”‚ โ”‚                             โ”‚   'storage': {                                                 โ”‚ โ”‚
โ”‚ โ”‚                             โ”‚   โ”‚   'conda_store': '200Gi',                                  โ”‚ โ”‚
โ”‚ โ”‚                             โ”‚   โ”‚   'shared_filesystem': '200Gi'                             โ”‚ โ”‚
โ”‚ โ”‚                             โ”‚   },                                                           โ”‚ โ”‚
โ”‚ โ”‚                             โ”‚   'theme': {                                                   โ”‚ โ”‚
โ”‚ โ”‚                             โ”‚   โ”‚   'jupyterhub': {                                          โ”‚ โ”‚
โ”‚ โ”‚                             โ”‚   โ”‚   โ”‚   'hub_title': 'Nebari - test',                        โ”‚ โ”‚
โ”‚ โ”‚                             โ”‚   โ”‚   โ”‚   'hub_subtitle': 'Your open source data science       โ”‚ โ”‚
โ”‚ โ”‚                             platform, hosted on Digital Ocean',                              โ”‚ โ”‚
โ”‚ โ”‚                             โ”‚   โ”‚   โ”‚   'welcome': 'Welcome! Learn about Nebari\'s features  โ”‚ โ”‚
โ”‚ โ”‚                             and configurations in <a href="https://ww'+191,                  โ”‚ โ”‚
โ”‚ โ”‚                             โ”‚   โ”‚   โ”‚   'logo':                                              โ”‚ โ”‚
โ”‚ โ”‚                             'https://raw.githubusercontent.com/nebari-dev/nebari-design/maiโ€ฆ โ”‚ โ”‚
โ”‚ โ”‚                             โ”‚   โ”‚   โ”‚   'display_version': True                              โ”‚ โ”‚
โ”‚ โ”‚                             โ”‚   โ”‚   }                                                        โ”‚ โ”‚
โ”‚ โ”‚                             โ”‚   },                                                           โ”‚ โ”‚
โ”‚ โ”‚                             โ”‚   'helm_extensions': [],                                       โ”‚ โ”‚
โ”‚ โ”‚                             โ”‚   'monitoring': {'enabled': True},                             โ”‚ โ”‚
โ”‚ โ”‚                             โ”‚   ... +7                                                       โ”‚ โ”‚
โ”‚ โ”‚                             }                                                                โ”‚ โ”‚
โ”‚ โ”‚          default_password = 'yrfCCOLl0z5i1MJd'                                               โ”‚ โ”‚
โ”‚ โ”‚ default_password_filename = '/var/folders/lb/fzbrctwd2klcrwsg63vzqj0r0000gn/T/NEBARI_DEFAULโ€ฆ โ”‚ โ”‚
โ”‚ โ”‚            disable_prompt = False                                                            โ”‚ โ”‚
โ”‚ โ”‚                         f = <_io.TextIOWrapper                                               โ”‚ โ”‚
โ”‚ โ”‚                             name='/var/folders/lb/fzbrctwd2klcrwsg63vzqj0r0000gn/T/NEBARI_Dโ€ฆ โ”‚ โ”‚
โ”‚ โ”‚                             mode='w' encoding='UTF-8'>                                       โ”‚ โ”‚
โ”‚ โ”‚        kubernetes_version = None                                                             โ”‚ โ”‚
โ”‚ โ”‚                 namespace = 'dev'                                                            โ”‚ โ”‚
โ”‚ โ”‚             nebari_domain = 'ericmjl.com'                                                    โ”‚ โ”‚
โ”‚ โ”‚              project_name = 'test'                                                           โ”‚ โ”‚
โ”‚ โ”‚                repository = None                                                             โ”‚ โ”‚
โ”‚ โ”‚ repository_auto_provision = False                                                            โ”‚ โ”‚
โ”‚ โ”‚            ssl_cert_email = 'ericmajinglong@gmail.com'                                       โ”‚ โ”‚
โ”‚ โ”‚           terraform_state = 'remote'                                                         โ”‚ โ”‚
โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /Users/ericmjl/anaconda/lib/python3.9/site-packages/nebari/utils.py:268 in                       โ”‚
โ”‚ set_kubernetes_version                                                                           โ”‚
โ”‚                                                                                                  โ”‚
โ”‚   265 โ”‚   โ”‚   โ”‚   # grab oldest version                                                          โ”‚
โ”‚   266 โ”‚   โ”‚   โ”‚   cloud_config["kubernetes_version"] = k8s_versions[0]                           โ”‚
โ”‚   267 โ”‚                                                                                          โ”‚
โ”‚ โฑ 268 โ”‚   return _check_and_set_kubernetes_version()                                             โ”‚
โ”‚   269                                                                                            โ”‚
โ”‚   270                                                                                            โ”‚
โ”‚   271 @contextlib.contextmanager                                                                 โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚
โ”‚ โ”‚ _check_and_set_kubernetes_version = <function                                                โ”‚ โ”‚
โ”‚ โ”‚                                     set_kubernetes_version.<locals>._check_and_set_kubernetโ€ฆ โ”‚ โ”‚
โ”‚ โ”‚                                     at 0x10992ef70>                                          โ”‚ โ”‚
โ”‚ โ”‚                _raise_value_error = <function                                                โ”‚ โ”‚
โ”‚ โ”‚                                     set_kubernetes_version.<locals>._raise_value_error at    โ”‚ โ”‚
โ”‚ โ”‚                                     0x1098368b0>                                             โ”‚ โ”‚
โ”‚ โ”‚                      cloud_config = {                                                        โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   'region': 'nyc3',                                    โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   'kubernetes_version': 'PLACEHOLDER',                 โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   'node_groups': {                                     โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   โ”‚   'general': {                                     โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   โ”‚   โ”‚   'instance': 'g-8vcpu-32gb',                  โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   โ”‚   โ”‚   'min_nodes': 1,                              โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   โ”‚   โ”‚   'max_nodes': 1                               โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   โ”‚   },                                               โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   โ”‚   'user': {                                        โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   โ”‚   โ”‚   'instance': 'g-4vcpu-16gb',                  โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   โ”‚   โ”‚   'min_nodes': 1,                              โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   โ”‚   โ”‚   'max_nodes': 5                               โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   โ”‚   },                                               โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   โ”‚   'worker': {                                      โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   โ”‚   โ”‚   'instance': 'g-4vcpu-16gb',                  โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   โ”‚   โ”‚   'min_nodes': 1,                              โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   โ”‚   โ”‚   'max_nodes': 5                               โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   โ”‚   }                                                โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   }                                                    โ”‚ โ”‚
โ”‚ โ”‚                                     }                                                        โ”‚ โ”‚
โ”‚ โ”‚                   cloud_full_name = 'digital_ocean'                                          โ”‚ โ”‚
โ”‚ โ”‚                    cloud_provider = 'do'                                                     โ”‚ โ”‚
โ”‚ โ”‚               cloud_provider_dict = {                                                        โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   'aws': {                                             โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   โ”‚   'full_name': 'amazon_web_services',              โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   โ”‚   'k8s_version_checker_func':                      โ”‚ โ”‚
โ”‚ โ”‚                                     <functools._lru_cache_wrapper object at 0x108321ae0>     โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   },                                                   โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   'azure': {                                           โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   โ”‚   'full_name': 'azure',                            โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   โ”‚   'k8s_version_checker_func':                      โ”‚ โ”‚
โ”‚ โ”‚                                     <functools._lru_cache_wrapper object at 0x10862f900>     โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   },                                                   โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   'do': {                                              โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   โ”‚   'full_name': 'digital_ocean',                    โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   โ”‚   'k8s_version_checker_func': <function            โ”‚ โ”‚
โ”‚ โ”‚                                     kubernetes_versions at 0x108669820>                      โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   },                                                   โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   'gcp': {                                             โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   โ”‚   'full_name': 'google_cloud_platform',            โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   โ”‚   'k8s_version_checker_func':                      โ”‚ โ”‚
โ”‚ โ”‚                                     <functools._lru_cache_wrapper object at 0x10862fb80>     โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   }                                                    โ”‚ โ”‚
โ”‚ โ”‚                                     }                                                        โ”‚ โ”‚
โ”‚ โ”‚                            config = {                                                        โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   'project_name': 'test',                              โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   'provider': 'do',                                    โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   'domain': 'ericmjl.com',                             โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   'certificate': {'type': 'self-signed'},              โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   'security': {                                        โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   โ”‚   'authentication': {'type': 'password'},          โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   โ”‚   'keycloak': {                                    โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   โ”‚   โ”‚   'initial_root_password': 'yrfCCOLl0z5i1MJd'  โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   โ”‚   }                                                โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   },                                                   โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   'default_images': {                                  โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   โ”‚   'jupyterhub':                                    โ”‚ โ”‚
โ”‚ โ”‚                                     'quay.io/nebari/nebari-jupyterhub:2023.5.1',             โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   โ”‚   'jupyterlab':                                    โ”‚ โ”‚
โ”‚ โ”‚                                     'quay.io/nebari/nebari-jupyterlab:2023.5.1',             โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   โ”‚   'dask_worker':                                   โ”‚ โ”‚
โ”‚ โ”‚                                     'quay.io/nebari/nebari-dask-worker:2023.5.1'             โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   },                                                   โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   'storage': {                                         โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   โ”‚   'conda_store': '200Gi',                          โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   โ”‚   'shared_filesystem': '200Gi'                     โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   },                                                   โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   'theme': {                                           โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   โ”‚   'jupyterhub': {                                  โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   โ”‚   โ”‚   'hub_title': 'Nebari - test',                โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   โ”‚   โ”‚   'hub_subtitle': 'Your open source data       โ”‚ โ”‚
โ”‚ โ”‚                                     science platform, hosted on Digital Ocean',              โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   โ”‚   โ”‚   'welcome': 'Welcome! Learn about Nebari\'s   โ”‚ โ”‚
โ”‚ โ”‚                                     features and configurations in <a href="https://ww'+191, โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   โ”‚   โ”‚   'logo':                                      โ”‚ โ”‚
โ”‚ โ”‚                                     'https://raw.githubusercontent.com/nebari-dev/nebari-deโ€ฆ โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   โ”‚   โ”‚   'display_version': True                      โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   โ”‚   }                                                โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   },                                                   โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   'helm_extensions': [],                               โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   'monitoring': {'enabled': True},                     โ”‚ โ”‚
โ”‚ โ”‚                                     โ”‚   ... +7                                               โ”‚ โ”‚
โ”‚ โ”‚                                     }                                                        โ”‚ โ”‚
โ”‚ โ”‚                              func = <function kubernetes_versions at 0x108669820>            โ”‚ โ”‚
โ”‚ โ”‚               grab_latest_version = True                                                     โ”‚ โ”‚
โ”‚ โ”‚                kubernetes_version = None                                                     โ”‚ โ”‚
โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /Users/ericmjl/anaconda/lib/python3.9/site-packages/nebari/utils.py:263 in                       โ”‚
โ”‚ _check_and_set_kubernetes_version                                                                โ”‚
โ”‚                                                                                                  โ”‚
โ”‚   260 โ”‚   โ”‚   โ”‚   else:                                                                          โ”‚
โ”‚   261 โ”‚   โ”‚   โ”‚   โ”‚   _raise_value_error(cloud_provider, k8s_versions)                           โ”‚
โ”‚   262 โ”‚   โ”‚   elif grab_latest_version:                                                          โ”‚
โ”‚ โฑ 263 โ”‚   โ”‚   โ”‚   cloud_config["kubernetes_version"] = k8s_versions[-1]                          โ”‚
โ”‚   264 โ”‚   โ”‚   else:                                                                              โ”‚
โ”‚   265 โ”‚   โ”‚   โ”‚   # grab oldest version                                                          โ”‚
โ”‚   266 โ”‚   โ”‚   โ”‚   cloud_config["kubernetes_version"] = k8s_versions[0]                           โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚
โ”‚ โ”‚  _raise_value_error = <function set_kubernetes_version.<locals>._raise_value_error at        โ”‚ โ”‚
โ”‚ โ”‚                       0x1098368b0>                                                           โ”‚ โ”‚
โ”‚ โ”‚        cloud_config = {                                                                      โ”‚ โ”‚
โ”‚ โ”‚                       โ”‚   'region': 'nyc3',                                                  โ”‚ โ”‚
โ”‚ โ”‚                       โ”‚   'kubernetes_version': 'PLACEHOLDER',                               โ”‚ โ”‚
โ”‚ โ”‚                       โ”‚   'node_groups': {                                                   โ”‚ โ”‚
โ”‚ โ”‚                       โ”‚   โ”‚   'general': {                                                   โ”‚ โ”‚
โ”‚ โ”‚                       โ”‚   โ”‚   โ”‚   'instance': 'g-8vcpu-32gb',                                โ”‚ โ”‚
โ”‚ โ”‚                       โ”‚   โ”‚   โ”‚   'min_nodes': 1,                                            โ”‚ โ”‚
โ”‚ โ”‚                       โ”‚   โ”‚   โ”‚   'max_nodes': 1                                             โ”‚ โ”‚
โ”‚ โ”‚                       โ”‚   โ”‚   },                                                             โ”‚ โ”‚
โ”‚ โ”‚                       โ”‚   โ”‚   'user': {                                                      โ”‚ โ”‚
โ”‚ โ”‚                       โ”‚   โ”‚   โ”‚   'instance': 'g-4vcpu-16gb',                                โ”‚ โ”‚
โ”‚ โ”‚                       โ”‚   โ”‚   โ”‚   'min_nodes': 1,                                            โ”‚ โ”‚
โ”‚ โ”‚                       โ”‚   โ”‚   โ”‚   'max_nodes': 5                                             โ”‚ โ”‚
โ”‚ โ”‚                       โ”‚   โ”‚   },                                                             โ”‚ โ”‚
โ”‚ โ”‚                       โ”‚   โ”‚   'worker': {                                                    โ”‚ โ”‚
โ”‚ โ”‚                       โ”‚   โ”‚   โ”‚   'instance': 'g-4vcpu-16gb',                                โ”‚ โ”‚
โ”‚ โ”‚                       โ”‚   โ”‚   โ”‚   'min_nodes': 1,                                            โ”‚ โ”‚
โ”‚ โ”‚                       โ”‚   โ”‚   โ”‚   'max_nodes': 5                                             โ”‚ โ”‚
โ”‚ โ”‚                       โ”‚   โ”‚   }                                                              โ”‚ โ”‚
โ”‚ โ”‚                       โ”‚   }                                                                  โ”‚ โ”‚
โ”‚ โ”‚                       }                                                                      โ”‚ โ”‚
โ”‚ โ”‚      cloud_provider = 'do'                                                                   โ”‚ โ”‚
โ”‚ โ”‚                func = <function kubernetes_versions at 0x108669820>                          โ”‚ โ”‚
โ”‚ โ”‚ grab_latest_version = True                                                                   โ”‚ โ”‚
โ”‚ โ”‚        k8s_versions = []                                                                     โ”‚ โ”‚
โ”‚ โ”‚  kubernetes_version = None                                                                   โ”‚ โ”‚
โ”‚ โ”‚              region = 'nyc3'                                                                 โ”‚ โ”‚
โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ
IndexError: list index out of range

Translating the stack trace into English via ChatGPT, I get the following explanation:

Based on the provided stack trace, the error occurred in the file nebari/utils.py at line 263. The specific error is an IndexError, which means that the code tried to access an element in a list using an index that is outside the valid range of indices for that list.

In this case, the code is trying to set the value of cloud_config["kubernetes_version"] based on the available Kubernetes versions (k8s_versions). However, it seems that the k8s_versions list is empty (no elements), so when the code tries to access k8s_versions[-1] (the last element), it raises an IndexError because there are no elements to retrieve.

To resolve this issue, you need to ensure that the k8s_versions list is populated with valid Kubernetes versions before attempting to set the value of cloud_config["kubernetes_version"].

Perhaps there may be a bug that results in k8s_versions?

pavithraes commented 1 year ago

@ericmjl Thanks for reporting, and I see this is your first issue - welcome!

@iameskild Do you have thoughts on what's happening here?

I'll try to reproduce as well.

Related/relevant: #1344

iameskild commented 1 year ago

Hi @ericmjl, thanks for raising this! Here is a description of the fix from my PR:

Currently the comparison of "1.24.13-do.0" <= "1.24.13" (or HIGHEST_SUPPORTED_K8S_VERSION) fails. This is an edge case where the versions are indeed equal but the additional suffix (-do.0) causes it fail. This PR ensures that these kinds of comparisons won't fail.

Let me know if you have any questions :)

dharhas commented 1 year ago

@iameskild are we able to run installs from M1 Macbooks now. I though that was broken?

iameskild commented 1 year ago

@dharhas deploying a cluster to one of the cloud providers works from Mac (M1 and otherwise) but local deployments do not.

pavithraes commented 1 year ago

Thanks for the quick fix, @iameskild!

fip17 commented 1 year ago

New user having the same problem. How do I fix that?

iameskild commented 1 year ago

Hi @fip17, sorry for the inconvenience. You can install nebari from the develop branch to get this latest fix

pip install git+https://github.com/nebari-dev/nebari.git@develop