kubernator 1.0.23.dev20251008231728__py3-none-any.whl → 1.0.23.dev20251010010455__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.23.dev20251008231728"
19
+ __version__ = "1.0.23.dev20251010010455"
20
20
 
21
21
 
22
22
  def _main():
kubernator/plugins/k8s.py CHANGED
@@ -39,7 +39,8 @@ from kubernator.api import (KubernatorPlugin,
39
39
  load_remote_file,
40
40
  StripNL,
41
41
  install_python_k8s_client,
42
- TemplateEngine)
42
+ TemplateEngine,
43
+ sleep)
43
44
  from kubernator.merge import extract_merge_instructions, apply_merge_instructions
44
45
  from kubernator.plugins.k8s_api import (K8SResourcePluginMixin,
45
46
  K8SResource,
@@ -120,6 +121,7 @@ class KubernetesPlugin(KubernatorPlugin, K8SResourcePluginMixin):
120
121
  ("apps", "StatefulSet"): K8SPropagationPolicy.ORPHAN,
121
122
  ("apps", "Deployment"): K8SPropagationPolicy.ORPHAN,
122
123
  ("storage.k8s.io", "StorageClass"): K8SPropagationPolicy.ORPHAN,
124
+ (None, "Pod"): K8SPropagationPolicy.BACKGROUND,
123
125
  },
124
126
  default_includes=Globs(["*.yaml", "*.yml"], True),
125
127
  default_excludes=Globs([".*"], True),
@@ -137,6 +139,7 @@ class KubernetesPlugin(KubernatorPlugin, K8SResourcePluginMixin):
137
139
  field_validation=field_validation,
138
140
  field_validation_warn_fatal=field_validation_warn_fatal,
139
141
  field_validation_warnings=0,
142
+ conflict_retry_delay=0.3,
140
143
  _k8s=self,
141
144
  )
142
145
  context.k8s = dict(default_includes=Globs(context.globals.k8s.default_includes),
@@ -199,7 +202,7 @@ class KubernetesPlugin(KubernatorPlugin, K8SResourcePluginMixin):
199
202
 
200
203
  k8s.client = self._setup_k8s_client()
201
204
  version = client.VersionApi(k8s.client).get_code()
202
- if "-eks-" in version.git_version:
205
+ if "-eks-" or "-gke" in version.git_version:
203
206
  git_version = version.git_version.split("-")[0]
204
207
  else:
205
208
  git_version = version.git_version
@@ -425,18 +428,26 @@ class KubernetesPlugin(KubernatorPlugin, K8SResourcePluginMixin):
425
428
  resource, resource.source, status["message"])
426
429
  raise e from None
427
430
 
428
- def create(exists_ok=False):
431
+ def create(exists_ok=False, wait_for_delete=False):
429
432
  logger.info("Creating resource %s%s%s", resource, status_msg,
430
433
  " (ignoring existing)" if exists_ok else "")
431
- try:
432
- create_func()
433
- except ApiException as e:
434
- if exists_ok:
435
- if e.status == 409:
436
- status = json.loads(e.body)
437
- if status["reason"] == "AlreadyExists":
438
- return
439
- raise
434
+ while True:
435
+ try:
436
+ create_func()
437
+ return
438
+ except ApiException as e:
439
+ if exists_ok or wait_for_delete:
440
+ if e.status == 409:
441
+ status = json.loads(e.body)
442
+ if status["reason"] == "AlreadyExists":
443
+ if wait_for_delete:
444
+ sleep(self.context.k8s.conflict_retry_delay)
445
+ logger.info("Retry creating resource %s%s%s", resource, status_msg,
446
+ " (ignoring existing)" if exists_ok else "")
447
+ continue
448
+ else:
449
+ return
450
+ raise
440
451
 
441
452
  merge_instrs, normalized_manifest = extract_merge_instructions(resource.manifest, resource)
442
453
  if merge_instrs:
@@ -471,7 +482,7 @@ class KubernetesPlugin(KubernatorPlugin, K8SResourcePluginMixin):
471
482
  if e.status == 422:
472
483
  status = json.loads(e.body)
473
484
  details = status["details"]
474
- immutable_key = details["group"], details["kind"]
485
+ immutable_key = details.get("group"), details["kind"]
475
486
 
476
487
  try:
477
488
  propagation_policy = self.context.k8s.immutable_changes[immutable_key]
@@ -484,13 +495,15 @@ class KubernetesPlugin(KubernatorPlugin, K8SResourcePluginMixin):
484
495
  "field is immutable" in cause["message"]
485
496
  or
486
497
  cause["reason"] == "FieldValueForbidden" and
487
- "Forbidden: updates to" in cause["message"]
498
+ ("Forbidden: updates to" in cause["message"]
499
+ or
500
+ "Forbidden: pod updates" in cause["message"])
488
501
  ):
489
502
  logger.info("Deleting resource %s (cascade %s)%s", resource,
490
503
  propagation_policy.policy,
491
504
  status_msg)
492
505
  delete_func(propagation_policy=propagation_policy)
493
- create(exists_ok=dry_run)
506
+ create(exists_ok=dry_run, wait_for_delete=not dry_run)
494
507
  return 1, 0, 1
495
508
  raise
496
509
  else:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kubernator
3
- Version: 1.0.23.dev20251008231728
3
+ Version: 1.0.23.dev20251010010455
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,5 +1,5 @@
1
1
  kubernator/LICENSE,sha256=wKKdOCMTCPQRV5gDkVLAsXX8qSnRJ5owk7yWPO1KZNo,11387
2
- kubernator/__init__.py,sha256=2aaiu4g6n1nK3G3TMavPBCgPb7S3rn_jWYKWeQaWw0I,933
2
+ kubernator/__init__.py,sha256=FzbtCh5XegjNjaDe91xX09kYGd2bMEThMPsx_8OBoQY,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
@@ -13,7 +13,7 @@ kubernator/plugins/eks.py,sha256=xe7vyPHNwuP8gEYDSzPyBkm-RkAtP64wCOqs9U5I7xI,227
13
13
  kubernator/plugins/gke.py,sha256=HZc-Bu2W8MvF50EgoAcZ8W-CAVEWJ4y8f4yG_3s8C1w,3429
14
14
  kubernator/plugins/helm.py,sha256=2563hLr0uJucw0xo9JLfbCtpGPRZ5e5gYTnapQrqy3w,12036
15
15
  kubernator/plugins/istio.py,sha256=1dHjD9r6Kk2-tw6OFMOfBpksnqGMguTyyF1FwwWEtI8,14977
16
- kubernator/plugins/k8s.py,sha256=XIHqFpdbRL57dnbgOonRD3Mxs9LVSUxQT-GPnpEyZyM,24762
16
+ kubernator/plugins/k8s.py,sha256=fvmkVaBz9CuGKmu_w6S1X0tWzSQvV6S6jx8c-X_ZIXI,25673
17
17
  kubernator/plugins/k8s_api.py,sha256=PDa7MB9q3WMm_9tr8T6LY_ojrHpyGYiNTlvBZinbgFY,27379
18
18
  kubernator/plugins/kops.py,sha256=-yhpEjydz9E7Ep24WtEs93rLTXtw4yakdgVqXlIj1ww,9688
19
19
  kubernator/plugins/kubeconfig.py,sha256=uwtHmF2I6LiTPrC3M88G5SfYxDWtuh0MqcMfrHHoNRA,2178
@@ -22,10 +22,10 @@ kubernator/plugins/minikube.py,sha256=zbboER1VsCvIsh-yUE3_XpzPNcT4c6vh1LigDonEm3
22
22
  kubernator/plugins/template.py,sha256=542nyS4ZNgdwJHEoIA5aLP1d4C312ydd7sPM9ZFbHuI,8357
23
23
  kubernator/plugins/terraform.py,sha256=a1MPl9G8Rznjd28uMRdYWrjpFDLlFAVmLFH4hFEsMsQ,5285
24
24
  kubernator/plugins/terragrunt.py,sha256=-qN8tTqPUXJ9O7CEiJVUB0GSUQU3DUTkv-aWdIIsm7Q,5051
25
- kubernator-1.0.23.dev20251008231728.dist-info/METADATA,sha256=0yPWkwLaU5qE8qcUzX-Rzw5tL_qprEbUVzv8hm44Gh4,10840
26
- kubernator-1.0.23.dev20251008231728.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
27
- kubernator-1.0.23.dev20251008231728.dist-info/entry_points.txt,sha256=IWDtHzyTleRqDSuVRXEr5GImrI7z_kh21t5DWZ8ldcQ,47
28
- kubernator-1.0.23.dev20251008231728.dist-info/namespace_packages.txt,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
29
- kubernator-1.0.23.dev20251008231728.dist-info/top_level.txt,sha256=_z1CxWeKMI55ckf2vC8HqjbCn_E2Y_P5RdrhE_QWcIs,11
30
- kubernator-1.0.23.dev20251008231728.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
31
- kubernator-1.0.23.dev20251008231728.dist-info/RECORD,,
25
+ kubernator-1.0.23.dev20251010010455.dist-info/METADATA,sha256=XN7fMdues-A_taikGGhY-goi9SIng_5XrqyFscMzP5g,10840
26
+ kubernator-1.0.23.dev20251010010455.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
27
+ kubernator-1.0.23.dev20251010010455.dist-info/entry_points.txt,sha256=IWDtHzyTleRqDSuVRXEr5GImrI7z_kh21t5DWZ8ldcQ,47
28
+ kubernator-1.0.23.dev20251010010455.dist-info/namespace_packages.txt,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
29
+ kubernator-1.0.23.dev20251010010455.dist-info/top_level.txt,sha256=_z1CxWeKMI55ckf2vC8HqjbCn_E2Y_P5RdrhE_QWcIs,11
30
+ kubernator-1.0.23.dev20251010010455.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
31
+ kubernator-1.0.23.dev20251010010455.dist-info/RECORD,,