kubernator 1.0.19__py3-none-any.whl → 1.0.20.dev20250518194115__py3-none-any.whl

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.

Potentially problematic release.


This version of kubernator might be problematic. Click here for more details.

kubernator/__init__.py CHANGED
@@ -16,7 +16,7 @@
16
16
  # limitations under the License.
17
17
  #
18
18
 
19
- __version__ = "1.0.19"
19
+ __version__ = "1.0.20.dev20250518194115"
20
20
 
21
21
 
22
22
  def _main():
kubernator/api.py CHANGED
@@ -39,6 +39,7 @@ from typing import Optional, Union, MutableSequence
39
39
  import requests
40
40
  import yaml
41
41
  from diff_match_patch import diff_match_patch
42
+ from gevent import sleep
42
43
  from jinja2 import (Environment,
43
44
  ChainableUndefined,
44
45
  make_logging_undefined,
@@ -108,13 +109,29 @@ def _load_file(logger, path: Path, file_type: FileType, source=None) -> Iterable
108
109
 
109
110
 
110
111
  def _download_remote_file(url, file_name, cache: dict):
111
- with requests.get(url, headers=cache, stream=True) as r:
112
- r.raise_for_status()
113
- if r.status_code != 304:
114
- with open(file_name, "wb") as out:
115
- for chunk in r.iter_content(chunk_size=65535):
116
- out.write(chunk)
117
- return dict(r.headers)
112
+ retry_delay = 0
113
+ while True:
114
+ if retry_delay:
115
+ sleep(retry_delay)
116
+
117
+ with requests.get(url, headers=cache, stream=True) as r:
118
+ if r.status_code == 429:
119
+ if not retry_delay:
120
+ retry_delay = 0.2
121
+ else:
122
+ retry_delay *= 2.0
123
+ if retry_delay > 2.5:
124
+ retry_delay = 2.5
125
+ continue
126
+
127
+ r.raise_for_status()
128
+ if r.status_code != 304:
129
+ with open(file_name, "wb") as out:
130
+ for chunk in r.iter_content(chunk_size=65535):
131
+ out.write(chunk)
132
+ return dict(r.headers)
133
+ else:
134
+ return None
118
135
 
119
136
 
120
137
  def get_app_cache_dir():
@@ -85,7 +85,7 @@ HELM_SCHEMA = {
85
85
  }
86
86
  },
87
87
  "type": "object",
88
- "required": ["repository", "chart", "version", "name", "namespace"]
88
+ "required": ["chart", "name", "namespace"]
89
89
  }
90
90
 
91
91
  Draft7Validator.check_schema(HELM_SCHEMA)
@@ -130,7 +130,7 @@ class HelmPlugin(KubernatorPlugin):
130
130
  helm_tar = tarfile.open(helm_file_dl)
131
131
  helm_tar.extractall(self.helm_dir.name)
132
132
 
133
- copy(Path(self.helm_dir.name)/f"{get_golang_os()}-{get_golang_machine()}"/"helm", helm_file)
133
+ copy(Path(self.helm_dir.name) / f"{get_golang_os()}-{get_golang_machine()}" / "helm", helm_file)
134
134
 
135
135
  os.chmod(helm_file, 0o500)
136
136
  prepend_os_path(self.helm_dir.name)
@@ -215,17 +215,34 @@ class HelmPlugin(KubernatorPlugin):
215
215
 
216
216
  return repository_hash
217
217
 
218
- def _internal_add_helm(self, source, *, repository, chart, version, name, namespace, include_crds,
219
- values=None, values_file=None):
218
+ def _internal_add_helm(self, source, *, chart, name, namespace, include_crds,
219
+ values=None, values_file=None, repository=None, version=None):
220
220
  if values and values_file:
221
221
  raise RuntimeError(f"In {source} either values or values file may be specified, but not both")
222
222
 
223
+ if (repository and chart and chart.startswith("oci://") or
224
+ not repository and chart and not chart.startswith("oci://")):
225
+ raise RuntimeError(
226
+ f"In {source} either repository must be specified or OCI-chart must be used, but not both")
227
+
228
+ if not version and repository:
229
+ raise RuntimeError(f"In {source} version must be specified unless OCI-chart is used")
230
+
223
231
  if values_file:
224
232
  values_file = Path(values_file)
225
233
  if not values_file.is_absolute():
226
234
  values_file = self.context.app.cwd / values_file
227
235
 
228
- repository_hash = self._add_repository(repository)
236
+ version_spec = []
237
+ if repository:
238
+ repository_hash = self._add_repository(repository)
239
+ chart_name = f"{repository_hash}/{chart}"
240
+ else:
241
+ chart_name = chart
242
+
243
+ if version:
244
+ version_spec = ["--version", version]
245
+
229
246
  stdin = DEVNULL
230
247
 
231
248
  if values:
@@ -237,11 +254,11 @@ class HelmPlugin(KubernatorPlugin):
237
254
  resources = self.context.app.run_capturing_out(self.stanza() +
238
255
  ["template",
239
256
  name,
240
- f"{repository_hash}/{chart}",
241
- "--version", version,
257
+ chart_name,
242
258
  "-n", namespace,
243
259
  "-a", ",".join(self.context.k8s.get_api_versions())
244
260
  ] +
261
+ version_spec +
245
262
  (["--include-crds"] if include_crds else []) +
246
263
  (["-f", values_file] if values_file else []) +
247
264
  (["-f", "-"] if values else []),
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kubernator
3
- Version: 1.0.19
3
+ Version: 1.0.20.dev20250518194115
4
4
  Summary: Kubernator is the a pluggable framework for K8S provisioning
5
5
  Home-page: https://github.com/karellen/kubernator
6
6
  Author: Express Systems USA, Inc.
@@ -1,16 +1,16 @@
1
1
  kubernator/LICENSE,sha256=wKKdOCMTCPQRV5gDkVLAsXX8qSnRJ5owk7yWPO1KZNo,11387
2
- kubernator/__init__.py,sha256=duuVfh5GQfMf7MLTgT0Z4gBctSSYsLpb3NB_ALXBXXc,915
2
+ kubernator/__init__.py,sha256=3I8NxAiSeKmmDgyNzoooHnO6JlQ6jMZq5KqCGjYos7M,933
3
3
  kubernator/__main__.py,sha256=f0S60wgpLu--1UlOhzfWail-xt8zyIuODodX98_yPN0,707
4
4
  kubernator/_json_path.py,sha256=pjQKXxgbpQWETYBIrIuJZHgugF92IbEAM19AC7JUmAQ,3162
5
5
  kubernator/_k8s_client_patches.py,sha256=PEeWPInnW38NDyK7G24_Dmw-x7xHpN3vJWZeckdqgK0,76892
6
- kubernator/api.py,sha256=kEmfsSbiNxogn-ZG2n7_m93yF-Wg9379sMUySnNGaSY,26736
6
+ kubernator/api.py,sha256=cU_dsS4PcTkRUcQqnRxsaqzeoApjhwRd2-l4CfwFZpU,27201
7
7
  kubernator/app.py,sha256=ZtQm60Cb1z2SkD338B6nue3wLOo_auRqZRW5ou_-d84,20949
8
8
  kubernator/merge.py,sha256=eW5fajnDdI2n8aUqRfTmdG6GWDvDtcVKPKsp3fiB5Nk,5882
9
9
  kubernator/proc.py,sha256=8YlgbppyHic_51fVTPD7OP8x5yuRuL8j1kThR8MJjNI,5119
10
10
  kubernator/plugins/__init__.py,sha256=h9TLYK8UFEi53ipZSZsTBjp0ljKhisWsgPpt_PkWrO8,670
11
11
  kubernator/plugins/awscli.py,sha256=S6X7-qFiaZ7NDVDl2Jg0t-ih9KAJ45cUjjzd5Qe93ZM,4252
12
12
  kubernator/plugins/eks.py,sha256=xe7vyPHNwuP8gEYDSzPyBkm-RkAtP64wCOqs9U5I7xI,2273
13
- kubernator/plugins/helm.py,sha256=3BYZBPoiMUtNgmhdcbYCVRTPtaQMYzhfnMqXWyZRJZc,10525
13
+ kubernator/plugins/helm.py,sha256=8oa2LJoGd1-b9_e-PW2c5--zNaYZTykIFtgX0u5VHIw,11136
14
14
  kubernator/plugins/istio.py,sha256=oERwbVtIk9vMJp_miBXK3-XJKF6SDbh6PPe0p3QIekY,14924
15
15
  kubernator/plugins/k8s.py,sha256=Zj3q_bUmbOADfjSHy2X0BhgrbXuH-fM8Vq75sYFy0nE,24496
16
16
  kubernator/plugins/k8s_api.py,sha256=w2aB7CU0rPqRgzhI5mLMJUUSpWlJGCsX_bHl4SjfzM8,27594
@@ -21,10 +21,10 @@ kubernator/plugins/minikube.py,sha256=FFGW8Rkap4CPEydEgxXhIuK3A263khjli0adC5j09M
21
21
  kubernator/plugins/template.py,sha256=KEiPfI7TbYXmF4a8ATWuFhxxWbcASHttFM_ekYEZ8Ps,8371
22
22
  kubernator/plugins/terraform.py,sha256=a1MPl9G8Rznjd28uMRdYWrjpFDLlFAVmLFH4hFEsMsQ,5285
23
23
  kubernator/plugins/terragrunt.py,sha256=-qN8tTqPUXJ9O7CEiJVUB0GSUQU3DUTkv-aWdIIsm7Q,5051
24
- kubernator-1.0.19.dist-info/METADATA,sha256=PQA5hiQ6BleRPIBWyJ2KxhEedHOznols8arye8gur0A,10849
25
- kubernator-1.0.19.dist-info/WHEEL,sha256=SmOxYU7pzNKBqASvQJ7DjX3XGUF92lrGhMb3R6_iiqI,91
26
- kubernator-1.0.19.dist-info/entry_points.txt,sha256=IWDtHzyTleRqDSuVRXEr5GImrI7z_kh21t5DWZ8ldcQ,47
27
- kubernator-1.0.19.dist-info/namespace_packages.txt,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
28
- kubernator-1.0.19.dist-info/top_level.txt,sha256=_z1CxWeKMI55ckf2vC8HqjbCn_E2Y_P5RdrhE_QWcIs,11
29
- kubernator-1.0.19.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
30
- kubernator-1.0.19.dist-info/RECORD,,
24
+ kubernator-1.0.20.dev20250518194115.dist-info/METADATA,sha256=4EpIoRQfCd8qIruzqksTd6DwfElkEN9LswQWSotwswE,10867
25
+ kubernator-1.0.20.dev20250518194115.dist-info/WHEEL,sha256=Nw36Djuh_5VDukK0H78QzOX-_FQEo6V37m3nkm96gtU,91
26
+ kubernator-1.0.20.dev20250518194115.dist-info/entry_points.txt,sha256=IWDtHzyTleRqDSuVRXEr5GImrI7z_kh21t5DWZ8ldcQ,47
27
+ kubernator-1.0.20.dev20250518194115.dist-info/namespace_packages.txt,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
28
+ kubernator-1.0.20.dev20250518194115.dist-info/top_level.txt,sha256=_z1CxWeKMI55ckf2vC8HqjbCn_E2Y_P5RdrhE_QWcIs,11
29
+ kubernator-1.0.20.dev20250518194115.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
30
+ kubernator-1.0.20.dev20250518194115.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (79.0.1)
2
+ Generator: setuptools (80.7.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5