diff --git a/vendor.conf b/vendor.conf index 006ec8d5..29f7502d 100644 --- a/vendor.conf +++ b/vendor.conf @@ -3,5 +3,5 @@ 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 0d05740f8de49126ac847aed34e324696e8eab14 +github.com/rancher/norman 16783cf1d364fa9d1e62d0b4ecfd1f919a956da4 golang.org/x/sync fd80eb99c8f653c847d294a001bdf2a3a6f768f5 diff --git a/vendor/github.com/rancher/norman/condition/condition.go b/vendor/github.com/rancher/norman/condition/condition.go index 0288bf7c..7f5d22a6 100644 --- a/vendor/github.com/rancher/norman/condition/condition.go +++ b/vendor/github.com/rancher/norman/condition/condition.go @@ -42,22 +42,16 @@ func (c Cond) Reason(obj runtime.Object, reason string) { func (c Cond) Message(obj runtime.Object, message string) { cond := findOrCreateCond(obj, string(c)) - v := getFieldValue(cond, "Message") - if v.IsValid() { - v.SetString(message) - } + getFieldValue(cond, "Message").SetString(message) } -func (c Cond) ReasonError(obj runtime.Object, err error) { +func (c Cond) ReasonAndMessageFromError(obj runtime.Object, err error) { cond := findOrCreateCond(obj, string(c)) + getFieldValue(cond, "Message").SetString(err.Error()) if ce, ok := err.(*conditionError); ok { getFieldValue(cond, "Reason").SetString(ce.reason) - v := getFieldValue(cond, "Message") - if v.IsValid() { - v.SetString(ce.Error()) - } } else { - getFieldValue(cond, "Reason").SetString(err.Error()) + getFieldValue(cond, "Reason").SetString("Error") } touchTS(cond) } @@ -86,7 +80,7 @@ func (c Cond) Once(obj runtime.Object, f func() (runtime.Object, error)) (runtim if err != nil { c.False(obj) - c.ReasonError(obj, err) + c.ReasonAndMessageFromError(obj, err) return obj, err } c.True(obj) @@ -102,7 +96,7 @@ func (c Cond) Do(obj runtime.Object, f func() (runtime.Object, error)) (runtime. if err != nil { c.False(obj) - c.ReasonError(obj, err) + c.ReasonAndMessageFromError(obj, err) return obj, err } c.True(obj) diff --git a/vendor/github.com/rancher/norman/controller/generic_controller.go b/vendor/github.com/rancher/norman/controller/generic_controller.go index bafffb8b..434ab136 100644 --- a/vendor/github.com/rancher/norman/controller/generic_controller.go +++ b/vendor/github.com/rancher/norman/controller/generic_controller.go @@ -167,7 +167,7 @@ func (g *genericController) processNextWorkItem() bool { return true } - utilruntime.HandleError(fmt.Errorf("%v failed with : %v", key, err)) + utilruntime.HandleError(fmt.Errorf("%v %v failed with : %v", g.name, key, err)) g.queue.AddRateLimited(key) return true diff --git a/vendor/github.com/rancher/norman/generator/controller_template.go b/vendor/github.com/rancher/norman/generator/controller_template.go index 1655bee2..15f236ec 100644 --- a/vendor/github.com/rancher/norman/generator/controller_template.go +++ b/vendor/github.com/rancher/norman/generator/controller_template.go @@ -60,9 +60,11 @@ type {{.schema.CodeName}}Controller interface { type {{.schema.CodeName}}Interface interface { ObjectClient() *clientbase.ObjectClient Create(*{{.prefix}}{{.schema.CodeName}}) (*{{.prefix}}{{.schema.CodeName}}, error) + GetNamespace(name, namespace string, opts metav1.GetOptions) (*{{.prefix}}{{.schema.CodeName}}, error) Get(name string, opts metav1.GetOptions) (*{{.prefix}}{{.schema.CodeName}}, error) Update(*{{.prefix}}{{.schema.CodeName}}) (*{{.prefix}}{{.schema.CodeName}}, error) Delete(name string, options *metav1.DeleteOptions) error + DeleteNamespace(name, namespace string, options *metav1.DeleteOptions) error List(opts metav1.ListOptions) (*{{.schema.CodeName}}List, error) Watch(opts metav1.ListOptions) (watch.Interface, error) DeleteCollection(deleteOpts *metav1.DeleteOptions, listOpts metav1.ListOptions) error @@ -180,6 +182,11 @@ func (s *{{.schema.ID}}Client) Get(name string, opts metav1.GetOptions) (*{{.pre return obj.(*{{.prefix}}{{.schema.CodeName}}), err } +func (s *{{.schema.ID}}Client) GetNamespace(name, namespace string, opts metav1.GetOptions) (*{{.prefix}}{{.schema.CodeName}}, error) { + obj, err := s.objectClient.GetNamespace(name, namespace, opts) + return obj.(*{{.prefix}}{{.schema.CodeName}}), err +} + func (s *{{.schema.ID}}Client) Update(o *{{.prefix}}{{.schema.CodeName}}) (*{{.prefix}}{{.schema.CodeName}}, error) { obj, err := s.objectClient.Update(o.Name, o) return obj.(*{{.prefix}}{{.schema.CodeName}}), err @@ -189,6 +196,10 @@ func (s *{{.schema.ID}}Client) Delete(name string, options *metav1.DeleteOptions return s.objectClient.Delete(name, options) } +func (s *{{.schema.ID}}Client) DeleteNamespace(name, namespace string, options *metav1.DeleteOptions) error { + return s.objectClient.DeleteNamespace(name, namespace, options) +} + func (s *{{.schema.ID}}Client) List(opts metav1.ListOptions) (*{{.schema.CodeName}}List, error) { obj, err := s.objectClient.List(opts) return obj.(*{{.schema.CodeName}}List), err diff --git a/vendor/github.com/rancher/norman/generator/generator.go b/vendor/github.com/rancher/norman/generator/generator.go index ab259d13..8137a0d3 100644 --- a/vendor/github.com/rancher/norman/generator/generator.go +++ b/vendor/github.com/rancher/norman/generator/generator.go @@ -74,6 +74,10 @@ func getTypeString(nullable bool, typeName string, schema *types.Schema, schemas return "string" case "enum": return "string" + case "intOrString": + return "intstr.IntOrString" + case "dnsLabel": + return "string" default: if schema != nil && schemas != nil { otherSchema := schemas.Schema(&schema.Version, typeName) diff --git a/vendor/github.com/rancher/norman/generator/type_template.go b/vendor/github.com/rancher/norman/generator/type_template.go index e790936a..0044c12e 100644 --- a/vendor/github.com/rancher/norman/generator/type_template.go +++ b/vendor/github.com/rancher/norman/generator/type_template.go @@ -5,6 +5,7 @@ var typeTemplate = `package client {{- if .schema | hasGet }} import ( "github.com/rancher/norman/types" + "k8s.io/apimachinery/pkg/util/intstr" ) {{- end}} diff --git a/vendor/github.com/rancher/norman/lifecycle/object.go b/vendor/github.com/rancher/norman/lifecycle/object.go index 349dd111..796409e4 100644 --- a/vendor/github.com/rancher/norman/lifecycle/object.go +++ b/vendor/github.com/rancher/norman/lifecycle/object.go @@ -141,7 +141,9 @@ func (o *objectLifecycleAdapter) create(metadata metav1.Object, obj runtime.Obje metadata.SetAnnotations(map[string]string{}) } - metadata.SetFinalizers(append(metadata.GetFinalizers(), o.name)) + if o.objectClient.GroupVersionKind().Kind != "Namespace" { + metadata.SetFinalizers(append(metadata.GetFinalizers(), o.name)) + } metadata.GetAnnotations()[initialized] = "true" _, err = o.objectClient.Update(metadata.GetName(), obj) diff --git a/vendor/github.com/rancher/norman/types/mapper.go b/vendor/github.com/rancher/norman/types/mapper.go index 7baf6d8c..a8913418 100644 --- a/vendor/github.com/rancher/norman/types/mapper.go +++ b/vendor/github.com/rancher/norman/types/mapper.go @@ -3,6 +3,7 @@ package types import ( "fmt" + "github.com/rancher/norman/types/convert" "github.com/rancher/norman/types/definition" ) @@ -92,9 +93,9 @@ func (t *typeMapper) ToInternal(data map[string]interface{}) { if schema.Mapper == nil { continue } - datas, _ := data[fieldName].([]map[string]interface{}) + datas, _ := data[fieldName].([]interface{}) for _, fieldData := range datas { - schema.Mapper.ToInternal(fieldData) + schema.Mapper.ToInternal(convert.ToMapInterface(fieldData)) } } diff --git a/vendor/github.com/rancher/norman/types/mapper/annotation_field.go b/vendor/github.com/rancher/norman/types/mapper/annotation_field.go index 9bbf924c..821621a3 100644 --- a/vendor/github.com/rancher/norman/types/mapper/annotation_field.go +++ b/vendor/github.com/rancher/norman/types/mapper/annotation_field.go @@ -11,6 +11,7 @@ import ( type AnnotationField struct { Field string Object bool + List bool IgnoreDefinition bool } @@ -24,6 +25,12 @@ func (e AnnotationField) FromInternal(data map[string]interface{}) { v = data } } + if e.List { + var data []interface{} + if err := json.Unmarshal([]byte(convert.ToString(v)), &data); err == nil { + v = data + } + } data[e.Field] = v } @@ -32,13 +39,14 @@ func (e AnnotationField) FromInternal(data map[string]interface{}) { func (e AnnotationField) ToInternal(data map[string]interface{}) { v, ok := data[e.Field] if ok { - if e.Object { + if e.Object || e.List { if bytes, err := json.Marshal(v); err == nil { v = string(bytes) } } - values.PutValue(data, v, "annotations", "field.cattle.io/"+e.Field) + values.PutValue(data, convert.ToString(v), "annotations", "field.cattle.io/"+e.Field) } + values.RemoveValue(data, e.Field) } func (e AnnotationField) ModifySchema(schema *types.Schema, schemas *types.Schemas) error { diff --git a/vendor/github.com/rancher/norman/types/mapper/changetype.go b/vendor/github.com/rancher/norman/types/mapper/changetype.go new file mode 100644 index 00000000..a2e09c9c --- /dev/null +++ b/vendor/github.com/rancher/norman/types/mapper/changetype.go @@ -0,0 +1,27 @@ +package mapper + +import ( + "github.com/rancher/norman/types" +) + +type ChangeType struct { + Field string + Type string +} + +func (c ChangeType) FromInternal(data map[string]interface{}) { +} + +func (c ChangeType) ToInternal(data map[string]interface{}) { +} + +func (c ChangeType) ModifySchema(schema *types.Schema, schemas *types.Schemas) error { + if err := ValidateField(c.Field, schema); err != nil { + return err + } + + f := schema.ResourceFields[c.Field] + f.Type = c.Type + schema.ResourceFields[c.Field] = f + return nil +} diff --git a/vendor/github.com/rancher/norman/types/mapper/display_name.go b/vendor/github.com/rancher/norman/types/mapper/display_name.go index 506aff16..d1a04183 100644 --- a/vendor/github.com/rancher/norman/types/mapper/display_name.go +++ b/vendor/github.com/rancher/norman/types/mapper/display_name.go @@ -8,7 +8,8 @@ var displayNameMappers = types.Mappers{ &Move{From: "name", To: "id"}, &Move{From: "displayName", To: "name"}, Access{Fields: map[string]string{ - "id": "", + "id": "", + "name": "cru", }}, } diff --git a/vendor/github.com/rancher/norman/types/mapper/metadata.go b/vendor/github.com/rancher/norman/types/mapper/metadata.go index c857047c..47b31338 100644 --- a/vendor/github.com/rancher/norman/types/mapper/metadata.go +++ b/vendor/github.com/rancher/norman/types/mapper/metadata.go @@ -6,6 +6,7 @@ import ( func NewMetadataMapper() types.Mapper { return types.Mappers{ + ChangeType{Field: "name", Type: "dnsLabel"}, Drop{"generateName"}, //Move{From: "selfLink", To: "resourcePath"}, Drop{"selfLink"}, diff --git a/vendor/github.com/rancher/norman/types/mapper/slice_to_map.go b/vendor/github.com/rancher/norman/types/mapper/slice_to_map.go index 78c47cd3..9ba47e41 100644 --- a/vendor/github.com/rancher/norman/types/mapper/slice_to_map.go +++ b/vendor/github.com/rancher/norman/types/mapper/slice_to_map.go @@ -31,7 +31,7 @@ func (s SliceToMap) FromInternal(data map[string]interface{}) { func (s SliceToMap) ToInternal(data map[string]interface{}) { datas, _ := data[s.Field].(map[string]interface{}) - var result []map[string]interface{} + var result []interface{} for name, item := range datas { mapItem, _ := item.(map[string]interface{}) @@ -43,6 +43,8 @@ func (s SliceToMap) ToInternal(data map[string]interface{}) { if len(result) > 0 { data[s.Field] = result + } else if datas != nil { + data[s.Field] = result } } diff --git a/vendor/github.com/rancher/norman/types/reflection.go b/vendor/github.com/rancher/norman/types/reflection.go index 5b0cb51b..61192ce2 100644 --- a/vendor/github.com/rancher/norman/types/reflection.go +++ b/vendor/github.com/rancher/norman/types/reflection.go @@ -423,7 +423,7 @@ func (s *Schemas) determineSchemaType(version *APIVersion, t reflect.Type) (stri return "date", nil } if t.Name() == "IntOrString" { - return "string", nil + return "intOrString", nil } if t.Name() == "Quantity" { return "string", nil diff --git a/vendor/github.com/rancher/norman/types/types.go b/vendor/github.com/rancher/norman/types/types.go index 3c028017..a1421d6f 100644 --- a/vendor/github.com/rancher/norman/types/types.go +++ b/vendor/github.com/rancher/norman/types/types.go @@ -117,10 +117,10 @@ type Field struct { Type string `json:"type,omitempty"` Default interface{} `json:"default,omitempty"` Nullable bool `json:"nullable,omitempty"` - Create bool `json:"create,omitempty"` + Create bool `json:"create"` WriteOnly bool `json:"writeOnly,omitempty"` Required bool `json:"required,omitempty"` - Update bool `json:"update,omitempty"` + Update bool `json:"update"` MinLength *int64 `json:"minLength,omitempty"` MaxLength *int64 `json:"maxLength,omitempty"` Min *int64 `json:"min,omitempty"` diff --git a/vendor/github.com/rancher/norman/types/values/values.go b/vendor/github.com/rancher/norman/types/values/values.go index 0b325435..0ec04457 100644 --- a/vendor/github.com/rancher/norman/types/values/values.go +++ b/vendor/github.com/rancher/norman/types/values/values.go @@ -84,6 +84,10 @@ func GetValue(data map[string]interface{}, keys ...string) (interface{}, bool) { } func PutValue(data map[string]interface{}, val interface{}, keys ...string) { + if data == nil { + return + } + // This is so ugly for i, key := range keys { if i == len(keys)-1 {