1
0
mirror of https://github.com/rancher/types.git synced 2025-08-31 21:00:16 +00:00

Update vendor

This commit is contained in:
Darren Shepherd
2018-04-21 21:51:32 -07:00
parent 87abc9601e
commit 830f8bfaa7
14 changed files with 253 additions and 28 deletions

View File

@@ -1,19 +0,0 @@
package clientbase
import (
"net/http"
"github.com/rancher/norman/types"
)
type APIBaseClient struct {
Ops *APIOperations
Opts *ClientOpts
Types map[string]types.Schema
}
type APIOperations struct {
Opts *ClientOpts
Types map[string]types.Schema
Client *http.Client
}

View File

@@ -28,6 +28,25 @@ var (
dialer = &websocket.Dialer{}
)
type APIBaseClientInterface interface {
Websocket(url string, headers map[string][]string) (*websocket.Conn, *http.Response, error)
List(schemaType string, opts *types.ListOpts, respObject interface{}) error
Post(url string, createObj interface{}, respObject interface{}) error
GetLink(resource types.Resource, link string, respObject interface{}) error
Create(schemaType string, createObj interface{}, respObject interface{}) error
Update(schemaType string, existing *types.Resource, updates interface{}, respObject interface{}) error
ByID(schemaType string, id string, respObject interface{}) error
Delete(existing *types.Resource) error
Reload(existing *types.Resource, output interface{}) error
Action(schemaType string, action string, existing *types.Resource, inputObject, respObject interface{}) error
}
type APIBaseClient struct {
Ops *APIOperations
Opts *ClientOpts
Types map[string]types.Schema
}
type ClientOpts struct {
URL string
AccessKey string

View File

@@ -12,6 +12,12 @@ import (
"github.com/rancher/norman/types"
)
type APIOperations struct {
Opts *ClientOpts
Types map[string]types.Schema
Client *http.Client
}
func (a *APIOperations) setupRequest(req *http.Request) {
req.Header.Add("Authorization", a.Opts.getAuthHeader())
}

View File

@@ -30,6 +30,15 @@ func ObjectInCluster(cluster string, obj interface{}) bool {
}
}
}
if clusterName == "" {
if a := getValue(obj, "Annotations"); a.IsValid() {
if c := a.MapIndex(reflect.ValueOf("field.cattle.io/projectId")); c.IsValid() {
if parts := strings.SplitN(c.String(), ":", 2); len(parts) == 2 {
clusterName = parts[0]
}
}
}
}
return clusterName == cluster
}

View File

@@ -64,7 +64,7 @@ func NewGenericController(name string, genericClient Backend) GenericController
ListFunc: genericClient.List,
WatchFunc: genericClient.Watch,
},
genericClient.ObjectFactory().Object(), resyncPeriod, cache.Indexers{})
genericClient.ObjectFactory().Object(), resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc})
rl := workqueue.NewMaxOfRateLimiter(
workqueue.NewItemExponentialFailureRateLimiter(500*time.Millisecond, 1000*time.Second),

View File

@@ -103,6 +103,7 @@ func (p *ObjectClient) Create(o runtime.Object) (runtime.Object, error) {
}
}
result := p.Factory.Object()
logrus.Debugf("REST CREATE %s/%s/%s/%s/%s", p.getAPIPrefix(), p.gvk.Group, p.gvk.Version, ns, p.resource.Name)
err := p.restClient.Post().
Prefix(p.getAPIPrefix(), p.gvk.Group, p.gvk.Version).
NamespaceIfScoped(ns, p.resource.Namespaced).
@@ -126,6 +127,7 @@ func (p *ObjectClient) GetNamespaced(namespace, name string, opts metav1.GetOpti
Name(name).
Do().
Into(result)
logrus.Debugf("REST GET %s/%s/%s/%s/%s/%s", p.getAPIPrefix(), p.gvk.Group, p.gvk.Version, namespace, p.resource.Name, name)
return result, err
}
@@ -140,6 +142,7 @@ func (p *ObjectClient) Get(name string, opts metav1.GetOptions) (runtime.Object,
Name(name).
Do().
Into(result)
logrus.Debugf("REST GET %s/%s/%s/%s/%s/%s", p.getAPIPrefix(), p.gvk.Group, p.gvk.Version, p.ns, p.resource.Name, name)
return result, err
}
@@ -152,7 +155,7 @@ func (p *ObjectClient) Update(name string, o runtime.Object) (runtime.Object, er
if len(name) == 0 {
return result, errors.New("object missing name")
}
logrus.Debugf("UPDATE %s/%s/%s/%s/%s/%s", p.getAPIPrefix(), p.gvk.Group, p.gvk.Version, ns, p.resource.Name, name)
logrus.Debugf("REST UPDATE %s/%s/%s/%s/%s/%s", p.getAPIPrefix(), p.gvk.Group, p.gvk.Version, ns, p.resource.Name, name)
err := p.restClient.Put().
Prefix(p.getAPIPrefix(), p.gvk.Group, p.gvk.Version).
NamespaceIfScoped(ns, p.resource.Namespaced).
@@ -170,6 +173,7 @@ func (p *ObjectClient) DeleteNamespaced(namespace, name string, opts *metav1.Del
if namespace != "" {
req = req.Namespace(namespace)
}
logrus.Debugf("REST DELETE %s/%s/%s/%s/%s/%s", p.getAPIPrefix(), p.gvk.Group, p.gvk.Version, namespace, p.resource.Name, name)
return req.Resource(p.resource.Name).
Name(name).
Body(opts).
@@ -178,6 +182,7 @@ func (p *ObjectClient) DeleteNamespaced(namespace, name string, opts *metav1.Del
}
func (p *ObjectClient) Delete(name string, opts *metav1.DeleteOptions) error {
logrus.Debugf("REST DELETE %s/%s/%s/%s/%s/%s", p.getAPIPrefix(), p.gvk.Group, p.gvk.Version, p.ns, p.resource.Name, name)
return p.restClient.Delete().
Prefix(p.getAPIPrefix(), p.gvk.Group, p.gvk.Version).
NamespaceIfScoped(p.ns, p.resource.Namespaced).
@@ -190,6 +195,7 @@ func (p *ObjectClient) Delete(name string, opts *metav1.DeleteOptions) error {
func (p *ObjectClient) List(opts metav1.ListOptions) (runtime.Object, error) {
result := p.Factory.List()
logrus.Debugf("REST LIST %s/%s/%s/%s/%s", p.getAPIPrefix(), p.gvk.Group, p.gvk.Version, p.ns, p.resource.Name)
return result, p.restClient.Get().
Prefix(p.getAPIPrefix(), p.gvk.Group, p.gvk.Version).
NamespaceIfScoped(p.ns, p.resource.Namespaced).

View File

@@ -6,6 +6,7 @@ import (
"strings"
"time"
"github.com/rancher/norman/httperror"
"github.com/rancher/norman/restwatch"
"github.com/rancher/norman/types"
"github.com/rancher/norman/types/convert"
@@ -117,7 +118,7 @@ func (p *Store) getUser(apiContext *types.APIContext) string {
func (p *Store) doAuthed(apiContext *types.APIContext, request *rest.Request) rest.Result {
start := time.Now()
defer func() {
logrus.Debug("GET:", time.Now().Sub(start), p.resourcePlural)
logrus.Debug("GET: ", time.Now().Sub(start), p.resourcePlural)
}()
for _, header := range authHeaders {
@@ -131,6 +132,18 @@ func (p *Store) k8sClient(apiContext *types.APIContext) (rest.Interface, error)
}
func (p *Store) ByID(apiContext *types.APIContext, schema *types.Schema, id string) (map[string]interface{}, error) {
splitted := strings.Split(strings.TrimSpace(id), ":")
validID := false
namespaced := schema.Scope == types.NamespaceScope
if namespaced {
validID = len(splitted) == 2 && len(strings.TrimSpace(splitted[0])) > 0 && len(strings.TrimSpace(splitted[1])) > 0
} else {
validID = len(splitted) == 1 && len(strings.TrimSpace(splitted[0])) > 0
}
if !validID {
return nil, httperror.NewAPIError(httperror.NotFound, "failed to find resource by id")
}
_, result, err := p.byID(apiContext, schema, id)
return result, err
}
@@ -166,7 +179,7 @@ func (p *Store) List(apiContext *types.APIContext, schema *types.Schema, opt *ty
resultList := &unstructured.UnstructuredList{}
start := time.Now()
err = req.Do().Into(resultList)
logrus.Debug("LIST:", time.Now().Sub(start), p.resourcePlural)
logrus.Debug("LIST: ", time.Now().Sub(start), p.resourcePlural)
if err != nil {
return nil, err
}
@@ -266,7 +279,7 @@ func (p *Store) Create(apiContext *types.APIContext, schema *types.Schema, data
if name == "" {
generated, _ := values.GetValueN(data, "metadata", "generateName").(string)
if generated == "" {
values.PutValue(data, strings.ToLower(schema.ID+"-"), "metadata", "generateName")
values.PutValue(data, types.GenerateName(schema.ID), "metadata", "name")
}
}
@@ -335,14 +348,14 @@ func (p *Store) Delete(apiContext *types.APIContext, schema *types.Schema, id st
return nil, err
}
namespace, id := splitID(id)
namespace, name := splitID(id)
prop := metav1.DeletePropagationForeground
req := p.common(namespace, k8sClient.Delete()).
Body(&metav1.DeleteOptions{
PropagationPolicy: &prop,
}).
Name(id)
Name(name)
err = p.doAuthed(apiContext, req).Error()
if err != nil {

19
vendor/github.com/rancher/norman/types/id.go generated vendored Normal file
View File

@@ -0,0 +1,19 @@
package types
import (
"fmt"
"regexp"
"strings"
utilrand "k8s.io/apimachinery/pkg/util/rand"
)
var (
lowerChars = regexp.MustCompile("[a-z]+")
)
func GenerateName(typeName string) string {
base := typeName[0:1] + lowerChars.ReplaceAllString(typeName[1:], "")
last := utilrand.String(5)
return fmt.Sprintf("%s-%s", strings.ToLower(base), last)
}

42
vendor/github.com/rancher/norman/types/mapper/copy.go generated vendored Normal file
View File

@@ -0,0 +1,42 @@
package mapper
import (
"fmt"
"github.com/rancher/norman/types"
)
type Copy struct {
From, To string
}
func (c Copy) FromInternal(data map[string]interface{}) {
if data == nil {
return
}
v, ok := data[c.From]
if ok {
data[c.To] = v
}
}
func (c Copy) ToInternal(data map[string]interface{}) {
if data == nil {
return
}
t, tok := data[c.To]
_, fok := data[c.From]
if tok && !fok {
data[c.From] = t
}
}
func (c Copy) ModifySchema(s *types.Schema, schemas *types.Schemas) error {
f, ok := s.ResourceFields[c.From]
if !ok {
return fmt.Errorf("field %s missing on schema %s", c.From, s.ID)
}
s.ResourceFields[c.To] = f
return nil
}

View File

@@ -38,7 +38,9 @@ func (e *Embed) ToInternal(data map[string]interface{}) {
delete(data, fieldName)
}
if len(sub) == 0 {
return
}
data[e.Field] = sub
}

View File

@@ -95,6 +95,8 @@ func (s *Schemas) setupFilters(schema *Schema) {
switch field.Type {
case "enum":
mods = []ModifierType{ModifierEQ, ModifierNE, ModifierIn, ModifierNotIn}
case "dnsLabel":
fallthrough
case "string":
mods = []ModifierType{ModifierEQ, ModifierNE, ModifierIn, ModifierNotIn}
case "int":