kubernetes-watch 0.1.8__py3-none-any.whl → 0.1.9__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.
@@ -1,11 +1,99 @@
1
1
  import os
2
2
  from git import Repo
3
+ import shutil
4
+ import subprocess
5
+ import tempfile
6
+ from pathlib import Path
3
7
 
4
8
  from prefect import get_run_logger
5
9
 
6
10
  logger = get_run_logger()
7
11
 
8
- def clone_repo(git_pat, git_url, clone_base_path):
12
+
13
+ def clone_ssh_repo(
14
+ git_url: str,
15
+ clone_base_path: str,
16
+ repo_dir_name: str = "manifest-repo",
17
+ depth: int = 1,
18
+ ssh_key_env: str = "GIT_SSH_PRIVATE_KEY",
19
+ known_hosts_env: str = "GIT_SSH_KNOWN_HOSTS",
20
+ ) -> Path:
21
+ """
22
+ Clone or update a Git repo using an SSH private key & known_hosts provided via env vars.
23
+
24
+ Env vars:
25
+ - GIT_SSH_PRIVATE_KEY: the full private key (RSA/ED25519) including BEGIN/END lines
26
+ - GIT_SSH_KNOWN_HOSTS: one or more known_hosts lines (from `ssh-keyscan github.com`)
27
+
28
+ Args:
29
+ git_url: SSH URL like 'git@github.com:your-org/your-repo.git'
30
+ clone_base_path: directory where repo_dir_name will be created
31
+ repo_dir_name: folder name for the clone
32
+ depth: shallow clone depth (1 == latest)
33
+
34
+ Returns:
35
+ Path to the cloned/updated repository.
36
+ """
37
+ if not git_url.startswith("git@"):
38
+ raise ValueError("git_url must be an SSH URL like 'git@github.com:org/repo.git'")
39
+
40
+ priv_key = os.environ.get(ssh_key_env)
41
+ kh_data = os.environ.get(known_hosts_env)
42
+ if not priv_key:
43
+ raise ValueError(f"Missing env var {ssh_key_env}")
44
+ if not kh_data:
45
+ raise ValueError(f"Missing env var {known_hosts_env}")
46
+
47
+ base = Path(clone_base_path).expanduser().resolve()
48
+ base.mkdir(parents=True, exist_ok=True)
49
+ repo_path = base / repo_dir_name
50
+
51
+ # Secure temp dir for SSH material
52
+ tmpdir = Path(tempfile.mkdtemp(prefix="git_ssh_"))
53
+ key_path = tmpdir / "id_rsa"
54
+ kh_path = tmpdir / "known_hosts"
55
+
56
+ try:
57
+ key_path.write_text(priv_key, encoding="utf-8")
58
+ kh_path.write_text(kh_data, encoding="utf-8")
59
+
60
+ try:
61
+ os.chmod(key_path, 0o600)
62
+ except PermissionError:
63
+ pass # Windows quirk
64
+
65
+ ssh_cmd = (
66
+ f"ssh -i {key_path} -o IdentitiesOnly=yes "
67
+ f"-o UserKnownHostsFile={kh_path} "
68
+ f"-o StrictHostKeyChecking=yes -o StrictModes=no"
69
+ )
70
+
71
+ env = os.environ.copy()
72
+ env["GIT_SSH_COMMAND"] = ssh_cmd
73
+
74
+ if not repo_path.exists():
75
+ cmd = ["git", "clone"]
76
+ if depth and depth > 0:
77
+ cmd += ["--depth", str(depth)]
78
+ cmd += [git_url, str(repo_path)]
79
+ subprocess.check_call(cmd, env=env)
80
+ else:
81
+ if not (repo_path / ".git").exists():
82
+ raise RuntimeError(f"Path exists but is not a git repo: {repo_path}")
83
+ subprocess.check_call(["git", "remote", "set-url", "origin", git_url], cwd=repo_path, env=env)
84
+ subprocess.check_call(["git", "fetch", "--all", "--prune"], cwd=repo_path, env=env)
85
+ subprocess.check_call(["git", "pull", "--ff-only", "origin"], cwd=repo_path, env=env)
86
+
87
+ return repo_path
88
+
89
+ finally:
90
+ try:
91
+ shutil.rmtree(tmpdir)
92
+ except Exception:
93
+ pass
94
+
95
+
96
+ def clone_pat_repo(git_pat, git_url, clone_base_path):
9
97
  # Retrieve environment variables
10
98
  access_token = git_pat # os.environ.get('GIT_PAT')
11
99
  repo_url = git_url # os.environ.get('GIT_URL')
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: kubernetes-watch
3
- Version: 0.1.8
3
+ Version: 0.1.9
4
4
  Summary:
5
5
  Author: bmotevalli
6
6
  Author-email: b.motevalli@gmail.com
@@ -23,14 +23,14 @@ kube_watch/modules/mock/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG
23
23
  kube_watch/modules/mock/mock_generator.py,sha256=BKKQFCxxQgFW_GFgeIbkyIbuNU4328xTTaFfTwFLsS8,1262
24
24
  kube_watch/modules/providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
25
  kube_watch/modules/providers/aws.py,sha256=oly88Bihn-vR0NdOoCT-P1MNgPw8FLNfS1Ha4hc_4bc,8375
26
- kube_watch/modules/providers/git.py,sha256=Cb0iulruhd0vlmWiIqkowc1e5HVjoSFwE0jR1Ea9Cxo,1151
26
+ kube_watch/modules/providers/git.py,sha256=BevjDv8czDJOJ9M1x8WYIRcXCxtZKow6ZQYiD6MCtGs,4104
27
27
  kube_watch/modules/providers/github.py,sha256=eQY8sLy2U6bOWMpFxA73DFCPVuswhTXSG25KmYSuo5s,5212
28
28
  kube_watch/modules/providers/vault.py,sha256=etzzHbTrUDsTUpeUN-xg0Xh8ulqC0-1FA3tHRZinIOo,7193
29
29
  kube_watch/standalone/metarecogen/ckan_to_gn.py,sha256=LWd7ikyxRIC1IGt6CtALnDOEoyuG07a8NoDHhgMkX4o,4635
30
30
  kube_watch/watch/__init__.py,sha256=9KE0Sf1nLUTNaFvXbiQCgf11vpG8Xgmb5ddeMAmak3Q,88
31
31
  kube_watch/watch/helpers.py,sha256=8BQnQ6AeLHs0JEq54iKYDvWURb1F-kROJxwIcl_nv_Y,6276
32
32
  kube_watch/watch/workflow.py,sha256=CaXHFuEWVsFjBv5dU4IfVMeTlGJWyKaE1But9-YzVWk,9769
33
- kubernetes_watch-0.1.8.dist-info/LICENSE,sha256=_H2QdL-2dXbivDmOpJ11DnqJewSFhSJwGpHx_WAE-CA,1075
34
- kubernetes_watch-0.1.8.dist-info/METADATA,sha256=mloy8yyoPpvpKY1icFj0Mf_hC0kEjlybthnILlDJICc,5056
35
- kubernetes_watch-0.1.8.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
36
- kubernetes_watch-0.1.8.dist-info/RECORD,,
33
+ kubernetes_watch-0.1.9.dist-info/LICENSE,sha256=_H2QdL-2dXbivDmOpJ11DnqJewSFhSJwGpHx_WAE-CA,1075
34
+ kubernetes_watch-0.1.9.dist-info/METADATA,sha256=isBj78h77s8CXFHssio69S4RgLmb_sU0_cfYQUfSO5I,5056
35
+ kubernetes_watch-0.1.9.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
36
+ kubernetes_watch-0.1.9.dist-info/RECORD,,