fix makefile build error

Signed-off-by: zhangxiaoyu <zhangxiaoyu58@huawei.com>
This commit is contained in:
zhangxiaoyu 2022-09-19 20:03:33 +08:00
parent 54a8dccb2c
commit 4d2b584c03
6 changed files with 10389 additions and 1 deletions

View File

@ -0,0 +1,156 @@
From fb31a0596857b2fe0daa824a37027a906a45ca57 Mon Sep 17 00:00:00 2001
From: zhangxiaoyu <zhangxiaoyu58@huawei.com>
Date: Mon, 29 Nov 2021 19:39:56 +0800
Subject: [PATCH 13/17] add cleanup last step
Signed-off-by: zhangxiaoyu <zhangxiaoyu58@huawei.com>
---
pkg/api/types.go | 2 ++
pkg/clusterdeployment/binary/binary.go | 10 +++++++++
.../binary/cleanupcluster/cleanupcommon.go | 22 +++++++++++++++++++
pkg/clusterdeployment/clusterdeploy.go | 14 ++++++++++++
pkg/utils/runner/runner.go | 14 ------------
5 files changed, 48 insertions(+), 14 deletions(-)
diff --git a/pkg/api/types.go b/pkg/api/types.go
index fea3f26..e5e1958 100644
--- a/pkg/api/types.go
+++ b/pkg/api/types.go
@@ -305,6 +305,8 @@ type ClusterManagerAPI interface {
ClusterStatus() (*ClusterStatus, error)
AddonsSetup() error
AddonsDestroy() error
+
+ CleanupLastStep(nodeName string) error
}
type LoadBalancerAPI interface {
diff --git a/pkg/clusterdeployment/binary/binary.go b/pkg/clusterdeployment/binary/binary.go
index 246f547..363de0e 100644
--- a/pkg/clusterdeployment/binary/binary.go
+++ b/pkg/clusterdeployment/binary/binary.go
@@ -563,3 +563,13 @@ func (bcp *BinaryClusterDeployment) PostNodeCleanupHooks(node *api.HostConfig) {
logrus.Warnf("Ignore: Delete Node PostHook failed: %v", err)
}
}
+
+func (bcp *BinaryClusterDeployment) CleanupLastStep(nodeName string) error {
+ itask := task.NewTaskInstance(&cleanupcluster.CleanupTempDirTask{})
+
+ if err := nodemanager.RunTaskOnNodes(itask, []string{nodeName}); err != nil {
+ return fmt.Errorf("cleanup user temp dir failed: %v", err)
+ }
+
+ return nil
+}
diff --git a/pkg/clusterdeployment/binary/cleanupcluster/cleanupcommon.go b/pkg/clusterdeployment/binary/cleanupcluster/cleanupcommon.go
index e681b63..f282d94 100644
--- a/pkg/clusterdeployment/binary/cleanupcluster/cleanupcommon.go
+++ b/pkg/clusterdeployment/binary/cleanupcluster/cleanupcommon.go
@@ -21,6 +21,7 @@ import (
"github.com/sirupsen/logrus"
+ "isula.org/eggo/pkg/api"
"isula.org/eggo/pkg/utils"
"isula.org/eggo/pkg/utils/runner"
)
@@ -49,3 +50,24 @@ func stopServices(r runner.Runner, services []string) error {
}
return nil
}
+
+type CleanupTempDirTask struct {
+}
+
+func (c *CleanupTempDirTask) Name() string {
+ return "CleanupTempDirTask"
+}
+
+func (c *CleanupTempDirTask) Run(r runner.Runner, hostConfig *api.HostConfig) error {
+ if hostConfig == nil {
+ return fmt.Errorf("empty host config")
+ }
+
+ dir := api.GetUserTempDir(hostConfig.UserName)
+ _, err := r.RunCommand(utils.AddSudo("rm -rf " + dir))
+ if err != nil {
+ return err
+ }
+
+ return nil
+}
diff --git a/pkg/clusterdeployment/clusterdeploy.go b/pkg/clusterdeployment/clusterdeploy.go
index d8941ee..138d584 100644
--- a/pkg/clusterdeployment/clusterdeploy.go
+++ b/pkg/clusterdeployment/clusterdeploy.go
@@ -217,6 +217,7 @@ func rollbackFailedNoeds(handler api.ClusterDeploymentAPI, nodes []*api.HostConf
// do best to cleanup, if error, just ignore
handler.ClusterNodeCleanup(n, n.Type)
handler.MachineInfraDestroy(n)
+ handler.CleanupLastStep(n.Name)
rollIDs = append(rollIDs, n.Address)
}
@@ -457,6 +458,11 @@ func doDeleteNode(handler api.ClusterDeploymentAPI, cc *api.ClusterConfig, h *ap
return err
}
+ if err := handler.CleanupLastStep(h.Name); err != nil {
+ logrus.Warnf("cleanup user temp dir for node %s failed: %v", h.Name, err)
+ return err
+ }
+
if err := nodemanager.WaitNodesFinishWithProgress([]string{h.Address}, time.Minute*5); err != nil {
logrus.Warnf("wait cleanup finish failed: %v", err)
}
@@ -581,6 +587,14 @@ func doRemoveCluster(handler api.ClusterDeploymentAPI, cc *api.ClusterConfig) {
}
}
+ // Step9: cleanup user temp dir
+ for _, n := range cc.Nodes {
+ err = handler.CleanupLastStep(n.Name)
+ if err != nil {
+ logrus.Warnf("[cluster] cleanup user temp dir for node: %s failed: %v", n.Name, err)
+ }
+ }
+
if err = nodemanager.WaitNodesFinishWithProgress(allNodes, time.Minute*5); err != nil {
logrus.Warnf("[cluster] wait all cleanup finish failed: %v", err)
}
diff --git a/pkg/utils/runner/runner.go b/pkg/utils/runner/runner.go
index 83a81e9..9a739ca 100644
--- a/pkg/utils/runner/runner.go
+++ b/pkg/utils/runner/runner.go
@@ -145,8 +145,6 @@ func NewSSHRunner(hcfg *api.HostConfig) (Runner, error) {
}
func (ssh *SSHRunner) Close() {
- // cleanup resources
- clearUserTempDir(ssh.Conn, ssh.Host)
// TODO: wait kubekey support close for Connection
logrus.Debugf("TODO: wait kubekey support close for Connection")
}
@@ -160,18 +158,6 @@ func (ssh *SSHRunner) Reconnect() error {
return nil
}
-func clearUserTempDir(conn ssh.Connection, host *kkv1alpha1.HostCfg) {
- tmpShell := "/tmp/" + RunnerShellPrefix + "*"
- // scp to tmp file
- dir := api.GetUserTempDir(host.User)
- _, err := conn.Exec(fmt.Sprintf("sudo -E /bin/sh -c \"rm -rf %s; rm -rf %s\"", dir, tmpShell), host)
- if err != nil {
- logrus.Warnf("[%s] remove temp dir: %s failed: %v", host.Name, dir, err)
- return
- }
- logrus.Debugf("[%s] remove temp dir: %s success", host.Name, dir)
-}
-
func prepareUserTempDir(conn ssh.Connection, host *kkv1alpha1.HostCfg) error {
// scp to tmp file
dir := api.GetUserTempDir(host.User)
--
2.25.1

View File

@ -0,0 +1,834 @@
From 77ad958ade9f72f97042bd0f7e0f9fa258a64153 Mon Sep 17 00:00:00 2001
From: zhangxiaoyu <zhangxiaoyu58@huawei.com>
Date: Sat, 4 Dec 2021 16:47:24 +0800
Subject: [PATCH 14/17] refactor dependency
Signed-off-by: zhangxiaoyu <zhangxiaoyu58@huawei.com>
---
.../binary/infrastructure/infrastructure.go | 4 +-
pkg/clusterdeployment/runtime/runtime.go | 40 +--
pkg/utils/dependency/dependency.go | 237 ++++++++-----
pkg/utils/dependency/install.go | 322 ++++--------------
4 files changed, 231 insertions(+), 372 deletions(-)
diff --git a/pkg/clusterdeployment/binary/infrastructure/infrastructure.go b/pkg/clusterdeployment/binary/infrastructure/infrastructure.go
index 68faf36..7c55d5f 100644
--- a/pkg/clusterdeployment/binary/infrastructure/infrastructure.go
+++ b/pkg/clusterdeployment/binary/infrastructure/infrastructure.go
@@ -68,7 +68,7 @@ func (it *SetupInfraTask) Run(r runner.Runner, hcg *api.HostConfig) error {
return err
}
- if err := dependency.InstallDependency(r, it.roleInfra, hcg, it.packageSrc.GetPkgDstPath()); err != nil {
+ if err := dependency.InstallBaseDependency(r, it.roleInfra, hcg, it.packageSrc.GetPkgDstPath()); err != nil {
logrus.Errorf("install dependency failed: %v", err)
return err
}
@@ -325,7 +325,7 @@ func (it *DestroyInfraTask) Run(r runner.Runner, hcg *api.HostConfig) error {
return fmt.Errorf("empty host config")
}
- dependency.RemoveDependency(r, it.roleInfra, hcg, it.packageSrc.GetPkgDstPath())
+ dependency.RemoveBaseDependency(r, it.roleInfra, hcg, it.packageSrc.GetPkgDstPath())
if err := removeHostNameIP(r, hcg); err != nil {
logrus.Errorf("remove host name ip failed: %v", err)
diff --git a/pkg/clusterdeployment/runtime/runtime.go b/pkg/clusterdeployment/runtime/runtime.go
index edfc4a7..e996dae 100644
--- a/pkg/clusterdeployment/runtime/runtime.go
+++ b/pkg/clusterdeployment/runtime/runtime.go
@@ -3,14 +3,11 @@ package runtime
import (
"encoding/base64"
"fmt"
- "path/filepath"
"strings"
"github.com/sirupsen/logrus"
"isula.org/eggo/pkg/api"
"isula.org/eggo/pkg/clusterdeployment/binary/commontools"
- "isula.org/eggo/pkg/constants"
- "isula.org/eggo/pkg/utils"
"isula.org/eggo/pkg/utils/dependency"
"isula.org/eggo/pkg/utils/runner"
"isula.org/eggo/pkg/utils/template"
@@ -435,7 +432,8 @@ func (ct *DeployRuntimeTask) Run(r runner.Runner, hcg *api.HostConfig) error {
return err
}
- if err := loadImages(r, ct.workerInfra, ct.packageSrc, ct.runtime, ct.workerConfig.ContainerEngineConf.Runtime); err != nil {
+ if err := dependency.InstallImageDependency(r, ct.workerInfra, ct.packageSrc, ct.runtime.GetRuntimeService(),
+ ct.runtime.GetRuntimeClient(), ct.runtime.GetRuntimeLoadImageCommand()); err != nil {
logrus.Errorf("load images failed: %v", err)
return err
}
@@ -459,40 +457,6 @@ func (ct *DeployRuntimeTask) check(r runner.Runner) error {
return nil
}
-func getImages(workerInfra *api.RoleInfra) []*api.PackageConfig {
- images := []*api.PackageConfig{}
- for _, s := range workerInfra.Softwares {
- if s.Type == "image" {
- images = append(images, s)
- }
- }
-
- return images
-}
-
-func loadImages(r runner.Runner, workerInfra *api.RoleInfra, packageSrc *api.PackageSrcConfig, runtime Runtime, rt string) error {
- images := getImages(workerInfra)
- if len(images) == 0 {
- logrus.Warn("no images load")
- return nil
- }
-
- logrus.Info("do load images...")
-
- imagePath := filepath.Join(packageSrc.GetPkgDstPath(), constants.DefaultImagePath)
- imageDep := dependency.NewDependencyImage(imagePath, runtime.GetRuntimeClient(), runtime.GetRuntimeLoadImageCommand(), images)
- if err := imageDep.Install(r); err != nil {
- if utils.IsContainerd(rt) {
- logrus.Warnf("%s not support load images", rt)
- return nil
- }
- return err
- }
-
- logrus.Info("load images success")
- return nil
-}
-
func GetRuntime(runtime string) Runtime {
if runtime == "" {
return mapRuntime["docker"]
diff --git a/pkg/utils/dependency/dependency.go b/pkg/utils/dependency/dependency.go
index 2c5dc26..9b464dd 100644
--- a/pkg/utils/dependency/dependency.go
+++ b/pkg/utils/dependency/dependency.go
@@ -19,124 +19,175 @@ import (
"fmt"
"strings"
+ "github.com/sirupsen/logrus"
"isula.org/eggo/pkg/api"
"isula.org/eggo/pkg/utils/runner"
"isula.org/eggo/pkg/utils/template"
)
-type dependency interface {
- Install(r runner.Runner) error
- Remove(r runner.Runner) error
+const (
+ PrmTest = "if [ x != x$(which apt 2>/dev/null) ]; then echo apt ; elif [ x != x$(which yum 2>/dev/null) ]; then echo yum ; fi"
+ PmTest = "if [ x != x$(which dpkg 2>/dev/null) ]; then echo dpkg ; elif [ x != x$(which rpm 2>/dev/null) ]; then echo rpm ; fi"
+)
+
+type managerCommand struct {
+ installCommand string
+ removeCommand string
}
-// install dependency by repo
-func runRepoCommand(r runner.Runner, software []*api.PackageConfig, command string) error {
- join := ""
- for _, s := range software {
- join += s.Name + " "
+func getPackageRepoManager(r runner.Runner) (*managerCommand, error) {
+ packageRepoManagerCommand := map[string]*managerCommand{
+ "apt": {
+ installCommand: "apt install -y",
+ removeCommand: "apt remove -y",
+ },
+ "yum": {
+ installCommand: "yum install -y",
+ removeCommand: "yum remove -y",
+ },
}
- _, err := r.RunCommand(fmt.Sprintf("sudo -E /bin/sh -c \"%s -y %s\"", command, join))
- return err
-}
-type dependencyApt struct {
- software []*api.PackageConfig
-}
+ output, err := r.RunCommand(fmt.Sprintf("sudo -E /bin/sh -c \"%s\"", PrmTest))
+ if err != nil {
+ logrus.Errorf("package repo manager test failed: %v", err)
+ return nil, err
+ }
-func (da *dependencyApt) Install(r runner.Runner) error {
- command := "apt install"
- if err := runRepoCommand(r, da.software, command); err != nil {
- return fmt.Errorf("apt install failed: %v", err)
+ if strings.Contains(output, "apt") {
+ return packageRepoManagerCommand["apt"], nil
+ }
+ if strings.Contains(output, "yum") {
+ return packageRepoManagerCommand["yum"], nil
}
- return nil
+ return nil, fmt.Errorf("invalid package repo manager %s", output)
}
-func (da *dependencyApt) Remove(r runner.Runner) error {
- command := "apt remove"
- if err := runRepoCommand(r, da.software, command); err != nil {
- return fmt.Errorf("apt remove failed: %v", err)
+func getPackageManager(r runner.Runner) (*managerCommand, error) {
+ packageManagerCommand := map[string]*managerCommand{
+ "dpkg": {
+ installCommand: "dpkg --force-all -i",
+ removeCommand: "apt remove -y",
+ },
+ "rpm": {
+ installCommand: "rpm -ivh --force --nodeps",
+ removeCommand: "yum remove -y",
+ },
}
- return nil
+ output, err := r.RunCommand(fmt.Sprintf("sudo -E /bin/sh -c \"%s\"", PmTest))
+ if err != nil {
+ logrus.Errorf("package manager test failed: %v", err)
+ return nil, err
+ }
+
+ if strings.Contains(output, "dpkg") {
+ return packageManagerCommand["dpkg"], nil
+ }
+ if strings.Contains(output, "rpm") {
+ return packageManagerCommand["rpm"], nil
+ }
+
+ return nil, fmt.Errorf("invalid package manager %s", output)
+}
+
+type dependency interface {
+ Install(r runner.Runner) error
+ Remove(r runner.Runner) error
}
-type dependencyYum struct {
+type dependencyRepo struct {
software []*api.PackageConfig
}
-func (dy *dependencyYum) Install(r runner.Runner) error {
- command := "yum install"
- if err := runRepoCommand(r, dy.software, command); err != nil {
- return fmt.Errorf("yum install by yum failed: %v", err)
+func (dr *dependencyRepo) Install(r runner.Runner) error {
+ if len(dr.software) == 0 {
+ return nil
}
- return nil
-}
+ prManager, err := getPackageRepoManager(r)
+ if err != nil {
+ return err
+ }
-func (dy *dependencyYum) Remove(r runner.Runner) error {
- command := "yum remove"
- if err := runRepoCommand(r, dy.software, command); err != nil {
- return fmt.Errorf("yum remove failed: %v", err)
+ join := ""
+ for _, s := range dr.software {
+ join += s.Name + " "
+ }
+ if _, err := r.RunCommand(fmt.Sprintf("sudo -E /bin/sh -c \"%s %s\"", prManager.installCommand, join)); err != nil {
+ return fmt.Errorf("%s failed: %v", prManager.installCommand, err)
}
return nil
}
-// install dependency by pkg
-func runPkgCommand(r runner.Runner, software []*api.PackageConfig, srcPath, command string) error {
- var sb strings.Builder
- sb.WriteString(fmt.Sprintf("sudo -E /bin/sh -c \"cd %s && %s ", srcPath, command))
- for _, s := range software {
- sb.WriteString(fmt.Sprintf("%s* ", s.Name))
+func (dr *dependencyRepo) Remove(r runner.Runner) error {
+ if len(dr.software) == 0 {
+ return nil
+ }
+
+ prManager, err := getPackageRepoManager(r)
+ if err != nil {
+ return err
+ }
+
+ join := ""
+ for _, s := range dr.software {
+ join += s.Name + " "
+ }
+ if _, err := r.RunCommand(fmt.Sprintf("sudo -E /bin/sh -c \"%s remove -y %s\"", prManager.removeCommand, join)); err != nil {
+ return fmt.Errorf("%s failed: %v", prManager.removeCommand, err)
}
- sb.WriteString("\"")
- _, err := r.RunCommand(sb.String())
- return err
+ return nil
}
-type dependencyRpm struct {
+type dependencyPkg struct {
srcPath string
software []*api.PackageConfig
}
-func (dr *dependencyRpm) Install(r runner.Runner) error {
- command := "rpm -ivh --force --nodeps"
- if err := runPkgCommand(r, dr.software, dr.srcPath, command); err != nil {
- return fmt.Errorf("rpm install failed: %v", err)
+func (dp *dependencyPkg) Install(r runner.Runner) error {
+ if len(dp.software) == 0 {
+ return nil
}
- return nil
-}
+ pManager, err := getPackageManager(r)
+ if err != nil {
+ return err
+ }
-func (dr *dependencyRpm) Remove(r runner.Runner) error {
- command := "yum remove -y"
- if err := runPkgCommand(r, dr.software, dr.srcPath, command); err != nil {
- return fmt.Errorf("yum remove rpm pkgs failed: %v", err)
+ join := ""
+ for _, s := range dp.software {
+ join += s.Name + "* "
+ }
+
+ if _, err := r.RunCommand(fmt.Sprintf("sudo -E /bin/sh -c \"cd %s && %s %s",
+ dp.srcPath, pManager.installCommand, join)); err != nil {
+ return fmt.Errorf("%s failed: %v", pManager.installCommand, err)
}
return nil
}
-type dependencyDeb struct {
- srcPath string
- software []*api.PackageConfig
-}
+func (dp *dependencyPkg) Remove(r runner.Runner) error {
+ if len(dp.software) == 0 {
+ return nil
+ }
-func (dd *dependencyDeb) Install(r runner.Runner) error {
- command := "dpkg --force-all -i"
- if err := runPkgCommand(r, dd.software, dd.srcPath, command); err != nil {
- return fmt.Errorf("dpkg install failed: %v", err)
+ pManager, err := getPackageManager(r)
+ if err != nil {
+ return err
}
- return nil
-}
+ join := ""
+ for _, s := range dp.software {
+ join += s.Name + "* "
+ }
-func (dd *dependencyDeb) Remove(r runner.Runner) error {
- command := "apt remove -y"
- if err := runPkgCommand(r, dd.software, dd.srcPath, command); err != nil {
- return fmt.Errorf("apt remove deb pkgs failed: %v", err)
+ if _, err := r.RunCommand(fmt.Sprintf("sudo -E /bin/sh -c \"cd %s && %s %s",
+ dp.srcPath, pManager.removeCommand, join)); err != nil {
+ return fmt.Errorf("%s remove failed: %v", pManager.removeCommand, err)
}
return nil
@@ -150,6 +201,10 @@ type dependencyFileDir struct {
}
func (df *dependencyFileDir) Install(r runner.Runner) error {
+ if len(df.software) == 0 {
+ return nil
+ }
+
shell := `
#!/bin/bash
cd {{ .srcPath }}
@@ -185,6 +240,10 @@ fi
}
func (df *dependencyFileDir) Remove(r runner.Runner) error {
+ if len(df.software) == 0 {
+ return nil
+ }
+
var sb strings.Builder
sb.WriteString("sudo -E /bin/sh -c \"")
for _, s := range df.software {
@@ -211,16 +270,11 @@ type dependencyImage struct {
image []*api.PackageConfig
}
-func NewDependencyImage(srcPath, client, command string, image []*api.PackageConfig) *dependencyImage {
- return &dependencyImage{
- srcPath: srcPath,
- client: client,
- command: command,
- image: image,
+func (di *dependencyImage) Install(r runner.Runner) error {
+ if len(di.image) == 0 {
+ return nil
}
-}
-func (di *dependencyImage) Install(r runner.Runner) error {
var sb strings.Builder
sb.WriteString("sudo -E /bin/sh -c \"")
for _, i := range di.image {
@@ -255,6 +309,10 @@ func NewDependencyYaml(srcPath, kubeconfig string, yaml []*api.PackageConfig) *d
}
func (dy *dependencyYaml) Install(r runner.Runner) error {
+ if len(dy.yaml) == 0 {
+ return nil
+ }
+
var sb strings.Builder
sb.WriteString(fmt.Sprintf("sudo -E /bin/sh -c \"export KUBECONFIG=%s ", dy.kubeconfig))
for _, y := range dy.yaml {
@@ -274,6 +332,10 @@ func (dy *dependencyYaml) Install(r runner.Runner) error {
}
func (dy *dependencyYaml) Remove(r runner.Runner) error {
+ if len(dy.yaml) == 0 {
+ return nil
+ }
+
var sb strings.Builder
sb.WriteString(fmt.Sprintf("sudo -E /bin/sh -c \"export KUBECONFIG=%s ", dy.kubeconfig))
for _, y := range dy.yaml {
@@ -306,6 +368,10 @@ func NewDependencyShell(srcPath string, shell []*api.PackageConfig) *dependencyS
}
func (ds *dependencyShell) Install(r runner.Runner) error {
+ if len(ds.shell) == 0 {
+ return nil
+ }
+
shellTemplate := `
#!/bin/bash
{{- range $i, $v := .Envs }}
@@ -354,3 +420,20 @@ func (ds *dependencyShell) Remove(r runner.Runner) error {
// nothing to do
return nil
}
+
+type DependencyTask struct {
+ dp dependency
+}
+
+func (dt *DependencyTask) Name() string {
+ return "DependencyTask"
+}
+
+func (dt *DependencyTask) Run(r runner.Runner, hcf *api.HostConfig) error {
+ if err := dt.dp.Install(r); err != nil {
+ logrus.Errorf("install failed for %s: %v", hcf.Address, err)
+ return err
+ }
+
+ return nil
+}
diff --git a/pkg/utils/dependency/install.go b/pkg/utils/dependency/install.go
index 8cb80f6..35c3521 100644
--- a/pkg/utils/dependency/install.go
+++ b/pkg/utils/dependency/install.go
@@ -18,6 +18,7 @@ package dependency
import (
"fmt"
"path"
+ "path/filepath"
"strings"
"github.com/sirupsen/logrus"
@@ -29,131 +30,55 @@ import (
"isula.org/eggo/pkg/utils/task"
)
-const (
- PrmTest = "if [ x != x$(which apt 2>/dev/null) ]; then echo apt ; elif [ x != x$(which yum 2>/dev/null) ]; then echo yum ; fi"
- PmTest = "if [ x != x$(which dpkg 2>/dev/null) ]; then echo dpkg ; elif [ x != x$(which rpm 2>/dev/null) ]; then echo rpm ; fi"
-)
-
-type DependencyTask struct {
- dp dependency
-}
-
-func (dt *DependencyTask) Name() string {
- return "DependencyTask"
-}
-
-func (dt *DependencyTask) Run(r runner.Runner, hcf *api.HostConfig) error {
- if err := dt.dp.Install(r); err != nil {
- logrus.Errorf("install failed for %s: %v", hcf.Address, err)
- return err
- }
-
- return nil
-}
-
-func installRepo(r runner.Runner, software []*api.PackageConfig, hcf *api.HostConfig) error {
- if len(software) == 0 {
- return nil
- }
-
- output, err := r.RunCommand(fmt.Sprintf("sudo -E /bin/sh -c \"%s\"", PrmTest))
- if err != nil {
- logrus.Errorf("package repo manager test failed: %v", err)
- return err
+func newBaseDependency(roleInfra *api.RoleInfra, packagePath string) map[string]dependency {
+ packages := map[string][]*api.PackageConfig{
+ "repo": {},
+ "pkg": {},
+ "bin": {},
+ "file": {},
+ "dir": {},
}
- var dp dependency
- if strings.Contains(output, "apt") {
- dp = &dependencyApt{
- software: software,
- }
- } else if strings.Contains(output, "yum") {
- dp = &dependencyYum{
- software: software,
+ for _, p := range roleInfra.Softwares {
+ if _, exist := packages[p.Type]; !exist {
+ continue
}
+ packages[p.Type] = append(packages[p.Type], p)
}
- if dp == nil {
- return fmt.Errorf("invalid package repo manager %s", output)
- }
-
- if err := dp.Install(r); err != nil {
- logrus.Errorf("install failed for %s: %v", hcf.Address, err)
- return err
- }
-
- return nil
-}
-
-func installPkg(r runner.Runner, software []*api.PackageConfig, hcf *api.HostConfig, packagePath string) error {
- if len(software) == 0 {
- return nil
- }
-
- output, err := r.RunCommand(fmt.Sprintf("sudo -E /bin/sh -c \"%s\"", PmTest))
- if err != nil {
- logrus.Errorf("package manager test failed: %v", err)
- return err
- }
-
- var dp dependency
- if strings.Contains(output, "dpkg") {
- dp = &dependencyDeb{
- srcPath: path.Join(packagePath, constants.DefaultPkgPath),
- software: software,
- }
- } else if strings.Contains(output, "rpm") {
- dp = &dependencyRpm{
+ baseDependency := map[string]dependency{
+ "repo": &dependencyRepo{
+ software: packages["repo"],
+ },
+ "pkg": &dependencyPkg{
srcPath: path.Join(packagePath, constants.DefaultPkgPath),
- software: software,
- }
- }
-
- if dp == nil {
- return fmt.Errorf("invalid package manager %s", output)
- }
-
- if err := dp.Install(r); err != nil {
- logrus.Errorf("install failed for %s: %v", hcf.Address, err)
- return err
- }
-
- return nil
-}
-
-func installFD(r runner.Runner, bin, file, dir []*api.PackageConfig, hcf *api.HostConfig, packagePath string) error {
- dp := []dependency{}
-
- if len(bin) != 0 {
- dp = append(dp, &dependencyFileDir{
- srcPath: path.Join(packagePath, constants.DefaultBinPath),
- software: bin,
+ software: packages["pkg"],
+ },
+ "bin": &dependencyFileDir{
executable: true,
- })
- }
-
- if len(file) != 0 {
- dp = append(dp, &dependencyFileDir{
+ srcPath: path.Join(packagePath, constants.DefaultBinPath),
+ software: packages["bin"],
+ },
+ "file": &dependencyFileDir{
+ executable: false,
srcPath: path.Join(packagePath, constants.DefaultFilePath),
- software: file,
+ },
+ "dir": &dependencyFileDir{
executable: false,
- })
- }
-
- if len(dir) != 0 {
- dp = append(dp, &dependencyFileDir{
srcPath: path.Join(packagePath, constants.DefaultDirPath),
- software: dir,
- executable: false,
- })
+ software: packages["dir"],
+ },
}
- if len(dp) == 0 {
- return nil
- }
+ return baseDependency
+}
- for _, d := range dp {
- if err := d.Install(r); err != nil {
+// install base dependency, include repo, pkg, bin, file, dir
+func InstallBaseDependency(r runner.Runner, roleInfra *api.RoleInfra, hcf *api.HostConfig, packagePath string) error {
+ baseDependency := newBaseDependency(roleInfra, packagePath)
+
+ for _, dep := range baseDependency {
+ if err := dep.Install(r); err != nil {
logrus.Errorf("install failed for %s: %v", hcf.Address, err)
return err
}
@@ -162,170 +87,57 @@ func installFD(r runner.Runner, bin, file, dir []*api.PackageConfig, hcf *api.Ho
return nil
}
-func uninstallRepo(r runner.Runner, software []*api.PackageConfig, hcf *api.HostConfig) error {
- if len(software) == 0 {
- return nil
- }
-
- output, err := r.RunCommand(fmt.Sprintf("sudo -E /bin/sh -c \"%s\"", PrmTest))
- if err != nil {
- logrus.Errorf("package repo manager test failed: %v", err)
- return err
- }
+func RemoveBaseDependency(r runner.Runner, roleInfra *api.RoleInfra, hcf *api.HostConfig, packagePath string) {
+ baseDependency := newBaseDependency(roleInfra, packagePath)
- var dp dependency
- if strings.Contains(output, "apt") {
- dp = &dependencyApt{
- software: software,
- }
- } else if strings.Contains(output, "yum") {
- dp = &dependencyYum{
- software: software,
+ for _, dep := range baseDependency {
+ if err := dep.Remove(r); err != nil {
+ logrus.Errorf("uninstall failed for %s: %v", hcf.Address, err)
}
}
-
- if dp == nil {
- return fmt.Errorf("invalid package repo manager %s", output)
- }
-
- if err := dp.Remove(r); err != nil {
- logrus.Errorf("uninstall failed for %s: %v", hcf.Address, err)
- return err
- }
-
- return nil
}
-func uninstallPkg(r runner.Runner, software []*api.PackageConfig, hcf *api.HostConfig, packagePath string) error {
- if len(software) == 0 {
- return nil
- }
-
- output, err := r.RunCommand(fmt.Sprintf("sudo -E /bin/sh -c \"%s\"", PmTest))
- if err != nil {
- logrus.Errorf("package manager test failed: %v", err)
- return err
- }
-
- var dp dependency
- if strings.Contains(output, "dpkg") {
- dp = &dependencyDeb{
- srcPath: path.Join(packagePath, constants.DefaultPkgPath),
- software: software,
+func getImages(workerInfra *api.RoleInfra) []*api.PackageConfig {
+ images := []*api.PackageConfig{}
+ for _, s := range workerInfra.Softwares {
+ if s.Type == "image" {
+ images = append(images, s)
}
- } else if strings.Contains(output, "rpm") {
- dp = &dependencyRpm{
- srcPath: path.Join(packagePath, constants.DefaultPkgPath),
- software: software,
- }
- }
-
- if dp == nil {
- return fmt.Errorf("invalid package manager %s", output)
}
- if err := dp.Remove(r); err != nil {
- logrus.Errorf("uninstall failed for %s: %v", hcf.Address, err)
- return err
- }
-
- return nil
+ return images
}
-func uninstallFD(r runner.Runner, bin, file, dir []*api.PackageConfig, hcf *api.HostConfig) error {
- dp := []dependency{}
-
- if len(bin) != 0 {
- dp = append(dp, &dependencyFileDir{
- software: bin,
- })
- }
-
- if len(file) != 0 {
- dp = append(dp, &dependencyFileDir{
- software: file,
- })
- }
-
- if len(dir) != 0 {
- dp = append(dp, &dependencyFileDir{
- software: dir,
- })
- }
-
- if len(dp) == 0 {
+// install image dependency
+func InstallImageDependency(r runner.Runner, workerInfra *api.RoleInfra, packageSrc *api.PackageSrcConfig,
+ runtime, runtimeClient, runtimeCommand string) error {
+ images := getImages(workerInfra)
+ if len(images) == 0 {
+ logrus.Warn("no images load")
return nil
}
- for _, d := range dp {
- if err := d.Remove(r); err != nil {
- logrus.Errorf("uninstall failed for %s: %v", hcf.Address, err)
- return err
- }
- }
+ logrus.Info("do load images...")
- return nil
-}
-
-func separateSofeware(softwares []*api.PackageConfig) ([]*api.PackageConfig, []*api.PackageConfig, []*api.PackageConfig, []*api.PackageConfig, []*api.PackageConfig) {
- repo := []*api.PackageConfig{}
- pkg := []*api.PackageConfig{}
- bin := []*api.PackageConfig{}
- file := []*api.PackageConfig{}
- dir := []*api.PackageConfig{}
-
- for _, p := range softwares {
- switch p.Type {
- case "repo":
- repo = append(repo, p)
- case "pkg":
- pkg = append(pkg, p)
- case "bin":
- bin = append(bin, p)
- case "file":
- file = append(file, p)
- case "dir":
- dir = append(dir, p)
- }
+ imageDependency := &dependencyImage{
+ srcPath: filepath.Join(packageSrc.GetPkgDstPath(), constants.DefaultImagePath),
+ client: runtimeClient,
+ command: runtimeCommand,
+ image: images,
}
- return repo, pkg, bin, file, dir
-}
-
-func InstallDependency(r runner.Runner, roleInfra *api.RoleInfra, hcf *api.HostConfig, packagePath string) error {
- repo, pkg, bin, file, dir := separateSofeware(roleInfra.Softwares)
-
- if err := installRepo(r, repo, hcf); err != nil {
- return fmt.Errorf("install repo failed: %v", err)
- }
-
- if err := installPkg(r, pkg, hcf, packagePath); err != nil {
- return fmt.Errorf("install pkg failed: %v", err)
- }
-
- if err := installFD(r, bin, file, dir, hcf, packagePath); err != nil {
- return fmt.Errorf("install file failed: %v", err)
+ if err := imageDependency.Install(r); err != nil {
+ if utils.IsContainerd(runtime) {
+ logrus.Warnf("%s not support load images", runtime)
+ return nil
+ }
+ return err
}
+ logrus.Info("load images success")
return nil
}
-func RemoveDependency(r runner.Runner, roleInfra *api.RoleInfra, hcf *api.HostConfig, packagePath string) {
- repo, pkg, bin, file, dir := separateSofeware(roleInfra.Softwares)
-
- if err := uninstallRepo(r, repo, hcf); err != nil {
- logrus.Errorf("uninstall repo failed: %v", err)
- }
-
- if err := uninstallPkg(r, pkg, hcf, packagePath); err != nil {
- logrus.Errorf("uninstall pkg failed: %v", err)
- }
-
- if err := uninstallFD(r, bin, file, dir, hcf); err != nil {
- logrus.Errorf("uninstall file failed: %v", err)
- }
-}
-
func CheckDependency(r runner.Runner, softwares []string) error {
for _, s := range softwares {
_, err := r.RunCommand(fmt.Sprintf("sudo -E /bin/sh -c \"which %s\"", s))
--
2.25.1

View File

@ -0,0 +1,86 @@
From 83a2ad6a3b68180d0c926280500dd20ee715f26e Mon Sep 17 00:00:00 2001
From: zhangxiaoyu <zhangxiaoyu58@huawei.com>
Date: Wed, 15 Dec 2021 10:32:29 +0800
Subject: [PATCH 15/17] delete apiserver kubelet-https flag, and add lb bind
port in firewall
Signed-off-by: zhangxiaoyu <zhangxiaoyu58@huawei.com>
---
cmd/configs.go | 13 +++++++++++--
.../binary/commontools/systemdservices.go | 1 -
pkg/utils/template/template_test.go | 2 --
3 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/cmd/configs.go b/cmd/configs.go
index beefd9d..326e889 100644
--- a/cmd/configs.go
+++ b/cmd/configs.go
@@ -300,7 +300,7 @@ func fillPackageConfig(ccfg *api.ClusterConfig, icfg *InstallConfig) {
}
}
-func fillOpenPort(ccfg *api.ClusterConfig, openports map[string][]*OpenPorts, dnsType string) {
+func fillOpenPort(ccfg *api.ClusterConfig, openports map[string][]*OpenPorts, dnsType string, lb LoadBalance) {
// key: master, worker, etcd, loadbalance
for t, p := range openports {
role, ok := toTypeInt[t]
@@ -316,6 +316,15 @@ func fillOpenPort(ccfg *api.ClusterConfig, openports map[string][]*OpenPorts, dn
ccfg.RoleInfra[api.Master].OpenPorts =
append(ccfg.RoleInfra[api.Master].OpenPorts, infra.CorednsPorts...)
}
+
+ if lb.Ip != "" && lb.BindPort > 0 {
+ ccfg.RoleInfra[api.LoadBalance].OpenPorts =
+ append(ccfg.RoleInfra[api.LoadBalance].OpenPorts, &api.OpenPorts{
+ Port: lb.BindPort,
+ Protocol: "tcp",
+ })
+ return
+ }
}
func defaultHostName(clusterID string, nodeType string, i int) string {
@@ -588,7 +597,7 @@ func toClusterdeploymentConfig(conf *DeployConfig) *api.ClusterConfig {
fillLoadBalance(&ccfg.LoadBalancer, conf.LoadBalance)
fillAPIEndPoint(&ccfg.APIEndpoint, conf)
fillPackageConfig(ccfg, &conf.InstallConfig)
- fillOpenPort(ccfg, conf.OpenPorts, conf.Service.DNS.CorednsType)
+ fillOpenPort(ccfg, conf.OpenPorts, conf.Service.DNS.CorednsType, conf.LoadBalance)
ccfg.WorkerConfig.KubeletConf.EnableServer = conf.EnableKubeletServing
fillExtrArgs(ccfg, conf.ConfigExtraArgs)
diff --git a/pkg/clusterdeployment/binary/commontools/systemdservices.go b/pkg/clusterdeployment/binary/commontools/systemdservices.go
index 0a17ee2..3b32e22 100644
--- a/pkg/clusterdeployment/binary/commontools/systemdservices.go
+++ b/pkg/clusterdeployment/binary/commontools/systemdservices.go
@@ -44,7 +44,6 @@ func SetupAPIServerService(r runner.Runner, ccfg *api.ClusterConfig, hcf *api.Ho
"--client-ca-file": "/etc/kubernetes/pki/ca.crt",
"--kubelet-client-certificate": "/etc/kubernetes/pki/apiserver-kubelet-client.crt",
"--kubelet-client-key": "/etc/kubernetes/pki/apiserver-kubelet-client.key",
- "--kubelet-https": "true",
"--proxy-client-cert-file": "/etc/kubernetes/pki/front-proxy-client.crt",
"--proxy-client-key-file": "/etc/kubernetes/pki/front-proxy-client.key",
"--tls-cert-file": "/etc/kubernetes/pki/apiserver.crt",
diff --git a/pkg/utils/template/template_test.go b/pkg/utils/template/template_test.go
index 2d13329..ae46d48 100644
--- a/pkg/utils/template/template_test.go
+++ b/pkg/utils/template/template_test.go
@@ -156,7 +156,6 @@ func TestCreateSystemdServiceTemplate(t *testing.T) {
"--client-ca-file=/etc/kubernetes/pki/ca.crt",
"--kubelet-client-certificate=/etc/kubernetes/pki/apiserver-kubelet-client.crt",
"--kubelet-client-key=/etc/kubernetes/pki/apiserver-kubelet-client.key",
- "--kubelet-https=true",
"--proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.crt",
"--proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client.key",
"--tls-cert-file=/etc/kubernetes/pki/apiserver.crt",
@@ -195,7 +194,6 @@ ExecStart=/usr/bin/kube-apiserver \
--client-ca-file=/etc/kubernetes/pki/ca.crt \
--kubelet-client-certificate=/etc/kubernetes/pki/apiserver-kubelet-client.crt \
--kubelet-client-key=/etc/kubernetes/pki/apiserver-kubelet-client.key \
- --kubelet-https=true \
--proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.crt \
--proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client.key \
--tls-cert-file=/etc/kubernetes/pki/apiserver.crt \
--
2.25.1

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,74 @@
From ace481915286e8973821d80642ec56457331d07f Mon Sep 17 00:00:00 2001
From: zhangxiaoyu <zhangxiaoyu58@huawei.com>
Date: Mon, 19 Sep 2022 16:37:07 +0800
Subject: [PATCH 17/17] fix Makefile build error
Signed-off-by: zhangxiaoyu <zhangxiaoyu58@huawei.com>
---
Makefile | 28 ++++++++++++++++++++++------
1 file changed, 22 insertions(+), 6 deletions(-)
diff --git a/Makefile b/Makefile
index 4b6d7c7..d2c4d9e 100644
--- a/Makefile
+++ b/Makefile
@@ -9,26 +9,40 @@ ARCH = arm64
endif
endif
+TMP_PATH := /tmp/xxeggo
+
EXTRALDFLAGS :=
LDFLAGS := -X isula.org/eggo/cmd.Version=$(VERSION) \
-X isula.org/eggo/cmd.Commit=$(GIT_COMMIT) \
-X isula.org/eggo/cmd.BuildTime=$(SOURCE_DATE_EPOCH) \
-X isula.org/eggo/cmd.Arch=$(ARCH) \
$(EXTRALDFLAGS)
-STATIC_LDFLAGS := -extldflags=-static -linkmode=external
-SAFEBUILDFLAGS := -buildmode=pie -extldflags=-ftrapv -extldflags=-zrelro -extldflags=-znow -tmpdir=/tmp/xxeggo $(LDFLAGS)
+STATIC_LDFLAGS := -extldflags=-static -linkmode=external
+SAFEBUILDFLAGS := -buildmode=pie \
+ -extldflags=-ftrapv -extldflags=-zrelro -extldflags=-znow \
+ -linkmode=external \
+ -extldflags "-static-pie -Wl,-z,now" \
+ -tmpdir=$(TMP_PATH) \
+ $(LDFLAGS)
GO := go
-GO_BUILD := CGO_ENABLED=0 GOARCH=$(ARCH) $(GO)
+GO_BUILD := CGO_ENABLED=1 GOARCH=$(ARCH) $(GO)
+GO_SAFE_BUILD:= CGO_ENABLE=1 \
+ CGO_CFLAGS="-fstack-protector-strong -fPIE" \
+ CGO_CPPFLAGS="-fstack-protector-strong -fPIE" \
+ CGO_LDFLAGS_ALLOW="-Wl,-z,relro,-z,now" \
+ CGO_LDFLAGS="-Wl,-z,relro,-z,now -Wl,-z,noexecstack" \
+ GOARCH=$(ARCH) \
+ $(GO)
.PHONY: eggo
eggo:
@echo "build eggo of $(ARCH) starting..."
- @$(GO_BUILD) build -ldflags '$(LDFLAGS) $(STATIC_LDFLAGS)' -o bin/eggo .
+ @$(GO_BUILD) build -ldflags '$(LDFLAGS) $(STATIC_LDFLAGS)' -o bin/eggo . 2>/dev/null
@echo "build eggo done!"
local:
@echo "build eggo use vendor starting..."
- @$(GO_BUILD) build -ldflags '$(LDFLAGS) $(STATIC_LDFLAGS)' -mod vendor -o bin/eggo .
+ @$(GO_BUILD) build -ldflags '$(LDFLAGS) $(STATIC_LDFLAGS)' -mod vendor -o bin/eggo . 2>/dev/null
@echo "build eggo use vendor done!"
test:
@echo "Unit tests starting..."
@@ -38,7 +52,9 @@ test:
.PHONY: safe
safe:
@echo "build safe eggo starting..."
- $(GO_BUILD) build -ldflags '$(SAFEBUILDFLAGS) $(STATIC_LDFLAGS)' -o bin/eggo .
+ mkdir -p $(TMP_PATH)
+ $(GO_SAFE_BUILD) build -ldflags '$(SAFEBUILDFLAGS)' -o bin/eggo .
+ rm -rf $(TMP_PATH)
@echo "build safe eggo done!"
images: image-eggo
--
2.25.1

View File

@ -1,6 +1,6 @@
Name: eggo
Version: 0.9.4
Release: 2
Release: 3
Summary: Eggo is a tool built to provide standard multi-ways for creating Kubernetes clusters.
License: Mulan PSL V2
URL: https://gitee.com/openeuler/eggo
@ -18,6 +18,11 @@ Patch0009: 0009-add-spec-of-eggo-hook.patch
Patch0010: 0010-update-roadmap-of-eggo.patch
Patch0011: 0011-run-hook-with-envs-of-cluster-info.patch
Patch0012: 0012-add-deploy-problems-doc.patch
Patch0013: 0013-add-cleanup-last-step.patch
Patch0014: 0014-refactor-dependency.patch
Patch0015: 0015-delete-apiserver-kubelet-https-flag-and-add-lb-bind-.patch
Patch0016: 0016-add-vendor-LICENSE.patch
Patch0017: 0017-fix-Makefile-build-error.patch
BuildRequires: make
BuildRequires: git
@ -58,6 +63,12 @@ rm -rf src
%attr(551,root,root) %{_bindir}/eggo
%changelog
* Mon Sep 19 2022 zhangxiaoyu<zhangxiaoyu58@huawei.com> - 0.9.4-3
- Type:upgrade
- CVE:NA
- SUG:NA
- DESC:fix makefile build error
* Fri Nov 26 2021 zhangxiaoyu<zhangxiaoyu58@huawei.com> - 0.9.4-2
- Type:upgrade
- CVE:NA