raijin-server 0.3.6__py3-none-any.whl → 0.3.8__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 raijin-server might be problematic. Click here for more details.

@@ -25,6 +25,7 @@ from raijin_server.utils import (
25
25
  run_cmd,
26
26
  write_file,
27
27
  )
28
+ from raijin_server.minio_utils import get_or_create_minio_user
28
29
 
29
30
  HARBOR_NAMESPACE = "harbor"
30
31
 
@@ -65,34 +66,17 @@ def _uninstall_harbor(ctx: ExecutionContext, namespace: str) -> None:
65
66
 
66
67
 
67
68
  def _get_minio_credentials(ctx: ExecutionContext) -> tuple[str, str]:
68
- """Obtem credenciais do MinIO do Secret do K8s."""
69
- typer.echo("Obtendo credenciais do MinIO...")
69
+ """Obtem ou cria credenciais específicas do MinIO para Harbor.
70
70
 
71
- result = run_cmd(
72
- ["kubectl", "-n", "minio", "get", "secret", "minio-credentials", "-o", "jsonpath={.data.accesskey}"],
73
- ctx,
74
- check=False,
71
+ Esta função cria um usuário MinIO dedicado para o Harbor com acesso
72
+ restrito apenas aos buckets: harbor-registry, harbor-chartmuseum, harbor-jobservice.
73
+ """
74
+ return get_or_create_minio_user(
75
+ ctx=ctx,
76
+ app_name="harbor",
77
+ buckets=["harbor-registry", "harbor-chartmuseum", "harbor-jobservice"],
78
+ namespace=HARBOR_NAMESPACE,
75
79
  )
76
-
77
- if result.returncode == 0 and result.stdout:
78
- access_key = base64.b64decode(result.stdout.strip()).decode("utf-8")
79
-
80
- result = run_cmd(
81
- ["kubectl", "-n", "minio", "get", "secret", "minio-credentials", "-o", "jsonpath={.data.secretkey}"],
82
- ctx,
83
- check=False,
84
- )
85
-
86
- if result.returncode == 0 and result.stdout:
87
- secret_key = base64.b64decode(result.stdout.strip()).decode("utf-8")
88
- return access_key, secret_key
89
-
90
- # Fallback para prompt manual
91
- typer.secho("Não foi possível obter credenciais automaticamente.", fg=typer.colors.YELLOW)
92
- access_key = typer.prompt("MinIO Access Key", default="thor")
93
- secret_key = typer.prompt("MinIO Secret Key", default="rebel1on", hide_input=True)
94
-
95
- return access_key, secret_key
96
80
 
97
81
 
98
82
  def _wait_for_pods_ready(ctx: ExecutionContext, namespace: str, timeout: int = 300) -> bool:
@@ -24,6 +24,7 @@ from raijin_server.utils import (
24
24
  run_cmd,
25
25
  write_file,
26
26
  )
27
+ from raijin_server.minio_utils import get_or_create_minio_user
27
28
 
28
29
  VAULT_NAMESPACE = "vault"
29
30
  ESO_NAMESPACE = "external-secrets"
@@ -124,43 +125,30 @@ def _wait_for_pods_ready(ctx: ExecutionContext, namespace: str, label: str, time
124
125
 
125
126
 
126
127
  def _get_minio_credentials(ctx: ExecutionContext) -> tuple[str, str]:
127
- """Obtem credenciais do MinIO do Secret do K8s."""
128
- typer.echo("Obtendo credenciais do MinIO...")
129
-
130
- # Tenta obter do secret minio-credentials no namespace minio
131
- result = run_cmd(
132
- ["kubectl", "-n", "minio", "get", "secret", "minio-credentials", "-o", "jsonpath={.data.accesskey}"],
133
- ctx,
134
- check=False,
128
+ """Obtem ou cria credenciais específicas do MinIO para Vault.
129
+
130
+ Esta função cria um usuário MinIO dedicado para o Vault com acesso
131
+ restrito apenas ao bucket 'vault-storage'.
132
+ """
133
+ return get_or_create_minio_user(
134
+ ctx=ctx,
135
+ app_name="vault",
136
+ buckets=["vault-storage"],
137
+ namespace=VAULT_NAMESPACE,
135
138
  )
136
-
137
- if result.returncode == 0 and result.stdout:
138
- access_key = base64.b64decode(result.stdout.strip()).decode("utf-8")
139
-
140
- result = run_cmd(
141
- ["kubectl", "-n", "minio", "get", "secret", "minio-credentials", "-o", "jsonpath={.data.secretkey}"],
142
- ctx,
143
- check=False,
144
- )
145
-
146
- if result.returncode == 0 and result.stdout:
147
- secret_key = base64.b64decode(result.stdout.strip()).decode("utf-8")
148
- return access_key, secret_key
149
-
150
- # Fallback para prompt manual
151
- typer.secho("Não foi possível obter credenciais automaticamente.", fg=typer.colors.YELLOW)
152
- access_key = typer.prompt("MinIO Access Key", default="thor")
153
- secret_key = typer.prompt("MinIO Secret Key", default="rebel1on", hide_input=True)
154
-
155
- return access_key, secret_key
156
139
 
157
140
 
158
- def _initialize_vault(ctx: ExecutionContext, vault_ns: str, node_ip: str) -> tuple[str, list[str]]:
159
- """Inicializa o Vault e retorna root token e unseal keys."""
160
- typer.echo("\n Inicializando Vault...")
141
+ def _initialize_vault(ctx: ExecutionContext, vault_ns: str, node_ip: str) -> tuple[str, str]:
142
+ """Inicializa o Vault com 1 key/1 threshold e retorna root token e unseal key."""
143
+ typer.echo("\nInicializando Vault...")
161
144
 
145
+ # Usa 1 key com threshold 1 para simplificar (produção pode usar 5/3)
162
146
  result = run_cmd(
163
- ["kubectl", "-n", vault_ns, "exec", "vault-0", "--", "vault", "operator", "init", "-format=json"],
147
+ [
148
+ "kubectl", "-n", vault_ns, "exec", "vault-0", "--",
149
+ "vault", "operator", "init",
150
+ "-key-shares=1", "-key-threshold=1", "-format=json"
151
+ ],
164
152
  ctx,
165
153
  check=False,
166
154
  )
@@ -172,28 +160,60 @@ def _initialize_vault(ctx: ExecutionContext, vault_ns: str, node_ip: str) -> tup
172
160
  import json
173
161
  init_data = json.loads(result.stdout)
174
162
  root_token = init_data["root_token"]
175
- unseal_keys = init_data["unseal_keys_b64"]
163
+ unseal_key = init_data["unseal_keys_b64"][0]
176
164
 
177
165
  # Salva keys localmente
178
166
  vault_keys_path = Path("/etc/vault/keys.json")
179
167
  vault_keys_path.parent.mkdir(parents=True, exist_ok=True)
180
168
  vault_keys_path.write_text(json.dumps(init_data, indent=2))
181
169
  typer.secho(f"\n✓ Vault keys salvas em {vault_keys_path}", fg=typer.colors.GREEN)
170
+
171
+ # Salva credenciais em secret K8s para uso do ESO
172
+ _save_vault_credentials_to_k8s(ctx, vault_ns, root_token, unseal_key)
173
+
182
174
  typer.secho("⚠️ IMPORTANTE: Guarde essas keys em local seguro!", fg=typer.colors.YELLOW, bold=True)
183
175
 
184
- return root_token, unseal_keys
176
+ return root_token, unseal_key
177
+
178
+
179
+ def _save_vault_credentials_to_k8s(ctx: ExecutionContext, vault_ns: str, root_token: str, unseal_key: str) -> None:
180
+ """Salva credenciais do Vault em secret K8s."""
181
+ typer.echo("Salvando credenciais do Vault em secret K8s...")
182
+
183
+ # Codifica em base64
184
+ token_b64 = base64.b64encode(root_token.encode()).decode()
185
+ key_b64 = base64.b64encode(unseal_key.encode()).decode()
186
+
187
+ secret_yaml = f"""apiVersion: v1
188
+ kind: Secret
189
+ metadata:
190
+ name: vault-init-credentials
191
+ namespace: {vault_ns}
192
+ type: Opaque
193
+ data:
194
+ root-token: {token_b64}
195
+ unseal-key: {key_b64}
196
+ """
197
+
198
+ secret_path = Path("/tmp/raijin-vault-credentials.yaml")
199
+ write_file(secret_path, secret_yaml, ctx)
200
+
201
+ run_cmd(
202
+ ["kubectl", "apply", "-f", str(secret_path)],
203
+ ctx,
204
+ )
205
+
206
+ typer.secho("✓ Credenciais salvas em secret vault-init-credentials.", fg=typer.colors.GREEN)
185
207
 
186
208
 
187
- def _unseal_vault(ctx: ExecutionContext, vault_ns: str, unseal_keys: list[str]) -> None:
188
- """Destrava o Vault usando as unseal keys."""
209
+ def _unseal_vault(ctx: ExecutionContext, vault_ns: str, unseal_key: str) -> None:
210
+ """Destrava o Vault usando a unseal key."""
189
211
  typer.echo("\nDesbloqueando Vault...")
190
212
 
191
- # Precisa de 3 keys das 5 geradas (threshold padrão)
192
- for i in range(3):
193
- run_cmd(
194
- ["kubectl", "-n", vault_ns, "exec", "vault-0", "--", "vault", "operator", "unseal", unseal_keys[i]],
195
- ctx,
196
- )
213
+ run_cmd(
214
+ ["kubectl", "-n", vault_ns, "exec", "vault-0", "--", "vault", "operator", "unseal", unseal_key],
215
+ ctx,
216
+ )
197
217
 
198
218
  typer.secho("✓ Vault desbloqueado.", fg=typer.colors.GREEN)
199
219
 
@@ -279,23 +299,21 @@ def _create_secretstore_example(ctx: ExecutionContext, vault_ns: str, eso_ns: st
279
299
  """Cria exemplo de ClusterSecretStore e ExternalSecret."""
280
300
  typer.echo("\nCriando exemplo de ClusterSecretStore...")
281
301
 
282
- secretstore_yaml = f"""apiVersion: external-secrets.io/v1beta1
302
+ secretstore_yaml = f"""apiVersion: external-secrets.io/v1
283
303
  kind: ClusterSecretStore
284
304
  metadata:
285
305
  name: vault-backend
286
306
  spec:
287
307
  provider:
288
308
  vault:
289
- server: "http://vault.{vault_ns}.svc.cluster.local:8200"
309
+ server: "http://vault.{vault_ns}.svc:8200"
290
310
  path: "secret"
291
311
  version: "v2"
292
312
  auth:
293
- kubernetes:
294
- mountPath: "kubernetes"
295
- role: "eso-role"
296
- serviceAccountRef:
297
- name: "external-secrets"
298
- namespace: "{eso_ns}"
313
+ tokenSecretRef:
314
+ namespace: "{vault_ns}"
315
+ name: "vault-init-credentials"
316
+ key: "root-token"
299
317
  """
300
318
 
301
319
  secretstore_path = Path("/tmp/raijin-vault-secretstore.yaml")
@@ -327,7 +345,7 @@ def _create_example_secret(ctx: ExecutionContext, vault_ns: str, root_token: str
327
345
  typer.secho("✓ Secret 'secret/example' criado no Vault.", fg=typer.colors.GREEN)
328
346
 
329
347
  # Cria ExternalSecret de exemplo
330
- external_secret_yaml = """apiVersion: external-secrets.io/v1beta1
348
+ external_secret_yaml = """apiVersion: external-secrets.io/v1
331
349
  kind: ExternalSecret
332
350
  metadata:
333
351
  name: example-secret
@@ -396,7 +414,7 @@ def run(ctx: ExecutionContext) -> None:
396
414
  )
397
415
  node_ip = result.stdout.strip() if result.returncode == 0 else "192.168.1.81"
398
416
 
399
- minio_host = typer.prompt("MinIO host", default=f"{node_ip}:30900")
417
+ minio_host = typer.prompt("MinIO host (interno)", default="minio.minio.svc:9000")
400
418
  access_key, secret_key = _get_minio_credentials(ctx)
401
419
 
402
420
  # ========== HashiCorp Vault ==========
@@ -410,16 +428,8 @@ def run(ctx: ExecutionContext) -> None:
410
428
  if cleanup:
411
429
  _uninstall_vault(ctx, vault_ns)
412
430
 
413
- # Cria bucket no MinIO para Vault storage
414
- typer.echo("\nCriando bucket 'vault-storage' no MinIO...")
415
- run_cmd(
416
- [
417
- "mc", "mb", "--ignore-existing",
418
- f"minio/vault-storage"
419
- ],
420
- ctx,
421
- check=False,
422
- )
431
+ # Credenciais são obtidas automaticamente via get_or_create_minio_user
432
+ # que já cria o bucket 'vault-storage' e o usuário 'vault-user'
423
433
 
424
434
  vault_values_yaml = f"""server:
425
435
  ha:
@@ -494,15 +504,14 @@ injector:
494
504
  if not ctx.dry_run:
495
505
  _wait_for_pods_ready(ctx, vault_ns, "app.kubernetes.io/name=vault", timeout=180)
496
506
 
497
- # Inicializa Vault
498
- root_token, unseal_keys = _initialize_vault(ctx, vault_ns, node_ip)
507
+ # Inicializa Vault (retorna root_token e unseal_key)
508
+ root_token, unseal_key = _initialize_vault(ctx, vault_ns, node_ip)
499
509
 
500
510
  # Destrava Vault
501
- _unseal_vault(ctx, vault_ns, unseal_keys)
511
+ _unseal_vault(ctx, vault_ns, unseal_key)
502
512
 
503
513
  # Configura Vault
504
514
  _enable_kv_secrets(ctx, vault_ns, root_token)
505
- _configure_kubernetes_auth(ctx, vault_ns, root_token)
506
515
 
507
516
  # ========== External Secrets Operator ==========
508
517
  typer.secho("\n== External Secrets Operator ==", fg=typer.colors.CYAN, bold=True)
@@ -570,8 +579,7 @@ resources:
570
579
  if not ctx.dry_run:
571
580
  _wait_for_pods_ready(ctx, eso_ns, "app.kubernetes.io/name=external-secrets", timeout=120)
572
581
 
573
- # Configura integração Vault + ESO
574
- _create_eso_policy_and_role(ctx, vault_ns, root_token, eso_ns)
582
+ # Cria ClusterSecretStore (usa tokenSecretRef, não precisa de Kubernetes auth)
575
583
  _create_secretstore_example(ctx, vault_ns, eso_ns, node_ip)
576
584
  _create_example_secret(ctx, vault_ns, root_token)
577
585
 
@@ -587,7 +595,7 @@ resources:
587
595
 
588
596
  typer.echo("\n2. Criar ExternalSecret:")
589
597
  typer.echo(" kubectl apply -f - <<EOF")
590
- typer.echo(" apiVersion: external-secrets.io/v1beta1")
598
+ typer.echo(" apiVersion: external-secrets.io/v1")
591
599
  typer.echo(" kind: ExternalSecret")
592
600
  typer.echo(" metadata:")
593
601
  typer.echo(" name: myapp-secret")
@@ -607,8 +615,14 @@ resources:
607
615
  typer.echo("\n3. Secret será sincronizado automaticamente!")
608
616
  typer.echo(" kubectl get secret myapp-secret -o yaml")
609
617
 
618
+ typer.secho("\n=== Recuperar Credenciais ===", fg=typer.colors.CYAN)
619
+ typer.echo("Via arquivo local:")
620
+ typer.echo(" cat /etc/vault/keys.json")
621
+ typer.echo("\nVia Kubernetes Secret:")
622
+ typer.echo(f" kubectl -n {vault_ns} get secret vault-init-credentials -o jsonpath='{{.data.root-token}}' | base64 -d")
623
+ typer.echo(f" kubectl -n {vault_ns} get secret vault-init-credentials -o jsonpath='{{.data.unseal-key}}' | base64 -d")
624
+
610
625
  typer.secho("\n⚠️ IMPORTANTE:", fg=typer.colors.YELLOW, bold=True)
611
- typer.echo(f"- Root token e unseal keys salvos em: /etc/vault/keys.json")
612
- typer.echo("- Faça backup dessas keys em local seguro!")
613
- typer.echo("- Após reboot do Vault, use: kubectl -n vault exec vault-0 -- vault operator unseal")
626
+ typer.echo("- Faça backup das credenciais em local seguro!")
627
+ typer.echo(f"- Após reboot do Vault, use: kubectl -n {vault_ns} exec vault-0 -- vault operator unseal <unseal-key>")
614
628
 
@@ -1,10 +1,46 @@
1
1
  """Backup e restore com Velero (production-ready)."""
2
2
 
3
3
  import time
4
+ from pathlib import Path
4
5
 
5
6
  import typer
6
7
 
7
8
  from raijin_server.utils import ExecutionContext, ensure_tool, require_root, run_cmd
9
+ from raijin_server.minio_utils import get_or_create_minio_user
10
+
11
+
12
+ def _create_velero_credentials_file(ctx: ExecutionContext) -> str:
13
+ """Cria arquivo de credenciais para Velero com usuário MinIO dedicado.
14
+
15
+ Returns:
16
+ Caminho para o arquivo de credenciais
17
+ """
18
+ typer.echo("\nConfigurando credenciais MinIO para Velero...")
19
+
20
+ # Cria usuário MinIO específico para Velero
21
+ access_key, secret_key = get_or_create_minio_user(
22
+ ctx=ctx,
23
+ app_name="velero",
24
+ buckets=["velero-backups"],
25
+ namespace="velero",
26
+ )
27
+
28
+ # Cria arquivo de credenciais no formato esperado pelo Velero
29
+ credentials_path = Path("/etc/velero/credentials")
30
+ credentials_path.parent.mkdir(parents=True, exist_ok=True)
31
+
32
+ credentials_content = f"""[default]
33
+ aws_access_key_id = {access_key}
34
+ aws_secret_access_key = {secret_key}
35
+ """
36
+
37
+ if not ctx.dry_run:
38
+ credentials_path.write_text(credentials_content)
39
+ # Protege o arquivo
40
+ credentials_path.chmod(0o600)
41
+ typer.secho(f" ✓ Credenciais salvas em {credentials_path}", fg=typer.colors.GREEN)
42
+
43
+ return str(credentials_path)
8
44
 
9
45
 
10
46
  def _check_existing_velero(ctx: ExecutionContext) -> bool:
@@ -91,8 +127,19 @@ def run(ctx: ExecutionContext) -> None:
91
127
  provider = typer.prompt("Provider (aws, azure, gcp)", default="aws")
92
128
  bucket = typer.prompt("Bucket para backups", default="velero-backups")
93
129
  region = typer.prompt("Region", default="us-east-1")
94
- s3_url = typer.prompt("S3 URL (para MinIO usar http://minio.minio.svc:9000)", default="https://s3.amazonaws.com")
95
- secret_file = typer.prompt("Arquivo de credenciais (secret-file)", default="/etc/velero/credentials")
130
+ s3_url = typer.prompt("S3 URL (para MinIO usar http://minio.minio.svc:9000)", default="http://minio.minio.svc:9000")
131
+
132
+ # Cria credenciais automaticamente usando usuário MinIO dedicado
133
+ use_auto_credentials = typer.confirm(
134
+ "Criar credenciais MinIO automaticamente (usuário dedicado)?",
135
+ default=True,
136
+ )
137
+
138
+ if use_auto_credentials:
139
+ secret_file = _create_velero_credentials_file(ctx)
140
+ else:
141
+ secret_file = typer.prompt("Arquivo de credenciais (secret-file)", default="/etc/velero/credentials")
142
+
96
143
  use_restic = typer.confirm("Habilitar Restic/Kopia para backups de PV?", default=True)
97
144
  schedule = typer.prompt("Schedule cron para backups (ex: '0 2 * * *')", default="0 2 * * *")
98
145
 
@@ -34,7 +34,7 @@ MODULE_DEPENDENCIES = {
34
34
  "kafka": ["kubernetes"],
35
35
  "observability_ingress": ["traefik", "prometheus", "grafana"],
36
36
  "observability_dashboards": ["prometheus", "grafana"],
37
- "apokolips_demo": ["kubernetes", "traefik"],
37
+
38
38
  }
39
39
 
40
40
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: raijin-server
3
- Version: 0.3.6
3
+ Version: 0.3.8
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,12 +1,12 @@
1
- raijin_server/__init__.py,sha256=DizNqR7krrm4UEAK6a2xeOG3wuV7xlSekBC-mCSHadw,94
2
- raijin_server/cli.py,sha256=74ZqEPhg9R9jxNFZRV37CHrwm-dBKmYdT_MxdK4FKKA,37585
1
+ raijin_server/__init__.py,sha256=IWpKGUd_KknUfa2XJ_Xu7M_xVWCdNyixW7AMO96xWkY,94
2
+ raijin_server/cli.py,sha256=WvZaPJ5AVjhzzs_jLLe2QGvVEH_VphRwnUkTMEgycbI,37320
3
3
  raijin_server/config.py,sha256=QNiEVvrbW56XgvNn5-h3bkJm46Xc8mjNqPbvixXD8N0,4829
4
- raijin_server/healthchecks.py,sha256=lzXdFw6S0hOYbUKbqksh4phb04lXgXdTspP1Dsz4dx8,15401
4
+ raijin_server/healthchecks.py,sha256=UHSRyeKTsCGeL_4dxDSGZ1t8164Q7wYTi1c3ZiU0cro,13536
5
+ raijin_server/minio_utils.py,sha256=NQxIGoVf4-eM8rNwEHdd4QFnEIh2OxY3DyOiFkznsYs,18299
5
6
  raijin_server/module_manager.py,sha256=Wmhj603CN0XGUVr7_Fo8CHzKd9yIbS9x5BJLqDj78kw,10259
6
7
  raijin_server/utils.py,sha256=9RnGnPoUTYOpMVRLNa4P4lIQrJNQLkSkPUxycZRGv78,20827
7
- raijin_server/validators.py,sha256=EATYPy2pllAb6IX4gUZKnELvospWwyGV3DHrzxb_RMg,11761
8
- raijin_server/modules/__init__.py,sha256=BCTLuNtmvn8IWqGNQZQBRokqAv-KwUZP4_kyxkyHyN4,896
9
- raijin_server/modules/apokolips_demo.py,sha256=8ltsXRbVDwlDwLMIvh02NG-FeAfBWw_v6lh7IGOyNqs,13725
8
+ raijin_server/validators.py,sha256=LvxAIq7F8CSIihdfCCDlDtVd6WPBBntiBHuD8fuM2kg,11713
9
+ raijin_server/modules/__init__.py,sha256=UOv7c7UpxZq-JRZM0i55LGfI3LyucZhTL4lypeHs2Jw,858
10
10
  raijin_server/modules/bootstrap.py,sha256=oVIGNRW_JbgY8zXNHGAIP0vGbbHNHyQexthxo5zhbcw,9762
11
11
  raijin_server/modules/calico.py,sha256=TTPF1bLFdAKb3IVOqFqRxNblULkRmMMRylsIBp4w8I8,6700
12
12
  raijin_server/modules/cert_manager.py,sha256=XkFlXJjiP4_9It_PJaFcVYMS-QKTzzFAt839QQ9qNsg,50223
@@ -14,7 +14,7 @@ raijin_server/modules/essentials.py,sha256=2xUXCyCQtFGd2DnCKV81N1R6bEJqH8zaet8mL
14
14
  raijin_server/modules/firewall.py,sha256=h6AISqiZeTinVT7BjmQIS872qRAFZJLg7meqlth3cfw,757
15
15
  raijin_server/modules/full_install.py,sha256=M4SV4OA-r41xhpMmZQvUieRugiq0faLa4f0N499ksd4,15035
16
16
  raijin_server/modules/grafana.py,sha256=8YbKG-UL19lwTkH1-ZxpUetOZd-CLI4_kPsuZblNaWI,18080
17
- raijin_server/modules/harbor.py,sha256=ix0qnu_FugzbFnnTRZ3Dyy6UmKdm3nD0ubZ4SZYHkWE,21940
17
+ raijin_server/modules/harbor.py,sha256=hFD8x5K4m0unzVBiDOT_yBzDDfbuPW_2SNVrjSCXhGc,21324
18
18
  raijin_server/modules/hardening.py,sha256=4hz3ifkMhPlXa2n7gPxN0gitQgzALZ-073vuU3LM4RI,1616
19
19
  raijin_server/modules/harness.py,sha256=uWTxTVJlY_VB6xi4ftMtTSaIb96HA8WJQS-RbyxU45M,5391
20
20
  raijin_server/modules/internal_dns.py,sha256=Jynngq0TEEUo3jkAR4m8F1ihF10rkQuKHVP-gZYyDFY,15191
@@ -28,10 +28,10 @@ raijin_server/modules/minio.py,sha256=ZoxugJvvuGLzViDfEzrVCRZUevoiFwcEy0PNyn0My4
28
28
  raijin_server/modules/network.py,sha256=QRlYdcryCCPAWG3QQ_W7ld9gJgETI7H8gwntOU7UqFE,4818
29
29
  raijin_server/modules/prometheus.py,sha256=lyhaqLIfMl0GtQ2b2Hre7_A47HrHBB5gspmnWtwXZ4Y,21880
30
30
  raijin_server/modules/sanitize.py,sha256=_RnWn1DUuNrzx3NnKEbMvf5iicgjiN_ubwT59e0rYWY,6040
31
- raijin_server/modules/secrets.py,sha256=C5k10ODo6Ai_e6Ei-JiWTOa-cOh-5d2__PhTQA0UmjI,19452
31
+ raijin_server/modules/secrets.py,sha256=3QzvFd4qH1hyOtbu3Cxyu4JUaYgWssxI-oZ4gS3HIP4,19924
32
32
  raijin_server/modules/ssh_hardening.py,sha256=Zd0dlylUBr01SkrI1CS05-0DB9xIto5rWH1bUVs80ow,5422
33
33
  raijin_server/modules/traefik.py,sha256=omziywss4o-8t64Kj-upLqbXdFYm2JwqOoOukDUmqxY,5008
34
- raijin_server/modules/velero.py,sha256=yDtqd6yUu0L5wzLCjYXqvvxB_RyaAoZtntb6HoHVAOo,5642
34
+ raijin_server/modules/velero.py,sha256=nH7WI145OOK-DZo_ZjNegEnwkppi8h98DeQaB5A_kVg,7161
35
35
  raijin_server/modules/vpn.py,sha256=qWyROiHx2-FzMqhfpmzslrdfRBTewd53ylUq90wR7SQ,9149
36
36
  raijin_server/modules/vpn_client.py,sha256=SjWzSQKLSJCpjz7Y1i1dFaNfPOVIQXFwgD9uM3GYaIY,30035
37
37
  raijin_server/scripts/__init__.py,sha256=deduGfHf8BMVWred4ux5LfBDT2NJ5XYeJAt2sDEU4qs,53
@@ -39,9 +39,9 @@ raijin_server/scripts/checklist.sh,sha256=j6E0Kmk1EfjLvKK1VpCqzXJAXI_7Bm67LK4ndy
39
39
  raijin_server/scripts/install.sh,sha256=Y1ickbQ4siQ0NIPs6UgrqUr8WWy7U0LHmaTQbEgavoI,3949
40
40
  raijin_server/scripts/log_size_metric.sh,sha256=Iv4SsX8AuCYRou-klYn32mX41xB6j0xJGLBO6riw4rU,1208
41
41
  raijin_server/scripts/pre-deploy-check.sh,sha256=XqMo7IMIpwUHF17YEmU0-cVmTDMoCGMBFnmS39FidI4,4912
42
- raijin_server-0.3.6.dist-info/licenses/LICENSE,sha256=kJsMCjOiRZE0AQNtxWqBa32z9kMAaF4EUxyHj3hKaJo,1105
43
- raijin_server-0.3.6.dist-info/METADATA,sha256=egpj4eEFQ3JJAA-bT3Iz5ebOc57e5JpyuQ2a8-ruAD4,8829
44
- raijin_server-0.3.6.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
45
- raijin_server-0.3.6.dist-info/entry_points.txt,sha256=3ZvxDX4pvcjkIRsXAJ69wIfVmKa78LKo-C3QhqN2KVM,56
46
- raijin_server-0.3.6.dist-info/top_level.txt,sha256=Yz1xneCRtsZOzbPIcTAcrSxd-1p80pohMXYAZ74dpok,14
47
- raijin_server-0.3.6.dist-info/RECORD,,
42
+ raijin_server-0.3.8.dist-info/licenses/LICENSE,sha256=kJsMCjOiRZE0AQNtxWqBa32z9kMAaF4EUxyHj3hKaJo,1105
43
+ raijin_server-0.3.8.dist-info/METADATA,sha256=5QdtvUtfp7Qq_OaevRKA2WoU7i6NViAOG58h3wI5vmw,8829
44
+ raijin_server-0.3.8.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
45
+ raijin_server-0.3.8.dist-info/entry_points.txt,sha256=3ZvxDX4pvcjkIRsXAJ69wIfVmKa78LKo-C3QhqN2KVM,56
46
+ raijin_server-0.3.8.dist-info/top_level.txt,sha256=Yz1xneCRtsZOzbPIcTAcrSxd-1p80pohMXYAZ74dpok,14
47
+ raijin_server-0.3.8.dist-info/RECORD,,