Ai
1 Star 0 Fork 0

powerpaas/kontainer-engine

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
rke_driver.go 3.64 KB
一键复制 编辑 原始数据 按行查看 历史
Daishan Peng 提交于 2017-11-16 06:27 +08:00 . fix bugs
package rke
import (
"encoding/base64"
"fmt"
"io/ioutil"
"strings"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/rest"
generic "github.com/rancher/kontainer-engine/driver"
"github.com/rancher/rke/cmd"
)
// Driver is the struct of rke driver
type Driver struct {
// The string representation of Config Yaml
ConfigYaml string
// Kubernetes master endpoint
Endpoint string
// Root certificates
RootCA string
// Client certificates
ClientCert string
// Client key
ClientKey string
// Cluster info
ClusterInfo generic.ClusterInfo
}
// NewDriver creates a new rke driver
func NewDriver() *Driver {
return &Driver{}
}
// GetDriverCreateOptions returns create flags for rke driver
func (d *Driver) GetDriverCreateOptions() (*generic.DriverFlags, error) {
driverFlag := generic.DriverFlags{
Options: make(map[string]*generic.Flag),
}
driverFlag.Options["config-file-path"] = &generic.Flag{
Type: generic.StringType,
Usage: "the path to the config file",
}
return &driverFlag, nil
}
// GetDriverUpdateOptions returns update flags for rke driver
func (d *Driver) GetDriverUpdateOptions() (*generic.DriverFlags, error) {
driverFlag := generic.DriverFlags{
Options: make(map[string]*generic.Flag),
}
driverFlag.Options["config-file-path"] = &generic.Flag{
Type: generic.StringType,
Usage: "the path to the config file",
}
return &driverFlag, nil
}
// SetDriverOptions sets the drivers options to rke driver
func (d *Driver) SetDriverOptions(driverOptions *generic.DriverOptions) error {
// first look up the file path then look up raw rkeConfig
if path, ok := driverOptions.StringOptions["config-file-path"]; ok {
data, err := ioutil.ReadFile(path)
if err != nil {
return err
}
d.ConfigYaml = string(data)
return nil
}
d.ConfigYaml = driverOptions.StringOptions["rkeConfig"]
return nil
}
// Create creates the rke cluster
func (d *Driver) Create() error {
APIURL, caCrt, clientCert, clientKey, err := cmd.ClusterUp(d.ConfigYaml)
if err != nil {
return err
}
d.Endpoint = APIURL
d.RootCA = caCrt
d.ClientCert = clientCert
d.ClientKey = clientKey
return nil
}
// Update updates the rke cluster
func (d *Driver) Update() error {
APIURL, caCrt, clientCert, clientKey, err := cmd.ClusterUp(d.ConfigYaml)
if err != nil {
return err
}
d.Endpoint = APIURL
d.RootCA = caCrt
d.ClientCert = clientCert
d.ClientKey = clientKey
return nil
}
// Get retrieve the cluster info by name
func (d *Driver) Get() (*generic.ClusterInfo, error) {
return &d.ClusterInfo, nil
}
// PostCheck does post action
func (d *Driver) PostCheck() error {
info := &generic.ClusterInfo{}
info.Endpoint = d.Endpoint
info.ClientCertificate = base64.StdEncoding.EncodeToString([]byte(d.ClientCert))
info.ClientKey = base64.StdEncoding.EncodeToString([]byte(d.ClientKey))
info.RootCaCertificate = base64.StdEncoding.EncodeToString([]byte(d.RootCA))
host := d.Endpoint
if !strings.HasPrefix(host, "https://") {
host = fmt.Sprintf("https://%s", host)
}
config := &rest.Config{
Host: host,
TLSClientConfig: rest.TLSClientConfig{
CAData: []byte(d.RootCA),
CertData: []byte(d.ClientCert),
KeyData: []byte(d.ClientKey),
},
}
clientset, err := kubernetes.NewForConfig(config)
if err != nil {
return err
}
serverVersion, err := clientset.DiscoveryClient.ServerVersion()
if err != nil {
return fmt.Errorf("Failed to get Kubernetes server version: %v", err)
}
token, err := generic.GenerateServiceAccountToken(clientset)
if err != nil {
return err
}
info.Version = serverVersion.GitVersion
info.ServiceAccountToken = token
d.ClusterInfo = *info
return nil
}
// Remove removes the cluster
func (d *Driver) Remove() error {
//TODO:
return nil
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/powerpaas/kontainer-engine.git
git@gitee.com:powerpaas/kontainer-engine.git
powerpaas
kontainer-engine
kontainer-engine
v0.0.4-dev

搜索帮助