Merge pull request #133 from richardxz/master
update kubectl-pod's delete function
This commit is contained in:
@@ -34,6 +34,8 @@ import (
|
||||
"k8s.io/api/core/v1"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
|
||||
"k8s.io/apimachinery/pkg/api/errors"
|
||||
|
||||
"kubesphere.io/kubesphere/pkg/client"
|
||||
"kubesphere.io/kubesphere/pkg/constants"
|
||||
"kubesphere.io/kubesphere/pkg/options"
|
||||
@@ -247,8 +249,8 @@ func CreateKubeConfig(user string) error {
|
||||
data := map[string]string{"config": string(config)}
|
||||
var configmap = v1.ConfigMap{TypeMeta: metav1.TypeMeta{Kind: "Configmap", APIVersion: "v1"}, ObjectMeta: metav1.ObjectMeta{Name: user}, Data: data}
|
||||
_, err = k8sClient.CoreV1().ConfigMaps(constants.KubeSphereControlNamespace).Create(&configmap)
|
||||
if err != nil {
|
||||
glog.Errorln(err)
|
||||
if err != nil && !errors.IsAlreadyExists(err) {
|
||||
glog.Errorf("create user %s's kubeConfig failed, reason:", user, err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
@@ -259,7 +261,7 @@ func GetKubeConfig(user string) (string, error) {
|
||||
k8sClient := client.NewK8sClient()
|
||||
configmap, err := k8sClient.CoreV1().ConfigMaps(constants.KubeSphereControlNamespace).Get(user, metav1.GetOptions{})
|
||||
if err != nil {
|
||||
glog.Errorln(err)
|
||||
glog.Errorf("cannot get user %s's kubeConfig, reason:", user, err)
|
||||
return "", err
|
||||
}
|
||||
return configmap.Data[kubectlConfigKey], nil
|
||||
@@ -267,9 +269,15 @@ func GetKubeConfig(user string) (string, error) {
|
||||
|
||||
func DelKubeConfig(user string) error {
|
||||
k8sClient := client.NewK8sClient()
|
||||
err := k8sClient.CoreV1().ConfigMaps(constants.KubeSphereControlNamespace).Delete(user, &metav1.DeleteOptions{})
|
||||
_, err := k8sClient.CoreV1().ConfigMaps(constants.KubeSphereControlNamespace).Get(user, metav1.GetOptions{})
|
||||
if errors.IsNotFound(err) {
|
||||
return nil
|
||||
}
|
||||
|
||||
deletePolicy := metav1.DeletePropagationBackground
|
||||
err = k8sClient.CoreV1().ConfigMaps(constants.KubeSphereControlNamespace).Delete(user, &metav1.DeleteOptions{PropagationPolicy: &deletePolicy})
|
||||
if err != nil {
|
||||
glog.Errorln(err)
|
||||
glog.Errorf("delete user %s's kubeConfig failed, reason:", user, err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
|
||||
@@ -23,15 +23,20 @@ import (
|
||||
"github.com/golang/glog"
|
||||
"k8s.io/api/apps/v1beta2"
|
||||
"k8s.io/api/core/v1"
|
||||
meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/labels"
|
||||
|
||||
"k8s.io/apimachinery/pkg/api/errors"
|
||||
|
||||
"kubesphere.io/kubesphere/pkg/client"
|
||||
"kubesphere.io/kubesphere/pkg/constants"
|
||||
"kubesphere.io/kubesphere/pkg/options"
|
||||
)
|
||||
|
||||
const namespace = constants.KubeSphereControlNamespace
|
||||
const (
|
||||
namespace = constants.KubeSphereControlNamespace
|
||||
retry = 5
|
||||
)
|
||||
|
||||
type kubectlPodInfo struct {
|
||||
Namespace string `json:"namespace"`
|
||||
@@ -41,7 +46,7 @@ type kubectlPodInfo struct {
|
||||
|
||||
func GetKubectlPod(user string) (kubectlPodInfo, error) {
|
||||
k8sClient := client.NewK8sClient()
|
||||
deploy, err := k8sClient.AppsV1beta2().Deployments(namespace).Get(user, meta_v1.GetOptions{})
|
||||
deploy, err := k8sClient.AppsV1beta2().Deployments(namespace).Get(user, metav1.GetOptions{})
|
||||
if err != nil {
|
||||
glog.Errorln(err)
|
||||
return kubectlPodInfo{}, err
|
||||
@@ -49,7 +54,7 @@ func GetKubectlPod(user string) (kubectlPodInfo, error) {
|
||||
|
||||
selectors := deploy.Spec.Selector.MatchLabels
|
||||
labelSelector := labels.Set(selectors).AsSelector().String()
|
||||
podList, err := k8sClient.CoreV1().Pods(namespace).List(meta_v1.ListOptions{LabelSelector: labelSelector})
|
||||
podList, err := k8sClient.CoreV1().Pods(namespace).List(metav1.ListOptions{LabelSelector: labelSelector})
|
||||
if err != nil {
|
||||
glog.Errorln(err)
|
||||
return kubectlPodInfo{}, err
|
||||
@@ -89,17 +94,17 @@ func selectCorrectPod(namespace string, pods []v1.Pod) (kubectlPod v1.Pod, err e
|
||||
func CreateKubectlPod(user string) error {
|
||||
|
||||
replica := int32(1)
|
||||
selector := meta_v1.LabelSelector{MatchLabels: map[string]string{"user": user}}
|
||||
selector := metav1.LabelSelector{MatchLabels: map[string]string{"user": user}}
|
||||
config := v1.ConfigMapVolumeSource{Items: []v1.KeyToPath{{Key: "config", Path: "config"}}, LocalObjectReference: v1.LocalObjectReference{Name: user}}
|
||||
deployment := v1beta2.Deployment{
|
||||
ObjectMeta: meta_v1.ObjectMeta{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: user,
|
||||
},
|
||||
Spec: v1beta2.DeploymentSpec{
|
||||
Replicas: &replica,
|
||||
Selector: &selector,
|
||||
Template: v1.PodTemplateSpec{
|
||||
ObjectMeta: meta_v1.ObjectMeta{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Labels: map[string]string{
|
||||
"user": user,
|
||||
},
|
||||
@@ -120,52 +125,32 @@ func CreateKubectlPod(user string) error {
|
||||
k8sClient := client.NewK8sClient()
|
||||
_, err := k8sClient.AppsV1beta2().Deployments(namespace).Create(&deployment)
|
||||
|
||||
if errors.IsAlreadyExists(err) {
|
||||
return nil
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
func DelKubectlPod(user string) error {
|
||||
k8sClient := client.NewK8sClient()
|
||||
deploy, err := k8sClient.AppsV1beta2().Deployments(namespace).Get(user, meta_v1.GetOptions{})
|
||||
_, err := k8sClient.AppsV1beta2().Deployments(namespace).Get(user, metav1.GetOptions{})
|
||||
if errors.IsNotFound(err) {
|
||||
return nil
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
err := fmt.Errorf("delete user %s failed, reason:%v", user, err)
|
||||
return err
|
||||
}
|
||||
|
||||
var replicas int32
|
||||
replicas = 0
|
||||
deploy.Spec.Replicas = &replicas
|
||||
_, err = k8sClient.AppsV1beta2().Deployments(namespace).Update(deploy)
|
||||
deletePolicy := metav1.DeletePropagationBackground
|
||||
|
||||
err = k8sClient.AppsV1beta2().Deployments(namespace).Delete(user, &metav1.DeleteOptions{PropagationPolicy: &deletePolicy})
|
||||
if err != nil {
|
||||
err := fmt.Errorf("delete user %s failed, reason:%v", user, err)
|
||||
return err
|
||||
}
|
||||
|
||||
err = k8sClient.AppsV1beta2().Deployments(namespace).Delete(user, &meta_v1.DeleteOptions{})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
label := labels.SelectorFromSet(labels.Set(deploy.Spec.Selector.MatchLabels)).String()
|
||||
rsList, err := k8sClient.AppsV1beta2().ReplicaSets(namespace).List(meta_v1.ListOptions{LabelSelector: label})
|
||||
if err != nil {
|
||||
glog.Error(err)
|
||||
return err
|
||||
}
|
||||
|
||||
for _, rs := range rsList.Items {
|
||||
var replicas int32
|
||||
replicas = 0
|
||||
rs.Spec.Replicas = &replicas
|
||||
_, err = k8sClient.AppsV1beta2().ReplicaSets(namespace).Update(&rs)
|
||||
if err != nil {
|
||||
glog.Error(err)
|
||||
return err
|
||||
}
|
||||
|
||||
err = k8sClient.AppsV1beta2().ReplicaSets(namespace).Delete(rs.Name, &meta_v1.DeleteOptions{})
|
||||
if err != nil {
|
||||
glog.Error(err)
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user