Merge pull request #3321 from zexi/feature/k8s-import

climc: k8s import cluster support
This commit is contained in:
Zexi Li
2019-10-22 19:12:08 +08:00
committed by GitHub
14 changed files with 149 additions and 746 deletions
+1 -1
View File
@@ -1,4 +1,4 @@
FROM frolvlad/alpine-glibc:glibc-2.28
FROM yunion/kubectl:1.14.3
MAINTAINER "Zexi Li <lizexi@yunionyun.com>"
+119 -144
View File
@@ -16,9 +16,6 @@ package k8s
import (
"fmt"
"io/ioutil"
"os"
"os/exec"
"yunion.io/x/jsonutils"
@@ -27,63 +24,21 @@ import (
o "yunion.io/x/onecloud/pkg/mcclient/options/k8s"
)
func initCluster() {
cmdN := func(suffix string) string {
return kubeResourceCmdN("cluster", suffix)
func initKubeCluster() {
cmdN := func(action string) string {
return fmt.Sprintf("kubecluster-%s", action)
}
R(&o.ClusterListOptions{}, cmdN("list"), "List k8s infra clusters", func(s *mcclient.ClientSession, args *o.ClusterListOptions) error {
result, err := k8s.Clusters.List(s, args.Params())
R(&o.ClusterListOptions{}, cmdN("list"), "List k8s clusters", func(s *mcclient.ClientSession, args *o.ClusterListOptions) error {
result, err := k8s.KubeClusters.List(s, args.Params())
if err != nil {
return err
}
printList(result, k8s.Clusters.GetColumns(s))
return nil
})
R(&o.ClusterCreateOptions{}, cmdN("create"), "Create k8s cluster", func(s *mcclient.ClientSession, args *o.ClusterCreateOptions) error {
cluster, err := k8s.Clusters.Create(s, args.Params())
if err != nil {
return err
}
printObject(cluster)
return nil
})
R(&o.ClusterImportOptions{}, cmdN("import"), "Import exists YKE deployed kubernetes cluster", func(s *mcclient.ClientSession, args *o.ClusterImportOptions) error {
params, err := args.Params()
if err != nil {
return err
}
cluster, err := k8s.Clusters.PerformAction(s, args.NAME, "import", params)
if err != nil {
return err
}
printObject(cluster)
return nil
})
R(&o.ClusterUpdateOptions{}, cmdN("update"), "Update k8s cluster", func(s *mcclient.ClientSession, args *o.ClusterUpdateOptions) error {
cluster, err := k8s.Clusters.Update(s, args.NAME, args.Params())
if err != nil {
return err
}
printObject(cluster)
return nil
})
R(&o.ClusterDeployOptions{}, cmdN("deploy"), "Start deploy a cluster", func(s *mcclient.ClientSession, args *o.ClusterDeployOptions) error {
ret, err := k8s.Clusters.PerformAction(s, args.ID, "deploy", args.Params())
if err != nil {
return err
}
printObject(ret)
printList(result, k8s.KubeClusters.GetColumns(s))
return nil
})
R(&o.IdentOptions{}, cmdN("show"), "Show details of a cluster", func(s *mcclient.ClientSession, args *o.IdentOptions) error {
result, err := k8s.Clusters.Get(s, args.ID, nil)
result, err := k8s.KubeClusters.Get(s, args.ID, nil)
if err != nil {
return err
}
@@ -91,14 +46,75 @@ func initCluster() {
return nil
})
R(&o.ClusterDeleteOptions{}, cmdN("delete"), "Delete cluster", func(s *mcclient.ClientSession, args *o.ClusterDeleteOptions) error {
ret := k8s.Clusters.BatchDeleteWithParam(s, args.ID, nil, nil)
printBatchResults(ret, k8s.Clusters.GetColumns(s))
R(&o.KubeClusterCreateOptions{}, cmdN("create"), "Create k8s cluster", func(s *mcclient.ClientSession, args *o.KubeClusterCreateOptions) error {
params, err := args.Params()
if err != nil {
return err
}
cluster, err := k8s.KubeClusters.Create(s, params)
if err != nil {
return err
}
printObject(cluster)
return nil
})
R(&o.ClusterKubeconfigOptions{}, cmdN("kubeconfig"), "Generate kubeconfig of a cluster", func(s *mcclient.ClientSession, args *o.ClusterKubeconfigOptions) error {
ret, err := k8s.Clusters.PerformAction(s, args.ID, "generate-kubeconfig", args.Params())
R(&o.KubeClusterImportOptions{}, cmdN("import"), "Import k8s cluster", func(s *mcclient.ClientSession, args *o.KubeClusterImportOptions) error {
params, err := args.Params()
if err != nil {
return err
}
cluster, err := k8s.KubeClusters.Create(s, params)
if err != nil {
return err
}
printObject(cluster)
return nil
})
R(&o.ClusterDeleteOptions{}, cmdN("delete"), "Delete cluster", func(s *mcclient.ClientSession, args *o.ClusterDeleteOptions) error {
ret := k8s.KubeClusters.BatchDeleteWithParam(s, args.ID, nil, nil)
printBatchResults(ret, k8s.KubeClusters.GetColumns(s))
return nil
})
R(&o.KubeClusterAddMachinesOptions{}, cmdN("add-machines"), "Add machines to cluster", func(s *mcclient.ClientSession, args *o.KubeClusterAddMachinesOptions) error {
params, err := args.Params()
if err != nil {
return err
}
ret, err := k8s.KubeClusters.PerformAction(s, args.ID, "add-machines", params)
if err != nil {
return err
}
printObject(ret)
return nil
})
R(&o.KubeClusterDeleteMachinesOptions{}, cmdN("delete-machines"), "Delete machines in cluster", func(s *mcclient.ClientSession, args *o.KubeClusterDeleteMachinesOptions) error {
params, err := args.Params()
if err != nil {
return err
}
ret, err := k8s.KubeClusters.PerformAction(s, args.ID, "delete-machines", params)
if err != nil {
return err
}
printObject(ret)
return nil
})
R(&o.IdentOptions{}, cmdN("terminate"), "Terminate cluster", func(s *mcclient.ClientSession, args *o.IdentOptions) error {
ret, err := k8s.KubeClusters.PerformAction(s, args.ID, "terminate", nil)
if err != nil {
return err
}
printObject(ret)
return nil
})
R(&o.IdentOptions{}, cmdN("kubeconfig"), "Generate kubeconfig of a cluster", func(s *mcclient.ClientSession, args *o.IdentOptions) error {
ret, err := k8s.KubeClusters.GetSpecific(s, args.ID, "kubeconfig", nil)
if err != nil {
return err
}
@@ -110,12 +126,12 @@ func initCluster() {
return nil
})
R(&o.IdentOptions{}, cmdN("engineconfig"), "Get kubernetes engine config of a cluster", func(s *mcclient.ClientSession, args *o.IdentOptions) error {
ret, err := k8s.Clusters.GetSpecific(s, args.ID, "engine-config", nil)
R(&o.IdentOptions{}, cmdN("addons"), "Get addon manifest of a cluster", func(s *mcclient.ClientSession, args *o.IdentOptions) error {
ret, err := k8s.KubeClusters.GetSpecific(s, args.ID, "addons", nil)
if err != nil {
return err
}
conf, err := ret.GetString("config")
conf, err := ret.GetString("addons")
if err != nil {
return err
}
@@ -123,94 +139,39 @@ func initCluster() {
return nil
})
R(&o.IdentOptions{}, cmdN("webhookauthurl"), "Get cluster kubernetes api server webhook auth url", func(s *mcclient.ClientSession, args *o.IdentOptions) error {
ret, err := k8s.Clusters.GetSpecific(s, args.ID, "webhook-auth-url", nil)
if err != nil {
return err
}
url, err := ret.GetString("url")
if err != nil {
return err
}
fmt.Println(url)
return nil
})
R(&o.ClusterAddNodesOptions{}, cmdN("addnodes"), "Add nodes to cluster", func(s *mcclient.ClientSession, args *o.ClusterAddNodesOptions) error {
params, err := args.Params()
if err != nil {
return err
}
ret, err := k8s.Clusters.PerformAction(s, args.ID, "add-nodes", params)
if err != nil {
return err
}
printObject(ret)
return nil
})
R(&o.ClusterDeleteNodesOptions{}, cmdN("delete-nodes"), "Delete nodes in cluster", func(s *mcclient.ClientSession, args *o.ClusterDeleteNodesOptions) error {
params, err := args.Params()
if err != nil {
return err
}
ret, err := k8s.Clusters.PerformAction(s, args.ID, "delete-nodes", params)
if err != nil {
return err
}
printObject(ret)
return nil
})
R(&o.IdentOptions{}, cmdN("engineconfig-edit"), "Edit and update kubernetes engine config of a cluster", func(s *mcclient.ClientSession, args *o.IdentOptions) error {
ret, err := k8s.Clusters.GetSpecific(s, args.ID, "engine-config", nil)
if err != nil {
return err
}
conf, err := ret.GetString("config")
if err != nil {
return err
}
tempfile, err := ioutil.TempFile("", fmt.Sprintf("%s-engineconfig", args.ID))
if err != nil {
return err
}
defer os.Remove(tempfile.Name())
if _, err := tempfile.Write([]byte(conf)); err != nil {
return err
}
if err := tempfile.Close(); err != nil {
return err
}
cmd := exec.Command("vim", tempfile.Name())
cmd.Stdin = os.Stdin
cmd.Stdout = os.Stdout
if err := cmd.Run(); err != nil {
return err
}
R(&o.ClusterK8sVersions{}, cmdN("k8s-versions"), "Get kubernetes deployable versions", func(s *mcclient.ClientSession, args *o.ClusterK8sVersions) error {
params := jsonutils.NewDict()
configBytes, err := ioutil.ReadFile(tempfile.Name())
params.Add(jsonutils.NewString(args.PROVIDER), "provider")
ret, err := k8s.KubeClusters.Get(s, "k8s-versions", params)
if err != nil {
return err
}
params.Add(jsonutils.NewString(string(configBytes)), "config")
result, err := k8s.Clusters.PerformAction(s, args.ID, "update-engine-config", params)
if err != nil {
return err
}
conf, err = result.GetString("config")
if err != nil {
return err
}
fmt.Println(conf)
fmt.Println(ret.String())
return nil
})
R(&o.IdentOptions{}, cmdN("sync-config"), "Sync kubernetes cluster by engineconfig", func(s *mcclient.ClientSession, args *o.IdentOptions) error {
ret, err := k8s.Clusters.PerformAction(s, args.ID, "sync-config", nil)
R(&o.ClusterK8sVersions{}, cmdN("usable-instances"), "Get deploy usable instance", func(s *mcclient.ClientSession, args *o.ClusterK8sVersions) error {
params := jsonutils.NewDict()
params.Add(jsonutils.NewString(args.PROVIDER), "provider")
ret, err := k8s.KubeClusters.Get(s, "usable-instances", params)
if err != nil {
return err
}
fmt.Println(ret.String())
return nil
})
R(&o.ClusterCheckOptions{}, cmdN("check-system-ready"), "Check system cluster status", func(s *mcclient.ClientSession, args *o.ClusterCheckOptions) error {
ret, err := k8s.KubeClusters.PerformClassAction(s, "check-system-ready", nil)
if err != nil {
return err
}
fmt.Println(ret.String())
return nil
})
R(&o.IdentOptions{}, cmdN("apply-addons"), "Apply base requirements addons", func(s *mcclient.ClientSession, args *o.IdentOptions) error {
ret, err := k8s.KubeClusters.PerformAction(s, args.ID, "apply-addons", nil)
if err != nil {
return err
}
@@ -218,12 +179,26 @@ func initCluster() {
return nil
})
R(&o.ClusterRestartAgentsOptions{}, cmdN("restart-agent"), "Restart node agents in cluster", func(s *mcclient.ClientSession, args *o.ClusterRestartAgentsOptions) error {
params, err := args.Params()
R(&o.IdentOptions{}, cmdN("syncstatus"), "Sync cluster status", func(s *mcclient.ClientSession, args *o.IdentOptions) error {
ret, err := k8s.KubeClusters.PerformAction(s, args.ID, "syncstatus", nil)
if err != nil {
return err
}
ret, err := k8s.Clusters.PerformAction(s, args.ID, "restart-agent", params)
printObject(ret)
return nil
})
R(&o.IdentOptions{}, cmdN("public"), "Make cluster public", func(s *mcclient.ClientSession, args *o.IdentOptions) error {
ret, err := k8s.KubeClusters.PerformAction(s, args.ID, "public", nil)
if err != nil {
return err
}
printObject(ret)
return nil
})
R(&o.IdentOptions{}, cmdN("private"), "Make cluster private", func(s *mcclient.ClientSession, args *o.IdentOptions) error {
ret, err := k8s.KubeClusters.PerformAction(s, args.ID, "private", nil)
if err != nil {
return err
}
+1 -3
View File
@@ -29,10 +29,8 @@ import (
func init() {
// cluster resources
initCluster()
initKubeCluster()
initKubeMachine()
initNode()
initKubeCerts()
// helm resources
@@ -79,7 +77,7 @@ func kubeResourceCmdN(prefix, suffix string) string {
func clusterContext(clusterId string) modulebase.ManagerContext {
return modulebase.ManagerContext{
InstanceManager: k8s.Clusters,
InstanceManager: k8s.KubeClusters,
InstanceId: clusterId,
}
}
-23
View File
@@ -1,23 +0,0 @@
// Copyright 2019 Yunion
//
// 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 k8s
import (
"yunion.io/x/onecloud/pkg/mcclient/modules/k8s"
)
func initK8sNode() {
initK8sClusterResource("node", k8s.K8sNodes)
}
-195
View File
@@ -1,195 +0,0 @@
// Copyright 2019 Yunion
//
// 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 k8s
import (
"fmt"
"yunion.io/x/jsonutils"
"yunion.io/x/onecloud/pkg/mcclient"
"yunion.io/x/onecloud/pkg/mcclient/modules/k8s"
o "yunion.io/x/onecloud/pkg/mcclient/options/k8s"
)
func initKubeCluster() {
cmdN := func(action string) string {
return fmt.Sprintf("kubecluster-%s", action)
}
R(&o.ClusterListOptions{}, cmdN("list"), "List k8s clusters", func(s *mcclient.ClientSession, args *o.ClusterListOptions) error {
result, err := k8s.KubeClusters.List(s, args.Params())
if err != nil {
return err
}
printList(result, k8s.KubeClusters.GetColumns(s))
return nil
})
R(&o.IdentOptions{}, cmdN("show"), "Show details of a cluster", func(s *mcclient.ClientSession, args *o.IdentOptions) error {
result, err := k8s.KubeClusters.Get(s, args.ID, nil)
if err != nil {
return err
}
printObject(result)
return nil
})
R(&o.KubeClusterCreateOptions{}, cmdN("create"), "Create k8s cluster", func(s *mcclient.ClientSession, args *o.KubeClusterCreateOptions) error {
params, err := args.Params()
if err != nil {
return err
}
cluster, err := k8s.KubeClusters.Create(s, params)
if err != nil {
return err
}
printObject(cluster)
return nil
})
R(&o.ClusterDeleteOptions{}, cmdN("delete"), "Delete cluster", func(s *mcclient.ClientSession, args *o.ClusterDeleteOptions) error {
ret := k8s.KubeClusters.BatchDeleteWithParam(s, args.ID, nil, nil)
printBatchResults(ret, k8s.Clusters.GetColumns(s))
return nil
})
R(&o.KubeClusterAddMachinesOptions{}, cmdN("add-machines"), "Add machines to cluster", func(s *mcclient.ClientSession, args *o.KubeClusterAddMachinesOptions) error {
params, err := args.Params()
if err != nil {
return err
}
ret, err := k8s.KubeClusters.PerformAction(s, args.ID, "add-machines", params)
if err != nil {
return err
}
printObject(ret)
return nil
})
R(&o.KubeClusterDeleteMachinesOptions{}, cmdN("delete-machines"), "Delete machines in cluster", func(s *mcclient.ClientSession, args *o.KubeClusterDeleteMachinesOptions) error {
params, err := args.Params()
if err != nil {
return err
}
ret, err := k8s.KubeClusters.PerformAction(s, args.ID, "delete-machines", params)
if err != nil {
return err
}
printObject(ret)
return nil
})
R(&o.IdentOptions{}, cmdN("terminate"), "Terminate cluster", func(s *mcclient.ClientSession, args *o.IdentOptions) error {
ret, err := k8s.KubeClusters.PerformAction(s, args.ID, "terminate", nil)
if err != nil {
return err
}
printObject(ret)
return nil
})
R(&o.IdentOptions{}, cmdN("kubeconfig"), "Generate kubeconfig of a cluster", func(s *mcclient.ClientSession, args *o.IdentOptions) error {
ret, err := k8s.KubeClusters.GetSpecific(s, args.ID, "kubeconfig", nil)
if err != nil {
return err
}
conf, err := ret.GetString("kubeconfig")
if err != nil {
return err
}
fmt.Println(conf)
return nil
})
R(&o.IdentOptions{}, cmdN("addons"), "Get addon manifest of a cluster", func(s *mcclient.ClientSession, args *o.IdentOptions) error {
ret, err := k8s.KubeClusters.GetSpecific(s, args.ID, "addons", nil)
if err != nil {
return err
}
conf, err := ret.GetString("addons")
if err != nil {
return err
}
fmt.Println(conf)
return nil
})
R(&o.ClusterK8sVersions{}, cmdN("k8s-versions"), "Get kubernetes deployable versions", func(s *mcclient.ClientSession, args *o.ClusterK8sVersions) error {
params := jsonutils.NewDict()
params.Add(jsonutils.NewString(args.PROVIDER), "provider")
ret, err := k8s.KubeClusters.Get(s, "k8s-versions", params)
if err != nil {
return err
}
fmt.Println(ret.String())
return nil
})
R(&o.ClusterK8sVersions{}, cmdN("usable-instances"), "Get deploy usable instance", func(s *mcclient.ClientSession, args *o.ClusterK8sVersions) error {
params := jsonutils.NewDict()
params.Add(jsonutils.NewString(args.PROVIDER), "provider")
ret, err := k8s.KubeClusters.Get(s, "usable-instances", params)
if err != nil {
return err
}
fmt.Println(ret.String())
return nil
})
R(&o.ClusterCheckOptions{}, cmdN("check-system-ready"), "Check system cluster status", func(s *mcclient.ClientSession, args *o.ClusterCheckOptions) error {
ret, err := k8s.KubeClusters.PerformClassAction(s, "check-system-ready", nil)
if err != nil {
return err
}
fmt.Println(ret.String())
return nil
})
R(&o.IdentOptions{}, cmdN("apply-addons"), "Apply base requirements addons", func(s *mcclient.ClientSession, args *o.IdentOptions) error {
ret, err := k8s.KubeClusters.PerformAction(s, args.ID, "apply-addons", nil)
if err != nil {
return err
}
printObject(ret)
return nil
})
R(&o.IdentOptions{}, cmdN("syncstatus"), "Sync cluster status", func(s *mcclient.ClientSession, args *o.IdentOptions) error {
ret, err := k8s.KubeClusters.PerformAction(s, args.ID, "syncstatus", nil)
if err != nil {
return err
}
printObject(ret)
return nil
})
R(&o.IdentOptions{}, cmdN("public"), "Make cluster public", func(s *mcclient.ClientSession, args *o.IdentOptions) error {
ret, err := k8s.KubeClusters.PerformAction(s, args.ID, "public", nil)
if err != nil {
return err
}
printObject(ret)
return nil
})
R(&o.IdentOptions{}, cmdN("private"), "Make cluster private", func(s *mcclient.ClientSession, args *o.IdentOptions) error {
ret, err := k8s.KubeClusters.PerformAction(s, args.ID, "private", nil)
if err != nil {
return err
}
printObject(ret)
return nil
})
}
+1 -1
View File
@@ -26,7 +26,7 @@ func initKubeMachine() {
cmdN := func(action string) string {
return fmt.Sprintf("kubemachine-%s", action)
}
R(&o.NodeListOptions{}, cmdN("list"), "List k8s node machines", func(s *mcclient.ClientSession, args *o.NodeListOptions) error {
R(&o.MachineListOptions{}, cmdN("list"), "List k8s node machines", func(s *mcclient.ClientSession, args *o.MachineListOptions) error {
params, err := args.Params()
if err != nil {
return err
+2 -71
View File
@@ -15,78 +15,9 @@
package k8s
import (
"fmt"
"yunion.io/x/onecloud/pkg/mcclient"
"yunion.io/x/onecloud/pkg/mcclient/modules/k8s"
o "yunion.io/x/onecloud/pkg/mcclient/options/k8s"
)
func initNode() {
cmdN := func(suffix string) string {
return kubeResourceCmdN("node", suffix)
}
R(&o.NodeListOptions{}, cmdN("list"), "List k8s infra nodes", func(s *mcclient.ClientSession, args *o.NodeListOptions) error {
params, err := args.Params()
if err != nil {
return err
}
result, err := k8s.Nodes.List(s, params)
if err != nil {
return err
}
printList(result, k8s.Nodes.GetColumns(s))
return nil
})
R(&o.NodeCreateOptions{}, cmdN("create"), "Create k8s cluster node", func(s *mcclient.ClientSession, args *o.NodeCreateOptions) error {
params := args.Params()
node, err := k8s.Nodes.Create(s, params)
if err != nil {
return err
}
printObject(node)
return nil
})
R(&o.IdentOptions{}, cmdN("delete"), "Delete node", func(s *mcclient.ClientSession, args *o.IdentOptions) error {
ret, err := k8s.Nodes.Delete(s, args.ID, nil)
if err != nil {
return err
}
printObject(ret)
return nil
})
R(&o.IdentOptions{}, cmdN("show"), "Show node details", func(s *mcclient.ClientSession, args *o.IdentOptions) error {
obj, err := k8s.Nodes.Get(s, args.ID, nil)
if err != nil {
return err
}
printObject(obj)
return nil
})
R(&o.IdentsOptions{}, cmdN("purge"), "Purge a node record in database, not actually do deletion", func(s *mcclient.ClientSession, args *o.IdentsOptions) error {
ret := k8s.Nodes.BatchPerformAction(s, args.ID, "purge", nil)
printBatchResults(ret, k8s.Nodes.GetColumns(s))
return nil
})
R(&o.IdentOptions{}, cmdN("dockerconfig"), "Get docker daemon config", func(s *mcclient.ClientSession, args *o.IdentOptions) error {
ret, err := k8s.Nodes.GetSpecific(s, args.ID, "docker-config", nil)
if err != nil {
return err
}
fmt.Println(ret)
return nil
})
R(&o.NodeConfigDockerRegistryOptions{}, cmdN("config-docker-registry"), "Config node docker daemon registry",
func(s *mcclient.ClientSession, args *o.NodeConfigDockerRegistryOptions) error {
params := args.Params()
ret := k8s.Nodes.BatchPerformAction(s, args.ID, "config-docker-registry", params)
printBatchResults(ret, k8s.Nodes.GetColumns(s))
return nil
})
func initK8sNode() {
initK8sClusterResource("node", k8s.K8sNodes)
}
+1 -4
View File
@@ -64,10 +64,7 @@ var (
meterDomainResources = []string{}
meterUserResources = []string{}
k8sSystemResources = []string{
"kube_clusters",
"kube_nodes",
}
k8sSystemResources = []string{}
k8sDomainResources = []string{}
k8sUserResources = []string{}
-5
View File
@@ -19,17 +19,12 @@ import (
)
var (
Clusters *ResourceManager
KubeClusters *ResourceManager
)
func init() {
Clusters = NewResourceManager("kube_cluster", "kube_clusters",
NewResourceCols("mode", "k8s_version", "status", "api_endpoint"),
NewColumns("is_public"))
KubeClusters = NewResourceManager("kubecluster", "kubeclusters",
NewResourceCols("cluster_type", "resource_type", "cloud_type", "version", "status", "mode", "provider", "machines"),
NewColumns())
modules.Register(Clusters)
modules.Register(KubeClusters)
}
-28
View File
@@ -1,28 +0,0 @@
// Copyright 2019 Yunion
//
// 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 k8s
import (
"yunion.io/x/onecloud/pkg/mcclient/modules"
)
var (
Nodes *ResourceManager
)
func init() {
Nodes = NewResourceManager("kube_node", "kube_nodes", NewResourceCols("cluster", "roles", "address", "status"), NewColumns())
modules.Register(Nodes)
}
+13 -170
View File
@@ -20,7 +20,6 @@ import (
"strings"
"yunion.io/x/jsonutils"
"yunion.io/x/pkg/util/sets"
"yunion.io/x/onecloud/pkg/mcclient/options"
)
@@ -38,40 +37,6 @@ func (o ClusterListOptions) Params() *jsonutils.JSONDict {
return params
}
type K8sSupportVersion struct {
K8sVersion string `help:"Cluster kubernetes components version" choices:"v1.10.5|v1.11.3|v1.12.3"`
}
type ClusterCreateOptions struct {
K8sSupportVersion
NAME string `help:"Name of cluster"`
Mode string `help:"Cluster mode" choices:"internal"`
InfraImage string `help:"Cluster kubelet infra container image"`
Cidr string `help:"Cluster service CIDR, e.g. 10.43.0.0/16"`
Domain string `help:"Cluster pod domain, e.g. cluster.local"`
}
func (o ClusterCreateOptions) Params() *jsonutils.JSONDict {
params := jsonutils.NewDict()
params.Add(jsonutils.NewString(o.NAME), "name")
if o.Mode != "" {
params.Add(jsonutils.NewString(o.Mode), "mode")
}
if o.K8sVersion != "" {
params.Add(jsonutils.NewString(o.K8sVersion), "k8s_version")
}
if o.InfraImage != "" {
params.Add(jsonutils.NewString(o.InfraImage), "infra_container_image")
}
if o.Cidr != "" {
params.Add(jsonutils.NewString(o.Cidr), "cluster_cidr")
}
if o.Domain != "" {
params.Add(jsonutils.NewString(o.Domain), "cluster_domain")
}
return params
}
type AddMachineOptions struct {
Machine []string `help:"Machine create desc, e.g. host01:baremetal:controlplane"`
MachineNet string `help:"Machine net config"`
@@ -96,6 +61,12 @@ type KubeClusterCreateOptions struct {
AddMachineOptions
}
type KubeClusterImportOptions struct {
NAME string `help:"Name of cluster"`
APISERVER string `help:"API server of this cluster"`
KUBECONFIG string `help:"Cluster kubeconfig file path"`
}
func parseMachineDesc(desc string, disk string, netConf string, ncpu int, memorySize string, hypervisor string) (*MachineCreateOptions, error) {
matchType := func(p string) bool {
switch p {
@@ -173,34 +144,21 @@ func (o KubeClusterCreateOptions) Params() (*jsonutils.JSONDict, error) {
return params, nil
}
type ClusterImportOptions struct {
NAME string `help:"Name of cluster to import"`
KUBECONFIG string `help:"Kubernetes auth config"`
}
func (o ClusterImportOptions) Params() (*jsonutils.JSONDict, error) {
func (o KubeClusterImportOptions) Params() (*jsonutils.JSONDict, error) {
kubeconfig, err := ioutil.ReadFile(o.KUBECONFIG)
if err != nil {
return nil, fmt.Errorf("Read kube config %q error: %v", o.KUBECONFIG, err)
}
params := jsonutils.NewDict()
params.Add(jsonutils.NewString(string(kubeconfig)), "kube_config")
params.Add(jsonutils.NewString(o.NAME), "name")
params.Add(jsonutils.NewString("import"), "mode")
params.Add(jsonutils.NewString(o.APISERVER), "api_server")
params.Add(jsonutils.NewString(string(kubeconfig)), "kubeconfig")
params.Add(jsonutils.NewString("external"), "provider")
params.Add(jsonutils.NewString("unknown"), "resource_type")
return params, nil
}
type ClusterUpdateOptions struct {
NAME string `help:"Name of cluster"`
K8sSupportVersion
}
func (o ClusterUpdateOptions) Params() *jsonutils.JSONDict {
params := jsonutils.NewDict()
if o.K8sVersion != "" {
params.Add(jsonutils.NewString(o.K8sVersion), "k8s_version")
}
return params
}
type IdentOptions struct {
ID string `help:"ID or name of the model"`
}
@@ -215,36 +173,10 @@ type IdentsOptions struct {
ID []string `help:"ID of models to operate"`
}
type ClusterDeployOptions struct {
IdentOptions
Force bool `help:"Force deploy"`
}
func (o ClusterDeployOptions) Params() *jsonutils.JSONDict {
params := jsonutils.NewDict()
if o.Force {
params.Add(jsonutils.JSONTrue, "force")
}
return params
}
type ClusterDeleteOptions struct {
IdentsOptions
}
type ClusterKubeconfigOptions struct {
IdentOptions
Directly bool `help:"Get directly connect kubeconfig"`
}
func (o ClusterKubeconfigOptions) Params() *jsonutils.JSONDict {
params := jsonutils.NewDict()
if o.Directly {
params.Add(jsonutils.JSONTrue, "directly")
}
return params
}
type KubeClusterAddMachinesOptions struct {
IdentOptions
AddMachineOptions
@@ -279,77 +211,6 @@ func (o KubeClusterAddMachinesOptions) Params() (*jsonutils.JSONDict, error) {
return params, nil
}
type ClusterAddNodesOptions struct {
IdentOptions
NodeConfig []string `help:"Node spec, 'host:[roles]' e.g: --node-config host01:controlplane,etcd,worker --node-config host02:worker"`
AutoDeploy bool `help:"Auto deploy"`
}
func (o ClusterAddNodesOptions) Params() (*jsonutils.JSONDict, error) {
params := jsonutils.NewDict()
if o.AutoDeploy {
params.Add(jsonutils.JSONTrue, "auto_deploy")
}
nodesArray := jsonutils.NewArray()
for _, config := range o.NodeConfig {
opt, err := parseNodeAddConfigStr(config)
if err != nil {
return nil, err
}
nodesArray.Add(jsonutils.Marshal(opt))
}
params.Add(nodesArray, "nodes")
return params, nil
}
type dockerConfig struct {
RegistryMirrors []string `json:"registry-mirrors"`
InsecureRegistries []string `json:"insecure-registries"`
}
type nodeAddConfig struct {
Host string `json:"host"`
Roles []string `json:"roles"`
Name string `json:"name"`
HostnameOverride string `json:"hostname_override"`
DockerdConfig dockerConfig `json:"dockerd_config"`
}
func parseNodeAddConfigStr(config string) (nodeAddConfig, error) {
ret := nodeAddConfig{}
parts := strings.Split(config, ":")
if len(parts) != 2 {
return ret, fmt.Errorf("Invalid config: %q", config)
}
host := parts[0]
roleStr := parts[1]
ret.Host = host
roles := []string{}
for _, role := range strings.Split(roleStr, ",") {
if !sets.NewString("etcd", "controlplane", "worker").Has(role) {
return ret, fmt.Errorf("Invalid role: %q", role)
}
roles = append(roles, role)
}
ret.Roles = roles
return ret, nil
}
type ClusterDeleteNodesOptions struct {
IdentOptions
Node []string `help:"Node id or name"`
}
func (o ClusterDeleteNodesOptions) Params() (*jsonutils.JSONDict, error) {
params := jsonutils.NewDict()
nodesArray := jsonutils.NewArray()
for _, node := range o.Node {
nodesArray.Add(jsonutils.NewString(node))
}
params.Add(nodesArray, "nodes")
return params, nil
}
type KubeClusterDeleteMachinesOptions struct {
IdentOptions
Machines []string `help:"Machine id or name"`
@@ -364,21 +225,3 @@ func (o KubeClusterDeleteMachinesOptions) Params() (*jsonutils.JSONDict, error)
params.Add(machinesArray, "machines")
return params, nil
}
type ClusterRestartAgentsOptions struct {
ClusterDeleteNodesOptions
All bool `help:"Restart all nodes agent"`
}
func (o ClusterRestartAgentsOptions) Params() (*jsonutils.JSONDict, error) {
params, err := o.ClusterDeleteNodesOptions.Params()
if err != nil {
return nil, err
}
all := jsonutils.JSONFalse
if o.All {
all = jsonutils.JSONTrue
}
params.Add(all, "all")
return params, nil
}
+10
View File
@@ -21,8 +21,18 @@ import (
"yunion.io/x/pkg/util/fileutils"
"yunion.io/x/onecloud/pkg/cloudcommon/cmdline"
"yunion.io/x/onecloud/pkg/mcclient/options"
)
type MachineListOptions struct {
options.BaseListOptions
Cluster string `help:"Filter by cluster"`
}
func (o MachineListOptions) Params() (*jsonutils.JSONDict, error) {
return options.ListStructToParams(&o)
}
type MachineCreateOptions struct {
CLUSTER string `help:"Cluster id"`
ROLE string `help:"Machine role" choices:"node|controlplane"`
-100
View File
@@ -1,100 +0,0 @@
// Copyright 2019 Yunion
//
// 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 k8s
import (
"yunion.io/x/jsonutils"
"yunion.io/x/onecloud/pkg/mcclient/options"
)
type NodeListOptions struct {
options.BaseListOptions
Cluster string `help:"Filter by cluster"`
}
func (o NodeListOptions) Params() (*jsonutils.JSONDict, error) {
return options.ListStructToParams(&o)
}
type NodeCreateOptions struct {
CLUSTER string `help:"Cluster id"`
Etcd bool `help:"Etcd role"`
Controlplane bool `help:"Controlplane role"`
Worker bool `help:"Worker role"`
AllRole bool `help:"All roles"`
HostnameOverride string `help:"Worker node overrided hostname"`
Host string `help:"Yunion host server name or id"`
Name string `help:"Name of node"`
RegistryMirror []string `help:"Docker registry mirrors, e.g. 'https://registry.docker-cn.com'"`
InsecureRegistry []string `help:"Docker insecure registry"`
}
func (o NodeCreateOptions) Params() *jsonutils.JSONDict {
params := jsonutils.NewDict()
if o.Name != "" {
params.Add(jsonutils.NewString(o.Name), "name")
}
params.Add(jsonutils.NewString(o.CLUSTER), "cluster")
dockerConf := dockerConfig{}
for _, rm := range o.RegistryMirror {
dockerConf.RegistryMirrors = append(dockerConf.RegistryMirrors, rm)
}
for _, im := range o.InsecureRegistry {
dockerConf.InsecureRegistries = append(dockerConf.InsecureRegistries, im)
}
confObj := jsonutils.Marshal(dockerConf)
params.Add(confObj, "dockerd_config")
roles := jsonutils.NewArray()
if o.AllRole {
roles.Add(jsonutils.NewString("etcd"), jsonutils.NewString("controlplane"), jsonutils.NewString("worker"))
} else {
if o.Etcd {
roles.Add(jsonutils.NewString("etcd"))
}
if o.Controlplane {
roles.Add(jsonutils.NewString("controlplane"))
}
if o.Worker {
roles.Add(jsonutils.NewString("worker"))
}
}
params.Add(roles, "roles")
if o.HostnameOverride != "" {
params.Add(jsonutils.NewString(o.HostnameOverride), "hostname_override")
}
if o.Host != "" {
params.Add(jsonutils.NewString(o.Host), "host")
}
return params
}
type NodeConfigDockerRegistryOptions struct {
IdentsOptions
RegistryMirror []string `help:"Docker registry mirrors, e.g. 'https://registry.docker-cn.com'"`
InsecureRegistry []string `help:"Docker insecure registry"`
}
func (o NodeConfigDockerRegistryOptions) Params() jsonutils.JSONObject {
dockerConf := dockerConfig{}
for _, rm := range o.RegistryMirror {
dockerConf.RegistryMirrors = append(dockerConf.RegistryMirrors, rm)
}
for _, im := range o.InsecureRegistry {
dockerConf.InsecureRegistries = append(dockerConf.InsecureRegistries, im)
}
return jsonutils.Marshal(dockerConf)
}
+1 -1
View File
@@ -110,7 +110,7 @@ func (man *SKubeClusterManager) getKubeClusterConfig() (string, error) {
session := auth.GetAdminSession(context.Background(), man.region, "v1")
params := jsonutils.NewDict()
params.Add(jsonutils.JSONTrue, "directly")
ret, err := kubeserver.Clusters.PerformAction(session, "default", "generate-kubeconfig", params)
ret, err := kubeserver.KubeClusters.PerformAction(session, "default", "generate-kubeconfig", params)
if err != nil {
return "", err
}