raijin-server 0.2.12__tar.gz → 0.2.14__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.
- {raijin_server-0.2.12/src/raijin_server.egg-info → raijin_server-0.2.14}/PKG-INFO +1 -1
- {raijin_server-0.2.12 → raijin_server-0.2.14}/setup.cfg +1 -1
- raijin_server-0.2.14/src/raijin_server/__init__.py +5 -0
- raijin_server-0.2.14/src/raijin_server/modules/metallb.py +140 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14/src/raijin_server.egg-info}/PKG-INFO +1 -1
- raijin_server-0.2.12/src/raijin_server/__init__.py +0 -5
- raijin_server-0.2.12/src/raijin_server/modules/metallb.py +0 -85
- {raijin_server-0.2.12 → raijin_server-0.2.14}/LICENSE +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/README.md +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/pyproject.toml +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server/cli.py +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server/config.py +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server/healthchecks.py +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server/modules/__init__.py +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server/modules/apokolips_demo.py +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server/modules/bootstrap.py +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server/modules/calico.py +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server/modules/cert_manager.py +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server/modules/essentials.py +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server/modules/firewall.py +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server/modules/full_install.py +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server/modules/grafana.py +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server/modules/hardening.py +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server/modules/harness.py +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server/modules/istio.py +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server/modules/kafka.py +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server/modules/kong.py +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server/modules/kubernetes.py +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server/modules/loki.py +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server/modules/minio.py +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server/modules/network.py +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server/modules/observability_dashboards.py +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server/modules/observability_ingress.py +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server/modules/prometheus.py +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server/modules/sanitize.py +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server/modules/secrets.py +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server/modules/ssh_hardening.py +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server/modules/traefik.py +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server/modules/velero.py +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server/modules/vpn.py +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server/scripts/__init__.py +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server/scripts/checklist.sh +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server/scripts/install.sh +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server/scripts/log_size_metric.sh +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server/scripts/pre-deploy-check.sh +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server/utils.py +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server/validators.py +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server.egg-info/SOURCES.txt +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server.egg-info/dependency_links.txt +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server.egg-info/entry_points.txt +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server.egg-info/requires.txt +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server.egg-info/top_level.txt +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/tests/test_full_install_sequence.py +0 -0
- {raijin_server-0.2.12 → raijin_server-0.2.14}/tests/test_registry.py +0 -0
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"""Provisiona MetalLB (L2) com pool de IPs para LoadBalancer em ambientes bare metal."""
|
|
2
|
+
|
|
3
|
+
import socket
|
|
4
|
+
|
|
5
|
+
import typer
|
|
6
|
+
|
|
7
|
+
from raijin_server.utils import ExecutionContext, helm_upgrade_install, require_root, run_cmd
|
|
8
|
+
|
|
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
|
+
|
|
67
|
+
def run(ctx: ExecutionContext) -> None:
|
|
68
|
+
require_root(ctx)
|
|
69
|
+
typer.echo("Instalando MetalLB via Helm...")
|
|
70
|
+
|
|
71
|
+
pool = typer.prompt(
|
|
72
|
+
"Pool de IPs (range ou CIDR) para services LoadBalancer",
|
|
73
|
+
default="192.168.1.100-192.168.1.250",
|
|
74
|
+
)
|
|
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
|
+
|
|
96
|
+
# Instala control-plane + speaker
|
|
97
|
+
helm_upgrade_install(
|
|
98
|
+
release="metallb",
|
|
99
|
+
chart="metallb",
|
|
100
|
+
namespace="metallb-system",
|
|
101
|
+
repo="metallb",
|
|
102
|
+
repo_url="https://metallb.github.io/metallb",
|
|
103
|
+
ctx=ctx,
|
|
104
|
+
values=values,
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
# Espera recursos principais ficarem prontos
|
|
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
|
|
112
|
+
|
|
113
|
+
# Aplica IPAddressPool + L2Advertisement
|
|
114
|
+
manifest = f"""
|
|
115
|
+
apiVersion: metallb.io/v1beta1
|
|
116
|
+
kind: IPAddressPool
|
|
117
|
+
metadata:
|
|
118
|
+
name: raijin-pool
|
|
119
|
+
namespace: metallb-system
|
|
120
|
+
spec:
|
|
121
|
+
addresses:
|
|
122
|
+
- {pool}
|
|
123
|
+
---
|
|
124
|
+
apiVersion: metallb.io/v1beta1
|
|
125
|
+
kind: L2Advertisement
|
|
126
|
+
metadata:
|
|
127
|
+
name: raijin-l2
|
|
128
|
+
namespace: metallb-system
|
|
129
|
+
spec:
|
|
130
|
+
ipAddressPools:
|
|
131
|
+
- raijin-pool
|
|
132
|
+
"""
|
|
133
|
+
|
|
134
|
+
run_cmd(
|
|
135
|
+
f"echo '{manifest}' | kubectl apply -f -",
|
|
136
|
+
ctx,
|
|
137
|
+
use_shell=True,
|
|
138
|
+
)
|
|
139
|
+
|
|
140
|
+
typer.secho("\n✓ MetalLB aplicado. Services LoadBalancer usarao o pool informado.", fg=typer.colors.GREEN, bold=True)
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
"""Provisiona MetalLB (L2) com pool de IPs para LoadBalancer em ambientes bare metal."""
|
|
2
|
-
|
|
3
|
-
import typer
|
|
4
|
-
|
|
5
|
-
from raijin_server.utils import ExecutionContext, helm_upgrade_install, require_root, run_cmd
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
def run(ctx: ExecutionContext) -> None:
|
|
9
|
-
require_root(ctx)
|
|
10
|
-
typer.echo("Instalando MetalLB via Helm...")
|
|
11
|
-
|
|
12
|
-
pool = typer.prompt(
|
|
13
|
-
"Pool de IPs (range ou CIDR) para services LoadBalancer",
|
|
14
|
-
default="192.168.1.240-192.168.1.250",
|
|
15
|
-
)
|
|
16
|
-
|
|
17
|
-
# Instala control-plane + speaker
|
|
18
|
-
helm_upgrade_install(
|
|
19
|
-
release="metallb",
|
|
20
|
-
chart="metallb",
|
|
21
|
-
namespace="metallb-system",
|
|
22
|
-
repo="metallb",
|
|
23
|
-
repo_url="https://metallb.github.io/metallb",
|
|
24
|
-
ctx=ctx,
|
|
25
|
-
values=[],
|
|
26
|
-
)
|
|
27
|
-
|
|
28
|
-
# 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
|
-
)
|
|
57
|
-
|
|
58
|
-
# Aplica IPAddressPool + L2Advertisement
|
|
59
|
-
manifest = f"""
|
|
60
|
-
apiVersion: metallb.io/v1beta1
|
|
61
|
-
kind: IPAddressPool
|
|
62
|
-
metadata:
|
|
63
|
-
name: raijin-pool
|
|
64
|
-
namespace: metallb-system
|
|
65
|
-
spec:
|
|
66
|
-
addresses:
|
|
67
|
-
- {pool}
|
|
68
|
-
---
|
|
69
|
-
apiVersion: metallb.io/v1beta1
|
|
70
|
-
kind: L2Advertisement
|
|
71
|
-
metadata:
|
|
72
|
-
name: raijin-l2
|
|
73
|
-
namespace: metallb-system
|
|
74
|
-
spec:
|
|
75
|
-
ipAddressPools:
|
|
76
|
-
- raijin-pool
|
|
77
|
-
"""
|
|
78
|
-
|
|
79
|
-
run_cmd(
|
|
80
|
-
f"echo '{manifest}' | kubectl apply -f -",
|
|
81
|
-
ctx,
|
|
82
|
-
use_shell=True,
|
|
83
|
-
)
|
|
84
|
-
|
|
85
|
-
typer.secho("\n✓ MetalLB aplicado. Services LoadBalancer usarao o pool informado.", fg=typer.colors.GREEN, bold=True)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server/modules/observability_dashboards.py
RENAMED
|
File without changes
|
{raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server/modules/observability_ingress.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{raijin_server-0.2.12 → raijin_server-0.2.14}/src/raijin_server.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|