mirror of
https://github.com/labring/sealos.git
synced 2026-10-24 23:23:35 +08:00
* style: remove getter functions in pkg/runtime and rename ssh functions names * style: rename GetKubeadmConfig -> GetRuntimeConfig Signed-off-by: cuisongliu <cuisongliu@qq.com> # Conflicts: # pkg/guest/guest.go * feat: k3s runtime implementation Signed-off-by: cuisongliu <cuisongliu@qq.com> * Update utils.go --------- Signed-off-by: cuisongliu <cuisongliu@qq.com> Co-authored-by: cuisongliu <cuisongliu@qq.com>
84 lines
2.4 KiB
Go
84 lines
2.4 KiB
Go
// Copyright © 2022 sealos.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package bootstrap
|
|
|
|
import (
|
|
"github.com/labring/sealos/pkg/constants"
|
|
"github.com/labring/sealos/pkg/env"
|
|
"github.com/labring/sealos/pkg/remote"
|
|
"github.com/labring/sealos/pkg/ssh"
|
|
v2 "github.com/labring/sealos/pkg/types/v1beta1"
|
|
"github.com/labring/sealos/pkg/utils/maps"
|
|
stringsutil "github.com/labring/sealos/pkg/utils/strings"
|
|
)
|
|
|
|
type Context interface {
|
|
GetBash() constants.Bash
|
|
GetCluster() *v2.Cluster
|
|
GetPathResolver() constants.PathResolver
|
|
GetExecer() ssh.Interface
|
|
GetRemoter() remote.Interface
|
|
}
|
|
|
|
type realContext struct {
|
|
bash constants.Bash
|
|
cluster *v2.Cluster
|
|
pathResolver constants.PathResolver
|
|
execer ssh.Interface
|
|
remoter remote.Interface
|
|
}
|
|
|
|
func (ctx realContext) GetBash() constants.Bash {
|
|
return ctx.bash
|
|
}
|
|
|
|
func (ctx realContext) GetCluster() *v2.Cluster {
|
|
return ctx.cluster
|
|
}
|
|
|
|
func (ctx realContext) GetPathResolver() constants.PathResolver {
|
|
return ctx.pathResolver
|
|
}
|
|
|
|
func (ctx realContext) GetExecer() ssh.Interface {
|
|
return ctx.execer
|
|
}
|
|
|
|
func (ctx realContext) GetRemoter() remote.Interface {
|
|
return ctx.remoter
|
|
}
|
|
|
|
func NewContextFrom(cluster *v2.Cluster) Context {
|
|
execer := ssh.NewCacheClientFromCluster(cluster, true)
|
|
envProcessor := env.NewEnvProcessor(cluster)
|
|
remoter := remote.New(cluster.GetName(), execer)
|
|
|
|
rootfsImage := cluster.GetRootfsImage()
|
|
rootfsEnvs := v2.MergeEnvWithBuiltinKeys(rootfsImage.Env, *rootfsImage)
|
|
|
|
// bootstrap process depends on the envs in the rootfs image
|
|
shellWrapper := func(host, shell string) string {
|
|
envs := maps.MergeMap(rootfsEnvs, envProcessor.Getenv(host))
|
|
return stringsutil.RenderShellFromEnv(shell, envs)
|
|
}
|
|
return &realContext{
|
|
cluster: cluster,
|
|
execer: execer,
|
|
bash: constants.NewBash(cluster.GetName(), cluster.GetImageLabels(), shellWrapper),
|
|
pathResolver: constants.NewPathResolver(cluster.GetName()),
|
|
remoter: remoter,
|
|
}
|
|
}
|