diff --git a/apis/networking/v1alpha1/gateway_types.go b/apis/networking/v1alpha1/gateway_types.go index e4a8840b5..391e846a6 100644 --- a/apis/networking/v1alpha1/gateway_types.go +++ b/apis/networking/v1alpha1/gateway_types.go @@ -193,12 +193,13 @@ type GatewayStatus struct { Listeners []ListenerStatus `json:"listeners,omitempty"` } +//+genclient //+kubebuilder:object:root=true //+kubebuilder:storageversion //+kubebuilder:subresource:status -// +kubebuilder:printcolumn:name="Address",type=string,JSONPath=`.status.addresses[*].value` -// +kubebuilder:printcolumn:name="Ready",type=string,JSONPath=`.status.conditions[?(@.type=="Ready")].status` -// +kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp` +//+kubebuilder:printcolumn:name="Address",type=string,JSONPath=`.status.addresses[*].value` +//+kubebuilder:printcolumn:name="Ready",type=string,JSONPath=`.status.conditions[?(@.type=="Ready")].status` +//+kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp` // Gateway is the Schema for the gateways API type Gateway struct { diff --git a/apis/networking/v1alpha1/gateway_webhook.go b/apis/networking/v1alpha1/gateway_webhook.go index 7b7d9a71c..ca2765325 100644 --- a/apis/networking/v1alpha1/gateway_webhook.go +++ b/apis/networking/v1alpha1/gateway_webhook.go @@ -56,7 +56,7 @@ func (r *Gateway) Default() { r.Spec.GatewayDef.Name = r.GetName() } - needInjectDefaultListeners := true + needInjectDefaultListeners := len(r.Spec.GatewaySpec.Listeners) == 0 for index, listener := range r.Spec.GatewaySpec.Listeners { if listener.Name == DefaultHttpListenerName { needInjectDefaultListeners = false @@ -71,8 +71,11 @@ func (r *Gateway) Default() { }, } } else { - hostname := k8sgatewayapiv1beta1.Hostname(fmt.Sprintf("*.%s", r.Spec.Domain)) - listener.Hostname = &hostname + if listener.Hostname == nil { + hostname := k8sgatewayapiv1beta1.Hostname(fmt.Sprintf("*.%s", r.Spec.Domain)) + listener.Hostname = &hostname + } + } r.Spec.GatewaySpec.Listeners[index] = listener } diff --git a/controllers/core/function_controller.go b/controllers/core/function_controller.go index 1651c554a..8351fe0e1 100644 --- a/controllers/core/function_controller.go +++ b/controllers/core/function_controller.go @@ -150,7 +150,6 @@ func (r *FunctionReconciler) Reconcile(ctx context.Context, req ctrl.Request) (c if err = r.createOrUpdateHTTPRoute(&fn); err != nil { return ctrl.Result{}, err } - ready, err := r.httpRouteIsReady(&fn) if err != nil { return ctrl.Result{}, err @@ -163,7 +162,6 @@ func (r *FunctionReconciler) Reconcile(ctx context.Context, req ctrl.Request) (c log.Error(err, "Failed to clean Serving") return ctrl.Result{}, err } - if recheckTime != nil { return ctrl.Result{RequeueAfter: time.Until(*recheckTime)}, nil } @@ -610,6 +608,9 @@ func (r *FunctionReconciler) createServing(fn *openfunction.Function) error { log.Error(err, "Failed to SetOwnerReferences for serving") return err } + if fn.Status.Build != nil && fn.Status.Build.State == openfunction.Skipped { + serving.Spec.Image = fn.Spec.Image + } if err := r.Create(r.ctx, serving); err != nil { log.Error(err, "Failed to create serving") @@ -750,6 +751,12 @@ func (r *FunctionReconciler) updateFuncWithServingStatus(fn *openfunction.Functi // Clean up redundant servings caused by the `createOrUpdateBuilder` function failed. func (r *FunctionReconciler) cleanServing(fn *openfunction.Function) error { + if fn.Status.Serving == nil || + fn.Status.Serving.State != openfunction.Running || + fn.Status.Serving.Service == "" { + return nil + } + log := r.Log.WithName("CleanServing"). WithValues("Function", fmt.Sprintf("%s/%s", fn.Namespace, fn.Name)) @@ -765,6 +772,18 @@ func (r *FunctionReconciler) cleanServing(fn *openfunction.Function) error { stableName = fn.Status.RolloutStatus.Canary.Serving.ResourceRef oldStableName = fn.Status.Serving.LastSuccessfulResourceRef } + + realHttpRoute := &k8sgatewayapiv1beta1.HTTPRoute{ + ObjectMeta: metav1.ObjectMeta{ + Name: fn.Name, + Namespace: fn.Namespace, + }, + } + + if err := r.Get(r.ctx, client.ObjectKeyFromObject(realHttpRoute), realHttpRoute); err != nil { + return err + } + servings := &openfunction.ServingList{} if err := r.List(r.ctx, servings, client.InNamespace(fn.Namespace), client.MatchingLabels{constants.FunctionLabel: fn.Name}); err != nil { return err @@ -978,16 +997,23 @@ func (r *FunctionReconciler) createOrUpdateHTTPRoute(fn *openfunction.Function) } + if !r.HttpRouteHasChange(fn, stableHost, host, + stableServiceName, serviceName, ns, weight, port, gateway) { + log.Info("http Route not change", "fn", fn.Name, "namespace", fn.Namespace) + return nil + } + httpRoute := &k8sgatewayapiv1beta1.HTTPRoute{ ObjectMeta: metav1.ObjectMeta{Namespace: fn.Namespace, Name: fn.Name}, } + op, err := controllerutil.CreateOrUpdate(r.ctx, r.Client, httpRoute, r.mutateHTTPRoute(fn, stableHost, host, stableServiceName, serviceName, ns, weight, port, gateway, httpRoute)) if err != nil { log.Error(err, "Failed to CreateOrUpdate HTTPRoute") return err } - log.V(1).Info(fmt.Sprintf("HTTPRoute %s", op)) + log.V(1).Info(fmt.Sprintf("HTTPRoute %s", op), "name", fn.Name, "namespace", fn.Namespace) if err := r.updateFuncWithHTTPRouteStatus(fn, gateway, httpRoute); err != nil { return err @@ -1001,7 +1027,7 @@ func (r *FunctionReconciler) createOrUpdateHTTPRoute(fn *openfunction.Function) log.Error(err, "Failed to CreateOrUpdate service") return err } - log.V(1).Info(fmt.Sprintf("service %s", op)) + log.V(1).Info(fmt.Sprintf("service %s", op), "name", fn.Name, "namespace", fn.Namespace) return nil @@ -1610,7 +1636,40 @@ func (r *FunctionReconciler) httpRouteIsReady(fn *openfunction.Function) (bool, log.Info("httpRoute status is not ready", "name", fn.Name, "parent", parent.ParentRef.Name, "type", condition.Type) return false, nil } + + expectedTime := metav1.Now().Add(-constants.DefaultGatewayChangeCleanTime) + if condition.LastTransitionTime.Time.After(expectedTime) { + log.Info("httpRoute update time is not ready", "name", fn.Name, "parent", parent.ParentRef.Name, "type", condition.Type) + return false, nil + } } } return true, nil } +func (r *FunctionReconciler) HttpRouteHasChange(fn *openfunction.Function, + stableHost, host, stableServiceName, serviceName, ns string, weight *int32, port k8sgatewayapiv1beta1.PortNumber, + gateway *networkingv1alpha1.Gateway) bool { + + httpRoute := &k8sgatewayapiv1beta1.HTTPRoute{ + ObjectMeta: metav1.ObjectMeta{Namespace: fn.Namespace, Name: fn.Name}, + } + + err := r.mutateHTTPRoute(fn, stableHost, host, + stableServiceName, serviceName, ns, weight, port, gateway, httpRoute)() + if err != nil { + return true + } + realHttpRoute := &k8sgatewayapiv1beta1.HTTPRoute{ + ObjectMeta: metav1.ObjectMeta{ + Name: fn.Name, + Namespace: fn.Namespace, + }, + } + + if err := r.Get(r.ctx, client.ObjectKeyFromObject(realHttpRoute), realHttpRoute); err != nil { + return true + } + + return util.Hash(realHttpRoute.Spec) != util.Hash(httpRoute.Spec) + +} diff --git a/pkg/client/clientset/versioned/clientset.go b/pkg/client/clientset/versioned/clientset.go index ef8fb7833..6eb508aa7 100644 --- a/pkg/client/clientset/versioned/clientset.go +++ b/pkg/client/clientset/versioned/clientset.go @@ -19,6 +19,7 @@ package versioned import ( "fmt" + "net/http" discovery "k8s.io/client-go/discovery" rest "k8s.io/client-go/rest" @@ -38,8 +39,7 @@ type Interface interface { NetworkingV1alpha1() networkingv1alpha1.NetworkingV1alpha1Interface } -// Clientset contains the clients for groups. Each group has exactly one -// version included in a Clientset. +// Clientset contains the clients for groups. type Clientset struct { *discovery.DiscoveryClient coreV1beta1 *corev1beta1.CoreV1beta1Client @@ -79,34 +79,57 @@ func (c *Clientset) Discovery() discovery.DiscoveryInterface { // NewForConfig creates a new Clientset for the given config. // If config's RateLimiter is not set and QPS and Burst are acceptable, // NewForConfig will generate a rate-limiter in configShallowCopy. +// NewForConfig is equivalent to NewForConfigAndClient(c, httpClient), +// where httpClient was generated with rest.HTTPClientFor(c). func NewForConfig(c *rest.Config) (*Clientset, error) { configShallowCopy := *c + + if configShallowCopy.UserAgent == "" { + configShallowCopy.UserAgent = rest.DefaultKubernetesUserAgent() + } + + // share the transport between all clients + httpClient, err := rest.HTTPClientFor(&configShallowCopy) + if err != nil { + return nil, err + } + + return NewForConfigAndClient(&configShallowCopy, httpClient) +} + +// NewForConfigAndClient creates a new Clientset for the given config and http client. +// Note the http client provided takes precedence over the configured transport values. +// If config's RateLimiter is not set and QPS and Burst are acceptable, +// NewForConfigAndClient will generate a rate-limiter in configShallowCopy. +func NewForConfigAndClient(c *rest.Config, httpClient *http.Client) (*Clientset, error) { + configShallowCopy := *c if configShallowCopy.RateLimiter == nil && configShallowCopy.QPS > 0 { if configShallowCopy.Burst <= 0 { return nil, fmt.Errorf("burst is required to be greater than 0 when RateLimiter is not set and QPS is set to greater than 0") } configShallowCopy.RateLimiter = flowcontrol.NewTokenBucketRateLimiter(configShallowCopy.QPS, configShallowCopy.Burst) } + var cs Clientset var err error - cs.coreV1beta1, err = corev1beta1.NewForConfig(&configShallowCopy) + cs.coreV1beta1, err = corev1beta1.NewForConfigAndClient(&configShallowCopy, httpClient) if err != nil { return nil, err } - cs.coreV1beta2, err = corev1beta2.NewForConfig(&configShallowCopy) + cs.coreV1beta2, err = corev1beta2.NewForConfigAndClient(&configShallowCopy, httpClient) if err != nil { return nil, err } - cs.eventsV1alpha1, err = eventsv1alpha1.NewForConfig(&configShallowCopy) + cs.eventsV1alpha1, err = eventsv1alpha1.NewForConfigAndClient(&configShallowCopy, httpClient) if err != nil { return nil, err } - cs.networkingV1alpha1, err = networkingv1alpha1.NewForConfig(&configShallowCopy) + cs.networkingV1alpha1, err = networkingv1alpha1.NewForConfigAndClient(&configShallowCopy, httpClient) if err != nil { return nil, err } - cs.DiscoveryClient, err = discovery.NewDiscoveryClientForConfig(&configShallowCopy) + cs.DiscoveryClient, err = discovery.NewDiscoveryClientForConfigAndClient(&configShallowCopy, httpClient) if err != nil { return nil, err } @@ -116,14 +139,11 @@ func NewForConfig(c *rest.Config) (*Clientset, error) { // NewForConfigOrDie creates a new Clientset for the given config and // panics if there is an error in the config. func NewForConfigOrDie(c *rest.Config) *Clientset { - var cs Clientset - cs.coreV1beta1 = corev1beta1.NewForConfigOrDie(c) - cs.coreV1beta2 = corev1beta2.NewForConfigOrDie(c) - cs.eventsV1alpha1 = eventsv1alpha1.NewForConfigOrDie(c) - cs.networkingV1alpha1 = networkingv1alpha1.NewForConfigOrDie(c) - - cs.DiscoveryClient = discovery.NewDiscoveryClientForConfigOrDie(c) - return &cs + cs, err := NewForConfig(c) + if err != nil { + panic(err) + } + return cs } // New creates a new Clientset for the given RESTClient. diff --git a/pkg/client/clientset/versioned/doc.go b/pkg/client/clientset/versioned/doc.go deleted file mode 100644 index ef439fb5f..000000000 --- a/pkg/client/clientset/versioned/doc.go +++ /dev/null @@ -1,19 +0,0 @@ -/* -Copyright 2022 The OpenFunction Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ -// Code generated by client-gen. DO NOT EDIT. - -// This package has the automatically generated clientset. -package versioned diff --git a/pkg/client/clientset/versioned/fake/clientset_generated.go b/pkg/client/clientset/versioned/fake/clientset_generated.go index 16d899511..a05bbd76c 100644 --- a/pkg/client/clientset/versioned/fake/clientset_generated.go +++ b/pkg/client/clientset/versioned/fake/clientset_generated.go @@ -80,7 +80,10 @@ func (c *Clientset) Tracker() testing.ObjectTracker { return c.tracker } -var _ clientset.Interface = &Clientset{} +var ( + _ clientset.Interface = &Clientset{} + _ testing.FakeClient = &Clientset{} +) // CoreV1beta1 retrieves the CoreV1beta1Client func (c *Clientset) CoreV1beta1() corev1beta1.CoreV1beta1Interface { diff --git a/pkg/client/clientset/versioned/typed/core/v1beta1/core_client.go b/pkg/client/clientset/versioned/typed/core/v1beta1/core_client.go index 0997c5148..6e546a751 100644 --- a/pkg/client/clientset/versioned/typed/core/v1beta1/core_client.go +++ b/pkg/client/clientset/versioned/typed/core/v1beta1/core_client.go @@ -18,6 +18,8 @@ limitations under the License. package v1beta1 import ( + "net/http" + rest "k8s.io/client-go/rest" v1beta1 "github.com/openfunction/apis/core/v1beta1" @@ -49,12 +51,28 @@ func (c *CoreV1beta1Client) Servings(namespace string) ServingInterface { } // NewForConfig creates a new CoreV1beta1Client for the given config. +// NewForConfig is equivalent to NewForConfigAndClient(c, httpClient), +// where httpClient was generated with rest.HTTPClientFor(c). func NewForConfig(c *rest.Config) (*CoreV1beta1Client, error) { config := *c if err := setConfigDefaults(&config); err != nil { return nil, err } - client, err := rest.RESTClientFor(&config) + httpClient, err := rest.HTTPClientFor(&config) + if err != nil { + return nil, err + } + return NewForConfigAndClient(&config, httpClient) +} + +// NewForConfigAndClient creates a new CoreV1beta1Client for the given config and http client. +// Note the http client provided takes precedence over the configured transport values. +func NewForConfigAndClient(c *rest.Config, h *http.Client) (*CoreV1beta1Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := rest.RESTClientForConfigAndClient(&config, h) if err != nil { return nil, err } diff --git a/pkg/client/clientset/versioned/typed/core/v1beta1/fake/fake_builder.go b/pkg/client/clientset/versioned/typed/core/v1beta1/fake/fake_builder.go index 33c7809d0..6362a2b00 100644 --- a/pkg/client/clientset/versioned/typed/core/v1beta1/fake/fake_builder.go +++ b/pkg/client/clientset/versioned/typed/core/v1beta1/fake/fake_builder.go @@ -22,7 +22,6 @@ import ( v1 "k8s.io/apimachinery/pkg/apis/meta/v1" labels "k8s.io/apimachinery/pkg/labels" - schema "k8s.io/apimachinery/pkg/runtime/schema" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" testing "k8s.io/client-go/testing" @@ -36,9 +35,9 @@ type FakeBuilders struct { ns string } -var buildersResource = schema.GroupVersionResource{Group: "core.openfunction.io", Version: "v1beta1", Resource: "builders"} +var buildersResource = v1beta1.SchemeGroupVersion.WithResource("builders") -var buildersKind = schema.GroupVersionKind{Group: "core.openfunction.io", Version: "v1beta1", Kind: "Builder"} +var buildersKind = v1beta1.SchemeGroupVersion.WithKind("Builder") // Get takes name of the builder, and returns the corresponding builder object, and an error if there is any. func (c *FakeBuilders) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1beta1.Builder, err error) { @@ -117,7 +116,7 @@ func (c *FakeBuilders) UpdateStatus(ctx context.Context, builder *v1beta1.Builde // Delete takes name of the builder and deletes it. Returns an error if one occurs. func (c *FakeBuilders) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { _, err := c.Fake. - Invokes(testing.NewDeleteAction(buildersResource, c.ns, name), &v1beta1.Builder{}) + Invokes(testing.NewDeleteActionWithOptions(buildersResource, c.ns, name, opts), &v1beta1.Builder{}) return err } diff --git a/pkg/client/clientset/versioned/typed/core/v1beta1/fake/fake_function.go b/pkg/client/clientset/versioned/typed/core/v1beta1/fake/fake_function.go index e16c25197..06c441648 100644 --- a/pkg/client/clientset/versioned/typed/core/v1beta1/fake/fake_function.go +++ b/pkg/client/clientset/versioned/typed/core/v1beta1/fake/fake_function.go @@ -22,7 +22,6 @@ import ( v1 "k8s.io/apimachinery/pkg/apis/meta/v1" labels "k8s.io/apimachinery/pkg/labels" - schema "k8s.io/apimachinery/pkg/runtime/schema" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" testing "k8s.io/client-go/testing" @@ -36,9 +35,9 @@ type FakeFunctions struct { ns string } -var functionsResource = schema.GroupVersionResource{Group: "core.openfunction.io", Version: "v1beta1", Resource: "functions"} +var functionsResource = v1beta1.SchemeGroupVersion.WithResource("functions") -var functionsKind = schema.GroupVersionKind{Group: "core.openfunction.io", Version: "v1beta1", Kind: "Function"} +var functionsKind = v1beta1.SchemeGroupVersion.WithKind("Function") // Get takes name of the function, and returns the corresponding function object, and an error if there is any. func (c *FakeFunctions) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1beta1.Function, err error) { @@ -117,7 +116,7 @@ func (c *FakeFunctions) UpdateStatus(ctx context.Context, function *v1beta1.Func // Delete takes name of the function and deletes it. Returns an error if one occurs. func (c *FakeFunctions) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { _, err := c.Fake. - Invokes(testing.NewDeleteAction(functionsResource, c.ns, name), &v1beta1.Function{}) + Invokes(testing.NewDeleteActionWithOptions(functionsResource, c.ns, name, opts), &v1beta1.Function{}) return err } diff --git a/pkg/client/clientset/versioned/typed/core/v1beta1/fake/fake_serving.go b/pkg/client/clientset/versioned/typed/core/v1beta1/fake/fake_serving.go index 0a588bee9..b6fdb2834 100644 --- a/pkg/client/clientset/versioned/typed/core/v1beta1/fake/fake_serving.go +++ b/pkg/client/clientset/versioned/typed/core/v1beta1/fake/fake_serving.go @@ -22,7 +22,6 @@ import ( v1 "k8s.io/apimachinery/pkg/apis/meta/v1" labels "k8s.io/apimachinery/pkg/labels" - schema "k8s.io/apimachinery/pkg/runtime/schema" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" testing "k8s.io/client-go/testing" @@ -36,9 +35,9 @@ type FakeServings struct { ns string } -var servingsResource = schema.GroupVersionResource{Group: "core.openfunction.io", Version: "v1beta1", Resource: "servings"} +var servingsResource = v1beta1.SchemeGroupVersion.WithResource("servings") -var servingsKind = schema.GroupVersionKind{Group: "core.openfunction.io", Version: "v1beta1", Kind: "Serving"} +var servingsKind = v1beta1.SchemeGroupVersion.WithKind("Serving") // Get takes name of the serving, and returns the corresponding serving object, and an error if there is any. func (c *FakeServings) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1beta1.Serving, err error) { @@ -117,7 +116,7 @@ func (c *FakeServings) UpdateStatus(ctx context.Context, serving *v1beta1.Servin // Delete takes name of the serving and deletes it. Returns an error if one occurs. func (c *FakeServings) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { _, err := c.Fake. - Invokes(testing.NewDeleteAction(servingsResource, c.ns, name), &v1beta1.Serving{}) + Invokes(testing.NewDeleteActionWithOptions(servingsResource, c.ns, name, opts), &v1beta1.Serving{}) return err } diff --git a/pkg/client/clientset/versioned/typed/core/v1beta2/core_client.go b/pkg/client/clientset/versioned/typed/core/v1beta2/core_client.go index efea84f88..34c084300 100644 --- a/pkg/client/clientset/versioned/typed/core/v1beta2/core_client.go +++ b/pkg/client/clientset/versioned/typed/core/v1beta2/core_client.go @@ -18,6 +18,8 @@ limitations under the License. package v1beta2 import ( + "net/http" + rest "k8s.io/client-go/rest" v1beta2 "github.com/openfunction/apis/core/v1beta2" @@ -49,12 +51,28 @@ func (c *CoreV1beta2Client) Servings(namespace string) ServingInterface { } // NewForConfig creates a new CoreV1beta2Client for the given config. +// NewForConfig is equivalent to NewForConfigAndClient(c, httpClient), +// where httpClient was generated with rest.HTTPClientFor(c). func NewForConfig(c *rest.Config) (*CoreV1beta2Client, error) { config := *c if err := setConfigDefaults(&config); err != nil { return nil, err } - client, err := rest.RESTClientFor(&config) + httpClient, err := rest.HTTPClientFor(&config) + if err != nil { + return nil, err + } + return NewForConfigAndClient(&config, httpClient) +} + +// NewForConfigAndClient creates a new CoreV1beta2Client for the given config and http client. +// Note the http client provided takes precedence over the configured transport values. +func NewForConfigAndClient(c *rest.Config, h *http.Client) (*CoreV1beta2Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := rest.RESTClientForConfigAndClient(&config, h) if err != nil { return nil, err } diff --git a/pkg/client/clientset/versioned/typed/core/v1beta2/fake/fake_builder.go b/pkg/client/clientset/versioned/typed/core/v1beta2/fake/fake_builder.go index caffc4985..c3b75f25e 100644 --- a/pkg/client/clientset/versioned/typed/core/v1beta2/fake/fake_builder.go +++ b/pkg/client/clientset/versioned/typed/core/v1beta2/fake/fake_builder.go @@ -22,7 +22,6 @@ import ( v1 "k8s.io/apimachinery/pkg/apis/meta/v1" labels "k8s.io/apimachinery/pkg/labels" - schema "k8s.io/apimachinery/pkg/runtime/schema" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" testing "k8s.io/client-go/testing" @@ -36,9 +35,9 @@ type FakeBuilders struct { ns string } -var buildersResource = schema.GroupVersionResource{Group: "core.openfunction.io", Version: "v1beta2", Resource: "builders"} +var buildersResource = v1beta2.SchemeGroupVersion.WithResource("builders") -var buildersKind = schema.GroupVersionKind{Group: "core.openfunction.io", Version: "v1beta2", Kind: "Builder"} +var buildersKind = v1beta2.SchemeGroupVersion.WithKind("Builder") // Get takes name of the builder, and returns the corresponding builder object, and an error if there is any. func (c *FakeBuilders) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1beta2.Builder, err error) { @@ -117,7 +116,7 @@ func (c *FakeBuilders) UpdateStatus(ctx context.Context, builder *v1beta2.Builde // Delete takes name of the builder and deletes it. Returns an error if one occurs. func (c *FakeBuilders) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { _, err := c.Fake. - Invokes(testing.NewDeleteAction(buildersResource, c.ns, name), &v1beta2.Builder{}) + Invokes(testing.NewDeleteActionWithOptions(buildersResource, c.ns, name, opts), &v1beta2.Builder{}) return err } diff --git a/pkg/client/clientset/versioned/typed/core/v1beta2/fake/fake_function.go b/pkg/client/clientset/versioned/typed/core/v1beta2/fake/fake_function.go index 64afd03a4..6dd50a413 100644 --- a/pkg/client/clientset/versioned/typed/core/v1beta2/fake/fake_function.go +++ b/pkg/client/clientset/versioned/typed/core/v1beta2/fake/fake_function.go @@ -22,7 +22,6 @@ import ( v1 "k8s.io/apimachinery/pkg/apis/meta/v1" labels "k8s.io/apimachinery/pkg/labels" - schema "k8s.io/apimachinery/pkg/runtime/schema" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" testing "k8s.io/client-go/testing" @@ -36,9 +35,9 @@ type FakeFunctions struct { ns string } -var functionsResource = schema.GroupVersionResource{Group: "core.openfunction.io", Version: "v1beta2", Resource: "functions"} +var functionsResource = v1beta2.SchemeGroupVersion.WithResource("functions") -var functionsKind = schema.GroupVersionKind{Group: "core.openfunction.io", Version: "v1beta2", Kind: "Function"} +var functionsKind = v1beta2.SchemeGroupVersion.WithKind("Function") // Get takes name of the function, and returns the corresponding function object, and an error if there is any. func (c *FakeFunctions) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1beta2.Function, err error) { @@ -117,7 +116,7 @@ func (c *FakeFunctions) UpdateStatus(ctx context.Context, function *v1beta2.Func // Delete takes name of the function and deletes it. Returns an error if one occurs. func (c *FakeFunctions) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { _, err := c.Fake. - Invokes(testing.NewDeleteAction(functionsResource, c.ns, name), &v1beta2.Function{}) + Invokes(testing.NewDeleteActionWithOptions(functionsResource, c.ns, name, opts), &v1beta2.Function{}) return err } diff --git a/pkg/client/clientset/versioned/typed/core/v1beta2/fake/fake_serving.go b/pkg/client/clientset/versioned/typed/core/v1beta2/fake/fake_serving.go index b36d33896..7e484245a 100644 --- a/pkg/client/clientset/versioned/typed/core/v1beta2/fake/fake_serving.go +++ b/pkg/client/clientset/versioned/typed/core/v1beta2/fake/fake_serving.go @@ -22,7 +22,6 @@ import ( v1 "k8s.io/apimachinery/pkg/apis/meta/v1" labels "k8s.io/apimachinery/pkg/labels" - schema "k8s.io/apimachinery/pkg/runtime/schema" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" testing "k8s.io/client-go/testing" @@ -36,9 +35,9 @@ type FakeServings struct { ns string } -var servingsResource = schema.GroupVersionResource{Group: "core.openfunction.io", Version: "v1beta2", Resource: "servings"} +var servingsResource = v1beta2.SchemeGroupVersion.WithResource("servings") -var servingsKind = schema.GroupVersionKind{Group: "core.openfunction.io", Version: "v1beta2", Kind: "Serving"} +var servingsKind = v1beta2.SchemeGroupVersion.WithKind("Serving") // Get takes name of the serving, and returns the corresponding serving object, and an error if there is any. func (c *FakeServings) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1beta2.Serving, err error) { @@ -117,7 +116,7 @@ func (c *FakeServings) UpdateStatus(ctx context.Context, serving *v1beta2.Servin // Delete takes name of the serving and deletes it. Returns an error if one occurs. func (c *FakeServings) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { _, err := c.Fake. - Invokes(testing.NewDeleteAction(servingsResource, c.ns, name), &v1beta2.Serving{}) + Invokes(testing.NewDeleteActionWithOptions(servingsResource, c.ns, name, opts), &v1beta2.Serving{}) return err } diff --git a/pkg/client/clientset/versioned/typed/events/v1alpha1/events_client.go b/pkg/client/clientset/versioned/typed/events/v1alpha1/events_client.go index 8c412ab1c..173d3468d 100644 --- a/pkg/client/clientset/versioned/typed/events/v1alpha1/events_client.go +++ b/pkg/client/clientset/versioned/typed/events/v1alpha1/events_client.go @@ -18,6 +18,8 @@ limitations under the License. package v1alpha1 import ( + "net/http" + rest "k8s.io/client-go/rest" v1alpha1 "github.com/openfunction/apis/events/v1alpha1" @@ -54,12 +56,28 @@ func (c *EventsV1alpha1Client) Triggers(namespace string) TriggerInterface { } // NewForConfig creates a new EventsV1alpha1Client for the given config. +// NewForConfig is equivalent to NewForConfigAndClient(c, httpClient), +// where httpClient was generated with rest.HTTPClientFor(c). func NewForConfig(c *rest.Config) (*EventsV1alpha1Client, error) { config := *c if err := setConfigDefaults(&config); err != nil { return nil, err } - client, err := rest.RESTClientFor(&config) + httpClient, err := rest.HTTPClientFor(&config) + if err != nil { + return nil, err + } + return NewForConfigAndClient(&config, httpClient) +} + +// NewForConfigAndClient creates a new EventsV1alpha1Client for the given config and http client. +// Note the http client provided takes precedence over the configured transport values. +func NewForConfigAndClient(c *rest.Config, h *http.Client) (*EventsV1alpha1Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := rest.RESTClientForConfigAndClient(&config, h) if err != nil { return nil, err } diff --git a/pkg/client/clientset/versioned/typed/events/v1alpha1/fake/fake_clustereventbus.go b/pkg/client/clientset/versioned/typed/events/v1alpha1/fake/fake_clustereventbus.go index 06912b6c2..aacc3ae75 100644 --- a/pkg/client/clientset/versioned/typed/events/v1alpha1/fake/fake_clustereventbus.go +++ b/pkg/client/clientset/versioned/typed/events/v1alpha1/fake/fake_clustereventbus.go @@ -22,7 +22,6 @@ import ( v1 "k8s.io/apimachinery/pkg/apis/meta/v1" labels "k8s.io/apimachinery/pkg/labels" - schema "k8s.io/apimachinery/pkg/runtime/schema" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" testing "k8s.io/client-go/testing" @@ -36,9 +35,9 @@ type FakeClusterEventBuses struct { ns string } -var clustereventbusesResource = schema.GroupVersionResource{Group: "events.openfunction.io", Version: "v1alpha1", Resource: "clustereventbuses"} +var clustereventbusesResource = v1alpha1.SchemeGroupVersion.WithResource("clustereventbuses") -var clustereventbusesKind = schema.GroupVersionKind{Group: "events.openfunction.io", Version: "v1alpha1", Kind: "ClusterEventBus"} +var clustereventbusesKind = v1alpha1.SchemeGroupVersion.WithKind("ClusterEventBus") // Get takes name of the clusterEventBus, and returns the corresponding clusterEventBus object, and an error if there is any. func (c *FakeClusterEventBuses) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.ClusterEventBus, err error) { @@ -105,7 +104,7 @@ func (c *FakeClusterEventBuses) Update(ctx context.Context, clusterEventBus *v1a // Delete takes name of the clusterEventBus and deletes it. Returns an error if one occurs. func (c *FakeClusterEventBuses) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { _, err := c.Fake. - Invokes(testing.NewDeleteAction(clustereventbusesResource, c.ns, name), &v1alpha1.ClusterEventBus{}) + Invokes(testing.NewDeleteActionWithOptions(clustereventbusesResource, c.ns, name, opts), &v1alpha1.ClusterEventBus{}) return err } diff --git a/pkg/client/clientset/versioned/typed/events/v1alpha1/fake/fake_eventbus.go b/pkg/client/clientset/versioned/typed/events/v1alpha1/fake/fake_eventbus.go index fe811a307..85396de20 100644 --- a/pkg/client/clientset/versioned/typed/events/v1alpha1/fake/fake_eventbus.go +++ b/pkg/client/clientset/versioned/typed/events/v1alpha1/fake/fake_eventbus.go @@ -22,7 +22,6 @@ import ( v1 "k8s.io/apimachinery/pkg/apis/meta/v1" labels "k8s.io/apimachinery/pkg/labels" - schema "k8s.io/apimachinery/pkg/runtime/schema" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" testing "k8s.io/client-go/testing" @@ -36,9 +35,9 @@ type FakeEventBuses struct { ns string } -var eventbusesResource = schema.GroupVersionResource{Group: "events.openfunction.io", Version: "v1alpha1", Resource: "eventbuses"} +var eventbusesResource = v1alpha1.SchemeGroupVersion.WithResource("eventbuses") -var eventbusesKind = schema.GroupVersionKind{Group: "events.openfunction.io", Version: "v1alpha1", Kind: "EventBus"} +var eventbusesKind = v1alpha1.SchemeGroupVersion.WithKind("EventBus") // Get takes name of the eventBus, and returns the corresponding eventBus object, and an error if there is any. func (c *FakeEventBuses) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.EventBus, err error) { @@ -105,7 +104,7 @@ func (c *FakeEventBuses) Update(ctx context.Context, eventBus *v1alpha1.EventBus // Delete takes name of the eventBus and deletes it. Returns an error if one occurs. func (c *FakeEventBuses) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { _, err := c.Fake. - Invokes(testing.NewDeleteAction(eventbusesResource, c.ns, name), &v1alpha1.EventBus{}) + Invokes(testing.NewDeleteActionWithOptions(eventbusesResource, c.ns, name, opts), &v1alpha1.EventBus{}) return err } diff --git a/pkg/client/clientset/versioned/typed/events/v1alpha1/fake/fake_eventsource.go b/pkg/client/clientset/versioned/typed/events/v1alpha1/fake/fake_eventsource.go index f58c5cd4a..66489609e 100644 --- a/pkg/client/clientset/versioned/typed/events/v1alpha1/fake/fake_eventsource.go +++ b/pkg/client/clientset/versioned/typed/events/v1alpha1/fake/fake_eventsource.go @@ -22,7 +22,6 @@ import ( v1 "k8s.io/apimachinery/pkg/apis/meta/v1" labels "k8s.io/apimachinery/pkg/labels" - schema "k8s.io/apimachinery/pkg/runtime/schema" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" testing "k8s.io/client-go/testing" @@ -36,9 +35,9 @@ type FakeEventSources struct { ns string } -var eventsourcesResource = schema.GroupVersionResource{Group: "events.openfunction.io", Version: "v1alpha1", Resource: "eventsources"} +var eventsourcesResource = v1alpha1.SchemeGroupVersion.WithResource("eventsources") -var eventsourcesKind = schema.GroupVersionKind{Group: "events.openfunction.io", Version: "v1alpha1", Kind: "EventSource"} +var eventsourcesKind = v1alpha1.SchemeGroupVersion.WithKind("EventSource") // Get takes name of the eventSource, and returns the corresponding eventSource object, and an error if there is any. func (c *FakeEventSources) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.EventSource, err error) { @@ -117,7 +116,7 @@ func (c *FakeEventSources) UpdateStatus(ctx context.Context, eventSource *v1alph // Delete takes name of the eventSource and deletes it. Returns an error if one occurs. func (c *FakeEventSources) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { _, err := c.Fake. - Invokes(testing.NewDeleteAction(eventsourcesResource, c.ns, name), &v1alpha1.EventSource{}) + Invokes(testing.NewDeleteActionWithOptions(eventsourcesResource, c.ns, name, opts), &v1alpha1.EventSource{}) return err } diff --git a/pkg/client/clientset/versioned/typed/events/v1alpha1/fake/fake_trigger.go b/pkg/client/clientset/versioned/typed/events/v1alpha1/fake/fake_trigger.go index fcb88c08b..edca76e5d 100644 --- a/pkg/client/clientset/versioned/typed/events/v1alpha1/fake/fake_trigger.go +++ b/pkg/client/clientset/versioned/typed/events/v1alpha1/fake/fake_trigger.go @@ -22,7 +22,6 @@ import ( v1 "k8s.io/apimachinery/pkg/apis/meta/v1" labels "k8s.io/apimachinery/pkg/labels" - schema "k8s.io/apimachinery/pkg/runtime/schema" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" testing "k8s.io/client-go/testing" @@ -36,9 +35,9 @@ type FakeTriggers struct { ns string } -var triggersResource = schema.GroupVersionResource{Group: "events.openfunction.io", Version: "v1alpha1", Resource: "triggers"} +var triggersResource = v1alpha1.SchemeGroupVersion.WithResource("triggers") -var triggersKind = schema.GroupVersionKind{Group: "events.openfunction.io", Version: "v1alpha1", Kind: "Trigger"} +var triggersKind = v1alpha1.SchemeGroupVersion.WithKind("Trigger") // Get takes name of the trigger, and returns the corresponding trigger object, and an error if there is any. func (c *FakeTriggers) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.Trigger, err error) { @@ -117,7 +116,7 @@ func (c *FakeTriggers) UpdateStatus(ctx context.Context, trigger *v1alpha1.Trigg // Delete takes name of the trigger and deletes it. Returns an error if one occurs. func (c *FakeTriggers) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { _, err := c.Fake. - Invokes(testing.NewDeleteAction(triggersResource, c.ns, name), &v1alpha1.Trigger{}) + Invokes(testing.NewDeleteActionWithOptions(triggersResource, c.ns, name, opts), &v1alpha1.Trigger{}) return err } diff --git a/pkg/client/clientset/versioned/typed/networking/v1alpha1/fake/fake_gateway.go b/pkg/client/clientset/versioned/typed/networking/v1alpha1/fake/fake_gateway.go new file mode 100644 index 000000000..8cb4c2816 --- /dev/null +++ b/pkg/client/clientset/versioned/typed/networking/v1alpha1/fake/fake_gateway.go @@ -0,0 +1,141 @@ +/* +Copyright 2022 The OpenFunction Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + testing "k8s.io/client-go/testing" + + v1alpha1 "github.com/openfunction/apis/networking/v1alpha1" +) + +// FakeGateways implements GatewayInterface +type FakeGateways struct { + Fake *FakeNetworkingV1alpha1 + ns string +} + +var gatewaysResource = v1alpha1.SchemeGroupVersion.WithResource("gateways") + +var gatewaysKind = v1alpha1.SchemeGroupVersion.WithKind("Gateway") + +// Get takes name of the gateway, and returns the corresponding gateway object, and an error if there is any. +func (c *FakeGateways) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.Gateway, err error) { + obj, err := c.Fake. + Invokes(testing.NewGetAction(gatewaysResource, c.ns, name), &v1alpha1.Gateway{}) + + if obj == nil { + return nil, err + } + return obj.(*v1alpha1.Gateway), err +} + +// List takes label and field selectors, and returns the list of Gateways that match those selectors. +func (c *FakeGateways) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.GatewayList, err error) { + obj, err := c.Fake. + Invokes(testing.NewListAction(gatewaysResource, gatewaysKind, c.ns, opts), &v1alpha1.GatewayList{}) + + if obj == nil { + return nil, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &v1alpha1.GatewayList{ListMeta: obj.(*v1alpha1.GatewayList).ListMeta} + for _, item := range obj.(*v1alpha1.GatewayList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} + +// Watch returns a watch.Interface that watches the requested gateways. +func (c *FakeGateways) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { + return c.Fake. + InvokesWatch(testing.NewWatchAction(gatewaysResource, c.ns, opts)) + +} + +// Create takes the representation of a gateway and creates it. Returns the server's representation of the gateway, and an error, if there is any. +func (c *FakeGateways) Create(ctx context.Context, gateway *v1alpha1.Gateway, opts v1.CreateOptions) (result *v1alpha1.Gateway, err error) { + obj, err := c.Fake. + Invokes(testing.NewCreateAction(gatewaysResource, c.ns, gateway), &v1alpha1.Gateway{}) + + if obj == nil { + return nil, err + } + return obj.(*v1alpha1.Gateway), err +} + +// Update takes the representation of a gateway and updates it. Returns the server's representation of the gateway, and an error, if there is any. +func (c *FakeGateways) Update(ctx context.Context, gateway *v1alpha1.Gateway, opts v1.UpdateOptions) (result *v1alpha1.Gateway, err error) { + obj, err := c.Fake. + Invokes(testing.NewUpdateAction(gatewaysResource, c.ns, gateway), &v1alpha1.Gateway{}) + + if obj == nil { + return nil, err + } + return obj.(*v1alpha1.Gateway), err +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *FakeGateways) UpdateStatus(ctx context.Context, gateway *v1alpha1.Gateway, opts v1.UpdateOptions) (*v1alpha1.Gateway, error) { + obj, err := c.Fake. + Invokes(testing.NewUpdateSubresourceAction(gatewaysResource, "status", c.ns, gateway), &v1alpha1.Gateway{}) + + if obj == nil { + return nil, err + } + return obj.(*v1alpha1.Gateway), err +} + +// Delete takes name of the gateway and deletes it. Returns an error if one occurs. +func (c *FakeGateways) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + _, err := c.Fake. + Invokes(testing.NewDeleteActionWithOptions(gatewaysResource, c.ns, name, opts), &v1alpha1.Gateway{}) + + return err +} + +// DeleteCollection deletes a collection of objects. +func (c *FakeGateways) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewDeleteCollectionAction(gatewaysResource, c.ns, listOpts) + + _, err := c.Fake.Invokes(action, &v1alpha1.GatewayList{}) + return err +} + +// Patch applies the patch and returns the patched gateway. +func (c *FakeGateways) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.Gateway, err error) { + obj, err := c.Fake. + Invokes(testing.NewPatchSubresourceAction(gatewaysResource, c.ns, name, pt, data, subresources...), &v1alpha1.Gateway{}) + + if obj == nil { + return nil, err + } + return obj.(*v1alpha1.Gateway), err +} diff --git a/pkg/client/clientset/versioned/typed/networking/v1alpha1/fake/fake_networking_client.go b/pkg/client/clientset/versioned/typed/networking/v1alpha1/fake/fake_networking_client.go index a0531468a..f75438d46 100644 --- a/pkg/client/clientset/versioned/typed/networking/v1alpha1/fake/fake_networking_client.go +++ b/pkg/client/clientset/versioned/typed/networking/v1alpha1/fake/fake_networking_client.go @@ -20,12 +20,18 @@ package fake import ( rest "k8s.io/client-go/rest" testing "k8s.io/client-go/testing" + + v1alpha1 "github.com/openfunction/pkg/client/clientset/versioned/typed/networking/v1alpha1" ) type FakeNetworkingV1alpha1 struct { *testing.Fake } +func (c *FakeNetworkingV1alpha1) Gateways(namespace string) v1alpha1.GatewayInterface { + return &FakeGateways{c, namespace} +} + // RESTClient returns a RESTClient that is used to communicate // with API server by this client implementation. func (c *FakeNetworkingV1alpha1) RESTClient() rest.Interface { diff --git a/pkg/client/clientset/versioned/typed/networking/v1alpha1/gateway.go b/pkg/client/clientset/versioned/typed/networking/v1alpha1/gateway.go new file mode 100644 index 000000000..7af3dc013 --- /dev/null +++ b/pkg/client/clientset/versioned/typed/networking/v1alpha1/gateway.go @@ -0,0 +1,195 @@ +/* +Copyright 2022 The OpenFunction Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +// Code generated by client-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + "context" + "time" + + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" + + v1alpha1 "github.com/openfunction/apis/networking/v1alpha1" + scheme "github.com/openfunction/pkg/client/clientset/versioned/scheme" +) + +// GatewaysGetter has a method to return a GatewayInterface. +// A group's client should implement this interface. +type GatewaysGetter interface { + Gateways(namespace string) GatewayInterface +} + +// GatewayInterface has methods to work with Gateway resources. +type GatewayInterface interface { + Create(ctx context.Context, gateway *v1alpha1.Gateway, opts v1.CreateOptions) (*v1alpha1.Gateway, error) + Update(ctx context.Context, gateway *v1alpha1.Gateway, opts v1.UpdateOptions) (*v1alpha1.Gateway, error) + UpdateStatus(ctx context.Context, gateway *v1alpha1.Gateway, opts v1.UpdateOptions) (*v1alpha1.Gateway, error) + Delete(ctx context.Context, name string, opts v1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error + Get(ctx context.Context, name string, opts v1.GetOptions) (*v1alpha1.Gateway, error) + List(ctx context.Context, opts v1.ListOptions) (*v1alpha1.GatewayList, error) + Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.Gateway, err error) + GatewayExpansion +} + +// gateways implements GatewayInterface +type gateways struct { + client rest.Interface + ns string +} + +// newGateways returns a Gateways +func newGateways(c *NetworkingV1alpha1Client, namespace string) *gateways { + return &gateways{ + client: c.RESTClient(), + ns: namespace, + } +} + +// Get takes name of the gateway, and returns the corresponding gateway object, and an error if there is any. +func (c *gateways) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.Gateway, err error) { + result = &v1alpha1.Gateway{} + err = c.client.Get(). + Namespace(c.ns). + Resource("gateways"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of Gateways that match those selectors. +func (c *gateways) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.GatewayList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1alpha1.GatewayList{} + err = c.client.Get(). + Namespace(c.ns). + Resource("gateways"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested gateways. +func (c *gateways) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Namespace(c.ns). + Resource("gateways"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a gateway and creates it. Returns the server's representation of the gateway, and an error, if there is any. +func (c *gateways) Create(ctx context.Context, gateway *v1alpha1.Gateway, opts v1.CreateOptions) (result *v1alpha1.Gateway, err error) { + result = &v1alpha1.Gateway{} + err = c.client.Post(). + Namespace(c.ns). + Resource("gateways"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(gateway). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a gateway and updates it. Returns the server's representation of the gateway, and an error, if there is any. +func (c *gateways) Update(ctx context.Context, gateway *v1alpha1.Gateway, opts v1.UpdateOptions) (result *v1alpha1.Gateway, err error) { + result = &v1alpha1.Gateway{} + err = c.client.Put(). + Namespace(c.ns). + Resource("gateways"). + Name(gateway.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(gateway). + Do(ctx). + Into(result) + return +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *gateways) UpdateStatus(ctx context.Context, gateway *v1alpha1.Gateway, opts v1.UpdateOptions) (result *v1alpha1.Gateway, err error) { + result = &v1alpha1.Gateway{} + err = c.client.Put(). + Namespace(c.ns). + Resource("gateways"). + Name(gateway.Name). + SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(gateway). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the gateway and deletes it. Returns an error if one occurs. +func (c *gateways) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + return c.client.Delete(). + Namespace(c.ns). + Resource("gateways"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *gateways) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Namespace(c.ns). + Resource("gateways"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched gateway. +func (c *gateways) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.Gateway, err error) { + result = &v1alpha1.Gateway{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("gateways"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/pkg/client/clientset/versioned/typed/networking/v1alpha1/generated_expansion.go b/pkg/client/clientset/versioned/typed/networking/v1alpha1/generated_expansion.go index a567265a7..0c93e1b26 100644 --- a/pkg/client/clientset/versioned/typed/networking/v1alpha1/generated_expansion.go +++ b/pkg/client/clientset/versioned/typed/networking/v1alpha1/generated_expansion.go @@ -16,3 +16,5 @@ limitations under the License. // Code generated by client-gen. DO NOT EDIT. package v1alpha1 + +type GatewayExpansion interface{} diff --git a/pkg/client/clientset/versioned/typed/networking/v1alpha1/networking_client.go b/pkg/client/clientset/versioned/typed/networking/v1alpha1/networking_client.go index da94d34bf..147c9aafc 100644 --- a/pkg/client/clientset/versioned/typed/networking/v1alpha1/networking_client.go +++ b/pkg/client/clientset/versioned/typed/networking/v1alpha1/networking_client.go @@ -18,6 +18,8 @@ limitations under the License. package v1alpha1 import ( + "net/http" + rest "k8s.io/client-go/rest" v1alpha1 "github.com/openfunction/apis/networking/v1alpha1" @@ -26,6 +28,7 @@ import ( type NetworkingV1alpha1Interface interface { RESTClient() rest.Interface + GatewaysGetter } // NetworkingV1alpha1Client is used to interact with features provided by the networking group. @@ -33,13 +36,33 @@ type NetworkingV1alpha1Client struct { restClient rest.Interface } +func (c *NetworkingV1alpha1Client) Gateways(namespace string) GatewayInterface { + return newGateways(c, namespace) +} + // NewForConfig creates a new NetworkingV1alpha1Client for the given config. +// NewForConfig is equivalent to NewForConfigAndClient(c, httpClient), +// where httpClient was generated with rest.HTTPClientFor(c). func NewForConfig(c *rest.Config) (*NetworkingV1alpha1Client, error) { config := *c if err := setConfigDefaults(&config); err != nil { return nil, err } - client, err := rest.RESTClientFor(&config) + httpClient, err := rest.HTTPClientFor(&config) + if err != nil { + return nil, err + } + return NewForConfigAndClient(&config, httpClient) +} + +// NewForConfigAndClient creates a new NetworkingV1alpha1Client for the given config and http client. +// Note the http client provided takes precedence over the configured transport values. +func NewForConfigAndClient(c *rest.Config, h *http.Client) (*NetworkingV1alpha1Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := rest.RESTClientForConfigAndClient(&config, h) if err != nil { return nil, err } diff --git a/pkg/constants/constants.go b/pkg/constants/constants.go index 881da42a6..21e80bc46 100644 --- a/pkg/constants/constants.go +++ b/pkg/constants/constants.go @@ -17,8 +17,9 @@ limitations under the License. package constants import ( - "sigs.k8s.io/gateway-api/apis/v1beta1" "time" + + "sigs.k8s.io/gateway-api/apis/v1beta1" ) const ( @@ -45,7 +46,7 @@ const ( DefaultFunctionServicePort v1beta1.PortNumber = 80 DefaultFuncPort v1beta1.PortNumber = 8080 DefaultInterceptorPort v1beta1.PortNumber = 8080 - DefaultGatewayChangeCleanTime = 5 * time.Second + DefaultGatewayChangeCleanTime = 10 * time.Second WasmEdgeWorkloadRuntimeName = "wasmedge" WasmEdgeRuntimeClassName = "openfunction-crun"