raijin-server 0.2.12__py3-none-any.whl → 0.2.14__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.
raijin_server/__init__.py CHANGED
@@ -1,5 +1,5 @@
1
1
  """Pacote principal do CLI Raijin Server."""
2
2
 
3
- __version__ = "0.2.12"
3
+ __version__ = "0.2.14"
4
4
 
5
5
  __all__ = ["__version__"]
@@ -1,19 +1,98 @@
1
1
  """Provisiona MetalLB (L2) com pool de IPs para LoadBalancer em ambientes bare metal."""
2
2
 
3
+ import socket
4
+
3
5
  import typer
4
6
 
5
7
  from raijin_server.utils import ExecutionContext, helm_upgrade_install, require_root, run_cmd
6
8
 
7
9
 
10
+ def _detect_node_name(ctx: ExecutionContext) -> str:
11
+ """Tenta obter o nome do node via kubectl; fallback para hostname local."""
12
+
13
+ result = run_cmd(
14
+ [
15
+ "kubectl",
16
+ "get",
17
+ "nodes",
18
+ "-o",
19
+ "jsonpath={.items[0].metadata.name}",
20
+ ],
21
+ ctx,
22
+ check=False,
23
+ )
24
+ if result.returncode == 0:
25
+ node_name = (result.stdout or "").strip()
26
+ if node_name:
27
+ return node_name
28
+ return socket.gethostname()
29
+
30
+
31
+ def _rollout_wait(kind: str, name: str, ctx: ExecutionContext) -> None:
32
+ run_cmd([
33
+ "kubectl",
34
+ "-n",
35
+ "metallb-system",
36
+ "rollout",
37
+ "status",
38
+ f"{kind}/{name}",
39
+ "--timeout",
40
+ "180s",
41
+ ], ctx, check=False)
42
+
43
+
44
+ def _wait_webhook(ctx: ExecutionContext) -> None:
45
+ # Descobre o nome do deployment do webhook (varia conforme chart), entao aguarda disponibilidade
46
+ result = run_cmd(
47
+ [
48
+ "kubectl",
49
+ "-n",
50
+ "metallb-system",
51
+ "get",
52
+ "deploy",
53
+ "-l",
54
+ "app.kubernetes.io/component=webhook",
55
+ "-o",
56
+ "jsonpath={.items[0].metadata.name}",
57
+ ],
58
+ ctx,
59
+ check=False,
60
+ )
61
+ if result.returncode == 0:
62
+ name = (result.stdout or "").strip()
63
+ if name:
64
+ _rollout_wait("deployment", name, ctx)
65
+
66
+
8
67
  def run(ctx: ExecutionContext) -> None:
9
68
  require_root(ctx)
10
69
  typer.echo("Instalando MetalLB via Helm...")
11
70
 
12
71
  pool = typer.prompt(
13
72
  "Pool de IPs (range ou CIDR) para services LoadBalancer",
14
- default="192.168.1.240-192.168.1.250",
73
+ default="192.168.1.100-192.168.1.250",
15
74
  )
16
75
 
76
+ node_name = _detect_node_name(ctx)
77
+
78
+ values = [
79
+ # Permite agendar em control-plane de cluster single-node
80
+ "controller.tolerations[0].key=node-role.kubernetes.io/control-plane",
81
+ "controller.tolerations[0].operator=Exists",
82
+ "controller.tolerations[0].effect=NoSchedule",
83
+ "controller.tolerations[1].key=node-role.kubernetes.io/master",
84
+ "controller.tolerations[1].operator=Exists",
85
+ "controller.tolerations[1].effect=NoSchedule",
86
+ "speaker.tolerations[0].key=node-role.kubernetes.io/control-plane",
87
+ "speaker.tolerations[0].operator=Exists",
88
+ "speaker.tolerations[0].effect=NoSchedule",
89
+ "speaker.tolerations[1].key=node-role.kubernetes.io/master",
90
+ "speaker.tolerations[1].operator=Exists",
91
+ "speaker.tolerations[1].effect=NoSchedule",
92
+ f"controller.nodeSelector.kubernetes.io/hostname={node_name}",
93
+ f"speaker.nodeSelector.kubernetes.io/hostname={node_name}",
94
+ ]
95
+
17
96
  # Instala control-plane + speaker
18
97
  helm_upgrade_install(
19
98
  release="metallb",
@@ -22,38 +101,14 @@ def run(ctx: ExecutionContext) -> None:
22
101
  repo="metallb",
23
102
  repo_url="https://metallb.github.io/metallb",
24
103
  ctx=ctx,
25
- values=[],
104
+ values=values,
26
105
  )
27
106
 
28
107
  # Espera recursos principais ficarem prontos
29
- run_cmd(
30
- [
31
- "kubectl",
32
- "-n",
33
- "metallb-system",
34
- "rollout",
35
- "status",
36
- "deployment/controller",
37
- "--timeout",
38
- "180s",
39
- ],
40
- ctx,
41
- check=False,
42
- )
43
- run_cmd(
44
- [
45
- "kubectl",
46
- "-n",
47
- "metallb-system",
48
- "rollout",
49
- "status",
50
- "daemonset/speaker",
51
- "--timeout",
52
- "180s",
53
- ],
54
- ctx,
55
- check=False,
56
- )
108
+ _rollout_wait("deployment", "controller", ctx)
109
+ _rollout_wait("daemonset", "speaker", ctx)
110
+ _wait_webhook(ctx)
111
+ run_cmd(["sleep", "5"], ctx, check=False) # pequeno buffer para webhook responder
57
112
 
58
113
  # Aplica IPAddressPool + L2Advertisement
59
114
  manifest = f"""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: raijin-server
3
- Version: 0.2.12
3
+ Version: 0.2.14
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,4 +1,4 @@
1
- raijin_server/__init__.py,sha256=8EQqPmA-imVG2M15r3TTUVfAWVTZtkqrtafb-1P_NAE,95
1
+ raijin_server/__init__.py,sha256=3EUt1oNtBla5mttRpDSYI9bRLuW7npk_tyg2AwlEMuQ,95
2
2
  raijin_server/cli.py,sha256=71nn7QN0f3MJkXcHr0STXmxljr-CaPibzOoiItbOT88,28571
3
3
  raijin_server/config.py,sha256=QNiEVvrbW56XgvNn5-h3bkJm46Xc8mjNqPbvixXD8N0,4829
4
4
  raijin_server/healthchecks.py,sha256=lzXdFw6S0hOYbUKbqksh4phb04lXgXdTspP1Dsz4dx8,15401
@@ -20,7 +20,7 @@ raijin_server/modules/kafka.py,sha256=bp8k_IhuAIO6dL0IpK1UxxLZoGih6nJp0ZnzwmiZEj
20
20
  raijin_server/modules/kong.py,sha256=2EZKYBmBhm_7Nduw9PWrvrekp0VCxQbc2gElpAJqKfg,491
21
21
  raijin_server/modules/kubernetes.py,sha256=waSf2cCVnLicN5o3M47MzMzmHHtvKeFXm1__8ynQzA0,11871
22
22
  raijin_server/modules/loki.py,sha256=erwFfSiSFOv-Ul3nFdrI2RElPYuqqBPBBa_MJAwyLys,676
23
- raijin_server/modules/metallb.py,sha256=Lu25tU1O00ObqNeIGrpMJhSxPOEeCN4tI9z18Xqqtpk,1918
23
+ raijin_server/modules/metallb.py,sha256=tT6Sm5swozguscmFqP4m5ODsr9qxZzZ1mxMOla_Vnik,4003
24
24
  raijin_server/modules/minio.py,sha256=BVvsEaJlJUV92_ep7pKsBhSYPjWZrDOB3J6XAWYAHYg,486
25
25
  raijin_server/modules/network.py,sha256=QRlYdcryCCPAWG3QQ_W7ld9gJgETI7H8gwntOU7UqFE,4818
26
26
  raijin_server/modules/observability_dashboards.py,sha256=fVz0WEOQrUTF5rJ__Nu_onyBuwL_exFmysWMmg8AE9w,7319
@@ -37,9 +37,9 @@ raijin_server/scripts/checklist.sh,sha256=j6E0Kmk1EfjLvKK1VpCqzXJAXI_7Bm67LK4ndy
37
37
  raijin_server/scripts/install.sh,sha256=Y1ickbQ4siQ0NIPs6UgrqUr8WWy7U0LHmaTQbEgavoI,3949
38
38
  raijin_server/scripts/log_size_metric.sh,sha256=Iv4SsX8AuCYRou-klYn32mX41xB6j0xJGLBO6riw4rU,1208
39
39
  raijin_server/scripts/pre-deploy-check.sh,sha256=XqMo7IMIpwUHF17YEmU0-cVmTDMoCGMBFnmS39FidI4,4912
40
- raijin_server-0.2.12.dist-info/licenses/LICENSE,sha256=kJsMCjOiRZE0AQNtxWqBa32z9kMAaF4EUxyHj3hKaJo,1105
41
- raijin_server-0.2.12.dist-info/METADATA,sha256=CcMKtrz7OPs4ThoJ7d-ivF4RYeZ_bekHlwi8XrzOnDw,22476
42
- raijin_server-0.2.12.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
43
- raijin_server-0.2.12.dist-info/entry_points.txt,sha256=3ZvxDX4pvcjkIRsXAJ69wIfVmKa78LKo-C3QhqN2KVM,56
44
- raijin_server-0.2.12.dist-info/top_level.txt,sha256=Yz1xneCRtsZOzbPIcTAcrSxd-1p80pohMXYAZ74dpok,14
45
- raijin_server-0.2.12.dist-info/RECORD,,
40
+ raijin_server-0.2.14.dist-info/licenses/LICENSE,sha256=kJsMCjOiRZE0AQNtxWqBa32z9kMAaF4EUxyHj3hKaJo,1105
41
+ raijin_server-0.2.14.dist-info/METADATA,sha256=_KmOFymSH4ZMMUuqBvjmVcdQaU_EKAAu8pYAsN-3Yt8,22476
42
+ raijin_server-0.2.14.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
43
+ raijin_server-0.2.14.dist-info/entry_points.txt,sha256=3ZvxDX4pvcjkIRsXAJ69wIfVmKa78LKo-C3QhqN2KVM,56
44
+ raijin_server-0.2.14.dist-info/top_level.txt,sha256=Yz1xneCRtsZOzbPIcTAcrSxd-1p80pohMXYAZ74dpok,14
45
+ raijin_server-0.2.14.dist-info/RECORD,,