From be0508647d2c21ff18cde253508a6094e7aa1549 Mon Sep 17 00:00:00 2001 From: Darren Shepherd Date: Mon, 22 Jan 2018 16:46:26 -0700 Subject: [PATCH] Update vendor --- vendor.conf | 9 ++-- .../rancher/norman/condition/condition.go | 42 +++++++++++++++---- .../norman/controller/generic_controller.go | 12 ++++-- .../rancher/norman/types/convert/convert.go | 19 ++++++++- .../rancher/norman/types/server_types.go | 21 ++++++++++ .../github.com/rancher/norman/types/types.go | 29 +++++++------ 6 files changed, 103 insertions(+), 29 deletions(-) diff --git a/vendor.conf b/vendor.conf index 64878d1b..400fb87d 100644 --- a/vendor.conf +++ b/vendor.conf @@ -1,7 +1,8 @@ # package github.com/rancher/types -k8s.io/kubernetes v1.8.3 transitive=true,staging=true -bitbucket.org/ww/goautoneg a547fc61f48d567d5b4ec6f8aee5573d8efce11d https://github.com/rancher/goautoneg.git -github.com/rancher/norman 76d825608521a24007cfdb110d9b88d45c50d9c5 -golang.org/x/sync fd80eb99c8f653c847d294a001bdf2a3a6f768f5 +k8s.io/kubernetes v1.8.3 transitive=true,staging=true +bitbucket.org/ww/goautoneg a547fc61f48d567d5b4ec6f8aee5573d8efce11d https://github.com/rancher/goautoneg.git +golang.org/x/sync fd80eb99c8f653c847d294a001bdf2a3a6f768f5 + +github.com/rancher/norman 0d8fd60120040ffc232e303b8e260be02ca623c3 diff --git a/vendor/github.com/rancher/norman/condition/condition.go b/vendor/github.com/rancher/norman/condition/condition.go index 00d927c6..9eb6b403 100644 --- a/vendor/github.com/rancher/norman/condition/condition.go +++ b/vendor/github.com/rancher/norman/condition/condition.go @@ -61,14 +61,23 @@ func (c Cond) Reason(obj runtime.Object, reason string) { getFieldValue(cond, "Reason").SetString(reason) } +func (c Cond) SetMessageIfBlank(obj runtime.Object, message string) { + if c.GetMessage(obj) == "" { + c.Message(obj, message) + } +} + func (c Cond) Message(obj runtime.Object, message string) { cond := findOrCreateCond(obj, string(c)) setValue(cond, "Message", message) } func (c Cond) GetMessage(obj runtime.Object) string { - cond := findOrCreateCond(obj, string(c)) - return getFieldValue(cond, "Message").String() + cond := findOrNotCreateCond(obj, string(c)) + if cond == nil { + return "" + } + return getFieldValue(*cond, "Message").String() } func (c Cond) ReasonAndMessageFromError(obj runtime.Object, err error) { @@ -85,8 +94,11 @@ func (c Cond) ReasonAndMessageFromError(obj runtime.Object, err error) { } func (c Cond) GetReason(obj runtime.Object) string { - cond := findOrCreateCond(obj, string(c)) - return getFieldValue(cond, "Reason").String() + cond := findOrNotCreateCond(obj, string(c)) + if cond == nil { + return "" + } + return getFieldValue(*cond, "Reason").String() } func (c Cond) Once(obj runtime.Object, f func() (runtime.Object, error)) (runtime.Object, error) { @@ -162,8 +174,11 @@ func touchTS(value reflect.Value) { } func getStatus(obj interface{}, condName string) string { - cond := findOrCreateCond(obj, condName) - return getFieldValue(cond, "Status").String() + cond := findOrNotCreateCond(obj, condName) + if cond == nil { + return "" + } + return getFieldValue(*cond, "Status").String() } func setTS(obj interface{}, condName, ts string) { @@ -172,8 +187,11 @@ func setTS(obj interface{}, condName, ts string) { } func getTS(obj interface{}, condName string) string { - cond := findOrCreateCond(obj, condName) - return getFieldValue(cond, "LastUpdateTime").String() + cond := findOrNotCreateCond(obj, condName) + if cond == nil { + return "" + } + return getFieldValue(*cond, "LastUpdateTime").String() } func setStatus(obj interface{}, condName, status string) { @@ -189,6 +207,11 @@ func setValue(cond reflect.Value, fieldName, newValue string) { } } +func findOrNotCreateCond(obj interface{}, condName string) *reflect.Value { + condSlice := getValue(obj, "Status", "Conditions") + return findCond(condSlice, condName) +} + func findOrCreateCond(obj interface{}, condName string) reflect.Value { condSlice := getValue(obj, "Status", "Conditions") cond := findCond(condSlice, condName) @@ -216,6 +239,9 @@ func findCond(val reflect.Value, name string) *reflect.Value { } func getValue(obj interface{}, name ...string) reflect.Value { + if obj == nil { + return reflect.Value{} + } v := reflect.ValueOf(obj) t := v.Type() if t.Kind() == reflect.Ptr { diff --git a/vendor/github.com/rancher/norman/controller/generic_controller.go b/vendor/github.com/rancher/norman/controller/generic_controller.go index c031431a..265db517 100644 --- a/vendor/github.com/rancher/norman/controller/generic_controller.go +++ b/vendor/github.com/rancher/norman/controller/generic_controller.go @@ -6,6 +6,7 @@ import ( "sync" "time" + "github.com/juju/ratelimit" "github.com/rancher/norman/clientbase" "github.com/rancher/norman/types" "github.com/sirupsen/logrus" @@ -53,11 +54,16 @@ func NewGenericController(name string, objectClient *clientbase.ObjectClient) Ge }, objectClient.Factory.Object(), resyncPeriod, cache.Indexers{}) + rl := workqueue.NewMaxOfRateLimiter( + workqueue.NewItemExponentialFailureRateLimiter(500*time.Millisecond, 1000*time.Second), + // 10 qps, 100 bucket size. This is only for retry speed and its only the overall factor (not per item) + &workqueue.BucketRateLimiter{Bucket: ratelimit.NewBucketWithRate(float64(10), int64(100))}, + ) + return &genericController{ informer: informer, - queue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), - name), - name: name, + queue: workqueue.NewNamedRateLimitingQueue(rl, name), + name: name, } } diff --git a/vendor/github.com/rancher/norman/types/convert/convert.go b/vendor/github.com/rancher/norman/types/convert/convert.go index 2fb14d3b..8801e81f 100644 --- a/vendor/github.com/rancher/norman/types/convert/convert.go +++ b/vendor/github.com/rancher/norman/types/convert/convert.go @@ -1,6 +1,7 @@ package convert import ( + "bytes" "encoding/json" "errors" "fmt" @@ -85,6 +86,18 @@ func ToNumber(value interface{}) (int64, error) { if ok { return i, nil } + f, ok := value.(float64) + if ok { + return int64(f), nil + } + if n, ok := value.(json.Number); ok { + i, err := n.Int64() + if err == nil { + return i, nil + } + f, err := n.Float64() + return int64(f), err + } return strconv.ParseInt(ToString(value), 10, 64) } @@ -185,10 +198,12 @@ func ToObj(data interface{}, into interface{}) error { } func EncodeToMap(obj interface{}) (map[string]interface{}, error) { - bytes, err := json.Marshal(obj) + b, err := json.Marshal(obj) if err != nil { return nil, err } result := map[string]interface{}{} - return result, json.Unmarshal(bytes, &result) + dec := json.NewDecoder(bytes.NewBuffer(b)) + dec.UseNumber() + return result, dec.Decode(&result) } diff --git a/vendor/github.com/rancher/norman/types/server_types.go b/vendor/github.com/rancher/norman/types/server_types.go index 0c609f25..8b0d1ef7 100644 --- a/vendor/github.com/rancher/norman/types/server_types.go +++ b/vendor/github.com/rancher/norman/types/server_types.go @@ -1,6 +1,7 @@ package types import ( + "context" "encoding/json" "net/http" "net/url" @@ -54,6 +55,8 @@ type Validator func(request *APIContext, schema *Schema, data map[string]interfa type Formatter func(request *APIContext, resource *RawResource) +type CollectionFormatter func(request *APIContext, collection *GenericCollection) + type ErrorHandler func(request *APIContext, err error) type SubContextAttributeProvider interface { @@ -100,6 +103,23 @@ type APIContext struct { Response http.ResponseWriter } +type apiContextKey struct{} + +func NewAPIContext(req *http.Request, resp http.ResponseWriter, schemas *Schemas) *APIContext { + apiCtx := &APIContext{ + Response: resp, + Schemas: schemas, + } + ctx := context.WithValue(req.Context(), apiContextKey{}, apiCtx) + apiCtx.Request = req.WithContext(ctx) + return apiCtx +} + +func GetAPIContext(ctx context.Context) *APIContext { + apiContext, _ := ctx.Value(apiContextKey{}).(*APIContext) + return apiContext +} + func (r *APIContext) WriteResponse(code int, obj interface{}) { r.ResponseWriter.Write(r, code, obj) } @@ -148,6 +168,7 @@ type ReferenceValidator interface { type URLBuilder interface { Current() string Collection(schema *Schema, versionOverride *APIVersion) string + CollectionAction(schema *Schema, versionOverride *APIVersion, action string) string SubContextCollection(subContext *Schema, contextName string, schema *Schema) string SchemaLink(schema *Schema) string ResourceLink(resource *RawResource) string diff --git a/vendor/github.com/rancher/norman/types/types.go b/vendor/github.com/rancher/norman/types/types.go index f4601938..26e5a08c 100644 --- a/vendor/github.com/rancher/norman/types/types.go +++ b/vendor/github.com/rancher/norman/types/types.go @@ -103,18 +103,19 @@ type Schema struct { CollectionFilters map[string]Filter `json:"collectionFilters,omitempty"` Scope TypeScope `json:"-"` - InternalSchema *Schema `json:"-"` - Mapper Mapper `json:"-"` - ActionHandler ActionHandler `json:"-"` - LinkHandler RequestHandler `json:"-"` - ListHandler RequestHandler `json:"-"` - CreateHandler RequestHandler `json:"-"` - DeleteHandler RequestHandler `json:"-"` - UpdateHandler RequestHandler `json:"-"` - Formatter Formatter `json:"-"` - ErrorHandler ErrorHandler `json:"-"` - Validator Validator `json:"-"` - Store Store `json:"-"` + InternalSchema *Schema `json:"-"` + Mapper Mapper `json:"-"` + ActionHandler ActionHandler `json:"-"` + LinkHandler RequestHandler `json:"-"` + ListHandler RequestHandler `json:"-"` + CreateHandler RequestHandler `json:"-"` + DeleteHandler RequestHandler `json:"-"` + UpdateHandler RequestHandler `json:"-"` + Formatter Formatter `json:"-"` + CollectionFormatter CollectionFormatter `json:"-"` + ErrorHandler ErrorHandler `json:"-"` + Validator Validator `json:"-"` + Store Store `json:"-"` } type Field struct { @@ -148,3 +149,7 @@ type Filter struct { type ListOpts struct { Filters map[string]interface{} } + +func (c *Collection) AddAction(apiContext *APIContext, name string) { + c.Actions[name] = apiContext.URLBuilder.CollectionAction(apiContext.Schema, nil, name) +}