You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.4 KiB
52 lines
1.4 KiB
package framework
|
|
|
|
import (
|
|
"fmt"
|
|
"k8s.io/apimachinery/pkg/util/validation/field"
|
|
"k8s.io/client-go/rest"
|
|
)
|
|
|
|
type ClusterConfig struct {
|
|
Name string // 存储名字,这个名字在使用 kind create cluster 的时候 --name 传入
|
|
Rest *rest.Config `json:"-"` // 链接创建的 k8s 的 client。这个client比较低级。
|
|
MasterIP string // 集群的 master ip。方便在一些需要直接和集群通讯的测试的时候使用。
|
|
}
|
|
|
|
type ClusterProvider interface {
|
|
Validate(config *Config) error
|
|
Deploy(config *Config) (ClusterConfig, error)
|
|
Destroy(config *Config) error
|
|
}
|
|
|
|
// 1. 定义工厂对象
|
|
type Factory struct{}
|
|
|
|
// 2. 工厂对象中创建不同实现的对象
|
|
func (f Factory) Provider(config *Config) (ClusterProvider, error) {
|
|
var clusterProvider ClusterProvider
|
|
// 1. 检查配置
|
|
if config.Viper == nil {
|
|
return clusterProvider, field.Invalid(
|
|
field.NewPath("config"),
|
|
nil,
|
|
"Not inital config object")
|
|
}
|
|
// 2. 检查创建集群相关的config
|
|
if config.Sub("cluster") == nil {
|
|
return clusterProvider, field.Invalid(
|
|
field.NewPath("cluster"),
|
|
nil,
|
|
"Not inital cluster object")
|
|
}
|
|
cluster := config.Sub("cluster")
|
|
|
|
// 3. 判断创建 k8s 集群的插件,调用这个插件开创建对象
|
|
switch {
|
|
case cluster.Sub("kind") != nil:
|
|
kind := new(KindProvider)
|
|
return kind, nil
|
|
default:
|
|
return clusterProvider, fmt.Errorf("Not support provider: %#v", cluster.AllSettings())
|
|
}
|
|
}
|