github.com/caos/orbos@v1.5.14-0.20221103111702-e6cd0cea7ad4/internal/operator/nodeagent/dep/k8s/kubelet/dep.go (about) 1 package kubelet 2 3 import ( 4 "bytes" 5 "fmt" 6 "os" 7 "os/exec" 8 "strings" 9 10 "github.com/caos/orbos/internal/operator/common" 11 "github.com/caos/orbos/internal/operator/nodeagent" 12 "github.com/caos/orbos/internal/operator/nodeagent/dep" 13 "github.com/caos/orbos/internal/operator/nodeagent/dep/k8s" 14 "github.com/caos/orbos/internal/operator/nodeagent/dep/middleware" 15 "github.com/caos/orbos/internal/operator/nodeagent/dep/selinux" 16 "github.com/caos/orbos/mntr" 17 ) 18 19 type Installer interface { 20 isKubelet() 21 nodeagent.Installer 22 } 23 24 type kubeletDep struct { 25 os dep.OperatingSystem 26 monitor mntr.Monitor 27 common *k8s.Common 28 systemd *dep.SystemD 29 } 30 31 func New(monitor mntr.Monitor, os dep.OperatingSystem, manager *dep.PackageManager, systemd *dep.SystemD) Installer { 32 return &kubeletDep{os, monitor, k8s.New(os, manager, "kubelet"), systemd} 33 } 34 35 func (kubeletDep) isKubelet() {} 36 37 func (kubeletDep) Is(other nodeagent.Installer) bool { 38 _, ok := middleware.Unwrap(other).(Installer) 39 return ok 40 } 41 42 func (k kubeletDep) String() string { return "Kubelet" } 43 44 func (*kubeletDep) Equals(other nodeagent.Installer) bool { 45 _, ok := other.(*kubeletDep) 46 return ok 47 } 48 49 func (k *kubeletDep) InstalledFilter() []string { 50 return []string{"kubelet"} 51 } 52 53 func (k *kubeletDep) Current() (pkg common.Package, err error) { 54 55 pkg, err = k.common.Current() 56 if err != nil || pkg.Version == "" { 57 return pkg, err 58 } 59 60 return pkg, selinux.Current(k.os, &pkg) 61 } 62 63 func (k *kubeletDep) Ensure(remove common.Package, install common.Package, leaveOSRepositories bool) error { 64 65 if err := selinux.EnsurePermissive(k.monitor, k.os, remove); err != nil { 66 return err 67 } 68 69 if k.os != dep.CentOS { 70 return k.ensurePackage(remove, install, leaveOSRepositories) 71 } 72 73 errBuf := new(bytes.Buffer) 74 defer errBuf.Reset() 75 76 cmd := exec.Command("modprobe", "br_netfilter") 77 cmd.Stderr = errBuf 78 if k.monitor.IsVerbose() { 79 fmt.Println(strings.Join(cmd.Args, " ")) 80 cmd.Stdout = os.Stdout 81 } 82 if err := cmd.Run(); err != nil { 83 return fmt.Errorf("loading module br_netfilter while installing kubelet failed with stderr %s: %w", errBuf.String(), err) 84 } 85 errBuf.Reset() 86 87 return k.ensurePackage(remove, install, leaveOSRepositories) 88 } 89 90 func (k *kubeletDep) ensurePackage(remove common.Package, install common.Package, leaveOSRepositories bool) error { 91 92 if err := k.common.Ensure(remove, install, leaveOSRepositories); err != nil { 93 return err 94 } 95 96 if err := k.systemd.Enable("kubelet"); err != nil { 97 return err 98 } 99 100 return k.systemd.Start("kubelet") 101 }