kubernator 1.0.9.dev20231221064456__py3-none-any.whl → 1.0.10__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 +1 -1
- kubernator/api.py +1 -0
- kubernator/plugins/istio.py +11 -1
- kubernator/plugins/k8s.py +57 -5
- kubernator/plugins/k8s_api.py +31 -3
- kubernator/plugins/minikube.py +37 -8
- {kubernator-1.0.9.dev20231221064456.dist-info → kubernator-1.0.10.dist-info}/METADATA +9 -1
- kubernator-1.0.10.dist-info/RECORD +27 -0
- kubernator-1.0.9.dev20231221064456.dist-info/RECORD +0 -27
- {kubernator-1.0.9.dev20231221064456.dist-info → kubernator-1.0.10.dist-info}/WHEEL +0 -0
- {kubernator-1.0.9.dev20231221064456.dist-info → kubernator-1.0.10.dist-info}/entry_points.txt +0 -0
- {kubernator-1.0.9.dev20231221064456.dist-info → kubernator-1.0.10.dist-info}/namespace_packages.txt +0 -0
- {kubernator-1.0.9.dev20231221064456.dist-info → kubernator-1.0.10.dist-info}/top_level.txt +0 -0
- {kubernator-1.0.9.dev20231221064456.dist-info → kubernator-1.0.10.dist-info}/zip-safe +0 -0
kubernator/__init__.py
CHANGED
kubernator/api.py
CHANGED
|
@@ -236,6 +236,7 @@ def install_python_k8s_client(run, package_major, logger_stdout, logger_stderr):
|
|
|
236
236
|
package_major_dir.mkdir(parents=True, exist_ok=True)
|
|
237
237
|
|
|
238
238
|
run([sys.executable, "-m", "pip", "install", "--no-deps", "--no-cache-dir", "--no-input", "--pre",
|
|
239
|
+
"--root-user-action=ignore", "--break-system-packages", "--disable-pip-version-check",
|
|
239
240
|
"--target", str(package_major_dir), f"kubernetes~={package_major}.0"], logger_stdout, logger_stderr).wait()
|
|
240
241
|
|
|
241
242
|
return package_major_dir
|
kubernator/plugins/istio.py
CHANGED
|
@@ -66,8 +66,18 @@ class IstioPlugin(KubernatorPlugin, K8SResourcePluginMixin):
|
|
|
66
66
|
|
|
67
67
|
if version:
|
|
68
68
|
# Download and use specific version
|
|
69
|
+
istioctl_os = get_golang_os()
|
|
70
|
+
if istioctl_os == "darwin":
|
|
71
|
+
istioctl_os = "osx"
|
|
72
|
+
istioctl_machine = get_golang_machine()
|
|
73
|
+
if istioctl_machine == "amd64":
|
|
74
|
+
istioctl_platform = istioctl_os
|
|
75
|
+
else:
|
|
76
|
+
istioctl_platform = f"{istioctl_os}-{istioctl_machine}"
|
|
77
|
+
else:
|
|
78
|
+
istioctl_platform = f"{istioctl_os}-{get_golang_machine()}"
|
|
69
79
|
istioctl_url = (f"https://github.com/istio/istio/releases/download/{version}/"
|
|
70
|
-
f"istioctl-{version}-{
|
|
80
|
+
f"istioctl-{version}-{istioctl_platform}.tar.gz")
|
|
71
81
|
istioctl_file_dl, _ = context.app.download_remote_file(logger, istioctl_url, "bin")
|
|
72
82
|
istioctl_file_dl = str(istioctl_file_dl)
|
|
73
83
|
self.istioctl_dir = tempfile.TemporaryDirectory()
|
kubernator/plugins/k8s.py
CHANGED
|
@@ -49,6 +49,9 @@ proc_logger = logger.getChild("proc")
|
|
|
49
49
|
stdout_logger = StripNL(proc_logger.info)
|
|
50
50
|
stderr_logger = StripNL(proc_logger.warning)
|
|
51
51
|
|
|
52
|
+
FIELD_VALIDATION_STRICT_MARKER = "strict decoding error: "
|
|
53
|
+
VALID_FIELD_VALIDATION = ("Ignore", "Warn", "Strict")
|
|
54
|
+
|
|
52
55
|
|
|
53
56
|
def final_resource_validator(resources: Sequence[K8SResource],
|
|
54
57
|
resource: K8SResource,
|
|
@@ -81,10 +84,12 @@ class KubernetesPlugin(KubernatorPlugin, K8SResourcePluginMixin):
|
|
|
81
84
|
def set_context(self, context):
|
|
82
85
|
self.context = context
|
|
83
86
|
|
|
84
|
-
def register(self,
|
|
87
|
+
def register(self, field_validation="Strict", field_validation_warn_fatal=True):
|
|
85
88
|
self.context.app.register_plugin("kubeconfig")
|
|
86
89
|
|
|
87
|
-
|
|
90
|
+
if field_validation not in VALID_FIELD_VALIDATION:
|
|
91
|
+
raise ValueError("'field_validation' must be one of %s" % (", ".join(VALID_FIELD_VALIDATION)))
|
|
92
|
+
|
|
88
93
|
context = self.context
|
|
89
94
|
context.globals.k8s = dict(patch_field_excludes=("^/metadata/managedFields",
|
|
90
95
|
"^/metadata/generation",
|
|
@@ -108,6 +113,9 @@ class KubernetesPlugin(KubernatorPlugin, K8SResourcePluginMixin):
|
|
|
108
113
|
add_validator=self.api_remove_validator,
|
|
109
114
|
get_api_versions=self.get_api_versions,
|
|
110
115
|
create_resource=self.create_resource,
|
|
116
|
+
field_validation=field_validation,
|
|
117
|
+
field_validation_warn_fatal=field_validation_warn_fatal,
|
|
118
|
+
field_validation_warnings=0,
|
|
111
119
|
_k8s=self,
|
|
112
120
|
)
|
|
113
121
|
context.k8s = dict(default_includes=Globs(context.globals.k8s.default_includes),
|
|
@@ -115,6 +123,9 @@ class KubernetesPlugin(KubernatorPlugin, K8SResourcePluginMixin):
|
|
|
115
123
|
)
|
|
116
124
|
self.api_add_validator(final_resource_validator)
|
|
117
125
|
|
|
126
|
+
def handle_init(self):
|
|
127
|
+
pass
|
|
128
|
+
|
|
118
129
|
def handle_start(self):
|
|
119
130
|
self.context.kubeconfig.register_change_notifier(self._kubeconfig_changed)
|
|
120
131
|
self.setup_client()
|
|
@@ -180,6 +191,19 @@ class KubernetesPlugin(KubernatorPlugin, K8SResourcePluginMixin):
|
|
|
180
191
|
|
|
181
192
|
logger.info("Found Kubernetes %s on %s", k8s.server_git_version, k8s.client.configuration.host)
|
|
182
193
|
K8SResource._k8s_client_version = tuple(map(int, pkg_version("kubernetes").split(".")))
|
|
194
|
+
K8SResource._k8s_field_validation = k8s.field_validation
|
|
195
|
+
K8SResource._logger = self.logger
|
|
196
|
+
K8SResource._api_warnings = self._api_warnings
|
|
197
|
+
|
|
198
|
+
def _api_warnings(self, resource, warn):
|
|
199
|
+
k8s = self.context.k8s
|
|
200
|
+
self.context.globals.k8s.field_validation_warnings += 1
|
|
201
|
+
|
|
202
|
+
log = self.logger.warning
|
|
203
|
+
if k8s.field_validation_warn_fatal:
|
|
204
|
+
log = self.logger.error
|
|
205
|
+
|
|
206
|
+
log("FAILED FIELD VALIDATION on resource %s from %s: %s", resource, resource.source, warn)
|
|
183
207
|
|
|
184
208
|
def handle_before_dir(self, cwd: Path):
|
|
185
209
|
context = self.context
|
|
@@ -205,6 +229,8 @@ class KubernetesPlugin(KubernatorPlugin, K8SResourcePluginMixin):
|
|
|
205
229
|
|
|
206
230
|
def handle_apply(self):
|
|
207
231
|
context = self.context
|
|
232
|
+
k8s = context.k8s
|
|
233
|
+
|
|
208
234
|
self._validate_resources()
|
|
209
235
|
|
|
210
236
|
cmd = context.app.args.command
|
|
@@ -258,6 +284,14 @@ class KubernetesPlugin(KubernatorPlugin, K8SResourcePluginMixin):
|
|
|
258
284
|
create_func,
|
|
259
285
|
delete_func,
|
|
260
286
|
status_msg)
|
|
287
|
+
|
|
288
|
+
if ((dump or dry_run) and
|
|
289
|
+
k8s.field_validation_warn_fatal and self.context.globals.k8s.field_validation_warnings):
|
|
290
|
+
msg = ("There were %d field validation warnings and the warnings are fatal!" %
|
|
291
|
+
self.context.globals.k8s.field_validation_warnings)
|
|
292
|
+
logger.fatal(msg)
|
|
293
|
+
raise RuntimeError(msg)
|
|
294
|
+
|
|
261
295
|
if dump:
|
|
262
296
|
if file_format in ("json", "json-pretty"):
|
|
263
297
|
json.dump(dump_results, file, sort_keys=True,
|
|
@@ -339,6 +373,19 @@ class KubernetesPlugin(KubernatorPlugin, K8SResourcePluginMixin):
|
|
|
339
373
|
rdef = resource.rdef
|
|
340
374
|
rdef.populate_api(client, self.context.k8s.client)
|
|
341
375
|
|
|
376
|
+
def handle_400_strict_validation_error(e: ApiException):
|
|
377
|
+
if e.status == 400:
|
|
378
|
+
status = json.loads(e.body)
|
|
379
|
+
|
|
380
|
+
if status["status"] == "Failure" and FIELD_VALIDATION_STRICT_MARKER in status["message"]:
|
|
381
|
+
message = status["message"]
|
|
382
|
+
messages = message[message.find(FIELD_VALIDATION_STRICT_MARKER) +
|
|
383
|
+
len(FIELD_VALIDATION_STRICT_MARKER):].split(",")
|
|
384
|
+
for m in messages:
|
|
385
|
+
self._api_warnings(resource, m.strip())
|
|
386
|
+
|
|
387
|
+
raise e from None
|
|
388
|
+
|
|
342
389
|
def create(exists_ok=False):
|
|
343
390
|
logger.info("Creating resource %s%s%s", resource, status_msg,
|
|
344
391
|
" (ignoring existing)" if exists_ok else "")
|
|
@@ -350,7 +397,6 @@ class KubernetesPlugin(KubernatorPlugin, K8SResourcePluginMixin):
|
|
|
350
397
|
status = json.loads(e.body)
|
|
351
398
|
if status["reason"] == "AlreadyExists":
|
|
352
399
|
return
|
|
353
|
-
|
|
354
400
|
raise
|
|
355
401
|
|
|
356
402
|
logger.debug("Applying resource %s%s", resource, status_msg)
|
|
@@ -359,7 +405,12 @@ class KubernetesPlugin(KubernatorPlugin, K8SResourcePluginMixin):
|
|
|
359
405
|
logger.trace("Current resource %s: %s", resource, remote_resource)
|
|
360
406
|
except ApiException as e:
|
|
361
407
|
if e.status == 404:
|
|
362
|
-
|
|
408
|
+
try:
|
|
409
|
+
create()
|
|
410
|
+
except ApiException as e:
|
|
411
|
+
if not handle_400_strict_validation_error(e):
|
|
412
|
+
raise
|
|
413
|
+
|
|
363
414
|
else:
|
|
364
415
|
raise
|
|
365
416
|
else:
|
|
@@ -396,7 +447,8 @@ class KubernetesPlugin(KubernatorPlugin, K8SResourcePluginMixin):
|
|
|
396
447
|
return
|
|
397
448
|
raise
|
|
398
449
|
else:
|
|
399
|
-
|
|
450
|
+
if not handle_400_strict_validation_error(e):
|
|
451
|
+
raise
|
|
400
452
|
else:
|
|
401
453
|
logger.trace("Merged resource %s: %s", resource, merged_resource)
|
|
402
454
|
patch = jsonpatch.make_patch(remote_resource, merged_resource)
|
kubernator/plugins/k8s_api.py
CHANGED
|
@@ -37,6 +37,7 @@ from openapi_schema_validator import OAS30Validator
|
|
|
37
37
|
|
|
38
38
|
from kubernator.api import load_file, FileType, load_remote_file, calling_frame_source
|
|
39
39
|
|
|
40
|
+
K8S_WARNING_HEADER = re.compile(r'(?:,\s*)?(\d{3})\s+(\S+)\s+"(.+?)(?<!\\)"(?:\s+\"(.+?)(?<!\\)\")?\s*')
|
|
40
41
|
UPPER_FOLLOWED_BY_LOWER_RE = re.compile(r"(.)([A-Z][a-z]+)")
|
|
41
42
|
LOWER_OR_NUM_FOLLOWED_BY_UPPER_RE = re.compile(r"([a-z0-9])([A-Z])")
|
|
42
43
|
|
|
@@ -338,6 +339,9 @@ class K8SResourceKey(namedtuple("K8SResourceKey", ["group", "kind", "name", "nam
|
|
|
338
339
|
|
|
339
340
|
class K8SResource:
|
|
340
341
|
_k8s_client_version = None
|
|
342
|
+
_k8s_field_validation = None
|
|
343
|
+
_logger = None
|
|
344
|
+
_api_warnings = None
|
|
341
345
|
|
|
342
346
|
def __init__(self, manifest: dict, rdef: K8SResourceDef, source: Union[str, Path] = None):
|
|
343
347
|
self.key = self.get_manifest_key(manifest)
|
|
@@ -403,13 +407,18 @@ class K8SResource:
|
|
|
403
407
|
rdef = self.rdef
|
|
404
408
|
kwargs = {"body": self.manifest,
|
|
405
409
|
"_preload_content": False,
|
|
406
|
-
"field_manager": "kubernator"
|
|
410
|
+
"field_manager": "kubernator",
|
|
407
411
|
}
|
|
412
|
+
|
|
413
|
+
if self._k8s_client_version[0] > 22:
|
|
414
|
+
kwargs["field_validation"] = self._k8s_field_validation
|
|
408
415
|
if rdef.namespaced:
|
|
409
416
|
kwargs["namespace"] = self.namespace
|
|
410
417
|
if dry_run:
|
|
411
418
|
kwargs["dry_run"] = "All"
|
|
412
|
-
|
|
419
|
+
resp = rdef.create(**kwargs)
|
|
420
|
+
self._process_response_headers(resp)
|
|
421
|
+
return json.loads(resp.data)
|
|
413
422
|
|
|
414
423
|
def patch(self, json_patch, *, patch_type: K8SResourcePatchType, force=False, dry_run=True):
|
|
415
424
|
rdef = self.rdef
|
|
@@ -420,6 +429,9 @@ class K8SResource:
|
|
|
420
429
|
"_preload_content": False,
|
|
421
430
|
"field_manager": "kubernator",
|
|
422
431
|
}
|
|
432
|
+
|
|
433
|
+
if self._k8s_client_version[0] > 22:
|
|
434
|
+
kwargs["field_validation"] = self._k8s_field_validation
|
|
423
435
|
if patch_type == K8SResourcePatchType.SERVER_SIDE_PATCH:
|
|
424
436
|
kwargs["force"] = force
|
|
425
437
|
if rdef.namespaced:
|
|
@@ -442,7 +454,9 @@ class K8SResource:
|
|
|
442
454
|
old_func = api_client.select_header_content_type
|
|
443
455
|
try:
|
|
444
456
|
api_client.select_header_content_type = select_header_content_type_patch
|
|
445
|
-
|
|
457
|
+
resp = rdef.patch(**kwargs)
|
|
458
|
+
self._process_response_headers(resp)
|
|
459
|
+
return json.loads(resp.data)
|
|
446
460
|
finally:
|
|
447
461
|
api_client.select_header_content_type = old_func
|
|
448
462
|
|
|
@@ -484,6 +498,20 @@ class K8SResource:
|
|
|
484
498
|
return False
|
|
485
499
|
return self.key == other.key and self.manifest == other.manifest
|
|
486
500
|
|
|
501
|
+
def _process_response_headers(self, resp):
|
|
502
|
+
headers = resp.headers
|
|
503
|
+
warn_headers = headers.get("Warning")
|
|
504
|
+
if warn_headers:
|
|
505
|
+
for warn in K8S_WARNING_HEADER.findall(warn_headers):
|
|
506
|
+
code, _, msg, _ = warn
|
|
507
|
+
code = int(code)
|
|
508
|
+
msg = msg.encode("utf-8").decode("unicode_escape")
|
|
509
|
+
if code == 299:
|
|
510
|
+
self._api_warnings(self, msg)
|
|
511
|
+
else:
|
|
512
|
+
self._logger.warning("Unknown API warning received for resource %s from %s: code %d: %s",
|
|
513
|
+
self, self.source, code, msg)
|
|
514
|
+
|
|
487
515
|
|
|
488
516
|
class K8SResourcePluginMixin:
|
|
489
517
|
def __init__(self):
|
kubernator/plugins/minikube.py
CHANGED
|
@@ -89,7 +89,7 @@ class MinikubePlugin(KubernatorPlugin):
|
|
|
89
89
|
|
|
90
90
|
def register(self, minikube_version=None, profile="default", k8s_version=None,
|
|
91
91
|
keep_running=False, start_fresh=False,
|
|
92
|
-
nodes=1, driver=
|
|
92
|
+
nodes=1, driver=None, cpus="no-limit", extra_args=None):
|
|
93
93
|
context = self.context
|
|
94
94
|
|
|
95
95
|
context.app.register_plugin("kubeconfig")
|
|
@@ -116,7 +116,7 @@ class MinikubePlugin(KubernatorPlugin):
|
|
|
116
116
|
minikube_file = Path(self.minikube_dir.name) / "minikube"
|
|
117
117
|
minikube_file.symlink_to(minikube_dl_file)
|
|
118
118
|
prepend_os_path(self.minikube_dir.name)
|
|
119
|
-
version_out: str = self.context.app.run_capturing_out([minikube_file, "version", "--short"],
|
|
119
|
+
version_out: str = self.context.app.run_capturing_out([str(minikube_file), "version", "--short"],
|
|
120
120
|
stderr_logger).strip()
|
|
121
121
|
version = version_out[1:]
|
|
122
122
|
logger.info("Found minikube %s in %s", version, minikube_file)
|
|
@@ -127,6 +127,31 @@ class MinikubePlugin(KubernatorPlugin):
|
|
|
127
127
|
self.kubeconfig_dir = profile_dir / ".kube"
|
|
128
128
|
self.kubeconfig_dir.mkdir(parents=True, exist_ok=True)
|
|
129
129
|
|
|
130
|
+
if not driver:
|
|
131
|
+
driver = "docker"
|
|
132
|
+
if get_golang_os() == "darwin":
|
|
133
|
+
logger.debug("Auto-detecting Minikube driver on MacOS...")
|
|
134
|
+
cmd_debug_logger = StripNL(proc_logger.debug)
|
|
135
|
+
try:
|
|
136
|
+
context.app.run(["docker", "info"], cmd_debug_logger, cmd_debug_logger).wait()
|
|
137
|
+
logger.info("Docker is functional, selecting 'docker' as the driver for Minikube")
|
|
138
|
+
except (FileNotFoundError, CalledProcessError) as e:
|
|
139
|
+
logger.trace("Docker is NOT functional", exc_info=e)
|
|
140
|
+
driver = "hyperkit"
|
|
141
|
+
try:
|
|
142
|
+
context.app.run(["hyperkit", "-v"], cmd_debug_logger, cmd_debug_logger).wait()
|
|
143
|
+
logger.info("Hyperkit is functional, selecting 'hyperkit' as the driver for Minikube")
|
|
144
|
+
except (FileNotFoundError, CalledProcessError) as e:
|
|
145
|
+
logger.trace("Hyperkit is NOT functional", exc_info=e)
|
|
146
|
+
driver = "podman"
|
|
147
|
+
try:
|
|
148
|
+
context.app.run(["podman", "info"], cmd_debug_logger, cmd_debug_logger).wait()
|
|
149
|
+
logger.info("Podman is functional, selecting 'podman' as the driver for Minikube")
|
|
150
|
+
except (FileNotFoundError, CalledProcessError) as e:
|
|
151
|
+
logger.trace("Podman is NOT functional", exc_info=e)
|
|
152
|
+
raise RuntimeError("No Minikube driver is functional on MacOS. "
|
|
153
|
+
"Tried 'docker', 'hyperkit' and 'podman'!")
|
|
154
|
+
|
|
130
155
|
context.globals.minikube = dict(version=version,
|
|
131
156
|
minikube_file=str(minikube_file),
|
|
132
157
|
profile=profile,
|
|
@@ -161,12 +186,16 @@ class MinikubePlugin(KubernatorPlugin):
|
|
|
161
186
|
minikube = self.context.minikube
|
|
162
187
|
if not self.minikube_is_running():
|
|
163
188
|
logger.info("Starting minikube profile %r...", minikube.profile)
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
189
|
+
args = ["start",
|
|
190
|
+
"--driver", str(minikube.driver),
|
|
191
|
+
"--kubernetes-version", str(minikube.k8s_version),
|
|
192
|
+
"--wait", "apiserver",
|
|
193
|
+
"--nodes", str(minikube.nodes)]
|
|
194
|
+
|
|
195
|
+
if minikube.driver == "docker":
|
|
196
|
+
args.extend(["--cpus", str(minikube.cpus)])
|
|
197
|
+
|
|
198
|
+
self.cmd(*args)
|
|
170
199
|
else:
|
|
171
200
|
logger.warning("Minikube profile %r is already running!", minikube.profile)
|
|
172
201
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: kubernator
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.10
|
|
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.
|
|
@@ -94,6 +94,14 @@ A simple example is as follows:
|
|
|
94
94
|
$ docker run --mount type=bind,source="$(pwd)",target=/root,readonly -t ghcr.io/karellen/kubernator:latest
|
|
95
95
|
```
|
|
96
96
|
|
|
97
|
+
## Using Kubernator on MacOS
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
$ brew install python3.11
|
|
101
|
+
$ pip3.11 install 'kubernator~=1.0.9'
|
|
102
|
+
$ kubernator --version
|
|
103
|
+
```
|
|
104
|
+
|
|
97
105
|
Please note, that some plugins (e.g. `awscli`, `eks`) may require additional volume mounts or environmental
|
|
98
106
|
variables to be passed for credentials and other external configuration.
|
|
99
107
|
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
kubernator/LICENSE,sha256=wKKdOCMTCPQRV5gDkVLAsXX8qSnRJ5owk7yWPO1KZNo,11387
|
|
2
|
+
kubernator/__init__.py,sha256=-fQpuCFMLl7Id-W5W1PlNxyWii9c5KfgUhYNguIFZzM,915
|
|
3
|
+
kubernator/__main__.py,sha256=f0S60wgpLu--1UlOhzfWail-xt8zyIuODodX98_yPN0,707
|
|
4
|
+
kubernator/api.py,sha256=3hxYHOJt_ps9VFqqOuIHOHPLThLb98RO-gZZ_E-xd9I,24951
|
|
5
|
+
kubernator/app.py,sha256=kGS8jVcf-nCY1mP6MdqMR27XNcEMb5Uxek9FEW4GWLg,19472
|
|
6
|
+
kubernator/proc.py,sha256=8YlgbppyHic_51fVTPD7OP8x5yuRuL8j1kThR8MJjNI,5119
|
|
7
|
+
kubernator/plugins/__init__.py,sha256=h9TLYK8UFEi53ipZSZsTBjp0ljKhisWsgPpt_PkWrO8,670
|
|
8
|
+
kubernator/plugins/awscli.py,sha256=S6X7-qFiaZ7NDVDl2Jg0t-ih9KAJ45cUjjzd5Qe93ZM,4252
|
|
9
|
+
kubernator/plugins/eks.py,sha256=xe7vyPHNwuP8gEYDSzPyBkm-RkAtP64wCOqs9U5I7xI,2273
|
|
10
|
+
kubernator/plugins/helm.py,sha256=3BYZBPoiMUtNgmhdcbYCVRTPtaQMYzhfnMqXWyZRJZc,10525
|
|
11
|
+
kubernator/plugins/istio.py,sha256=rjqFyWWKVhcv8tB5sY9cAQV8XnmUYc5vn8t1R6GRjOQ,10432
|
|
12
|
+
kubernator/plugins/k8s.py,sha256=OFhIJteUU_SDA9PIfLl3IvShqEWxXgB1xdCR0qoyLco,22580
|
|
13
|
+
kubernator/plugins/k8s_api.py,sha256=nDM40srd5drZNirDJ0B5fsKRV1O7Yq6_cWpdkcWYN2w,27189
|
|
14
|
+
kubernator/plugins/kops.py,sha256=QsrQJUF6wGJo2QRVqP92pG5vmOTYQIc25PD_DWCzrAA,9635
|
|
15
|
+
kubernator/plugins/kubeconfig.py,sha256=uwtHmF2I6LiTPrC3M88G5SfYxDWtuh0MqcMfrHHoNRA,2178
|
|
16
|
+
kubernator/plugins/kubectl.py,sha256=IgNghW1Q6s8V2o08eNY2NWfkkdV9Z6X2A3YFQinFr4g,4028
|
|
17
|
+
kubernator/plugins/minikube.py,sha256=Gm1aI5QlYFd8eyWm7g85z2aZmPcscYD63ww3sPcvxVQ,10152
|
|
18
|
+
kubernator/plugins/template.py,sha256=o6UqLw1wK91gCfN7q-Wwc3P5iycAeELUryXh-egA2vQ,8070
|
|
19
|
+
kubernator/plugins/terraform.py,sha256=a1MPl9G8Rznjd28uMRdYWrjpFDLlFAVmLFH4hFEsMsQ,5285
|
|
20
|
+
kubernator/plugins/terragrunt.py,sha256=-qN8tTqPUXJ9O7CEiJVUB0GSUQU3DUTkv-aWdIIsm7Q,5051
|
|
21
|
+
kubernator-1.0.10.dist-info/METADATA,sha256=tI1LSt3VbeyqlPl29hPpg6cKRJmkT9tbtngNeQnj-NE,10427
|
|
22
|
+
kubernator-1.0.10.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
|
|
23
|
+
kubernator-1.0.10.dist-info/entry_points.txt,sha256=IWDtHzyTleRqDSuVRXEr5GImrI7z_kh21t5DWZ8ldcQ,47
|
|
24
|
+
kubernator-1.0.10.dist-info/namespace_packages.txt,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
25
|
+
kubernator-1.0.10.dist-info/top_level.txt,sha256=_z1CxWeKMI55ckf2vC8HqjbCn_E2Y_P5RdrhE_QWcIs,11
|
|
26
|
+
kubernator-1.0.10.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
27
|
+
kubernator-1.0.10.dist-info/RECORD,,
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
kubernator/LICENSE,sha256=wKKdOCMTCPQRV5gDkVLAsXX8qSnRJ5owk7yWPO1KZNo,11387
|
|
2
|
-
kubernator/__init__.py,sha256=ca4dZf97wZBiYKrL-G9oQbQvXKtB9FwEqofjxBb2vho,932
|
|
3
|
-
kubernator/__main__.py,sha256=f0S60wgpLu--1UlOhzfWail-xt8zyIuODodX98_yPN0,707
|
|
4
|
-
kubernator/api.py,sha256=iO4clVqbCeGHO1SbW-xbDymK-KHkmPJYIRllRVyeN6Q,24851
|
|
5
|
-
kubernator/app.py,sha256=kGS8jVcf-nCY1mP6MdqMR27XNcEMb5Uxek9FEW4GWLg,19472
|
|
6
|
-
kubernator/proc.py,sha256=8YlgbppyHic_51fVTPD7OP8x5yuRuL8j1kThR8MJjNI,5119
|
|
7
|
-
kubernator/plugins/__init__.py,sha256=h9TLYK8UFEi53ipZSZsTBjp0ljKhisWsgPpt_PkWrO8,670
|
|
8
|
-
kubernator/plugins/awscli.py,sha256=S6X7-qFiaZ7NDVDl2Jg0t-ih9KAJ45cUjjzd5Qe93ZM,4252
|
|
9
|
-
kubernator/plugins/eks.py,sha256=xe7vyPHNwuP8gEYDSzPyBkm-RkAtP64wCOqs9U5I7xI,2273
|
|
10
|
-
kubernator/plugins/helm.py,sha256=3BYZBPoiMUtNgmhdcbYCVRTPtaQMYzhfnMqXWyZRJZc,10525
|
|
11
|
-
kubernator/plugins/istio.py,sha256=dk4BjCjgYuhDw4aEV4lqhnuQMvAHNsy9URLmyH0eedw,9987
|
|
12
|
-
kubernator/plugins/k8s.py,sha256=klbAU-DIDNzY-aXfbhxQKHwGhStTmJ-k7ydr1ckUqr8,20248
|
|
13
|
-
kubernator/plugins/k8s_api.py,sha256=xsDQii32khCUOc4hMlNc0zHLQK73VTb4kdnug8ukmy4,26000
|
|
14
|
-
kubernator/plugins/kops.py,sha256=QsrQJUF6wGJo2QRVqP92pG5vmOTYQIc25PD_DWCzrAA,9635
|
|
15
|
-
kubernator/plugins/kubeconfig.py,sha256=uwtHmF2I6LiTPrC3M88G5SfYxDWtuh0MqcMfrHHoNRA,2178
|
|
16
|
-
kubernator/plugins/kubectl.py,sha256=IgNghW1Q6s8V2o08eNY2NWfkkdV9Z6X2A3YFQinFr4g,4028
|
|
17
|
-
kubernator/plugins/minikube.py,sha256=yLp3hbkn_Yv_Vn87YFCN3newYb2m-tyW2Qun-a65gfU,8411
|
|
18
|
-
kubernator/plugins/template.py,sha256=o6UqLw1wK91gCfN7q-Wwc3P5iycAeELUryXh-egA2vQ,8070
|
|
19
|
-
kubernator/plugins/terraform.py,sha256=a1MPl9G8Rznjd28uMRdYWrjpFDLlFAVmLFH4hFEsMsQ,5285
|
|
20
|
-
kubernator/plugins/terragrunt.py,sha256=-qN8tTqPUXJ9O7CEiJVUB0GSUQU3DUTkv-aWdIIsm7Q,5051
|
|
21
|
-
kubernator-1.0.9.dev20231221064456.dist-info/METADATA,sha256=5u-K76WFUuwUXWz89SLmPUKEDp2Bw4VUE05m5NKwc9Q,10318
|
|
22
|
-
kubernator-1.0.9.dev20231221064456.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
|
|
23
|
-
kubernator-1.0.9.dev20231221064456.dist-info/entry_points.txt,sha256=IWDtHzyTleRqDSuVRXEr5GImrI7z_kh21t5DWZ8ldcQ,47
|
|
24
|
-
kubernator-1.0.9.dev20231221064456.dist-info/namespace_packages.txt,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
25
|
-
kubernator-1.0.9.dev20231221064456.dist-info/top_level.txt,sha256=_z1CxWeKMI55ckf2vC8HqjbCn_E2Y_P5RdrhE_QWcIs,11
|
|
26
|
-
kubernator-1.0.9.dev20231221064456.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
27
|
-
kubernator-1.0.9.dev20231221064456.dist-info/RECORD,,
|
|
File without changes
|
{kubernator-1.0.9.dev20231221064456.dist-info → kubernator-1.0.10.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
{kubernator-1.0.9.dev20231221064456.dist-info → kubernator-1.0.10.dist-info}/namespace_packages.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|