github.com/caos/orbos@v1.5.14-0.20221103111702-e6cd0cea7ad4/internal/operator/nodeagent/dep/k8s/common.go (about) 1 package k8s 2 3 import ( 4 "errors" 5 "fmt" 6 "io/ioutil" 7 "regexp" 8 "strings" 9 10 "github.com/caos/orbos/internal/operator/common" 11 "github.com/caos/orbos/internal/operator/nodeagent/dep" 12 ) 13 14 type Common struct { 15 manager *dep.PackageManager 16 os dep.OperatingSystem 17 normalizer *regexp.Regexp 18 pkg string 19 } 20 21 func New(os dep.OperatingSystem, manager *dep.PackageManager, pkg string) *Common { 22 return &Common{manager, os, regexp.MustCompile(`\d+\.\d+\.\d+`), pkg} 23 } 24 25 func (c *Common) Current() (pkg common.Package, err error) { 26 installed := c.manager.CurrentVersions(c.pkg) 27 if len(installed) == 0 { 28 return pkg, nil 29 } 30 pkg.Version = "v" + c.normalizer.FindString(installed[0].Version) 31 return pkg, nil 32 } 33 34 func (c *Common) Ensure(remove common.Package, install common.Package, leaveOSRepositories bool) (err error) { 35 36 defer func() { 37 if err != nil { 38 err = fmt.Errorf("installing %s failed: %w", c.pkg, err) 39 } 40 }() 41 42 if !leaveOSRepositories { 43 switch c.os { 44 case dep.Ubuntu: 45 if err := c.manager.Add(&dep.Repository{ 46 KeyURL: "https://packages.cloud.google.com/apt/doc/apt-key.gpg", 47 KeyFingerprint: "", 48 Repository: "deb https://apt.kubernetes.io/ kubernetes-xenial main", 49 }); err != nil { 50 return err 51 } 52 case dep.CentOS: 53 if err := ioutil.WriteFile("/etc/yum.repos.d/kubernetes.repo", []byte(`[kubernetes] 54 name=Kubernetes 55 baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 56 enabled=1 57 gpgcheck=1 58 repo_gpgcheck=0 59 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg`), 0644); err != nil { 60 return err 61 } 62 default: 63 return errors.New("unknown OS") 64 } 65 } 66 67 pkgVersion := strings.TrimLeft(install.Version, "v") + "-0" 68 if c.os == dep.Ubuntu { 69 pkgVersion += "0" 70 } 71 return c.manager.Install(&dep.Software{Package: c.pkg, Version: pkgVersion}) 72 }