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  }