Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Extension Mechanism Implementation #1833

Merged
merged 147 commits into from
Aug 11, 2023
Merged
Changes from 1 commit
Commits
Show all changes
147 commits
Select commit Hold shift + click to select a range
3fa82c5
Initial commit moving towards stages plugin
costrouc Jun 13, 2023
4dfe5f2
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 13, 2023
e35af55
Work to make runnable along with working on schema
costrouc Jun 14, 2023
4540a1d
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 14, 2023
39f6419
Setting defaults for schema
costrouc Jun 14, 2023
c533d3d
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 14, 2023
828d3d3
Working subcommands using extension system
costrouc Jun 15, 2023
154ed53
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 15, 2023
813f231
Working render!
costrouc Jun 15, 2023
1eedde3
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 15, 2023
c8816ce
Making it further through deployment
costrouc Jun 15, 2023
8c6e7a4
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 15, 2023
cc16019
[WIP] Add InputVar schema (#1835)
iameskild Jun 15, 2023
5bc8706
Working local deploy, render, destroy and major simplifications
costrouc Jun 15, 2023
c3b794d
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 15, 2023
c9c8440
Fully working deploy with checks again
costrouc Jun 15, 2023
e45e2c0
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 15, 2023
7ac3609
Add more InputVars schema (#1836)
iameskild Jun 15, 2023
1f86a7b
Adding more schema information about providers
costrouc Jun 15, 2023
56b4d38
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 15, 2023
31a6390
Fixes to schema to allow for local deployment
costrouc Jun 16, 2023
76f8d6d
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 16, 2023
9896875
Apply validation on the kubernetes version
costrouc Jun 16, 2023
e70dd2b
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 16, 2023
0b7ebc0
Fixing the upgrade command
costrouc Jun 16, 2023
04010d8
Fixing support and upgrde commands
costrouc Jun 16, 2023
a051ec5
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 16, 2023
97d1464
More work to get init working again
costrouc Jun 16, 2023
9eb56c6
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 16, 2023
613b82d
Make cli entirely extension subcommands
costrouc Jun 16, 2023
ced44d0
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 16, 2023
95cde1e
Ensure that plugy extensions can be loaded via entrypoints
costrouc Jun 16, 2023
ee0e4b8
Adding import module subcommand option
costrouc Jun 16, 2023
e231365
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 16, 2023
468af6b
More fixes around AWS deployment
costrouc Jun 19, 2023
f63cefd
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 19, 2023
be97d69
Cleaner destroy when running stages.
costrouc Jun 20, 2023
9ce35b4
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 20, 2023
be9c034
Missing schema import
costrouc Jun 20, 2023
7be54f1
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 20, 2023
09c998d
Working gcp deployment
costrouc Jun 20, 2023
a466e83
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 20, 2023
fd8fc22
Azure fixes
costrouc Jun 20, 2023
f3826e5
Add InputVar schema to kubernetes_services stage (#1837)
iameskild Jun 20, 2023
46f4b6f
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 20, 2023
c99334c
Fixups for input_var schema
costrouc Jun 20, 2023
2a8999e
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 20, 2023
3e81c67
Fixing digital ocean deployment
costrouc Jun 21, 2023
719f578
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 21, 2023
bba0161
Further enhancements to the schema and making domain optional
costrouc Jun 21, 2023
436529c
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 21, 2023
c3f1a6e
Prevent bucket from being deleted each time
costrouc Jun 21, 2023
0359499
Significantly simplify the initialization
costrouc Jun 21, 2023
87c85b5
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 21, 2023
60bca92
Integrating PR https://github.com/nebari-dev/nebari/pull/1803
costrouc Jun 21, 2023
b1213ff
Fixup for test-nebari-provider
costrouc Jun 21, 2023
85548e0
Fixup for nebari provider
costrouc Jun 21, 2023
f2d8e20
Don't require the github client id/secret
costrouc Jun 21, 2023
f770355
Missing schema import
costrouc Jun 21, 2023
94ddf58
Fixing indexing to use pydantic schema
costrouc Jun 21, 2023
a0e833f
Undefined variables
costrouc Jun 21, 2023
867ddfd
Yaml export
costrouc Jun 21, 2023
506f6f3
Missing import
costrouc Jun 21, 2023
e71f3ce
Expect pydantic schema
costrouc Jun 21, 2023
9ab3342
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 21, 2023
8e0c12d
Dump to stringio
costrouc Jun 21, 2023
9151463
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 21, 2023
4fd18a2
Wrong path for render_template
costrouc Jun 21, 2023
bbd8b3a
Fixing broken path in action
costrouc Jun 21, 2023
1307a59
Fixing the cli tests
costrouc Jun 21, 2023
5564674
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 21, 2023
a88e6f1
Adding controls around stages exclusion
costrouc Jun 22, 2023
d20b7a8
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 22, 2023
e8e0def
Typo in deploy subcommand
costrouc Jun 22, 2023
5c680a6
Remove image from kubespawner to preserve default behavior
costrouc Jun 22, 2023
1683dec
More fixing of the tests
costrouc Jun 22, 2023
9964ef0
Exclude yaml checks to new stages directory
costrouc Jun 22, 2023
cdfe3e6
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 22, 2023
79820f5
Typo in yaml exclusion path
costrouc Jun 22, 2023
6507ed1
Fixing ruff checks
costrouc Jun 22, 2023
8cb8d55
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 22, 2023
dfc92b7
Reworking stages for more complete testing and passing
costrouc Jun 23, 2023
fe48c24
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 23, 2023
2dd5dcb
Fixing render template path
costrouc Jun 23, 2023
644995f
Adding a timeout to notebook tests
costrouc Jun 23, 2023
de24730
Add NebariPluginManager, allow schema to be dynamically extended (#1844)
iameskild Jun 27, 2023
be03543
Moving schema to stages
costrouc Jun 28, 2023
dd46e27
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 28, 2023
c26006b
Moving validation of environment variables to schema and providers
costrouc Jun 29, 2023
fd5e71a
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 29, 2023
a70485b
Further work to uncouple stages
costrouc Jun 29, 2023
ac04e96
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 29, 2023
73776ac
Adding changes
costrouc Jun 29, 2023
c894cf6
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 29, 2023
31ef601
Missing import
costrouc Jun 29, 2023
608c16f
Fixing path
costrouc Jun 29, 2023
bd527d9
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 29, 2023
840364a
Adding digital ocean validation
costrouc Jun 30, 2023
158958a
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 30, 2023
fa398e4
Adding aws checks for region, zone, and instances
costrouc Jun 30, 2023
237a780
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 30, 2023
33bcdfc
Typo and apply validation at different level
costrouc Jun 30, 2023
da12f6e
load_config -> read_config for naming
costrouc Jun 30, 2023
00ae443
Adding digital ocean spaces access keys
costrouc Jun 30, 2023
da2ce8b
Wrong reference to config
costrouc Jun 30, 2023
542aaeb
Fixing conftest
costrouc Jun 30, 2023
1febe5f
Making docs links in constants module
costrouc Jun 30, 2023
1eb5c05
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 30, 2023
77fc327
Fixing tests
costrouc Jun 30, 2023
9a1191b
Missing import
costrouc Jun 30, 2023
1db1523
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 30, 2023
394e608
Wrong import module
costrouc Jun 30, 2023
ae0b5fe
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 30, 2023
1e47558
Fixing tests
costrouc Jun 30, 2023
f2d6972
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 30, 2023
9494614
Mocking more methods in tests
costrouc Jun 30, 2023
3f15336
Adding more concise data
costrouc Jun 30, 2023
026172d
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 30, 2023
963cf85
Properly escaping strings
costrouc Jun 30, 2023
6fdaeaf
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 30, 2023
5e9f063
Trigger CI again
costrouc Jun 30, 2023
0100345
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 30, 2023
5592821
Ensure that username matches before
costrouc Jun 30, 2023
a43dadf
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Jun 30, 2023
fe55fa9
Missing import after rebase
costrouc Aug 2, 2023
2670a20
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Aug 2, 2023
b48eef6
Remove os.path.join error in ruff
costrouc Aug 2, 2023
e08b1f4
Fixing import
costrouc Aug 2, 2023
27cd898
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Aug 2, 2023
b7eebd2
Ignore certain pathlib warings
costrouc Aug 2, 2023
1f9338e
Missing import
costrouc Aug 2, 2023
2bdb9d7
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Aug 2, 2023
c045be4
Missing import
costrouc Aug 2, 2023
142182c
Changes to account for #1832 and #1868
costrouc Aug 3, 2023
371483b
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Aug 3, 2023
f36c41f
Missing pathlib import
costrouc Aug 3, 2023
beac07a
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Aug 3, 2023
cc25393
Ensure pathlib everywhere
costrouc Aug 3, 2023
05fe1d8
Ensure using pathlib type
costrouc Aug 3, 2023
ec78e2c
[pre-commit.ci] Apply automatic pre-commit fixes
pre-commit-ci[bot] Aug 3, 2023
e27c83e
Bump the highest supported kubernetes version
costrouc Aug 3, 2023
107d882
Clean up tests
iameskild Aug 8, 2023
3e1380d
Minor clean, path updates
iameskild Aug 8, 2023
79b9066
Remove linger checks.py
iameskild Aug 9, 2023
7167b51
Fix tests
iameskild Aug 9, 2023
5577d37
fix jhub_ssh test
iameskild Aug 9, 2023
16f6ba4
Extension mechanism AWS testing (#1864)
sblair-metrostar Aug 9, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Clean up tests
iameskild committed Aug 8, 2023
commit 107d882ace50914c5add0181587125a0724403fe
48 changes: 31 additions & 17 deletions tests/tests_unit/test_cli.py
Original file line number Diff line number Diff line change
@@ -2,8 +2,8 @@

import pytest

from _nebari.subcommands.init import InitInputs
from nebari.plugins import nebari_plugin_manager
from _nebari.schema import InitInputs
from _nebari.utils import load_yaml

PROJECT_NAME = "clitest"
DOMAIN_NAME = "clitest.dev"
@@ -13,7 +13,7 @@
"namespace, auth_provider, ci_provider, ssl_cert_email",
(
[None, None, None, None],
["prod", "password", "github-actions", "it@acme.org"],
["prod", "github", "github-actions", "it@acme.org"],
),
)
def test_nebari_init(tmp_path, namespace, auth_provider, ci_provider, ssl_cert_email):
@@ -48,20 +48,34 @@ def test_nebari_init(tmp_path, namespace, auth_provider, ci_provider, ssl_cert_e

subprocess.run(command, cwd=tmp_path, check=True)

config = nebari_plugin_manager.read_config(tmp_path / "nebari-config.yaml")
config = load_yaml(tmp_path / "nebari-config.yaml")

assert config.namespace == namespace
assert config.security.authentication.type.lower() == auth_provider
assert config.ci_cd.type == ci_provider
assert config.certificate.acme_email == ssl_cert_email
assert config.get("namespace") == namespace
assert (
config.get("security", {}).get("authentication", {}).get("type").lower()
== auth_provider
)
ci_cd = config.get("ci_cd", None)
if ci_cd:
assert ci_cd.get("type", {}) == ci_provider
else:
assert ci_cd == ci_provider
acme_email = config.get("certificate", None)
if acme_email:
assert acme_email.get("acme_email") == ssl_cert_email
else:
assert acme_email == ssl_cert_email


@pytest.mark.parametrize(
"command",
(
["nebari", "--version"],
["nebari", "info"],
),
)
def test_nebari_commands_no_args(command):
subprocess.run(command, check=True, capture_output=True, text=True).stdout.strip()
def test_python_invocation():
def run(command):
return subprocess.run(
command, check=True, capture_output=True, text=True
).stdout.strip()

command = ["nebari", "--version"]

actual = run(["python", "-m", *command])
expected = run(command)

assert actual == expected
2 changes: 1 addition & 1 deletion tests/tests_unit/test_init.py
Original file line number Diff line number Diff line change
@@ -6,7 +6,7 @@
@pytest.mark.parametrize(
"k8s_version, expected", [(None, True), ("1.19", True), (1000, ValueError)]
)
def test_init(setup_fixture, k8s_version, expected, render_config_partial):
def test_init(setup_fixture, k8s_version, expected):
(nebari_config_loc, render_config_inputs) = setup_fixture
(
project,
2 changes: 1 addition & 1 deletion tests/tests_unit/test_links.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import pytest
import requests

from _nebari.constants import AWS_ENV_DOCS, AZURE_ENV_DOCS, DO_ENV_DOCS, GCP_ENV_DOCS
from _nebari.utils import AWS_ENV_DOCS, AZURE_ENV_DOCS, DO_ENV_DOCS, GCP_ENV_DOCS

LINKS_TO_TEST = [
DO_ENV_DOCS,
219 changes: 109 additions & 110 deletions tests/tests_unit/test_render.py
Original file line number Diff line number Diff line change
@@ -1,120 +1,119 @@
import os
from pathlib import Path

import pytest
from ruamel.yaml import YAML

from _nebari.render import render_template
from _nebari.stages.base import get_available_stages
from _nebari.render import render_template, set_env_vars_in_config

from .utils import PRESERVED_DIR, render_config_partial


def test_render_config(nebari_render):
output_directory, config_filename = nebari_render
config = nebari_plugin_manager.read_config(config_filename)
assert {"nebari-config.yaml", "stages", ".gitignore"} <= set(
os.listdir(output_directory)
@pytest.fixture
def write_nebari_config_to_file(setup_fixture):
nebari_config_loc, render_config_inputs = setup_fixture
(
project,
namespace,
domain,
cloud_provider,
ci_provider,
auth_provider,
) = render_config_inputs

config = render_config_partial(
project_name=project,
namespace=namespace,
nebari_domain=domain,
cloud_provider=cloud_provider,
ci_provider=ci_provider,
auth_provider=auth_provider,
kubernetes_version=None,
)
assert {
"07-kubernetes-services",
"02-infrastructure",
"01-terraform-state",
"05-kubernetes-keycloak",
"08-nebari-tf-extensions",
"06-kubernetes-keycloak-configuration",
"04-kubernetes-ingress",
"03-kubernetes-initialize",
} == set(os.listdir(output_directory / "stages"))

if config.provider == schema.ProviderEnum.do:
assert (output_directory / "stages" / "01-terraform-state/do").is_dir()
assert (output_directory / "stages" / "02-infrastructure/do").is_dir()
elif config.provider == schema.ProviderEnum.aws:
assert (output_directory / "stages" / "01-terraform-state/aws").is_dir()
assert (output_directory / "stages" / "02-infrastructure/aws").is_dir()
elif config.provider == schema.ProviderEnum.gcp:
assert (output_directory / "stages" / "01-terraform-state/gcp").is_dir()
assert (output_directory / "stages" / "02-infrastructure/gcp").is_dir()
elif config.provider == schema.ProviderEnum.azure:
assert (output_directory / "stages" / "01-terraform-state/azure").is_dir()
assert (output_directory / "stages" / "02-infrastructure/azure").is_dir()

if config.ci_cd.type == CiEnum.github_actions:
assert (output_directory / ".github/workflows/").is_dir()
elif config.ci_cd.type == CiEnum.gitlab_ci:
assert (output_directory / ".gitlab-ci.yml").is_file()


# @pytest.fixture
# def write_nebari_config_to_file(setup_fixture, render_config_partial):
# nebari_config_loc, render_config_inputs = setup_fixture
# (
# project,
# namespace,
# domain,
# cloud_provider,
# ci_provider,
# auth_provider,
# ) = render_config_inputs

# config = render_config_partial(
# project_name=project,
# namespace=namespace,
# nebari_domain=domain,
# cloud_provider=cloud_provider,
# ci_provider=ci_provider,
# auth_provider=auth_provider,
# kubernetes_version=None,
# )

# stages = get_available_stages()
# render_template(str(nebari_config_loc.parent), config, stages)

# yield setup_fixture


# def test_render_template(write_nebari_config_to_file):
# nebari_config_loc, render_config_inputs = write_nebari_config_to_file
# (
# project,
# namespace,
# domain,
# cloud_provider,
# ci_provider,
# auth_provider,
# ) = render_config_inputs

# yaml = YAML()
# nebari_config_json = yaml.load(nebari_config_loc.read_text())

# assert nebari_config_json["project_name"] == project
# assert nebari_config_json["namespace"] == namespace
# assert nebari_config_json["domain"] == domain
# assert nebari_config_json["provider"] == cloud_provider


# def test_exists_after_render(write_nebari_config_to_file):
# items_to_check = [
# ".gitignore",
# "stages",
# "nebari-config.yaml",
# PRESERVED_DIR,
# ]

# nebari_config_loc, _ = write_nebari_config_to_file

# yaml = YAML()
# nebari_config_json = yaml.load(nebari_config_loc.read_text())

# # list of files/dirs available after `nebari render` command
# ls = os.listdir(Path(nebari_config_loc).parent.resolve())

# cicd = nebari_config_json.get("ci_cd", {}).get("type", None)

# if cicd == "github-actions":
# items_to_check.append(".github")
# elif cicd == "gitlab-ci":
# items_to_check.append(".gitlab-ci.yml")

# for i in items_to_check:
# assert i in ls

# write to nebari_config.yaml
yaml = YAML(typ="unsafe", pure=True)
yaml.dump(config, nebari_config_loc)

render_template(nebari_config_loc.parent, nebari_config_loc)

yield setup_fixture


def test_get_secret_config_entries(monkeypatch):
sec1 = "secret1"
sec2 = "nestedsecret1"
config_orig = {
"key1": "value1",
"key2": "NEBARI_SECRET_secret_val",
"key3": {
"nested_key1": "nested_value1",
"nested_key2": "NEBARI_SECRET_nested_secret_val",
},
}
expected = {
"key1": "value1",
"key2": sec1,
"key3": {
"nested_key1": "nested_value1",
"nested_key2": sec2,
},
}

# should raise error if implied env var is not set
with pytest.raises(EnvironmentError):
config = config_orig.copy()
set_env_vars_in_config(config)

monkeypatch.setenv("secret_val", sec1, prepend=False)
monkeypatch.setenv("nested_secret_val", sec2, prepend=False)
config = config_orig.copy()
set_env_vars_in_config(config)
assert config == expected


def test_render_template(write_nebari_config_to_file):
nebari_config_loc, render_config_inputs = write_nebari_config_to_file
(
project,
namespace,
domain,
cloud_provider,
ci_provider,
auth_provider,
) = render_config_inputs

yaml = YAML()
nebari_config_json = yaml.load(nebari_config_loc.read_text())

assert nebari_config_json["project_name"] == project
assert nebari_config_json["namespace"] == namespace
assert nebari_config_json["domain"] == domain
assert nebari_config_json["provider"] == cloud_provider


def test_exists_after_render(write_nebari_config_to_file):
items_to_check = [
".gitignore",
"stages",
"nebari-config.yaml",
PRESERVED_DIR,
]

nebari_config_loc, _ = write_nebari_config_to_file

yaml = YAML()
nebari_config_json = yaml.load(nebari_config_loc.read_text())

# list of files/dirs available after `nebari render` command
ls = os.listdir(Path(nebari_config_loc).parent.resolve())

cicd = nebari_config_json.get("ci_cd", {}).get("type", None)

if cicd == "github-actions":
items_to_check.append(".github")
elif cicd == "gitlab-ci":
items_to_check.append(".gitlab-ci.yml")

for i in items_to_check:
assert i in ls
68 changes: 22 additions & 46 deletions tests/tests_unit/test_schema.py
Original file line number Diff line number Diff line change
@@ -3,49 +3,25 @@
from .utils import render_config_partial


def test_minimal_schema():
config = nebari_plugin_manager.config_schema(project_name="test")
assert config.project_name == "test"
assert config.storage.conda_store == "200Gi"


def test_minimal_schema_from_file(tmp_path):
filename = tmp_path / "nebari-config.yaml"
with filename.open("w") as f:
f.write("project_name: test\n")

config = nebari_plugin_manager.read_config(filename)
assert config.project_name == "test"
assert config.storage.conda_store == "200Gi"


def test_minimal_schema_from_file_with_env(tmp_path, monkeypatch):
filename = tmp_path / "nebari-config.yaml"
with filename.open("w") as f:
f.write("project_name: test\n")

monkeypatch.setenv("NEBARI_SECRET__project_name", "env")
monkeypatch.setenv("NEBARI_SECRET__storage__conda_store", "1000Gi")

config = nebari_plugin_manager.read_config(filename)
assert config.project_name == "env"
assert config.storage.conda_store == "1000Gi"


def test_minimal_schema_from_file_without_env(tmp_path, monkeypatch):
filename = tmp_path / "nebari-config.yaml"
with filename.open("w") as f:
f.write("project_name: test\n")

monkeypatch.setenv("NEBARI_SECRET__project_name", "env")
monkeypatch.setenv("NEBARI_SECRET__storage__conda_store", "1000Gi")

config = nebari_plugin_manager.read_config(filename, read_environment=False)
assert config.project_name == "test"
assert config.storage.conda_store == "200Gi"


def test_render_schema(nebari_config):
assert isinstance(nebari_config, schema.Main)
assert nebari_config.project_name == f"pytest{nebari_config.provider.value}"
assert nebari_config.namespace == "dev"
def test_schema(setup_fixture):
(nebari_config_loc, render_config_inputs) = setup_fixture
(
project,
namespace,
domain,
cloud_provider,
ci_provider,
auth_provider,
) = render_config_inputs

config = render_config_partial(
project_name=project,
namespace=namespace,
nebari_domain=domain,
cloud_provider=cloud_provider,
ci_provider=ci_provider,
auth_provider=auth_provider,
kubernetes_version=None,
)

_nebari.schema.verify(config)
25 changes: 16 additions & 9 deletions tests/tests_unit/test_upgrade.py
Original file line number Diff line number Diff line change
@@ -2,9 +2,8 @@

import pytest

from _nebari.upgrade import do_upgrade
from _nebari.upgrade import do_upgrade, load_yaml, verify
from _nebari.version import __version__, rounded_ver_parse
from nebari.plugins import nebari_plugin_manager


@pytest.fixture
@@ -70,24 +69,32 @@ def test_upgrade_4_0(
return

# Check the resulting YAML
config = nebari_plugin_manager.read_config(tmp_qhub_config)
config = load_yaml(tmp_qhub_config)

assert len(config.security.keycloak.initial_root_password) == 16
assert not hasattr(config.security, "users")
assert not hasattr(config.security, "groups")
verify(
config
) # Would raise an error if invalid by current Nebari version's standards

assert len(config["security"]["keycloak"]["initial_root_password"]) == 16

assert "users" not in config["security"]
assert "groups" not in config["security"]

__rounded_version__ = ".".join([str(c) for c in rounded_ver_parse(__version__)])

# Check image versions have been bumped up
assert (
config.default_images.jupyterhub
config["default_images"]["jupyterhub"]
== f"quansight/nebari-jupyterhub:v{__rounded_version__}"
)
assert (
config.profiles.jupyterlab[0].kubespawner_override.image
config["profiles"]["jupyterlab"][0]["kubespawner_override"]["image"]
== f"quansight/nebari-jupyterlab:v{__rounded_version__}"
)
assert config.security.authentication.type != "custom"

assert (
config.get("security", {}).get("authentication", {}).get("type", "") != "custom"
)

# Keycloak import users json
assert (