Skip to content

Commit

Permalink
Merge pull request #565 from chisana-mori/master
Browse files Browse the repository at this point in the history
support k8s 1.16+,add the entrance to delete job.
  • Loading branch information
70data authored Jun 13, 2020
2 parents 1a26193 + 6d426a7 commit 620d4a0
Show file tree
Hide file tree
Showing 27 changed files with 526 additions and 106 deletions.
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module github.com/Qihoo360/wayne

go 1.12
go 1.13

require (
github.com/360yun/sockjs-go v0.0.0-20190620042557-e70edfda8e57
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kB
github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
github.com/bradfitz/gomemcache v0.0.0-20180710155616-bc664df96737/go.mod h1:PmM6Mmwb0LSuEubjR8N7PtNe1KxZLtOUHtbeikc5h60=
github.com/casbin/casbin v1.7.0/go.mod h1:c67qKN6Oum3UF5Q1+BByfFxkwKvhwW57ITjqwtzR1KE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/certifi/gocertifi v0.0.0-20190410005359-59a85de7f35e h1:9574pc8MX6rF/QyO14SPHhM5KKIOo9fkb/1ifuYMTKU=
github.com/certifi/gocertifi v0.0.0-20190410005359-59a85de7f35e/go.mod h1:GJKEexRPVJrBSOjoqN5VNOIKJ5Q3RViH6eu3puDRwx4=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
Expand Down Expand Up @@ -352,6 +353,7 @@ golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
Expand Down
298 changes: 298 additions & 0 deletions src/backend/client/api/types.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package api

import (
appsv1 "k8s.io/api/apps/v1"
appsv1beta1 "k8s.io/api/apps/v1beta1"
autoscalingv1 "k8s.io/api/autoscaling/v1"
batchv1 "k8s.io/api/batch/v1"
Expand All @@ -10,6 +11,7 @@ import (
rbacv1 "k8s.io/api/rbac/v1"
storagev1 "k8s.io/api/storage/v1"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/client-go/kubernetes"
)

type ResourceName = string
Expand Down Expand Up @@ -347,3 +349,299 @@ var KindToResourceMap = map[string]ResourceMap{
Namespaced: true,
},
}

var KindToStableResourceMap = map[string]ResourceMap{
ResourceNameConfigMap: {
GroupVersionResourceKind: GroupVersionResourceKind{
GroupVersionResource: schema.GroupVersionResource{
Group: corev1.GroupName,
Version: corev1.SchemeGroupVersion.Version,
Resource: ResourceNameConfigMap,
},
Kind: KindNameConfigMap,
},
Namespaced: true,
},
ResourceNameDaemonSet: {
GroupVersionResourceKind: GroupVersionResourceKind{
GroupVersionResource: schema.GroupVersionResource{
Group: appsv1.GroupName,
Version: appsv1.SchemeGroupVersion.Version,
Resource: ResourceNameDaemonSet,
},
Kind: KindNameDaemonSet,
},
Namespaced: true,
},
ResourceNameDeployment: {
GroupVersionResourceKind: GroupVersionResourceKind{
GroupVersionResource: schema.GroupVersionResource{
Group: appsv1.GroupName,
Version: appsv1.SchemeGroupVersion.Version,
Resource: ResourceNameDeployment,
},
Kind: KindNameDeployment,
},
Namespaced: true,
},
ResourceNameEvent: {
GroupVersionResourceKind: GroupVersionResourceKind{
GroupVersionResource: schema.GroupVersionResource{
Group: corev1.GroupName,
Version: corev1.SchemeGroupVersion.Version,
Resource: ResourceNameEvent,
},
Kind: KindNameEvent,
},
Namespaced: true,
},

ResourceNameHorizontalPodAutoscaler: {
GroupVersionResourceKind: GroupVersionResourceKind{
GroupVersionResource: schema.GroupVersionResource{
Group: autoscalingv1.GroupName,
Version: autoscalingv1.SchemeGroupVersion.Version,
Resource: ResourceNameHorizontalPodAutoscaler,
},
Kind: KindNameHorizontalPodAutoscaler,
},
Namespaced: true,
},
ResourceNameIngress: {
GroupVersionResourceKind: GroupVersionResourceKind{
GroupVersionResource: schema.GroupVersionResource{
Group: extensionsv1beta1.GroupName,
Version: extensionsv1beta1.SchemeGroupVersion.Version,
Resource: ResourceNameIngress,
},
Kind: KindNameIngress,
},
Namespaced: true,
},
ResourceNameJob: {
GroupVersionResourceKind: GroupVersionResourceKind{
GroupVersionResource: schema.GroupVersionResource{
Group: batchv1.GroupName,
Version: batchv1.SchemeGroupVersion.Version,
Resource: ResourceNameJob,
},
Kind: KindNameJob,
},
Namespaced: true,
},
ResourceNameCronJob: {
GroupVersionResourceKind: GroupVersionResourceKind{
GroupVersionResource: schema.GroupVersionResource{
Group: batchv1beta1.GroupName,
Version: batchv1beta1.SchemeGroupVersion.Version,
Resource: ResourceNameCronJob,
},
Kind: KindNameCronJob,
},
Namespaced: true,
},
ResourceNameNamespace: {
GroupVersionResourceKind: GroupVersionResourceKind{
GroupVersionResource: schema.GroupVersionResource{
Group: corev1.GroupName,
Version: corev1.SchemeGroupVersion.Version,
Resource: ResourceNameNamespace,
},
Kind: KindNameNamespace,
},
Namespaced: false,
},
ResourceNameNode: {
GroupVersionResourceKind: GroupVersionResourceKind{
GroupVersionResource: schema.GroupVersionResource{
Group: corev1.GroupName,
Version: corev1.SchemeGroupVersion.Version,
Resource: ResourceNameNode,
},
Kind: KindNameNode,
},
Namespaced: false,
},
ResourceNamePersistentVolumeClaim: {
GroupVersionResourceKind: GroupVersionResourceKind{
GroupVersionResource: schema.GroupVersionResource{
Group: corev1.GroupName,
Version: corev1.SchemeGroupVersion.Version,
Resource: ResourceNamePersistentVolumeClaim,
},
Kind: KindNamePersistentVolumeClaim,
},
Namespaced: true,
},
ResourceNamePersistentVolume: {
GroupVersionResourceKind: GroupVersionResourceKind{
GroupVersionResource: schema.GroupVersionResource{
Group: corev1.GroupName,
Version: corev1.SchemeGroupVersion.Version,
Resource: ResourceNamePersistentVolume,
},
Kind: KindNamePersistentVolume,
},
Namespaced: false,
},
ResourceNamePod: {
GroupVersionResourceKind: GroupVersionResourceKind{
GroupVersionResource: schema.GroupVersionResource{
Group: corev1.GroupName,
Version: corev1.SchemeGroupVersion.Version,
Resource: ResourceNamePod,
},
Kind: KindNamePod,
},
Namespaced: true,
},
ResourceNameReplicaSet: {
GroupVersionResourceKind: GroupVersionResourceKind{
GroupVersionResource: schema.GroupVersionResource{
Group: appsv1.GroupName,
Version: appsv1.SchemeGroupVersion.Version,
Resource: ResourceNameReplicaSet,
},
Kind: KindNameReplicaSet,
},
Namespaced: true,
},
ResourceNameSecret: {
GroupVersionResourceKind: GroupVersionResourceKind{
GroupVersionResource: schema.GroupVersionResource{
Group: corev1.GroupName,
Version: corev1.SchemeGroupVersion.Version,
Resource: ResourceNameSecret,
},
Kind: KindNameSecret,
},
Namespaced: true,
},
ResourceNameService: {
GroupVersionResourceKind: GroupVersionResourceKind{
GroupVersionResource: schema.GroupVersionResource{
Group: corev1.GroupName,
Version: corev1.SchemeGroupVersion.Version,
Resource: ResourceNameService,
},
Kind: KindNameService,
},
Namespaced: true,
},
ResourceNameStatefulSet: {
GroupVersionResourceKind: GroupVersionResourceKind{
GroupVersionResource: schema.GroupVersionResource{
Group: appsv1.GroupName,
Version: appsv1.SchemeGroupVersion.Version,
Resource: ResourceNameStatefulSet,
},
Kind: KindNameStatefulSet,
},
Namespaced: true,
},
ResourceNameEndpoint: {
GroupVersionResourceKind: GroupVersionResourceKind{
GroupVersionResource: schema.GroupVersionResource{
Group: corev1.GroupName,
Version: corev1.SchemeGroupVersion.Version,
Resource: ResourceNameEndpoint,
},
Kind: KindNameEndpoint,
},
Namespaced: true,
},
ResourceNameStorageClass: {
GroupVersionResourceKind: GroupVersionResourceKind{
GroupVersionResource: schema.GroupVersionResource{
Group: storagev1.GroupName,
Version: storagev1.SchemeGroupVersion.Version,
Resource: ResourceNameStorageClass,
},
Kind: KindNameStorageClass,
},
Namespaced: false,
},

ResourceNameRole: {
GroupVersionResourceKind: GroupVersionResourceKind{
GroupVersionResource: schema.GroupVersionResource{
Group: rbacv1.GroupName,
Version: rbacv1.SchemeGroupVersion.Version,
Resource: ResourceNameRole,
},
Kind: KindNameRole,
},
Namespaced: true,
},
ResourceNameRoleBinding: {
GroupVersionResourceKind: GroupVersionResourceKind{
GroupVersionResource: schema.GroupVersionResource{
Group: rbacv1.GroupName,
Version: rbacv1.SchemeGroupVersion.Version,
Resource: ResourceNameRoleBinding,
},
Kind: KindNameRoleBinding,
},
Namespaced: true,
},
ResourceNameClusterRole: {
GroupVersionResourceKind: GroupVersionResourceKind{
GroupVersionResource: schema.GroupVersionResource{
Group: rbacv1.GroupName,
Version: rbacv1.SchemeGroupVersion.Version,
Resource: ResourceNameClusterRole,
},
Kind: KindNameClusterRole,
},
Namespaced: false,
},
ResourceNameClusterRoleBinding: {
GroupVersionResourceKind: GroupVersionResourceKind{
GroupVersionResource: schema.GroupVersionResource{
Group: rbacv1.GroupName,
Version: rbacv1.SchemeGroupVersion.Version,
Resource: ResourceNameClusterRoleBinding,
},
Kind: KindNameClusterRoleBinding,
},
Namespaced: false,
},
ResourceNameServiceAccount: {
GroupVersionResourceKind: GroupVersionResourceKind{
GroupVersionResource: schema.GroupVersionResource{
Group: corev1.GroupName,
Version: corev1.SchemeGroupVersion.Version,
Resource: ResourceNameServiceAccount,
},
Kind: KindNameServiceAccount,
},
Namespaced: true,
},
}

func GetResourceMap(client *kubernetes.Clientset) (result map[string]ResourceMap, err error) {

//var serverVersion *version2.Info
//if serverVersion, err = client.ServerVersion(); err != nil {
// return
//}
//
//majorVersion := serverVersion.Major
//minorVersion, _ := strconv.Atoi(serverVersion.Minor)
//
//if majorVersion != "1" {
// err = fmt.Errorf("unsupport k8s version")
// return
//}
//
//if minorVersion >= 15 {
// result = KindToStableResourceMap
// return
//}
//
//result = KindToResourceMap
//return

result = KindToStableResourceMap
return
}
16 changes: 10 additions & 6 deletions src/backend/client/cache.go
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
package client

import (
"github.com/Qihoo360/wayne/src/backend/client/api"
"k8s.io/client-go/informers"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/listers/apps/v1beta1"
appsv1 "k8s.io/client-go/listers/apps/v1"
autoscalingv1 "k8s.io/client-go/listers/autoscaling/v1"
"k8s.io/client-go/listers/core/v1"

"github.com/Qihoo360/wayne/src/backend/client/api"
)

type CacheFactory struct {
Expand All @@ -23,8 +22,13 @@ func buildCacheController(client *kubernetes.Clientset) (*CacheFactory, error) {
stop := make(chan struct{})
sharedInformerFactory := informers.NewSharedInformerFactory(client, defaultResyncPeriod)

rangeMap, err := api.GetResourceMap(client)
if err != nil {
return nil, err
}
// Start all Resources defined in KindToResourceMap
for _, value := range api.KindToResourceMap {
for _, value := range rangeMap {

genericInformer, err := sharedInformerFactory.ForResource(value.GroupVersionResourceKind.GroupVersionResource)
if err != nil {
return nil, err
Expand All @@ -48,8 +52,8 @@ func (c *CacheFactory) EventLister() v1.EventLister {
return c.sharedInformerFactory.Core().V1().Events().Lister()
}

func (c *CacheFactory) DeploymentLister() v1beta1.DeploymentLister {
return c.sharedInformerFactory.Apps().V1beta1().Deployments().Lister()
func (c *CacheFactory) DeploymentLister() appsv1.DeploymentLister {
return c.sharedInformerFactory.Apps().V1().Deployments().Lister()
}

func (c *CacheFactory) NodeLister() v1.NodeLister {
Expand Down
3 changes: 3 additions & 0 deletions src/backend/client/clientfactory.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ func (h *resourceHandler) getClientByGroupVersion(groupVersion schema.GroupVersi
case corev1.GroupName:
return h.client.CoreV1().RESTClient()
case appsv1beta1.GroupName:
if groupVersion.Version == "v1"{
return h.client.AppsV1().RESTClient()
}
return h.client.AppsV1beta1().RESTClient()
case autoscalingv1.GroupName:
return h.client.AutoscalingV1().RESTClient()
Expand Down
Loading

0 comments on commit 620d4a0

Please sign in to comment.