diff --git a/condition/condition.go b/condition/condition.go index 1d848118..00d927c6 100644 --- a/condition/condition.go +++ b/condition/condition.go @@ -140,7 +140,11 @@ func (c Cond) doInternal(obj runtime.Object, f func() (runtime.Object, error)) ( } if err != nil { - if _, ok := err.(*controller.ForgetError); !ok { + if _, ok := err.(*controller.ForgetError); ok { + if c.IsFalse(obj) { + c.Unknown(obj) + } + } else { c.False(obj) } c.ReasonAndMessageFromError(obj, err) diff --git a/controller/generic_controller.go b/controller/generic_controller.go index c7e2ef05..c031431a 100644 --- a/controller/generic_controller.go +++ b/controller/generic_controller.go @@ -16,7 +16,7 @@ import ( ) var ( - resyncPeriod = 5 * time.Minute + resyncPeriod = 2 * time.Hour ) type HandlerFunc func(key string) error diff --git a/pkg/subscribe/handler.go b/pkg/subscribe/handler.go index a8cab896..9d84aa08 100644 --- a/pkg/subscribe/handler.go +++ b/pkg/subscribe/handler.go @@ -143,7 +143,7 @@ func writeData(c *websocket.Conn, header string, buf []byte) error { if _, err := messageWriter.Write([]byte(`}`)); err != nil { return err } - return nil + return messageWriter.Close() } func streamStore(ctx context.Context, eg *errgroup.Group, apiContext *types.APIContext, schema *types.Schema, result chan map[string]interface{}) { diff --git a/store/crd/init.go b/store/crd/init.go index 21c2b457..e6443fd0 100644 --- a/store/crd/init.go +++ b/store/crd/init.go @@ -9,14 +9,33 @@ import ( "github.com/rancher/norman/types/convert" "github.com/sirupsen/logrus" apiext "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" - apiextclientset "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" + "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/client-go/dynamic" + "k8s.io/client-go/rest" ) type Factory struct { - APIExtClientSet apiextclientset.Interface + APIExtClientSet clientset.Interface +} + +func NewFactoryFromConfig(config rest.Config) (*Factory, error) { + dynamicConfig := config + if dynamicConfig.NegotiatedSerializer == nil { + configConfig := dynamic.ContentConfig() + dynamicConfig.NegotiatedSerializer = configConfig.NegotiatedSerializer + } + + apiExtClient, err := clientset.NewForConfig(&dynamicConfig) + if err != nil { + return nil, err + } + + return &Factory{ + APIExtClientSet: apiExtClient, + }, nil } func (c *Factory) AddSchemas(ctx context.Context, schemas ...*types.Schema) (map[*types.Schema]*apiext.CustomResourceDefinition, error) { diff --git a/types/convert/convert.go b/types/convert/convert.go index bb3327aa..c214ad49 100644 --- a/types/convert/convert.go +++ b/types/convert/convert.go @@ -48,7 +48,7 @@ func ToString(value interface{}) string { if single == nil { return "" } - return fmt.Sprint(single) + return strings.TrimSpace(fmt.Sprint(single)) } func ToTimestamp(value interface{}) (int64, error) { @@ -164,7 +164,7 @@ func ToStringSlice(data interface{}) []string { return v } if v, ok := data.([]interface{}); ok { - result := []string{} + var result []string for _, item := range v { result = append(result, ToString(item)) }