Skip to content

Commit 10d4b04

Browse files
authored
Update kubeseal-secrets.py
1 parent e7e6232 commit 10d4b04

File tree

1 file changed

+43
-15
lines changed

1 file changed

+43
-15
lines changed
Lines changed: 43 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,39 @@
11
#!/usr/bin/env python3
2-
32
import argparse
43
import subprocess
54
import sys
65
from pathlib import Path
6+
import re
7+
8+
KIND_SECRET_RE = re.compile(r'^\s*kind:\s*Secret\s*$', flags=re.I | re.M)
9+
KIND_SEALED_RE = re.compile(r'^\s*kind:\s*SealedSecret\s*$', flags=re.I | re.M)
710

811
def seal_secrets(files, controller_name, controller_namespace):
12+
failures = 0
913
for file_path in files:
1014
file = Path(file_path)
15+
print(f"\n--- Processing: {file} ---")
1116
if not file.exists():
1217
print(f"Warning: File {file} does not exist, skipping")
1318
continue
1419

1520
if ".sealed." in file.name:
16-
print(f"File is already sealed: {file}, skipping")
21+
print(f"File is already sealed (name contains .sealed.): {file}, skipping")
22+
continue
23+
24+
try:
25+
content = file.read_text()
26+
except Exception as e:
27+
print(f"❌ Cannot read {file}: {e}")
28+
failures += 1
29+
continue
30+
31+
if KIND_SEALED_RE.search(content):
32+
print(f"File already contains a SealedSecret resource, skipping: {file}")
33+
continue
34+
35+
if not KIND_SECRET_RE.search(content):
36+
print(f"No 'kind: Secret' found in {file}. Skipping (not a Secret).")
1737
continue
1838

1939
kubeseal_cmd = [
@@ -26,25 +46,33 @@ def seal_secrets(files, controller_name, controller_namespace):
2646
sealed_file = file.with_name(f"{file.stem}.sealed{file.suffix}")
2747

2848
try:
29-
with Path(file).open("rb") as f:
30-
result = subprocess.run(
31-
kubeseal_cmd,
32-
input=f.read(),
33-
capture_output=True,
34-
check=True,
35-
text=False,
36-
)
37-
sealed_file.write_bytes(result.stdout)
49+
proc = subprocess.run(
50+
kubeseal_cmd,
51+
input=content.encode(),
52+
capture_output=True,
53+
check=True,
54+
)
55+
sealed_file.write_bytes(proc.stdout)
3856
print(f"✅ Sealed secret created: {sealed_file}")
3957
except subprocess.CalledProcessError as e:
40-
print(f"❌ Error sealing {file}: {e.stderr.decode()}")
41-
sys.exit(1)
58+
stderr = e.stderr.decode(errors="replace") if e.stderr else str(e)
59+
print(f"❌ Error sealing {file}: {stderr}")
60+
failures += 1
61+
except Exception as e:
62+
print(f"❌ Unexpected error sealing {file}: {e}")
63+
failures += 1
64+
65+
if failures:
66+
print(f"\nFinished with {failures} failure(s).")
67+
sys.exit(1)
68+
else:
69+
print("\nAll done: no failures.")
70+
sys.exit(0)
4271

43-
if __name__ == "__main__":
72+
if name == "__main__":
4473
parser = argparse.ArgumentParser(description="Seal Kubernetes secrets using kubeseal")
4574
parser.add_argument("--controller-name", required=True, help="Name of the sealed secrets controller")
4675
parser.add_argument("--controller-namespace", required=True, help="Namespace of the sealed secrets controller")
4776
parser.add_argument("files", nargs="+", help="Secret files to process")
48-
4977
args = parser.parse_args()
5078
seal_secrets(args.files, args.controller_name, args.controller_namespace)

0 commit comments

Comments
 (0)