raijin-server 0.2.38__tar.gz → 0.2.39__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.

Potentially problematic release.


This version of raijin-server might be problematic. Click here for more details.

Files changed (54) hide show
  1. {raijin_server-0.2.38/src/raijin_server.egg-info → raijin_server-0.2.39}/PKG-INFO +2 -1
  2. {raijin_server-0.2.38 → raijin_server-0.2.39}/README.md +1 -0
  3. {raijin_server-0.2.38 → raijin_server-0.2.39}/setup.cfg +1 -1
  4. raijin_server-0.2.39/src/raijin_server/__init__.py +5 -0
  5. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server/modules/minio.py +80 -15
  6. {raijin_server-0.2.38 → raijin_server-0.2.39/src/raijin_server.egg-info}/PKG-INFO +2 -1
  7. raijin_server-0.2.38/src/raijin_server/__init__.py +0 -5
  8. {raijin_server-0.2.38 → raijin_server-0.2.39}/LICENSE +0 -0
  9. {raijin_server-0.2.38 → raijin_server-0.2.39}/pyproject.toml +0 -0
  10. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server/cli.py +0 -0
  11. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server/config.py +0 -0
  12. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server/healthchecks.py +0 -0
  13. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server/module_manager.py +0 -0
  14. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server/modules/__init__.py +0 -0
  15. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server/modules/apokolips_demo.py +0 -0
  16. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server/modules/bootstrap.py +0 -0
  17. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server/modules/calico.py +0 -0
  18. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server/modules/cert_manager.py +0 -0
  19. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server/modules/essentials.py +0 -0
  20. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server/modules/firewall.py +0 -0
  21. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server/modules/full_install.py +0 -0
  22. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server/modules/grafana.py +0 -0
  23. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server/modules/hardening.py +0 -0
  24. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server/modules/harness.py +0 -0
  25. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server/modules/istio.py +0 -0
  26. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server/modules/kafka.py +0 -0
  27. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server/modules/kong.py +0 -0
  28. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server/modules/kubernetes.py +0 -0
  29. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server/modules/loki.py +0 -0
  30. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server/modules/metallb.py +0 -0
  31. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server/modules/network.py +0 -0
  32. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server/modules/observability_dashboards.py +0 -0
  33. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server/modules/observability_ingress.py +0 -0
  34. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server/modules/prometheus.py +0 -0
  35. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server/modules/sanitize.py +0 -0
  36. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server/modules/secrets.py +0 -0
  37. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server/modules/ssh_hardening.py +0 -0
  38. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server/modules/traefik.py +0 -0
  39. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server/modules/velero.py +0 -0
  40. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server/modules/vpn.py +0 -0
  41. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server/scripts/__init__.py +0 -0
  42. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server/scripts/checklist.sh +0 -0
  43. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server/scripts/install.sh +0 -0
  44. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server/scripts/log_size_metric.sh +0 -0
  45. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server/scripts/pre-deploy-check.sh +0 -0
  46. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server/utils.py +0 -0
  47. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server/validators.py +0 -0
  48. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server.egg-info/SOURCES.txt +0 -0
  49. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server.egg-info/dependency_links.txt +0 -0
  50. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server.egg-info/entry_points.txt +0 -0
  51. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server.egg-info/requires.txt +0 -0
  52. {raijin_server-0.2.38 → raijin_server-0.2.39}/src/raijin_server.egg-info/top_level.txt +0 -0
  53. {raijin_server-0.2.38 → raijin_server-0.2.39}/tests/test_full_install_sequence.py +0 -0
  54. {raijin_server-0.2.38 → raijin_server-0.2.39}/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.38
3
+ Version: 0.2.39
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
@@ -46,6 +46,7 @@ CLI em Python (Typer) para automatizar setup e hardening de servidores Ubuntu Se
46
46
  - Segurança: [SECURITY.md](SECURITY.md)
47
47
  - Acesso SSH (Windows): [docs/SSH_WINDOWS.md](docs/SSH_WINDOWS.md)
48
48
  - VPN para acesso remoto (WireGuard): [docs/VPN_REMOTE_ACCESS.md](docs/VPN_REMOTE_ACCESS.md)
49
+ - MinIO (monitorar/testar): [docs/MINIO_OPERATIONS.md](docs/MINIO_OPERATIONS.md)
49
50
 
50
51
  ## Destaques
51
52
 
@@ -13,6 +13,7 @@ CLI em Python (Typer) para automatizar setup e hardening de servidores Ubuntu Se
13
13
  - Segurança: [SECURITY.md](SECURITY.md)
14
14
  - Acesso SSH (Windows): [docs/SSH_WINDOWS.md](docs/SSH_WINDOWS.md)
15
15
  - VPN para acesso remoto (WireGuard): [docs/VPN_REMOTE_ACCESS.md](docs/VPN_REMOTE_ACCESS.md)
16
+ - MinIO (monitorar/testar): [docs/MINIO_OPERATIONS.md](docs/MINIO_OPERATIONS.md)
16
17
 
17
18
  ## Destaques
18
19
 
@@ -1,6 +1,6 @@
1
1
  [metadata]
2
2
  name = raijin-server
3
- version = 0.2.38
3
+ version = 0.2.39
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.39"
4
+
5
+ __all__ = ["__version__"]
@@ -2,7 +2,10 @@
2
2
 
3
3
  import secrets
4
4
  import socket
5
+ import tempfile
5
6
  import time
7
+ from pathlib import Path
8
+ import textwrap
6
9
 
7
10
  import typer
8
11
 
@@ -12,6 +15,7 @@ LOCAL_PATH_PROVISIONER_URL = (
12
15
  "https://raw.githubusercontent.com/rancher/local-path-provisioner/"
13
16
  "v0.0.30/deploy/local-path-storage.yaml"
14
17
  )
18
+ RAIJIN_LOCAL_PATH_SC_NAME = "raijin-local-path"
15
19
 
16
20
 
17
21
  def _detect_node_name(ctx: ExecutionContext) -> str:
@@ -31,6 +35,51 @@ def _generate_secret(length: int = 32) -> str:
31
35
  return secrets.token_urlsafe(length)[:length]
32
36
 
33
37
 
38
+ def _apply_manifest(ctx: ExecutionContext, manifest: str, description: str) -> bool:
39
+ """Aplica manifest YAML temporario com kubectl."""
40
+ tmp_path = None
41
+ try:
42
+ with tempfile.NamedTemporaryFile("w", delete=False, suffix=".yaml") as tmp:
43
+ tmp.write(manifest)
44
+ tmp.flush()
45
+ tmp_path = Path(tmp.name)
46
+ result = run_cmd(
47
+ ["kubectl", "apply", "-f", str(tmp_path)],
48
+ ctx,
49
+ check=False,
50
+ )
51
+ if result.returncode != 0:
52
+ typer.secho(f" Falha ao aplicar {description}.", fg=typer.colors.RED)
53
+ return False
54
+ typer.secho(f" ✓ {description} aplicado.", fg=typer.colors.GREEN)
55
+ return True
56
+ finally:
57
+ if tmp_path and tmp_path.exists():
58
+ tmp_path.unlink(missing_ok=True)
59
+
60
+
61
+ def _create_raijin_local_path_sc(ctx: ExecutionContext) -> bool:
62
+ """Cria StorageClass com volumeBindingMode=Immediate baseada no local-path."""
63
+ manifest = textwrap.dedent(
64
+ f"""
65
+ apiVersion: storage.k8s.io/v1
66
+ kind: StorageClass
67
+ metadata:
68
+ name: {RAIJIN_LOCAL_PATH_SC_NAME}
69
+ provisioner: rancher.io/local-path
70
+ reclaimPolicy: Delete
71
+ volumeBindingMode: Immediate
72
+ allowVolumeExpansion: true
73
+ parameters:
74
+ type: ""
75
+ """
76
+ ).strip()
77
+ typer.echo(
78
+ f"Criando StorageClass '{RAIJIN_LOCAL_PATH_SC_NAME}' com binding imediato para PVCs do MinIO..."
79
+ )
80
+ return _apply_manifest(ctx, manifest, f"StorageClass {RAIJIN_LOCAL_PATH_SC_NAME}")
81
+
82
+
34
83
  def _get_default_storage_class(ctx: ExecutionContext) -> str:
35
84
  """Retorna o nome da StorageClass default do cluster, se existir."""
36
85
  result = run_cmd(
@@ -117,28 +166,41 @@ def _set_default_storage_class(ctx: ExecutionContext, name: str) -> None:
117
166
 
118
167
  def _ensure_storage_class(ctx: ExecutionContext) -> str:
119
168
  """Garante que existe uma StorageClass disponivel, instalando local-path se necessario."""
120
- # Verifica se ja tem default
121
169
  default_sc = _get_default_storage_class(ctx)
122
- if default_sc:
170
+ available = _list_storage_classes(ctx)
171
+
172
+ # Se ja houver StorageClass dedicada do Raijin, usa ela
173
+ if default_sc == RAIJIN_LOCAL_PATH_SC_NAME:
123
174
  typer.echo(f"StorageClass default detectada: {default_sc}")
124
175
  return default_sc
125
-
126
- # Lista classes disponiveis
127
- available = _list_storage_classes(ctx)
176
+ if RAIJIN_LOCAL_PATH_SC_NAME in available:
177
+ typer.echo(f"StorageClass '{RAIJIN_LOCAL_PATH_SC_NAME}' detectada.")
178
+ _set_default_storage_class(ctx, RAIJIN_LOCAL_PATH_SC_NAME)
179
+ return RAIJIN_LOCAL_PATH_SC_NAME
180
+
181
+ # Se ja existir default diferente de local-path, respeita configuracao do cluster
182
+ if default_sc and default_sc != "local-path":
183
+ typer.echo(f"StorageClass default detectada: {default_sc}")
184
+ return default_sc
185
+
186
+ # Se local-path estiver disponivel (default ou nao), cria uma classe dedicada com binding imediato
187
+ if "local-path" in available or default_sc == "local-path":
188
+ if _create_raijin_local_path_sc(ctx):
189
+ _set_default_storage_class(ctx, RAIJIN_LOCAL_PATH_SC_NAME)
190
+ return RAIJIN_LOCAL_PATH_SC_NAME
191
+ typer.echo("Nao foi possivel criar StorageClass dedicada; usando 'local-path'.")
192
+ _set_default_storage_class(ctx, "local-path")
193
+ return "local-path"
194
+
128
195
  if available:
129
196
  typer.echo(f"StorageClasses disponiveis (sem default): {', '.join(available)}")
130
- # Se local-path existe, define como default
131
- if "local-path" in available:
132
- _set_default_storage_class(ctx, "local-path")
133
- return "local-path"
134
- # Pergunta qual usar
135
197
  choice = typer.prompt(
136
198
  f"Qual StorageClass usar? ({'/'.join(available)})",
137
199
  default=available[0],
138
200
  )
139
201
  return choice
140
-
141
- # Sem StorageClass - instala local-path-provisioner
202
+
203
+ # Nenhuma StorageClass disponivel - instala local-path automaticamente
142
204
  typer.secho(
143
205
  "Nenhuma StorageClass encontrada no cluster.",
144
206
  fg=typer.colors.YELLOW,
@@ -153,11 +215,14 @@ def _ensure_storage_class(ctx: ExecutionContext) -> str:
153
215
  fg=typer.colors.RED,
154
216
  )
155
217
  raise typer.Exit(1)
156
-
218
+
157
219
  if not _install_local_path_provisioner(ctx):
158
220
  raise typer.Exit(1)
159
-
160
- # Define como default
221
+
222
+ if _create_raijin_local_path_sc(ctx):
223
+ _set_default_storage_class(ctx, RAIJIN_LOCAL_PATH_SC_NAME)
224
+ return RAIJIN_LOCAL_PATH_SC_NAME
225
+
161
226
  _set_default_storage_class(ctx, "local-path")
162
227
  return "local-path"
163
228
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: raijin-server
3
- Version: 0.2.38
3
+ Version: 0.2.39
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
@@ -46,6 +46,7 @@ CLI em Python (Typer) para automatizar setup e hardening de servidores Ubuntu Se
46
46
  - Segurança: [SECURITY.md](SECURITY.md)
47
47
  - Acesso SSH (Windows): [docs/SSH_WINDOWS.md](docs/SSH_WINDOWS.md)
48
48
  - VPN para acesso remoto (WireGuard): [docs/VPN_REMOTE_ACCESS.md](docs/VPN_REMOTE_ACCESS.md)
49
+ - MinIO (monitorar/testar): [docs/MINIO_OPERATIONS.md](docs/MINIO_OPERATIONS.md)
49
50
 
50
51
  ## Destaques
51
52
 
@@ -1,5 +0,0 @@
1
- """Pacote principal do CLI Raijin Server."""
2
-
3
- __version__ = "0.2.38"
4
-
5
- __all__ = ["__version__"]
File without changes