...
1 package staticpodscheduler
2
3 import (
4 "context"
5 "path/filepath"
6
7 "github.com/spf13/afero"
8
9 "edge-infra.dev/pkg/k8s/runtime/controller/reconcile"
10 v1ien "edge-infra.dev/pkg/sds/ien/k8s/apis/v1"
11 "edge-infra.dev/pkg/sds/ien/k8s/controllers/nodeagent/config"
12 "edge-infra.dev/pkg/sds/ien/k8s/controllers/nodeagent/plugins/staticpodscheduler/pkg/render"
13 )
14
15
16
17 var parameterMutations = []render.ParameterMutations{
18 render.SetKubeControlPlaneImages,
19 render.SetLANOutageSchedulerImage,
20 render.SetCPGuardianImage,
21 render.SetAdmissionWebhookName,
22 render.SetNodeName,
23 render.SetNodeRole,
24 render.SetAdmissionInitContainerImage,
25 render.SetControlPlanePromoterImage,
26 render.SetMacAddress,
27 render.SetThickPOS,
28 render.SetNodeIP,
29 render.SetDeviceAgentImage,
30 render.SetDeviceSystemLogLevel,
31 }
32
33 type Plugin struct{}
34
35
36
37 func (p Plugin) Reconcile(ctx context.Context, ienode *v1ien.IENode, cfg config.Config) (reconcile.Result, error) {
38 params := &render.Parameters{
39 IENode: ienode,
40 }
41 if err := params.Populate(ctx, params, cfg, parameterMutations...); err != nil {
42 return reconcile.ResultRequeue, err
43 }
44 if err := render.WriteTargets(cfg, params); err != nil {
45 return reconcile.ResultRequeue, err
46 }
47
48 if err := writeHelperScript(cfg.Fs()); err != nil {
49 return reconcile.ResultRequeue, err
50 }
51 return reconcile.ResultSuccess, nil
52 }
53
54
55
56 func writeHelperScript(fs afero.Fs) (err error) {
57 scriptDir := "/zynstra/config/scripts/"
58 scriptPath := filepath.Join(scriptDir, "ien-force-recover-etcd")
59 wrapperScriptContent := []byte(`#!/bin/bash
60 set -e
61 # Wrapper script around etcd manager recovery client
62 # Execs into etcd-manager static pod and calls binary
63
64 # check invoked as root
65 if [[ "$EUID" -ne 0 ]]; then
66 echo "[ERROR] This script must be run as root"
67 exit 1
68 fi
69
70 CONTAINER_ID=$(crictl ps --name ^etcd-manager$ --quiet | head -n 1)
71
72 if [ -z "$CONTAINER_ID" ]; then
73 echo "[ERROR] etcd-manager container not found"
74 exit 1
75 fi
76
77 crictl exec $CONTAINER_ID /usr/local/bin/ien-force-recover-etcd
78
79 if [[ "$1" == "-f" ]] || [[ "$1" == "--follow" ]]; then
80 echo -e "\nEtcd Manager Logs:\n"
81 crictl logs --follow --tail=5 --timestamps $CONTAINER_ID
82 fi
83 `)
84
85 if err := fs.MkdirAll(scriptDir, 0755); err != nil {
86 return err
87 }
88 return afero.WriteFile(fs, scriptPath, wrapperScriptContent, 0755)
89 }
90
View as plain text