Files
Olares/cli/pkg/kubesphere/plugins/tasks.go
hysyeah 72a5b2c6a2 app-service, bfl, cli, authelia,kubesphere: support create user from user cr (#1543)
* app-service, bfl, cli, authelia,kubesphere: support create user by cr

* fix: rm kubesphere-monitoring-federated ns
2025-07-14 23:48:53 +08:00

118 lines
3.7 KiB
Go

package plugins
import (
"fmt"
"path"
"strings"
"github.com/beclab/Olares/cli/pkg/common"
cc "github.com/beclab/Olares/cli/pkg/core/common"
"github.com/beclab/Olares/cli/pkg/core/connector"
"github.com/beclab/Olares/cli/pkg/core/logger"
"github.com/beclab/Olares/cli/pkg/utils"
"github.com/pkg/errors"
)
type CopyEmbedFiles struct {
common.KubeAction
}
func (t *CopyEmbedFiles) Execute(runtime connector.Runtime) error {
var dst = path.Join(runtime.GetInstallerDir(), cc.BuildFilesCacheDir)
return utils.CopyEmbed(assets, ".", dst)
}
type CheckNodeState struct {
common.KubeAction
}
func (t *CheckNodeState) Execute(runtime connector.Runtime) error {
var kubectlpath, _ = t.PipelineCache.GetMustString(common.CacheCommandKubectlPath)
if kubectlpath == "" {
kubectlpath = path.Join(common.BinDir, common.CommandKubectl)
}
var cmd = fmt.Sprintf("%s get node --no-headers", kubectlpath)
stdout, err := runtime.GetRunner().SudoCmd(cmd, false, false)
if err != nil || stdout == "" {
return fmt.Errorf("Node Pending")
}
var nodeInfo = strings.Fields(stdout)
if len(nodeInfo) != 5 {
logger.Errorf("node info invalid: %s", stdout)
return fmt.Errorf("Node Pending")
}
var state = nodeInfo[1]
var version = nodeInfo[4]
if state != "Ready" {
return fmt.Errorf("Node Pending")
}
t.PipelineCache.Set(common.CacheKubeletVersion, version)
return nil
}
type InitNamespace struct {
common.KubeAction
}
func (t *InitNamespace) Execute(runtime connector.Runtime) error {
var kubectlpath, _ = t.PipelineCache.GetMustString(common.CacheCommandKubectlPath)
if kubectlpath == "" {
kubectlpath = path.Join(common.BinDir, common.CommandKubectl)
}
for _, ns := range []string{common.NamespaceKubesphereControlsSystem} {
if stdout, err := runtime.GetRunner().Cmd(fmt.Sprintf("%s create ns %s", kubectlpath, ns), false, true); err != nil {
if !strings.Contains(stdout, "already exists") {
logger.Errorf("create ns %s failed: %v", ns, err)
return errors.Wrap(errors.WithStack(err), fmt.Sprintf("create namespace %s failed: %v", ns, err))
}
}
}
// _, err := runtime.GetRunner().SudoCmd(
// fmt.Sprintf(`cat <<EOF | /usr/local/bin/kubectl apply -f -
// apiVersion: v1
// kind: Namespace
// metadata:
// name: %s
// ---
// apiVersion: v1
// kind: Namespace
// metadata:
// name: %s
// EOF
// `, common.NamespaceKubesphereControlsSystem, common.NamespaceKubesphereMonitoringFederated), false, true)
// if err != nil {
// return errors.Wrap(errors.WithStack(err), fmt.Sprintf("create namespace: %s and %s",
// common.NamespaceKubesphereControlsSystem, common.NamespaceKubesphereMonitoringFederated))
// }
var allNs = []string{
common.NamespaceDefault,
common.NamespaceKubeNodeLease,
common.NamespaceKubePublic,
common.NamespaceKubeSystem,
common.NamespaceKubekeySystem,
common.NamespaceKubesphereControlsSystem,
common.NamespaceKubesphereSystem,
}
for _, ns := range allNs {
if _, err := runtime.GetRunner().SudoCmd(fmt.Sprintf("%s label ns %s kubesphere.io/workspace=system-workspace --overwrite", kubectlpath, ns), false, true); err != nil {
logger.Errorf("label ns %s kubesphere.io/workspace=system-workspace failed: %v", ns, err)
return errors.Wrap(errors.WithStack(err), fmt.Sprintf("label namespace %s kubesphere.io/workspace=system-workspace failed: %v", ns, err))
}
if _, err := runtime.GetRunner().SudoCmd(fmt.Sprintf("%s label ns %s kubesphere.io/namespace=%s --overwrite", kubectlpath, ns, ns), false, true); err != nil {
logger.Errorf("label ns %s kubesphere.io/namespace=%s failed: %v", ns, ns, err)
return errors.Wrap(errors.WithStack(err), fmt.Sprintf("label namespace %s kubesphere.io/namespace=%s failed: %v", ns, ns, err))
}
}
return nil
}