raijin-server 0.2.39__tar.gz → 0.2.40__tar.gz

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.
Files changed (54) hide show
  1. {raijin_server-0.2.39/src/raijin_server.egg-info → raijin_server-0.2.40}/PKG-INFO +1 -1
  2. {raijin_server-0.2.39 → raijin_server-0.2.40}/setup.cfg +1 -1
  3. raijin_server-0.2.40/src/raijin_server/__init__.py +5 -0
  4. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server/modules/minio.py +107 -2
  5. {raijin_server-0.2.39 → raijin_server-0.2.40/src/raijin_server.egg-info}/PKG-INFO +1 -1
  6. raijin_server-0.2.39/src/raijin_server/__init__.py +0 -5
  7. {raijin_server-0.2.39 → raijin_server-0.2.40}/LICENSE +0 -0
  8. {raijin_server-0.2.39 → raijin_server-0.2.40}/README.md +0 -0
  9. {raijin_server-0.2.39 → raijin_server-0.2.40}/pyproject.toml +0 -0
  10. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server/cli.py +0 -0
  11. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server/config.py +0 -0
  12. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server/healthchecks.py +0 -0
  13. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server/module_manager.py +0 -0
  14. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server/modules/__init__.py +0 -0
  15. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server/modules/apokolips_demo.py +0 -0
  16. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server/modules/bootstrap.py +0 -0
  17. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server/modules/calico.py +0 -0
  18. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server/modules/cert_manager.py +0 -0
  19. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server/modules/essentials.py +0 -0
  20. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server/modules/firewall.py +0 -0
  21. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server/modules/full_install.py +0 -0
  22. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server/modules/grafana.py +0 -0
  23. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server/modules/hardening.py +0 -0
  24. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server/modules/harness.py +0 -0
  25. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server/modules/istio.py +0 -0
  26. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server/modules/kafka.py +0 -0
  27. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server/modules/kong.py +0 -0
  28. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server/modules/kubernetes.py +0 -0
  29. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server/modules/loki.py +0 -0
  30. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server/modules/metallb.py +0 -0
  31. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server/modules/network.py +0 -0
  32. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server/modules/observability_dashboards.py +0 -0
  33. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server/modules/observability_ingress.py +0 -0
  34. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server/modules/prometheus.py +0 -0
  35. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server/modules/sanitize.py +0 -0
  36. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server/modules/secrets.py +0 -0
  37. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server/modules/ssh_hardening.py +0 -0
  38. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server/modules/traefik.py +0 -0
  39. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server/modules/velero.py +0 -0
  40. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server/modules/vpn.py +0 -0
  41. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server/scripts/__init__.py +0 -0
  42. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server/scripts/checklist.sh +0 -0
  43. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server/scripts/install.sh +0 -0
  44. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server/scripts/log_size_metric.sh +0 -0
  45. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server/scripts/pre-deploy-check.sh +0 -0
  46. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server/utils.py +0 -0
  47. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server/validators.py +0 -0
  48. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server.egg-info/SOURCES.txt +0 -0
  49. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server.egg-info/dependency_links.txt +0 -0
  50. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server.egg-info/entry_points.txt +0 -0
  51. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server.egg-info/requires.txt +0 -0
  52. {raijin_server-0.2.39 → raijin_server-0.2.40}/src/raijin_server.egg-info/top_level.txt +0 -0
  53. {raijin_server-0.2.39 → raijin_server-0.2.40}/tests/test_full_install_sequence.py +0 -0
  54. {raijin_server-0.2.39 → raijin_server-0.2.40}/tests/test_registry.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: raijin-server
3
- Version: 0.2.39
3
+ Version: 0.2.40
4
4
  Summary: CLI para automacao de setup e hardening de servidores Ubuntu Server.
5
5
  Home-page: https://example.com/raijin-server
6
6
  Author: Equipe Raijin
@@ -1,6 +1,6 @@
1
1
  [metadata]
2
2
  name = raijin-server
3
- version = 0.2.39
3
+ version = 0.2.40
4
4
  description = CLI para automacao de setup e hardening de servidores Ubuntu Server.
5
5
  long_description = file: README.md
6
6
  long_description_content_type = text/markdown
@@ -0,0 +1,5 @@
1
+ """Pacote principal do CLI Raijin Server."""
2
+
3
+ __version__ = "0.2.40"
4
+
5
+ __all__ = ["__version__"]
@@ -1,5 +1,6 @@
1
1
  """Deploy do MinIO via Helm com configuracoes production-ready."""
2
2
 
3
+ import json
3
4
  import secrets
4
5
  import socket
5
6
  import tempfile
@@ -107,6 +108,102 @@ def _list_storage_classes(ctx: ExecutionContext) -> list:
107
108
  return []
108
109
 
109
110
 
111
+ def _patch_local_path_provisioner_tolerations(ctx: ExecutionContext) -> None:
112
+ """Adiciona tolerations ao local-path-provisioner para rodar em control-plane."""
113
+ typer.echo(" Configurando tolerations no local-path-provisioner...")
114
+
115
+ # Patch no deployment para tolerar control-plane
116
+ patch_deployment = textwrap.dedent(
117
+ """
118
+ spec:
119
+ template:
120
+ spec:
121
+ tolerations:
122
+ - key: node-role.kubernetes.io/control-plane
123
+ operator: Exists
124
+ effect: NoSchedule
125
+ - key: node-role.kubernetes.io/master
126
+ operator: Exists
127
+ effect: NoSchedule
128
+ """
129
+ ).strip()
130
+
131
+ result = run_cmd(
132
+ [
133
+ "kubectl", "-n", "local-path-storage", "patch", "deployment",
134
+ "local-path-provisioner", "--patch", patch_deployment,
135
+ ],
136
+ ctx,
137
+ check=False,
138
+ )
139
+ if result.returncode == 0:
140
+ typer.secho(" ✓ Deployment patched com tolerations.", fg=typer.colors.GREEN)
141
+
142
+ # Patch no ConfigMap para os helper pods (que criam os dirs no node)
143
+ # O local-path-provisioner usa um ConfigMap com helperPod template
144
+ helper_pod_config = {
145
+ "nodePathMap": [
146
+ {
147
+ "node": "DEFAULT_PATH_FOR_NON_LISTED_NODES",
148
+ "paths": ["/opt/local-path-provisioner"]
149
+ }
150
+ ],
151
+ "setupCommand": None,
152
+ "teardownCommand": None,
153
+ "helperPod": {
154
+ "apiVersion": "v1",
155
+ "kind": "Pod",
156
+ "metadata": {},
157
+ "spec": {
158
+ "tolerations": [
159
+ {"key": "node-role.kubernetes.io/control-plane", "operator": "Exists", "effect": "NoSchedule"},
160
+ {"key": "node-role.kubernetes.io/master", "operator": "Exists", "effect": "NoSchedule"}
161
+ ],
162
+ "containers": [
163
+ {
164
+ "name": "helper-pod",
165
+ "image": "busybox:stable",
166
+ "imagePullPolicy": "IfNotPresent"
167
+ }
168
+ ]
169
+ }
170
+ }
171
+ }
172
+
173
+ # Converte para JSON string para o patch
174
+ config_json_str = json.dumps(helper_pod_config)
175
+ patch_data = json.dumps({"data": {"config.json": config_json_str}})
176
+
177
+ # Aplica via patch no ConfigMap
178
+ result = run_cmd(
179
+ [
180
+ "kubectl", "-n", "local-path-storage", "patch", "configmap",
181
+ "local-path-config", "--type=merge", "-p", patch_data,
182
+ ],
183
+ ctx,
184
+ check=False,
185
+ )
186
+ if result.returncode == 0:
187
+ typer.secho(" ✓ ConfigMap patched para helper pods.", fg=typer.colors.GREEN)
188
+
189
+ # Reinicia o deployment para aplicar as mudanças
190
+ run_cmd(
191
+ ["kubectl", "-n", "local-path-storage", "rollout", "restart", "deployment/local-path-provisioner"],
192
+ ctx,
193
+ check=False,
194
+ )
195
+
196
+ # Aguarda rollout
197
+ run_cmd(
198
+ [
199
+ "kubectl", "-n", "local-path-storage", "rollout", "status",
200
+ "deployment/local-path-provisioner", "--timeout=60s",
201
+ ],
202
+ ctx,
203
+ check=False,
204
+ )
205
+
206
+
110
207
  def _install_local_path_provisioner(ctx: ExecutionContext) -> bool:
111
208
  """Instala local-path-provisioner para usar storage local (NVMe/SSD)."""
112
209
  typer.echo("Instalando local-path-provisioner para storage local...")
@@ -120,7 +217,7 @@ def _install_local_path_provisioner(ctx: ExecutionContext) -> bool:
120
217
  typer.secho(" Falha ao instalar local-path-provisioner.", fg=typer.colors.RED)
121
218
  return False
122
219
 
123
- # Aguarda deployment ficar pronto
220
+ # Aguarda deployment ficar pronto inicialmente
124
221
  typer.echo(" Aguardando local-path-provisioner ficar Ready...")
125
222
  run_cmd(
126
223
  [
@@ -131,7 +228,10 @@ def _install_local_path_provisioner(ctx: ExecutionContext) -> bool:
131
228
  check=False,
132
229
  )
133
230
 
134
- typer.secho(" ✓ local-path-provisioner instalado.", fg=typer.colors.GREEN)
231
+ # Aplica tolerations para control-plane (single-node clusters)
232
+ _patch_local_path_provisioner_tolerations(ctx)
233
+
234
+ typer.secho(" ✓ local-path-provisioner instalado e configurado.", fg=typer.colors.GREEN)
135
235
  return True
136
236
 
137
237
 
@@ -172,9 +272,12 @@ def _ensure_storage_class(ctx: ExecutionContext) -> str:
172
272
  # Se ja houver StorageClass dedicada do Raijin, usa ela
173
273
  if default_sc == RAIJIN_LOCAL_PATH_SC_NAME:
174
274
  typer.echo(f"StorageClass default detectada: {default_sc}")
275
+ # Garante que o provisioner tem tolerations (pode ter sido instalado antes do fix)
276
+ _patch_local_path_provisioner_tolerations(ctx)
175
277
  return default_sc
176
278
  if RAIJIN_LOCAL_PATH_SC_NAME in available:
177
279
  typer.echo(f"StorageClass '{RAIJIN_LOCAL_PATH_SC_NAME}' detectada.")
280
+ _patch_local_path_provisioner_tolerations(ctx)
178
281
  _set_default_storage_class(ctx, RAIJIN_LOCAL_PATH_SC_NAME)
179
282
  return RAIJIN_LOCAL_PATH_SC_NAME
180
283
 
@@ -185,6 +288,8 @@ def _ensure_storage_class(ctx: ExecutionContext) -> str:
185
288
 
186
289
  # Se local-path estiver disponivel (default ou nao), cria uma classe dedicada com binding imediato
187
290
  if "local-path" in available or default_sc == "local-path":
291
+ # Garante tolerations no provisioner existente
292
+ _patch_local_path_provisioner_tolerations(ctx)
188
293
  if _create_raijin_local_path_sc(ctx):
189
294
  _set_default_storage_class(ctx, RAIJIN_LOCAL_PATH_SC_NAME)
190
295
  return RAIJIN_LOCAL_PATH_SC_NAME
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: raijin-server
3
- Version: 0.2.39
3
+ Version: 0.2.40
4
4
  Summary: CLI para automacao de setup e hardening de servidores Ubuntu Server.
5
5
  Home-page: https://example.com/raijin-server
6
6
  Author: Equipe Raijin
@@ -1,5 +0,0 @@
1
- """Pacote principal do CLI Raijin Server."""
2
-
3
- __version__ = "0.2.39"
4
-
5
- __all__ = ["__version__"]
File without changes
File without changes