diff --git a/vendor.conf b/vendor.conf index 407013bc..fee9552a 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 550db511ba72a75c4a921cf4b1a94d2075fdaaf1 +github.com/rancher/norman 2550f12a9a3084d0b0d76e6c770196b093aff0f5 golang.org/x/sync fd80eb99c8f653c847d294a001bdf2a3a6f768f5 diff --git a/vendor/github.com/rancher/norman/clientbase/object_client.go b/vendor/github.com/rancher/norman/clientbase/object_client.go index 980fb870..e9e91373 100644 --- a/vendor/github.com/rancher/norman/clientbase/object_client.go +++ b/vendor/github.com/rancher/norman/clientbase/object_client.go @@ -58,6 +58,10 @@ func (p *ObjectClient) UnstructuredClient() *ObjectClient { } } +func (p *ObjectClient) GroupVersionKind() schema.GroupVersionKind { + return p.gvk +} + func (p *ObjectClient) getAPIPrefix() string { if p.gvk.Group == "" { return "api" @@ -90,6 +94,23 @@ func (p *ObjectClient) Create(o runtime.Object) (runtime.Object, error) { return result, err } +func (p *ObjectClient) GetNamespace(name, namespace string, opts metav1.GetOptions) (runtime.Object, error) { + result := p.Factory.Object() + req := p.restClient.Get(). + Prefix(p.getAPIPrefix(), p.gvk.Group, p.gvk.Version) + if namespace != "" { + req = req.Namespace(namespace) + } + err := req.NamespaceIfScoped(p.ns, p.resource.Namespaced). + Resource(p.resource.Name). + VersionedParams(&opts, dynamic.VersionedParameterEncoderWithV1Fallback). + Name(name). + Do(). + Into(result) + return result, err + +} + func (p *ObjectClient) Get(name string, opts metav1.GetOptions) (runtime.Object, error) { result := p.Factory.Object() err := p.restClient.Get(). @@ -123,6 +144,19 @@ func (p *ObjectClient) Update(name string, o runtime.Object) (runtime.Object, er return result, err } +func (p *ObjectClient) DeleteNamespace(name, namespace string, opts *metav1.DeleteOptions) error { + req := p.restClient.Delete(). + Prefix(p.getAPIPrefix(), p.gvk.Group, p.gvk.Version) + if namespace != "" { + req = req.Namespace(namespace) + } + return req.Resource(p.resource.Name). + Name(name). + Body(opts). + Do(). + Error() +} + func (p *ObjectClient) Delete(name string, opts *metav1.DeleteOptions) error { return p.restClient.Delete(). Prefix(p.getAPIPrefix(), p.gvk.Group, p.gvk.Version). diff --git a/vendor/github.com/rancher/norman/condition/condition.go b/vendor/github.com/rancher/norman/condition/condition.go index 85a5ef1c..e5d8c94e 100644 --- a/vendor/github.com/rancher/norman/condition/condition.go +++ b/vendor/github.com/rancher/norman/condition/condition.go @@ -72,9 +72,14 @@ func (c Cond) Once(obj runtime.Object, f func() (runtime.Object, error)) (runtim return obj, nil } -func (c Cond) Do(obj runtime.Object, f func() error) error { +func (c Cond) Do(obj runtime.Object, f func() (runtime.Object, error)) error { c.Unknown(obj) - if err := f(); err != nil { + newObj, err := f() + if newObj != nil { + obj = newObj + } + + if err != nil { c.False(obj) c.Reason(obj, err.Error()) return err diff --git a/vendor/github.com/rancher/norman/controller/starter.go b/vendor/github.com/rancher/norman/controller/starter.go index 2c488a17..55519767 100644 --- a/vendor/github.com/rancher/norman/controller/starter.go +++ b/vendor/github.com/rancher/norman/controller/starter.go @@ -11,7 +11,7 @@ type Starter interface { Start(ctx context.Context, threadiness int) error } -func SyncThenSync(ctx context.Context, threadiness int, starters ...Starter) error { +func SyncThenStart(ctx context.Context, threadiness int, starters ...Starter) error { if err := Sync(ctx, starters...); err != nil { return err } diff --git a/vendor/github.com/rancher/norman/generator/generator.go b/vendor/github.com/rancher/norman/generator/generator.go index f23c8b11..d663b59d 100644 --- a/vendor/github.com/rancher/norman/generator/generator.go +++ b/vendor/github.com/rancher/norman/generator/generator.go @@ -267,7 +267,7 @@ func generateClient(outputDir string, schemas []*types.Schema) error { }) } -func GenerateControllerForTypes(version *types.APIVersion, k8sOutputPackage string, objs ...interface{}) error { +func GenerateControllerForTypes(version *types.APIVersion, k8sOutputPackage string, nsObjs []interface{}, objs []interface{}) error { baseDir := args.DefaultSourceTree() k8sDir := path.Join(baseDir, k8sOutputPackage) @@ -294,6 +294,23 @@ func GenerateControllerForTypes(version *types.APIVersion, k8sOutputPackage stri } } + for _, obj := range nsObjs { + schema, err := schemas.Import(version, obj) + if err != nil { + return err + } + schema.Scope = types.NamespaceScope + controllers = append(controllers, schema) + + if err := generateController(true, k8sDir, schema, schemas); err != nil { + return err + } + + if err := generateLifecycle(true, k8sDir, schema, schemas); err != nil { + return err + } + } + if err := deepCopyGen(baseDir, k8sOutputPackage); err != nil { return err } diff --git a/vendor/github.com/rancher/norman/lifecycle/object.go b/vendor/github.com/rancher/norman/lifecycle/object.go index 661ebba0..349dd111 100644 --- a/vendor/github.com/rancher/norman/lifecycle/object.go +++ b/vendor/github.com/rancher/norman/lifecycle/object.go @@ -9,7 +9,7 @@ import ( ) var ( - created = "io.cattle.lifecycle.create" + created = "lifecycle.cattle.io/create" ) type ObjectLifecycle interface { diff --git a/vendor/github.com/rancher/norman/types/convert/convert.go b/vendor/github.com/rancher/norman/types/convert/convert.go index 421d7aed..eacf930b 100644 --- a/vendor/github.com/rancher/norman/types/convert/convert.go +++ b/vendor/github.com/rancher/norman/types/convert/convert.go @@ -146,5 +146,5 @@ func EncodeToMap(obj interface{}) (map[string]interface{}, error) { return nil, err } result := map[string]interface{}{} - return result, json.Unmarshal(bytes, result) + return result, json.Unmarshal(bytes, &result) } diff --git a/vendor/github.com/rancher/norman/types/mapper/embed.go b/vendor/github.com/rancher/norman/types/mapper/embed.go index 2c48945b..94e7b9c7 100644 --- a/vendor/github.com/rancher/norman/types/mapper/embed.go +++ b/vendor/github.com/rancher/norman/types/mapper/embed.go @@ -26,6 +26,10 @@ func (e *Embed) FromInternal(data map[string]interface{}) { } func (e *Embed) ToInternal(data map[string]interface{}) { + if data == nil { + return + } + sub := map[string]interface{}{} for _, fieldName := range e.embeddedFields { if v, ok := data[fieldName]; ok { diff --git a/vendor/github.com/rancher/norman/types/mapper/label_field.go b/vendor/github.com/rancher/norman/types/mapper/label_field.go index f5c3b8b1..1ffe5458 100644 --- a/vendor/github.com/rancher/norman/types/mapper/label_field.go +++ b/vendor/github.com/rancher/norman/types/mapper/label_field.go @@ -10,7 +10,7 @@ type LabelField struct { } func (e LabelField) FromInternal(data map[string]interface{}) { - v, ok := values.RemoveValue(data, "labels", "io.cattle.field."+e.Field) + v, ok := values.RemoveValue(data, "labels", "field.cattle.io/"+e.Field) if ok { data[e.Field] = v } @@ -19,7 +19,7 @@ func (e LabelField) FromInternal(data map[string]interface{}) { func (e LabelField) ToInternal(data map[string]interface{}) { v, ok := data[e.Field] if ok { - values.PutValue(data, v, "labels", "io.cattle.field."+e.Field) + values.PutValue(data, v, "labels", "field.cattle.io/"+e.Field) } } diff --git a/vendor/github.com/rancher/norman/types/server_types.go b/vendor/github.com/rancher/norman/types/server_types.go index 12ad40bc..1ad12e98 100644 --- a/vendor/github.com/rancher/norman/types/server_types.go +++ b/vendor/github.com/rancher/norman/types/server_types.go @@ -61,8 +61,13 @@ type ResponseWriter interface { } type AccessControl interface { - CanCreate(schema *Schema) bool - CanList(schema *Schema) bool + CanCreate(apiContext *APIContext, schema *Schema) bool + CanList(apiContext *APIContext, schema *Schema) bool + CanUpdate(apiContext *APIContext, schema *Schema) bool + CanDelete(apiContext *APIContext, schema *Schema) bool + + Filter(apiContext *APIContext, obj map[string]interface{}, context map[string]string) map[string]interface{} + FilterList(apiContext *APIContext, obj []map[string]interface{}, context map[string]string) []map[string]interface{} } type APIContext struct { @@ -149,6 +154,7 @@ type URLBuilder interface { SetSubContext(subContext string) FilterLink(schema *Schema, fieldName string, value string) string Action(action string, resource *RawResource) string + ResourceLinkByID(schema *Schema, id string) string } type Store interface {