Update to k8s 1.18

This commit is contained in:
Darren Shepherd 2020-03-26 13:58:39 -07:00
parent 7e84f96c0f
commit 420f62f642
6 changed files with 34 additions and 32 deletions

View File

@ -70,7 +70,7 @@ func WebhookConfigForURL(url string) (string, error) {
} }
func NewWebhookAuthenticator(cacheTTL time.Duration, kubeConfigFile string) (Authenticator, error) { func NewWebhookAuthenticator(cacheTTL time.Duration, kubeConfigFile string) (Authenticator, error) {
wh, err := webhook.New(kubeConfigFile, "v1", nil) wh, err := webhook.New(kubeConfigFile, "v1", nil, nil)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -18,6 +18,7 @@ import (
"golang.org/x/sync/semaphore" "golang.org/x/sync/semaphore"
authorizationv1 "k8s.io/api/authorization/v1" authorizationv1 "k8s.io/api/authorization/v1"
"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/discovery" "k8s.io/client-go/discovery"
authorizationv1client "k8s.io/client-go/kubernetes/typed/authorization/v1" authorizationv1client "k8s.io/client-go/kubernetes/typed/authorization/v1"
apiv1 "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1" apiv1 "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1"
@ -71,7 +72,7 @@ func Register(ctx context.Context,
return func() error { return func() error {
h.queueRefresh() h.queueRefresh()
return h.refreshAll() return h.refreshAll(ctx)
} }
} }
@ -90,7 +91,7 @@ func (h *handler) queueRefresh() {
go func() { go func() {
time.Sleep(500 * time.Millisecond) time.Sleep(500 * time.Millisecond)
if err := h.refreshAll(); err != nil { if err := h.refreshAll(h.ctx); err != nil {
logrus.Errorf("failed to sync schemas: %v", err) logrus.Errorf("failed to sync schemas: %v", err)
atomic.StoreInt32(&h.toSync, 1) atomic.StoreInt32(&h.toSync, 1)
} }
@ -143,14 +144,14 @@ func (h *handler) getColumns(ctx context.Context, schemas map[string]*types.APIS
s := schema s := schema
eg.Go(func() error { eg.Go(func() error {
defer listPool.Release(1) defer listPool.Release(1)
return h.cols.SetColumns(s) return h.cols.SetColumns(ctx, s)
}) })
} }
return eg.Wait() return eg.Wait()
} }
func (h *handler) refreshAll() error { func (h *handler) refreshAll(ctx context.Context) error {
h.Lock() h.Lock()
defer h.Unlock() defer h.Unlock()
@ -170,7 +171,7 @@ func (h *handler) refreshAll() error {
if preferredTypeExists(schema, schemas) { if preferredTypeExists(schema, schemas) {
continue continue
} }
if ok, err := h.allowed(schema); err != nil { if ok, err := h.allowed(ctx, schema); err != nil {
return err return err
} else if !ok { } else if !ok {
continue continue
@ -220,9 +221,9 @@ func preferredTypeExists(schema *types.APISchema, schemas map[string]*types.APIS
return ok return ok
} }
func (h *handler) allowed(schema *types.APISchema) (bool, error) { func (h *handler) allowed(ctx context.Context, schema *types.APISchema) (bool, error) {
gvr := attributes.GVR(schema) gvr := attributes.GVR(schema)
ssar, err := h.ssar.Create(&authorizationv1.SelfSubjectAccessReview{ ssar, err := h.ssar.Create(ctx, &authorizationv1.SelfSubjectAccessReview{
Spec: authorizationv1.SelfSubjectAccessReviewSpec{ Spec: authorizationv1.SelfSubjectAccessReviewSpec{
ResourceAttributes: &authorizationv1.ResourceAttributes{ ResourceAttributes: &authorizationv1.ResourceAttributes{
Verb: "list", Verb: "list",
@ -231,7 +232,7 @@ func (h *handler) allowed(schema *types.APISchema) (bool, error) {
Resource: gvr.Resource, Resource: gvr.Resource,
}, },
}, },
}) }, metav1.CreateOptions{})
if err != nil { if err != nil {
return false, err return false, err
} }

View File

@ -1,6 +1,7 @@
package common package common
import ( import (
"context"
"fmt" "fmt"
"github.com/rancher/steve/pkg/attributes" "github.com/rancher/steve/pkg/attributes"
@ -34,7 +35,7 @@ func NewDynamicColumns(config *rest.Config) (*DynamicColumns, error) {
}, nil }, nil
} }
func (d *DynamicColumns) SetColumns(schema *types.APISchema) error { func (d *DynamicColumns) SetColumns(ctx context.Context, schema *types.APISchema) error {
if attributes.Columns(schema) != nil { if attributes.Columns(schema) != nil {
return nil return nil
} }
@ -56,7 +57,7 @@ func (d *DynamicColumns) SetColumns(schema *types.APISchema) error {
Limit: 1, Limit: 1,
}, metav1.ParameterCodec) }, metav1.ParameterCodec)
obj, err := r.Do().Get() obj, err := r.Do(ctx).Get()
if err != nil { if err != nil {
attributes.SetTable(schema, false) attributes.SetTable(schema, false)
return nil return nil

View File

@ -43,7 +43,7 @@ func (e *configMapStore) ByID(apiOp *types.APIRequest, schema *types.APISchema,
Object: pref, Object: pref,
} }
obj, err := client.Get(prefName(u), metav1.GetOptions{}) obj, err := client.Get(apiOp.Context(), prefName(u), metav1.GetOptions{})
if apierrors.IsNotFound(err) { if apierrors.IsNotFound(err) {
return result, nil return result, nil
} }
@ -71,9 +71,9 @@ func (e *configMapStore) Update(apiOp *types.APIRequest, schema *types.APISchema
return types.APIObject{}, err return types.APIObject{}, err
} }
obj, err := client.Get(prefName(u), metav1.GetOptions{}) obj, err := client.Get(apiOp.Context(), prefName(u), metav1.GetOptions{})
if apierrors.IsNotFound(err) { if apierrors.IsNotFound(err) {
_, err = client.Create(&unstructured.Unstructured{ _, err = client.Create(apiOp.Context(), &unstructured.Unstructured{
Object: map[string]interface{}{ Object: map[string]interface{}{
"metadata": map[string]interface{}{ "metadata": map[string]interface{}{
"name": prefName(u), "name": prefName(u),
@ -83,7 +83,7 @@ func (e *configMapStore) Update(apiOp *types.APIRequest, schema *types.APISchema
}, metav1.CreateOptions{}) }, metav1.CreateOptions{})
} else if err == nil { } else if err == nil {
obj.Object["data"] = data.Data().Map("data") obj.Object["data"] = data.Data().Map("data")
_, err = client.Update(obj, metav1.UpdateOptions{}) _, err = client.Update(apiOp.Context(), obj, metav1.UpdateOptions{})
} }
if err != nil { if err != nil {
return types.APIObject{}, err return types.APIObject{}, err
@ -99,5 +99,5 @@ func (e *configMapStore) Delete(apiOp *types.APIRequest, schema *types.APISchema
return types.APIObject{}, err return types.APIObject{}, err
} }
return types.APIObject{}, client.Delete(prefName(u), nil) return types.APIObject{}, client.Delete(apiOp.Context(), prefName(u), metav1.DeleteOptions{})
} }

View File

@ -48,7 +48,7 @@ func (e *rancherPrefStore) ByID(apiOp *types.APIRequest, schema *types.APISchema
Object: pref, Object: pref,
} }
objs, err := client.List(metav1.ListOptions{}) objs, err := client.List(apiOp.Context(), metav1.ListOptions{})
if err != nil { if err != nil {
return result, err return result, err
} }
@ -77,11 +77,11 @@ func (e *rancherPrefStore) createNamespace(apiOp *types.APIRequest, ns string) e
if err != nil { if err != nil {
return err return err
} }
_, err = client.Get(ns, metav1.GetOptions{}) _, err = client.Get(apiOp.Context(), ns, metav1.GetOptions{})
if !apierrors.IsNotFound(err) { if !apierrors.IsNotFound(err) {
return err return err
} }
_, err = client.Create(&unstructured.Unstructured{ _, err = client.Create(apiOp.Context(), &unstructured.Unstructured{
Object: map[string]interface{}{ Object: map[string]interface{}{
"metadata": map[string]interface{}{ "metadata": map[string]interface{}{
"name": ns, "name": ns,
@ -104,7 +104,7 @@ func (e *rancherPrefStore) Update(apiOp *types.APIRequest, schema *types.APISche
newValues[k] = convert.ToString(v) newValues[k] = convert.ToString(v)
} }
prefs, err := client.List(metav1.ListOptions{}) prefs, err := client.List(apiOp.Context(), metav1.ListOptions{})
if err != nil { if err != nil {
return types.APIObject{}, err return types.APIObject{}, err
} }
@ -115,12 +115,12 @@ func (e *rancherPrefStore) Update(apiOp *types.APIRequest, schema *types.APISche
delete(newValues, key) delete(newValues, key)
if ok && newValue != pref.Object["value"] { if ok && newValue != pref.Object["value"] {
pref.Object["value"] = newValue pref.Object["value"] = newValue
_, err := client.Update(&pref, metav1.UpdateOptions{}) _, err := client.Update(apiOp.Context(), &pref, metav1.UpdateOptions{})
if err != nil { if err != nil {
return types.APIObject{}, err return types.APIObject{}, err
} }
} else if !ok { } else if !ok {
err := client.Delete(key, nil) err := client.Delete(apiOp.Context(), key, metav1.DeleteOptions{})
if err != nil { if err != nil {
return types.APIObject{}, err return types.APIObject{}, err
} }
@ -136,7 +136,7 @@ func (e *rancherPrefStore) Update(apiOp *types.APIRequest, schema *types.APISche
nsExists = true nsExists = true
} }
_, err = client.Create(&unstructured.Unstructured{ _, err = client.Create(apiOp.Context(), &unstructured.Unstructured{
Object: map[string]interface{}{ Object: map[string]interface{}{
"apiVersion": gvk.GroupVersion().String(), "apiVersion": gvk.GroupVersion().String(),
"kind": gvk.Kind, "kind": gvk.Kind,
@ -160,5 +160,5 @@ func (e *rancherPrefStore) Delete(apiOp *types.APIRequest, schema *types.APISche
return types.APIObject{}, err return types.APIObject{}, err
} }
return types.APIObject{}, client.DeleteCollection(nil, metav1.ListOptions{}) return types.APIObject{}, client.DeleteCollection(apiOp.Context(), metav1.DeleteOptions{}, metav1.ListOptions{})
} }

View File

@ -104,7 +104,7 @@ func (s *Store) byID(apiOp *types.APIRequest, schema *types.APISchema, id string
return nil, err return nil, err
} }
obj, err := k8sClient.Get(id, opts) obj, err := k8sClient.Get(apiOp.Context(), id, opts)
rowToObject(obj) rowToObject(obj)
return obj, err return obj, err
} }
@ -221,7 +221,7 @@ func (s *Store) list(apiOp *types.APIRequest, schema *types.APISchema, client dy
return types.APIObjectList{}, nil return types.APIObjectList{}, nil
} }
resultList, err := client.List(opts) resultList, err := client.List(apiOp.Context(), opts)
if err != nil { if err != nil {
return types.APIObjectList{}, err return types.APIObjectList{}, err
} }
@ -250,7 +250,7 @@ func returnErr(err error, c chan types.APIEvent) {
func (s *Store) listAndWatch(apiOp *types.APIRequest, k8sClient dynamic.ResourceInterface, schema *types.APISchema, w types.WatchRequest, result chan types.APIEvent) { func (s *Store) listAndWatch(apiOp *types.APIRequest, k8sClient dynamic.ResourceInterface, schema *types.APISchema, w types.WatchRequest, result chan types.APIEvent) {
rev := w.Revision rev := w.Revision
if rev == "" { if rev == "" {
list, err := k8sClient.List(metav1.ListOptions{ list, err := k8sClient.List(apiOp.Context(), metav1.ListOptions{
Limit: 1, Limit: 1,
}) })
if err != nil { if err != nil {
@ -263,7 +263,7 @@ func (s *Store) listAndWatch(apiOp *types.APIRequest, k8sClient dynamic.Resource
} }
timeout := int64(60 * 30) timeout := int64(60 * 30)
watcher, err := k8sClient.Watch(metav1.ListOptions{ watcher, err := k8sClient.Watch(apiOp.Context(), metav1.ListOptions{
Watch: true, Watch: true,
TimeoutSeconds: &timeout, TimeoutSeconds: &timeout,
ResourceVersion: rev, ResourceVersion: rev,
@ -390,7 +390,7 @@ func (s *Store) Create(apiOp *types.APIRequest, schema *types.APISchema, params
return types.APIObject{}, err return types.APIObject{}, err
} }
resp, err = k8sClient.Create(&unstructured.Unstructured{Object: input}, opts) resp, err = k8sClient.Create(apiOp.Context(), &unstructured.Unstructured{Object: input}, opts)
rowToObject(resp) rowToObject(resp)
return toAPI(schema, resp), err return toAPI(schema, resp), err
} }
@ -435,7 +435,7 @@ func (s *Store) Update(apiOp *types.APIRequest, schema *types.APISchema, params
} }
} }
resp, err := k8sClient.Patch(id, pType, bytes, opts) resp, err := k8sClient.Patch(apiOp.Context(), id, pType, bytes, opts)
if err != nil { if err != nil {
return types.APIObject{}, err return types.APIObject{}, err
} }
@ -453,7 +453,7 @@ func (s *Store) Update(apiOp *types.APIRequest, schema *types.APISchema, params
return types.APIObject{}, err return types.APIObject{}, err
} }
resp, err := k8sClient.Update(&unstructured.Unstructured{Object: moveFromUnderscore(input)}, metav1.UpdateOptions{}) resp, err := k8sClient.Update(apiOp.Context(), &unstructured.Unstructured{Object: moveFromUnderscore(input)}, metav1.UpdateOptions{})
if err != nil { if err != nil {
return types.APIObject{}, err return types.APIObject{}, err
} }
@ -472,7 +472,7 @@ func (s *Store) Delete(apiOp *types.APIRequest, schema *types.APISchema, id stri
return types.APIObject{}, err return types.APIObject{}, err
} }
if err := k8sClient.Delete(id, &opts); err != nil { if err := k8sClient.Delete(apiOp.Context(), id, opts); err != nil {
return types.APIObject{}, err return types.APIObject{}, err
} }