37 Star 411 Fork 76

GVPrancher/rancher

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
machinedriver_data.go 5.60 KB
一键复制 编辑 原始数据 按行查看 历史
kinarashah 提交于 2019-03-11 15:28 . correct driverData field names
package app
import (
"fmt"
"reflect"
"strings"
"github.com/rancher/rancher/pkg/api/customization/nodetemplate"
"github.com/rancher/types/apis/management.cattle.io/v3"
"github.com/rancher/types/config"
"github.com/sirupsen/logrus"
"k8s.io/apimachinery/pkg/apis/meta/v1"
)
var driverData = map[string]map[string][]string{
nodetemplate.Amazonec2driver: {"cred": []string{"accessKey"}},
nodetemplate.Azuredriver: {"cred": []string{"clientId", "subscriptionId"}},
nodetemplate.Vmwaredriver: {"cred": []string{"username", "vcenter", "vcenterPort"}},
}
var driverDefaults = map[string]map[string]string{
nodetemplate.Vmwaredriver: {"vcenterPort": "443"},
}
type machineDriverCompare struct {
builtin bool
url string
uiURL string
checksum string
name string
whitelist []string
annotations map[string]string
}
func addMachineDrivers(management *config.ManagementContext) error {
if err := addMachineDriver("aliyunecs", "http://machine-driver.oss-cn-shanghai.aliyuncs.com/aliyun/1.0.2/linux/amd64/docker-machine-driver-aliyunecs.tgz",
"", "c31b9da2c977e70c2eeee5279123a95d", []string{"ecs.aliyuncs.com"}, false, false, management); err != nil {
return err
}
if err := addMachineDriver(nodetemplate.Amazonec2driver, "local://", "", "", []string{"*.amazonaws.com", "*.amazonaws.com.cn"}, true, true, management); err != nil {
return err
}
if err := addMachineDriver(nodetemplate.Azuredriver, "local://", "", "", nil, true, true, management); err != nil {
return err
}
if err := addMachineDriver("cloudca", "https://github.com/cloud-ca/docker-machine-driver-cloudca/files/2446837/docker-machine-driver-cloudca_v2.0.0_linux-amd64.zip",
"https://objects-east.cloud.ca/v1/5ef827605f884961b94881e928e7a250/ui-driver-cloudca/v2.1.2/component.js", "2a55efd6d62d5f7fd27ce877d49596f4",
[]string{"objects-east.cloud.ca"}, false, false, management); err != nil {
return err
}
if err := addMachineDriver(nodetemplate.DigitalOceandriver, "local://", "", "", []string{"api.digitalocean.com"}, true, true, management); err != nil {
return err
}
if err := addMachineDriver("exoscale", "local://", "", "", []string{"api.exoscale.ch"}, false, true, management); err != nil {
return err
}
if err := addMachineDriver("linode", "https://github.com/linode/docker-machine-driver-linode/releases/download/v0.1.6/docker-machine-driver-linode_linux-amd64.zip",
"https://linode.github.io/rancher-ui-driver-linode/releases/v0.2.0/component.js", "4d53a20a6ee3090a713c48c2d3f5ed45",
[]string{"linode.github.io"}, false, false, management); err != nil {
return err
}
if err := addMachineDriver("openstack", "local://", "", "", nil, false, true, management); err != nil {
return err
}
if err := addMachineDriver("otc", "https://dockermachinedriver.obs.eu-de.otc.t-systems.com/docker-machine-driver-otc",
"", "b4c05f6598dcfac7a8f10899aaac3d42", []string{"*.otc.t-systems.com"}, false, false, management); err != nil {
return err
}
if err := addMachineDriver("packet", "https://github.com/packethost/docker-machine-driver-packet/releases/download/v0.1.4/docker-machine-driver-packet_linux-amd64.zip",
"", "2cd0b9614ab448b61b1bf73ef4738ab5", []string{"api.packet.net"}, false, false, management); err != nil {
return err
}
if err := addMachineDriver("rackspace", "local://", "", "", nil, false, true, management); err != nil {
return err
}
if err := addMachineDriver("softlayer", "local://", "", "", nil, false, true, management); err != nil {
return err
}
return addMachineDriver(nodetemplate.Vmwaredriver, "local://", "", "", nil, true, true, management)
}
func addMachineDriver(name, url, uiURL, checksum string, whitelist []string, active, builtin bool, management *config.ManagementContext) error {
lister := management.Management.NodeDrivers("").Controller().Lister()
cli := management.Management.NodeDrivers("")
m, _ := lister.Get("", name)
// annotations can have keys cred and password, values []string to be considered as a part of cloud credential
annotations := map[string]string{}
if m != nil {
for k, v := range m.Annotations {
annotations[k] = v
}
}
for key, fields := range driverData[name] {
annotations[key] = strings.Join(fields, ",")
}
defaults := []string{}
for key, val := range driverDefaults[name] {
defaults = append(defaults, fmt.Sprintf("%s:%s", key, val))
}
if len(defaults) > 0 {
annotations["defaults"] = strings.Join(defaults, ",")
}
if m != nil {
old := machineDriverCompare{
builtin: m.Spec.Builtin,
url: m.Spec.URL,
uiURL: m.Spec.UIURL,
checksum: m.Spec.Checksum,
name: m.Spec.DisplayName,
whitelist: m.Spec.WhitelistDomains,
annotations: m.Annotations,
}
new := machineDriverCompare{
builtin: builtin,
url: url,
uiURL: uiURL,
checksum: checksum,
name: name,
whitelist: whitelist,
annotations: annotations,
}
if !reflect.DeepEqual(new, old) {
logrus.Infof("Updating node driver %v", name)
m.Spec.Builtin = builtin
m.Spec.URL = url
m.Spec.UIURL = uiURL
m.Spec.Checksum = checksum
m.Spec.DisplayName = name
m.Spec.WhitelistDomains = whitelist
m.Annotations = annotations
_, err := cli.Update(m)
return err
}
return nil
}
logrus.Infof("Creating node driver %v", name)
_, err := cli.Create(&v3.NodeDriver{
ObjectMeta: v1.ObjectMeta{
Name: name,
Annotations: annotations,
},
Spec: v3.NodeDriverSpec{
Active: active,
Builtin: builtin,
URL: url,
UIURL: uiURL,
DisplayName: name,
Checksum: checksum,
WhitelistDomains: whitelist,
},
})
return err
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/rancher/rancher.git
git@gitee.com:rancher/rancher.git
rancher
rancher
rancher
v2.2.0-rc15

搜索帮助