Unverified Commit 296c7bb2 authored by Lemon-miaow's avatar Lemon-miaow
Browse files

feat: manage distributed node operations from Owner panel

parent c8957cf1
Loading
Loading
Loading
Loading
+5 −0
Changes for cmd/felis/api.go: 5 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import (
	"felis.lolicon.best/internal/mail"
	"felis.lolicon.best/internal/metrics"
	"felis.lolicon.best/internal/naming"
	"felis.lolicon.best/internal/nodecontrol"
	"felis.lolicon.best/internal/panel"
	"felis.lolicon.best/internal/passkey"
	"felis.lolicon.best/internal/placement"
@@ -549,6 +550,10 @@ func cmdAPI(args []string, stdout, stderr io.Writer) int {
		a.Distribution = distribution
		go reconcileDistribution(ctx, distribution, stderr)
	}
	if socket := os.Getenv("FELIS_NODE_CONTROL_SOCKET"); socket != "" {
		a.NodeControl = nodecontrol.NewClient(socket)
		cluster.NodeMaintenanceGuard = api.NodeMaintenanceGuard(a.NodeControl)
	}
	servers := []*http.Server{internalSrv, externalSrv}
	if httpsSrv != nil {
		servers = append(servers, httpsSrv)
+8 −0
Changes for cmd/felis/manifests.go: 8 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@ import (
	"fmt"
	"io"
	"net"
	"path/filepath"
	"strings"

	"felis.lolicon.best/internal/platform"
@@ -48,6 +49,8 @@ func cmdManifests(args []string, stdout, stderr io.Writer) int {
	probe := fs.String("egress-probe", "", "reachable controller host:port denied to game Pods")
	var registryNodes multiFlag
	fs.Var(&registryNodes, "registry-node-cidr", "exact node pull source for the registry (repeatable)")
	socket := fs.String("node-control-socket", "", "host node-control Unix socket (optional, API only)")
	nodeControlNode := fs.String("node-control-node", "", "controller hostname hosting the socket")
	controlNS := fs.String("control-namespace", platform.DefaultControlNamespace, "namespace the control plane (api/operator/reaper) runs in")
	minecraftNS := fs.String("minecraft-namespace", platform.DefaultMinecraftNamespace, "namespace MinecraftServer workloads run in")
	buildNS := fs.String("build-namespace", platform.DefaultBuildNamespace, "namespace image-build Jobs run in")
@@ -181,7 +184,12 @@ func cmdManifests(args []string, stdout, stderr io.Writer) int {
		}
	}

	if *socket != "" && (!filepath.IsAbs(*socket) || *nodeControlNode == "") {
		fmt.Fprintln(stderr, "node-control requires an absolute socket and its controller hostname")
		return 2
	}
	params := platform.Params{
		NodeControlSocket: *socket, NodeControlNode: *nodeControlNode,
		Distributed: *distributed, ControllerNode: *controller, EgressProbe: *probe, RegistryNodeCIDRs: registryNodes,
		ControlNamespace:   *controlNS,
		MinecraftNamespace: *minecraftNS,
+1 −1
Changes for cmd/felis/node_approve.go: 1 added line, 1 removed line.
Original line number Diff line number Diff line
@@ -173,7 +173,7 @@ func approveNode(ctx context.Context, cl client.Client, cs kubernetes.Interface,
		"proof=$(mktemp); trap 'rm -f \"$proof\"' EXIT\n" +
		"if /usr/local/bin/k3s kubectl --kubeconfig \"$kubeconfig\" label node " + shellQuote(name) + " felis.node-restriction.kubernetes.io/probe=controller --overwrite 2>\"$proof\"; then echo 'NodeRestriction failed' >&2;exit 1;fi\ngrep -qi forbidden \"$proof\"\n" +
		"image=" + shellQuote(image) + "\nif [ -n \"$(/usr/local/bin/k3s crictl images -q \"$image\")\" ]; then /usr/local/bin/k3s crictl rmi \"$image\" >/dev/null; fi\ntest -z \"$(/usr/local/bin/k3s crictl images -q \"$image\")\"\n/usr/local/bin/k3s crictl pull \"$image\" >/dev/null\n"
	cmd := exec.CommandContext(ctx, "ssh", "--", remote, "if [ \"$(id -u)\" = 0 ]; then bash -s; else sudo -n bash -s; fi")
	cmd := exec.CommandContext(ctx, "ssh", "-o", "BatchMode=yes", "-o", "StrictHostKeyChecking=yes", "-o", "ConnectTimeout=10", "--", remote, "if [ \"$(id -u)\" = 0 ]; then bash -s; else sudo -n bash -s; fi")
	cmd.Stdin = strings.NewReader(script)
	cmd.Stdout = stdout
	cmd.Stderr = stdout
+581 −0

File added.

Preview size limit exceeded, changes collapsed.

+40 −0

File added.

Preview size limit exceeded, changes collapsed.

Loading