ccluster-py 0.0.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. ccluster_py-0.0.1/PKG-INFO +84 -0
  2. ccluster_py-0.0.1/README.md +66 -0
  3. ccluster_py-0.0.1/pyproject.toml +37 -0
  4. ccluster_py-0.0.1/pyproject.toml.orig +44 -0
  5. ccluster_py-0.0.1/src/ccluster/__init__.py +19 -0
  6. ccluster_py-0.0.1/src/ccluster/catalogs/__init__.py +65 -0
  7. ccluster_py-0.0.1/src/ccluster/catalogs/cluster_base/__init__.py +41 -0
  8. ccluster_py-0.0.1/src/ccluster/catalogs/cluster_base/argo_rollouts/__init__.py +37 -0
  9. ccluster_py-0.0.1/src/ccluster/catalogs/cluster_base/argo_rollouts/values.py +79 -0
  10. ccluster_py-0.0.1/src/ccluster/catalogs/cluster_base/cert_manager/__init__.py +37 -0
  11. ccluster_py-0.0.1/src/ccluster/catalogs/cluster_base/cert_manager/values.py +85 -0
  12. ccluster_py-0.0.1/src/ccluster/catalogs/cluster_base/external_dns/__init__.py +39 -0
  13. ccluster_py-0.0.1/src/ccluster/catalogs/cluster_base/external_dns/values.py +115 -0
  14. ccluster_py-0.0.1/src/ccluster/catalogs/cluster_base/final_stack/__init__.py +31 -0
  15. ccluster_py-0.0.1/src/ccluster/catalogs/cluster_base/final_stack/values.py +41 -0
  16. ccluster_py-0.0.1/src/ccluster/catalogs/cluster_base/fluent_bit/__init__.py +37 -0
  17. ccluster_py-0.0.1/src/ccluster/catalogs/cluster_base/fluent_bit/values.py +85 -0
  18. ccluster_py-0.0.1/src/ccluster/catalogs/cluster_base/gpu_operator/__init__.py +39 -0
  19. ccluster_py-0.0.1/src/ccluster/catalogs/cluster_base/gpu_operator/values.py +118 -0
  20. ccluster_py-0.0.1/src/ccluster/catalogs/cluster_base/ingress_nginx/__init__.py +41 -0
  21. ccluster_py-0.0.1/src/ccluster/catalogs/cluster_base/ingress_nginx/values.py +115 -0
  22. ccluster_py-0.0.1/src/ccluster/catalogs/cluster_base/istio/__init__.py +45 -0
  23. ccluster_py-0.0.1/src/ccluster/catalogs/cluster_base/istio/values.py +158 -0
  24. ccluster_py-0.0.1/src/ccluster/catalogs/cluster_base/keda/__init__.py +37 -0
  25. ccluster_py-0.0.1/src/ccluster/catalogs/cluster_base/keda/values.py +74 -0
  26. ccluster_py-0.0.1/src/ccluster/catalogs/cluster_base/kube_prometheus_stack/__init__.py +41 -0
  27. ccluster_py-0.0.1/src/ccluster/catalogs/cluster_base/kube_prometheus_stack/values.py +124 -0
  28. ccluster_py-0.0.1/src/ccluster/catalogs/cluster_base/longhorn/__init__.py +33 -0
  29. ccluster_py-0.0.1/src/ccluster/catalogs/cluster_base/longhorn/values.py +46 -0
  30. ccluster_py-0.0.1/src/ccluster/catalogs/cluster_base/metrics_server/__init__.py +33 -0
  31. ccluster_py-0.0.1/src/ccluster/catalogs/cluster_base/metrics_server/values.py +50 -0
  32. ccluster_py-0.0.1/src/ccluster/catalogs/cluster_base/network_operator/__init__.py +33 -0
  33. ccluster_py-0.0.1/src/ccluster/catalogs/cluster_base/network_operator/values.py +50 -0
  34. ccluster_py-0.0.1/src/ccluster/catalogs/cluster_base/opentelemetry_collector/__init__.py +35 -0
  35. ccluster_py-0.0.1/src/ccluster/catalogs/cluster_base/opentelemetry_collector/values.py +78 -0
  36. ccluster_py-0.0.1/src/ccluster/catalogs/cluster_base/prometheus_adapter/__init__.py +37 -0
  37. ccluster_py-0.0.1/src/ccluster/catalogs/cluster_base/prometheus_adapter/values.py +75 -0
  38. ccluster_py-0.0.1/src/ccluster/catalogs/cluster_base/spire/__init__.py +45 -0
  39. ccluster_py-0.0.1/src/ccluster/catalogs/cluster_base/spire/values.py +155 -0
  40. ccluster_py-0.0.1/src/ccluster/catalogs/cluster_base/spire_crds/__init__.py +33 -0
  41. ccluster_py-0.0.1/src/ccluster/catalogs/cluster_base/spire_crds/values.py +50 -0
  42. ccluster_py-0.0.1/src/ccluster/catalogs/cluster_base/teleport_kube_agent/__init__.py +37 -0
  43. ccluster_py-0.0.1/src/ccluster/catalogs/cluster_base/teleport_kube_agent/values.py +125 -0
  44. ccluster_py-0.0.1/src/ccluster/py.typed +0 -0
  45. ccluster_py-0.0.1/src/ccluster/v1alpha1/__init__.py +47 -0
  46. ccluster_py-0.0.1/src/ccluster/v1alpha1/cclcomponentset.py +269 -0
  47. ccluster_py-0.0.1/src/ccluster/v1alpha1/cclinfraplane.py +222 -0
@@ -0,0 +1,84 @@
1
+ Metadata-Version: 2.4
2
+ Name: ccluster-py
3
+ Version: 0.0.1
4
+ Summary: Pydantic models for the ccluster.nvidia.com API and its Helm chart catalog
5
+ License-Expression: Apache-2.0
6
+ Classifier: Development Status :: 3 - Alpha
7
+ Classifier: Intended Audience :: Developers
8
+ Classifier: Programming Language :: Python :: 3
9
+ Classifier: Programming Language :: Python :: 3 :: Only
10
+ Classifier: Topic :: System :: Clustering
11
+ Classifier: Typing :: Typed
12
+ Requires-Dist: pydantic>=2.11
13
+ Requires-Python: >=3.10
14
+ Project-URL: Homepage, https://github.com/NVIDIA/ccluster
15
+ Project-URL: Source, https://github.com/NVIDIA/ccluster/tree/main/python
16
+ Project-URL: Changelog, https://github.com/NVIDIA/ccluster/blob/main/CHANGELOG.md
17
+ Description-Content-Type: text/markdown
18
+
19
+ # ccluster (Python)
20
+
21
+ Pydantic v2 models for the `ccluster.nvidia.com/v1alpha1` API and for the typed values of
22
+ every chart in the catalog. The package is **generated**: nothing in `ccluster/v1alpha1/`
23
+ or `ccluster/catalogs/cluster_base/` is written by hand.
24
+
25
+ ```bash
26
+ uv add ccluster-py --path ../python # or: pip install ./python; released: pip install ccluster-py
27
+ ```
28
+
29
+ ```python
30
+ from ccluster import catalogs
31
+ from ccluster.catalogs.cluster_base import gpu_operator, keda
32
+ from ccluster.v1alpha1 import CCLComponentSet, CCLComponentSetSpec, ObjectMeta
33
+
34
+ cs = CCLComponentSet(
35
+ metadata=ObjectMeta(name="local-base", namespace="ccluster-quickstart"),
36
+ spec=CCLComponentSetSpec(
37
+ components=[
38
+ catalogs.component("keda", "ccluster-local", keda.CHART, "keda"),
39
+ catalogs.component(
40
+ "gpu-operator", "ccluster-local", gpu_operator.CHART, "gpu-operator",
41
+ gpu_operator.Values(
42
+ gpu_operator=gpu_operator.ChartValues(
43
+ driver=gpu_operator.Toggle(enabled=False),
44
+ ),
45
+ ),
46
+ ),
47
+ ]
48
+ ),
49
+ )
50
+ print(cs.model_dump(by_alias=True, exclude_none=True)) # kubectl apply -f this
51
+ ```
52
+
53
+ Field names are snake_case with the wire name as the alias, so always dump with
54
+ `by_alias=True, exclude_none=True`. `exclude_none` is what keeps an unset optional out of
55
+ the values Helm sees while an explicit `False` stays in — the same distinction the Go
56
+ catalog makes with pointer fields.
57
+
58
+ ## What is generated from what
59
+
60
+ | Python | Source | Via |
61
+ | --- | --- | --- |
62
+ | `ccluster/v1alpha1/*.py` | `config/crd/bases/*.yaml` (the CRD `openAPIV3Schema`) | `hack/pyschema` → JSON Schema → datamodel-code-generator |
63
+ | `ccluster/catalogs/cluster_base/<chart>/values.py` | `catalogs/cluster_base/<chart>/component.go` (`Values` and friends) | `hack/pyschema` (invopop/jsonschema reflection) → datamodel-code-generator |
64
+ | every `__init__.py` under those two | the same | `hack/pyschema` |
65
+
66
+ Three things are deliberately added on the way from the CRD: `apiVersion` and `kind` get
67
+ defaults, `metadata` becomes a small `ObjectMeta` (name, namespace, labels, annotations)
68
+ instead of an opaque dict, and a component's `values` is typed `dict[str, Any]` rather than
69
+ "anything". Everything else, including every validation constraint and doc comment, is the
70
+ CRD's.
71
+
72
+ `ccluster/__init__.py`, `ccluster/catalogs/__init__.py` (`entry`, `component`) and `tests/`
73
+ are hand-written.
74
+
75
+ ## Regenerating
76
+
77
+ ```bash
78
+ make python-generate # from the repository root; needs Go and uv
79
+ make python-test
80
+ ```
81
+
82
+ CI regenerates and fails on any diff, so edit the Go types or the CRD markers, regenerate,
83
+ and commit the result. Adding a chart to `catalogs/` means adding it to the table in
84
+ `hack/pyschema/main.go` too.
@@ -0,0 +1,66 @@
1
+ # ccluster (Python)
2
+
3
+ Pydantic v2 models for the `ccluster.nvidia.com/v1alpha1` API and for the typed values of
4
+ every chart in the catalog. The package is **generated**: nothing in `ccluster/v1alpha1/`
5
+ or `ccluster/catalogs/cluster_base/` is written by hand.
6
+
7
+ ```bash
8
+ uv add ccluster-py --path ../python # or: pip install ./python; released: pip install ccluster-py
9
+ ```
10
+
11
+ ```python
12
+ from ccluster import catalogs
13
+ from ccluster.catalogs.cluster_base import gpu_operator, keda
14
+ from ccluster.v1alpha1 import CCLComponentSet, CCLComponentSetSpec, ObjectMeta
15
+
16
+ cs = CCLComponentSet(
17
+ metadata=ObjectMeta(name="local-base", namespace="ccluster-quickstart"),
18
+ spec=CCLComponentSetSpec(
19
+ components=[
20
+ catalogs.component("keda", "ccluster-local", keda.CHART, "keda"),
21
+ catalogs.component(
22
+ "gpu-operator", "ccluster-local", gpu_operator.CHART, "gpu-operator",
23
+ gpu_operator.Values(
24
+ gpu_operator=gpu_operator.ChartValues(
25
+ driver=gpu_operator.Toggle(enabled=False),
26
+ ),
27
+ ),
28
+ ),
29
+ ]
30
+ ),
31
+ )
32
+ print(cs.model_dump(by_alias=True, exclude_none=True)) # kubectl apply -f this
33
+ ```
34
+
35
+ Field names are snake_case with the wire name as the alias, so always dump with
36
+ `by_alias=True, exclude_none=True`. `exclude_none` is what keeps an unset optional out of
37
+ the values Helm sees while an explicit `False` stays in — the same distinction the Go
38
+ catalog makes with pointer fields.
39
+
40
+ ## What is generated from what
41
+
42
+ | Python | Source | Via |
43
+ | --- | --- | --- |
44
+ | `ccluster/v1alpha1/*.py` | `config/crd/bases/*.yaml` (the CRD `openAPIV3Schema`) | `hack/pyschema` → JSON Schema → datamodel-code-generator |
45
+ | `ccluster/catalogs/cluster_base/<chart>/values.py` | `catalogs/cluster_base/<chart>/component.go` (`Values` and friends) | `hack/pyschema` (invopop/jsonschema reflection) → datamodel-code-generator |
46
+ | every `__init__.py` under those two | the same | `hack/pyschema` |
47
+
48
+ Three things are deliberately added on the way from the CRD: `apiVersion` and `kind` get
49
+ defaults, `metadata` becomes a small `ObjectMeta` (name, namespace, labels, annotations)
50
+ instead of an opaque dict, and a component's `values` is typed `dict[str, Any]` rather than
51
+ "anything". Everything else, including every validation constraint and doc comment, is the
52
+ CRD's.
53
+
54
+ `ccluster/__init__.py`, `ccluster/catalogs/__init__.py` (`entry`, `component`) and `tests/`
55
+ are hand-written.
56
+
57
+ ## Regenerating
58
+
59
+ ```bash
60
+ make python-generate # from the repository root; needs Go and uv
61
+ make python-test
62
+ ```
63
+
64
+ CI regenerates and fails on any diff, so edit the Go types or the CRD markers, regenerate,
65
+ and commit the result. Adding a chart to `catalogs/` means adding it to the table in
66
+ `hack/pyschema/main.go` too.
@@ -0,0 +1,37 @@
1
+ [build-system]
2
+ requires = ["uv_build>=0.11,<0.12"]
3
+ build-backend = "uv_build"
4
+
5
+ [project]
6
+ name = "ccluster-py"
7
+ version = "0.0.1"
8
+ description = "Pydantic models for the ccluster.nvidia.com API and its Helm chart catalog"
9
+ readme = "README.md"
10
+ license = "Apache-2.0"
11
+ requires-python = ">=3.10"
12
+ dependencies = ["pydantic>=2.11"]
13
+ classifiers = [
14
+ "Development Status :: 3 - Alpha",
15
+ "Intended Audience :: Developers",
16
+ "Programming Language :: Python :: 3",
17
+ "Programming Language :: Python :: 3 :: Only",
18
+ "Topic :: System :: Clustering",
19
+ "Typing :: Typed",
20
+ ]
21
+
22
+ [project.urls]
23
+ Homepage = "https://github.com/NVIDIA/ccluster"
24
+ Source = "https://github.com/NVIDIA/ccluster/tree/main/python"
25
+ Changelog = "https://github.com/NVIDIA/ccluster/blob/main/CHANGELOG.md"
26
+
27
+ [tool.uv.build-backend]
28
+ module-name = "ccluster"
29
+
30
+ [tool.pytest.ini_options]
31
+ testpaths = ["tests"]
32
+
33
+ [dependency-groups]
34
+ dev = [
35
+ "pytest>=8",
36
+ "pyyaml>=6",
37
+ ]
@@ -0,0 +1,44 @@
1
+ [build-system]
2
+ requires = ["uv_build>=0.11,<0.12"]
3
+ build-backend = "uv_build"
4
+
5
+ [project]
6
+ # Distribution name only: `ccluster` was already taken on PyPI. The import name is still
7
+ # `ccluster` (src/ccluster).
8
+ name = "ccluster-py"
9
+ # Placeholder: the release version is the git tag, stamped in by `make python-build`.
10
+ version = "0.0.1"
11
+ description = "Pydantic models for the ccluster.nvidia.com API and its Helm chart catalog"
12
+ readme = "README.md"
13
+ license = "Apache-2.0"
14
+ requires-python = ">=3.10"
15
+ dependencies = [
16
+ "pydantic>=2.11",
17
+ ]
18
+ classifiers = [
19
+ "Development Status :: 3 - Alpha",
20
+ "Intended Audience :: Developers",
21
+ "Programming Language :: Python :: 3",
22
+ "Programming Language :: Python :: 3 :: Only",
23
+ "Topic :: System :: Clustering",
24
+ "Typing :: Typed",
25
+ ]
26
+
27
+ [project.urls]
28
+ Homepage = "https://github.com/NVIDIA/ccluster"
29
+ Source = "https://github.com/NVIDIA/ccluster/tree/main/python"
30
+ Changelog = "https://github.com/NVIDIA/ccluster/blob/main/CHANGELOG.md"
31
+
32
+ # uv_build derives the module name from the distribution name (ccluster_py); point it at the
33
+ # real package instead.
34
+ [tool.uv.build-backend]
35
+ module-name = "ccluster"
36
+
37
+ [dependency-groups]
38
+ dev = [
39
+ "pytest>=8",
40
+ "pyyaml>=6",
41
+ ]
42
+
43
+ [tool.pytest.ini_options]
44
+ testpaths = ["tests"]
@@ -0,0 +1,19 @@
1
+ # Copyright 2026 NVIDIA CORPORATION & AFFILIATES.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ """Pydantic models for the ccluster.nvidia.com API and the catalog's chart values.
16
+
17
+ Everything under ccluster.v1alpha1 and ccluster.catalogs.cluster_base is generated by
18
+ `make python-generate` from the CRDs and the catalog's Go packages; see python/README.md.
19
+ """
@@ -0,0 +1,65 @@
1
+ # Copyright 2026 NVIDIA CORPORATION & AFFILIATES.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ """The Helm chart catalog, as typed values.
16
+
17
+ Each chart under ccluster.catalogs.cluster_base has a Values model and a CHART path,
18
+ generated from the Go package beside the chart. entry() turns one of those into the
19
+ ComponentEntry fields of a CCLComponentSet component, as catalogs.Entry does in Go.
20
+ """
21
+
22
+ from typing import Any
23
+
24
+ from pydantic import BaseModel
25
+
26
+ from ccluster.v1alpha1 import ComponentSpec, LocalObjectReference
27
+
28
+ __all__ = ["component", "entry"]
29
+
30
+
31
+ def entry(chart: str, namespace: str, values: BaseModel | None) -> dict[str, Any]:
32
+ """Return the chart, namespace and values fields of a component.
33
+
34
+ values is dumped by alias with None fields left out, which is the shape Helm
35
+ expects and the shape the Go catalog produces. An empty result is dropped rather
36
+ than stored: the operator omits the Application's helm block when values is unset,
37
+ and an empty object would defeat that. The required values of a chart (only
38
+ teleport-kube-agent has any) are checked when its Values is constructed.
39
+ """
40
+ out: dict[str, Any] = {"chart": chart, "namespace": namespace}
41
+ if values is not None:
42
+ dumped = values.model_dump(by_alias=True, exclude_none=True)
43
+ if dumped:
44
+ out["values"] = dumped
45
+ return out
46
+
47
+
48
+ def component(
49
+ name: str,
50
+ infra_plane: str,
51
+ chart: str,
52
+ namespace: str,
53
+ values: BaseModel | None = None,
54
+ ) -> ComponentSpec:
55
+ """Build one CCLComponentSet component from a chart's typed values.
56
+
57
+ chart is the module's CHART constant. The component's name and the infra plane it
58
+ is deployed to are the caller's, as is the namespace it installs into: none of
59
+ those are facts about the chart.
60
+ """
61
+ return ComponentSpec(
62
+ name=name,
63
+ infra_plane_ref=LocalObjectReference(name=infra_plane),
64
+ **entry(chart, namespace, values),
65
+ )
@@ -0,0 +1,41 @@
1
+ # Copyright 2026 NVIDIA CORPORATION & AFFILIATES.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ #
15
+ # Code generated by `make python-generate`. DO NOT EDIT.
16
+
17
+ """The cluster_base catalog: one subpackage per chart, each with a Values
18
+ model and its CHART path."""
19
+
20
+ from . import argo_rollouts, cert_manager, external_dns, final_stack, fluent_bit, gpu_operator, ingress_nginx, istio, keda, kube_prometheus_stack, longhorn, metrics_server, network_operator, opentelemetry_collector, prometheus_adapter, spire, spire_crds, teleport_kube_agent
21
+
22
+ __all__ = [
23
+ "argo_rollouts",
24
+ "cert_manager",
25
+ "external_dns",
26
+ "final_stack",
27
+ "fluent_bit",
28
+ "gpu_operator",
29
+ "ingress_nginx",
30
+ "istio",
31
+ "keda",
32
+ "kube_prometheus_stack",
33
+ "longhorn",
34
+ "metrics_server",
35
+ "network_operator",
36
+ "opentelemetry_collector",
37
+ "prometheus_adapter",
38
+ "spire",
39
+ "spire_crds",
40
+ "teleport_kube_agent",
41
+ ]
@@ -0,0 +1,37 @@
1
+ # Copyright 2026 NVIDIA CORPORATION & AFFILIATES.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ #
15
+ # Code generated by `make python-generate`. DO NOT EDIT.
16
+
17
+ """Values of the catalogs/cluster_base/argo_rollouts chart, generated from its Go package."""
18
+
19
+ from typing import Final
20
+
21
+ from .values import (
22
+ ChartValues,
23
+ Controller,
24
+ Dashboard,
25
+ Values,
26
+ )
27
+
28
+ __all__ = [
29
+ "CHART",
30
+ "ChartValues",
31
+ "Controller",
32
+ "Dashboard",
33
+ "Values",
34
+ ]
35
+
36
+ # CHART is the chart's directory, relative to the root of the catalog repository.
37
+ CHART: Final = "catalogs/cluster_base/argo_rollouts"
@@ -0,0 +1,79 @@
1
+ # Copyright 2026 NVIDIA CORPORATION & AFFILIATES.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ #
15
+ # Code generated by `make python-generate`. DO NOT EDIT.
16
+
17
+ from __future__ import annotations
18
+
19
+ from typing import Annotated
20
+
21
+ from pydantic import BaseModel, ConfigDict, Field
22
+
23
+
24
+ class Controller(BaseModel):
25
+ """
26
+ Controller configures the rollouts controller.
27
+ """
28
+
29
+ model_config = ConfigDict(
30
+ extra="forbid",
31
+ populate_by_name=True,
32
+ )
33
+ replicas: int | None = None
34
+ """
35
+ Replicas is the controller replica count. The chart ships 2.
36
+ """
37
+
38
+
39
+ class Dashboard(BaseModel):
40
+ """
41
+ Dashboard configures the rollouts dashboard.
42
+ """
43
+
44
+ model_config = ConfigDict(
45
+ extra="forbid",
46
+ populate_by_name=True,
47
+ )
48
+ enabled: bool | None = None
49
+ """
50
+ Enabled turns the dashboard on. The chart ships it off.
51
+ """
52
+
53
+
54
+ class ChartValues(BaseModel):
55
+ """
56
+ ChartValues are the upstream argo-rollouts values worth setting per cluster.
57
+ Anything not set here comes from catalogs/cluster_base/argo_rollouts/values.yaml.
58
+ """
59
+
60
+ model_config = ConfigDict(
61
+ extra="forbid",
62
+ populate_by_name=True,
63
+ )
64
+ controller: Controller | None = None
65
+ dashboard: Dashboard | None = None
66
+
67
+
68
+ class Values(BaseModel):
69
+ """
70
+ Values is the top-level values document for catalogs/cluster_base/argo_rollouts.
71
+ Its single key is the upstream chart's alias, because this chart wraps it as a
72
+ dependency — which is the only reason the nesting exists.
73
+ """
74
+
75
+ model_config = ConfigDict(
76
+ extra="forbid",
77
+ populate_by_name=True,
78
+ )
79
+ argo_rollouts: Annotated[ChartValues | None, Field(alias="argo-rollouts")] = None
@@ -0,0 +1,37 @@
1
+ # Copyright 2026 NVIDIA CORPORATION & AFFILIATES.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ #
15
+ # Code generated by `make python-generate`. DO NOT EDIT.
16
+
17
+ """Values of the catalogs/cluster_base/cert_manager chart, generated from its Go package."""
18
+
19
+ from typing import Final
20
+
21
+ from .values import (
22
+ ChartValues,
23
+ PrometheusValues,
24
+ Toggle,
25
+ Values,
26
+ )
27
+
28
+ __all__ = [
29
+ "CHART",
30
+ "ChartValues",
31
+ "PrometheusValues",
32
+ "Toggle",
33
+ "Values",
34
+ ]
35
+
36
+ # CHART is the chart's directory, relative to the root of the catalog repository.
37
+ CHART: Final = "catalogs/cluster_base/cert_manager"
@@ -0,0 +1,85 @@
1
+ # Copyright 2026 NVIDIA CORPORATION & AFFILIATES.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ #
15
+ # Code generated by `make python-generate`. DO NOT EDIT.
16
+
17
+ from __future__ import annotations
18
+
19
+ from typing import Annotated
20
+
21
+ from pydantic import BaseModel, ConfigDict, Field
22
+
23
+
24
+ class Toggle(BaseModel):
25
+ """
26
+ Toggle is a subchart's enable flag.
27
+ """
28
+
29
+ model_config = ConfigDict(
30
+ extra="forbid",
31
+ populate_by_name=True,
32
+ )
33
+ enabled: bool | None = None
34
+ """
35
+ Enabled turns the feature on.
36
+ """
37
+
38
+
39
+ class PrometheusValues(BaseModel):
40
+ """
41
+ PrometheusValues configures cert-manager's metrics scraping.
42
+ """
43
+
44
+ model_config = ConfigDict(
45
+ extra="forbid",
46
+ populate_by_name=True,
47
+ )
48
+ enabled: bool | None = None
49
+ servicemonitor: Toggle | None = None
50
+ """
51
+ ServiceMonitor is spelled lower-case in this chart, unlike every other
52
+ chart in the catalog.
53
+ """
54
+
55
+
56
+ class ChartValues(BaseModel):
57
+ """
58
+ ChartValues are the upstream cert-manager values worth setting per cluster.
59
+ """
60
+
61
+ model_config = ConfigDict(
62
+ extra="forbid",
63
+ populate_by_name=True,
64
+ )
65
+ replica_count: Annotated[int | None, Field(alias="replicaCount")] = None
66
+ """
67
+ ReplicaCount is the controller replica count. The chart ships 2.
68
+ """
69
+ prometheus: PrometheusValues | None = None
70
+ """
71
+ Prometheus scraping is shipped off, because the ServiceMonitor CRD only
72
+ exists once kube-prometheus-stack is deployed. Enable it after that.
73
+ """
74
+
75
+
76
+ class Values(BaseModel):
77
+ """
78
+ Values is the top-level values document for catalogs/cluster_base/cert_manager.
79
+ """
80
+
81
+ model_config = ConfigDict(
82
+ extra="forbid",
83
+ populate_by_name=True,
84
+ )
85
+ cert_manager: Annotated[ChartValues | None, Field(alias="cert-manager")] = None
@@ -0,0 +1,39 @@
1
+ # Copyright 2026 NVIDIA CORPORATION & AFFILIATES.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ #
15
+ # Code generated by `make python-generate`. DO NOT EDIT.
16
+
17
+ """Values of the catalogs/cluster_base/external_dns chart, generated from its Go package."""
18
+
19
+ from typing import Final
20
+
21
+ from .values import (
22
+ ChartValues,
23
+ Provider,
24
+ ServiceAccount,
25
+ Toggle,
26
+ Values,
27
+ )
28
+
29
+ __all__ = [
30
+ "CHART",
31
+ "ChartValues",
32
+ "Provider",
33
+ "ServiceAccount",
34
+ "Toggle",
35
+ "Values",
36
+ ]
37
+
38
+ # CHART is the chart's directory, relative to the root of the catalog repository.
39
+ CHART: Final = "catalogs/cluster_base/external_dns"