You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@apisix.apache.org by zh...@apache.org on 2021/11/24 14:31:28 UTC
[apisix-ingress-controller] branch master updated: feat: init ApisixPluginConfig crd #4 (#638) (#694)
This is an automated email from the ASF dual-hosted git repository.
zhangjintao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix-ingress-controller.git
The following commit(s) were added to refs/heads/master by this push:
new b127ff4 feat: init ApisixPluginConfig crd #4 (#638) (#694)
b127ff4 is described below
commit b127ff4eb47c95fa4db3b58020d7005f739d9dbd
Author: nevercase <10...@qq.com>
AuthorDate: Wed Nov 24 22:26:55 2021 +0800
feat: init ApisixPluginConfig crd #4 (#638) (#694)
---
pkg/kube/apisix/apis/config/v2beta2/types.go | 34 ++++
.../apis/config/v2beta2/zz_generated.deepcopy.go | 84 +++++++++
.../typed/config/v2beta2/apisixpluginconfig.go | 194 +++++++++++++++++++++
.../typed/config/v2beta2/config_client.go | 5 +
.../config/v2beta2/fake/fake_apisixpluginconfig.go | 141 +++++++++++++++
.../config/v2beta2/fake/fake_config_client.go | 4 +
.../typed/config/v2beta2/generated_expansion.go | 2 +
.../config/v2beta2/apisixpluginconfig.go | 89 ++++++++++
.../externalversions/config/v2beta2/interface.go | 7 +
.../client/informers/externalversions/generic.go | 2 +
.../listers/config/v2beta2/apisixpluginconfig.go | 98 +++++++++++
.../listers/config/v2beta2/expansion_generated.go | 8 +
samples/deploy/crd/v1/ApisixPluginConfig.yaml | 83 +++++++++
samples/deploy/crd/v1/kustomization.yaml | 1 +
samples/deploy/rbac/apisix_view_clusterrole.yaml | 2 +
test/e2e/scaffold/ingress.go | 2 +
16 files changed, 756 insertions(+)
diff --git a/pkg/kube/apisix/apis/config/v2beta2/types.go b/pkg/kube/apisix/apis/config/v2beta2/types.go
index 2d0a795..7e276c5 100644
--- a/pkg/kube/apisix/apis/config/v2beta2/types.go
+++ b/pkg/kube/apisix/apis/config/v2beta2/types.go
@@ -195,3 +195,37 @@ type ApisixRouteList struct {
metav1.ListMeta `json:"metadata" yaml:"metadata"`
Items []ApisixRoute `json:"items,omitempty" yaml:"items,omitempty"`
}
+
+// +genclient
+// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
+// +kubebuilder:subresource:status
+
+// ApisixPluginConfig is the Schema for the ApisixPluginConfig resource.
+// An ApisixPluginConfig is used to support a group of plugin configs
+type ApisixPluginConfig struct {
+ metav1.TypeMeta `json:",inline" yaml:",inline"`
+ metav1.ObjectMeta `json:"metadata" yaml:"metadata"`
+
+ // Spec defines the desired state of ApisixPluginConfigSpec.
+ Spec ApisixPluginConfigSpec `json:"spec" yaml:"spec"`
+ Status ApisixStatus `json:"status,omitempty" yaml:"status,omitempty"`
+}
+
+// ApisixPluginConfigSpec defines the desired state of ApisixPluginConfigSpec.
+type ApisixPluginConfigSpec struct {
+ // Plugins contains a list of ApisixRouteHTTPPluginConfig
+ // +required
+ // +kubebuilder:validation:Required
+ // +kubebuilder:validation:MinItems=1
+ Plugins []ApisixRouteHTTPPluginConfig `json:"plugins" yaml:"plugins"`
+}
+
+// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
+// +kubebuilder:object:generate=true
+
+// ApisixPluginConfigList contains a list of ApisixPluginConfig.
+type ApisixPluginConfigList struct {
+ metav1.TypeMeta `json:",inline" yaml:",inline"`
+ metav1.ListMeta `json:"metadata" yaml:"metadata"`
+ Items []ApisixPluginConfig `json:"items,omitempty" yaml:"items,omitempty"`
+}
diff --git a/pkg/kube/apisix/apis/config/v2beta2/zz_generated.deepcopy.go b/pkg/kube/apisix/apis/config/v2beta2/zz_generated.deepcopy.go
index 0c1782f..7172824 100644
--- a/pkg/kube/apisix/apis/config/v2beta2/zz_generated.deepcopy.go
+++ b/pkg/kube/apisix/apis/config/v2beta2/zz_generated.deepcopy.go
@@ -26,6 +26,90 @@ import (
)
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ApisixPluginConfig) DeepCopyInto(out *ApisixPluginConfig) {
+ *out = *in
+ out.TypeMeta = in.TypeMeta
+ in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+ in.Spec.DeepCopyInto(&out.Spec)
+ in.Status.DeepCopyInto(&out.Status)
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ApisixPluginConfig.
+func (in *ApisixPluginConfig) DeepCopy() *ApisixPluginConfig {
+ if in == nil {
+ return nil
+ }
+ out := new(ApisixPluginConfig)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *ApisixPluginConfig) DeepCopyObject() runtime.Object {
+ if c := in.DeepCopy(); c != nil {
+ return c
+ }
+ return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ApisixPluginConfigList) DeepCopyInto(out *ApisixPluginConfigList) {
+ *out = *in
+ out.TypeMeta = in.TypeMeta
+ in.ListMeta.DeepCopyInto(&out.ListMeta)
+ if in.Items != nil {
+ in, out := &in.Items, &out.Items
+ *out = make([]ApisixPluginConfig, len(*in))
+ for i := range *in {
+ (*in)[i].DeepCopyInto(&(*out)[i])
+ }
+ }
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ApisixPluginConfigList.
+func (in *ApisixPluginConfigList) DeepCopy() *ApisixPluginConfigList {
+ if in == nil {
+ return nil
+ }
+ out := new(ApisixPluginConfigList)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *ApisixPluginConfigList) DeepCopyObject() runtime.Object {
+ if c := in.DeepCopy(); c != nil {
+ return c
+ }
+ return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ApisixPluginConfigSpec) DeepCopyInto(out *ApisixPluginConfigSpec) {
+ *out = *in
+ if in.Plugins != nil {
+ in, out := &in.Plugins, &out.Plugins
+ *out = make([]ApisixRouteHTTPPluginConfig, len(*in))
+ for i := range *in {
+ (*in)[i].DeepCopyInto(&(*out)[i])
+ }
+ }
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ApisixPluginConfigSpec.
+func (in *ApisixPluginConfigSpec) DeepCopy() *ApisixPluginConfigSpec {
+ if in == nil {
+ return nil
+ }
+ out := new(ApisixPluginConfigSpec)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *ApisixRoute) DeepCopyInto(out *ApisixRoute) {
*out = *in
out.TypeMeta = in.TypeMeta
diff --git a/pkg/kube/apisix/client/clientset/versioned/typed/config/v2beta2/apisixpluginconfig.go b/pkg/kube/apisix/client/clientset/versioned/typed/config/v2beta2/apisixpluginconfig.go
new file mode 100644
index 0000000..c5f29e9
--- /dev/null
+++ b/pkg/kube/apisix/client/clientset/versioned/typed/config/v2beta2/apisixpluginconfig.go
@@ -0,0 +1,194 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You 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 v2beta2
+
+import (
+ "context"
+ "time"
+
+ v2beta2 "github.com/apache/apisix-ingress-controller/pkg/kube/apisix/apis/config/v2beta2"
+ scheme "github.com/apache/apisix-ingress-controller/pkg/kube/apisix/client/clientset/versioned/scheme"
+ 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"
+)
+
+// ApisixPluginConfigsGetter has a method to return a ApisixPluginConfigInterface.
+// A group's client should implement this interface.
+type ApisixPluginConfigsGetter interface {
+ ApisixPluginConfigs(namespace string) ApisixPluginConfigInterface
+}
+
+// ApisixPluginConfigInterface has methods to work with ApisixPluginConfig resources.
+type ApisixPluginConfigInterface interface {
+ Create(ctx context.Context, apisixPluginConfig *v2beta2.ApisixPluginConfig, opts v1.CreateOptions) (*v2beta2.ApisixPluginConfig, error)
+ Update(ctx context.Context, apisixPluginConfig *v2beta2.ApisixPluginConfig, opts v1.UpdateOptions) (*v2beta2.ApisixPluginConfig, error)
+ UpdateStatus(ctx context.Context, apisixPluginConfig *v2beta2.ApisixPluginConfig, opts v1.UpdateOptions) (*v2beta2.ApisixPluginConfig, 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) (*v2beta2.ApisixPluginConfig, error)
+ List(ctx context.Context, opts v1.ListOptions) (*v2beta2.ApisixPluginConfigList, 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 *v2beta2.ApisixPluginConfig, err error)
+ ApisixPluginConfigExpansion
+}
+
+// apisixPluginConfigs implements ApisixPluginConfigInterface
+type apisixPluginConfigs struct {
+ client rest.Interface
+ ns string
+}
+
+// newApisixPluginConfigs returns a ApisixPluginConfigs
+func newApisixPluginConfigs(c *ApisixV2beta2Client, namespace string) *apisixPluginConfigs {
+ return &apisixPluginConfigs{
+ client: c.RESTClient(),
+ ns: namespace,
+ }
+}
+
+// Get takes name of the apisixPluginConfig, and returns the corresponding apisixPluginConfig object, and an error if there is any.
+func (c *apisixPluginConfigs) Get(ctx context.Context, name string, options v1.GetOptions) (result *v2beta2.ApisixPluginConfig, err error) {
+ result = &v2beta2.ApisixPluginConfig{}
+ err = c.client.Get().
+ Namespace(c.ns).
+ Resource("apisixpluginconfigs").
+ Name(name).
+ VersionedParams(&options, scheme.ParameterCodec).
+ Do(ctx).
+ Into(result)
+ return
+}
+
+// List takes label and field selectors, and returns the list of ApisixPluginConfigs that match those selectors.
+func (c *apisixPluginConfigs) List(ctx context.Context, opts v1.ListOptions) (result *v2beta2.ApisixPluginConfigList, err error) {
+ var timeout time.Duration
+ if opts.TimeoutSeconds != nil {
+ timeout = time.Duration(*opts.TimeoutSeconds) * time.Second
+ }
+ result = &v2beta2.ApisixPluginConfigList{}
+ err = c.client.Get().
+ Namespace(c.ns).
+ Resource("apisixpluginconfigs").
+ VersionedParams(&opts, scheme.ParameterCodec).
+ Timeout(timeout).
+ Do(ctx).
+ Into(result)
+ return
+}
+
+// Watch returns a watch.Interface that watches the requested apisixPluginConfigs.
+func (c *apisixPluginConfigs) 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("apisixpluginconfigs").
+ VersionedParams(&opts, scheme.ParameterCodec).
+ Timeout(timeout).
+ Watch(ctx)
+}
+
+// Create takes the representation of a apisixPluginConfig and creates it. Returns the server's representation of the apisixPluginConfig, and an error, if there is any.
+func (c *apisixPluginConfigs) Create(ctx context.Context, apisixPluginConfig *v2beta2.ApisixPluginConfig, opts v1.CreateOptions) (result *v2beta2.ApisixPluginConfig, err error) {
+ result = &v2beta2.ApisixPluginConfig{}
+ err = c.client.Post().
+ Namespace(c.ns).
+ Resource("apisixpluginconfigs").
+ VersionedParams(&opts, scheme.ParameterCodec).
+ Body(apisixPluginConfig).
+ Do(ctx).
+ Into(result)
+ return
+}
+
+// Update takes the representation of a apisixPluginConfig and updates it. Returns the server's representation of the apisixPluginConfig, and an error, if there is any.
+func (c *apisixPluginConfigs) Update(ctx context.Context, apisixPluginConfig *v2beta2.ApisixPluginConfig, opts v1.UpdateOptions) (result *v2beta2.ApisixPluginConfig, err error) {
+ result = &v2beta2.ApisixPluginConfig{}
+ err = c.client.Put().
+ Namespace(c.ns).
+ Resource("apisixpluginconfigs").
+ Name(apisixPluginConfig.Name).
+ VersionedParams(&opts, scheme.ParameterCodec).
+ Body(apisixPluginConfig).
+ 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 *apisixPluginConfigs) UpdateStatus(ctx context.Context, apisixPluginConfig *v2beta2.ApisixPluginConfig, opts v1.UpdateOptions) (result *v2beta2.ApisixPluginConfig, err error) {
+ result = &v2beta2.ApisixPluginConfig{}
+ err = c.client.Put().
+ Namespace(c.ns).
+ Resource("apisixpluginconfigs").
+ Name(apisixPluginConfig.Name).
+ SubResource("status").
+ VersionedParams(&opts, scheme.ParameterCodec).
+ Body(apisixPluginConfig).
+ Do(ctx).
+ Into(result)
+ return
+}
+
+// Delete takes name of the apisixPluginConfig and deletes it. Returns an error if one occurs.
+func (c *apisixPluginConfigs) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error {
+ return c.client.Delete().
+ Namespace(c.ns).
+ Resource("apisixpluginconfigs").
+ Name(name).
+ Body(&opts).
+ Do(ctx).
+ Error()
+}
+
+// DeleteCollection deletes a collection of objects.
+func (c *apisixPluginConfigs) 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("apisixpluginconfigs").
+ VersionedParams(&listOpts, scheme.ParameterCodec).
+ Timeout(timeout).
+ Body(&opts).
+ Do(ctx).
+ Error()
+}
+
+// Patch applies the patch and returns the patched apisixPluginConfig.
+func (c *apisixPluginConfigs) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v2beta2.ApisixPluginConfig, err error) {
+ result = &v2beta2.ApisixPluginConfig{}
+ err = c.client.Patch(pt).
+ Namespace(c.ns).
+ Resource("apisixpluginconfigs").
+ Name(name).
+ SubResource(subresources...).
+ VersionedParams(&opts, scheme.ParameterCodec).
+ Body(data).
+ Do(ctx).
+ Into(result)
+ return
+}
diff --git a/pkg/kube/apisix/client/clientset/versioned/typed/config/v2beta2/config_client.go b/pkg/kube/apisix/client/clientset/versioned/typed/config/v2beta2/config_client.go
index ae30d48..64da688 100644
--- a/pkg/kube/apisix/client/clientset/versioned/typed/config/v2beta2/config_client.go
+++ b/pkg/kube/apisix/client/clientset/versioned/typed/config/v2beta2/config_client.go
@@ -25,6 +25,7 @@ import (
type ApisixV2beta2Interface interface {
RESTClient() rest.Interface
+ ApisixPluginConfigsGetter
ApisixRoutesGetter
}
@@ -33,6 +34,10 @@ type ApisixV2beta2Client struct {
restClient rest.Interface
}
+func (c *ApisixV2beta2Client) ApisixPluginConfigs(namespace string) ApisixPluginConfigInterface {
+ return newApisixPluginConfigs(c, namespace)
+}
+
func (c *ApisixV2beta2Client) ApisixRoutes(namespace string) ApisixRouteInterface {
return newApisixRoutes(c, namespace)
}
diff --git a/pkg/kube/apisix/client/clientset/versioned/typed/config/v2beta2/fake/fake_apisixpluginconfig.go b/pkg/kube/apisix/client/clientset/versioned/typed/config/v2beta2/fake/fake_apisixpluginconfig.go
new file mode 100644
index 0000000..d9572c3
--- /dev/null
+++ b/pkg/kube/apisix/client/clientset/versioned/typed/config/v2beta2/fake/fake_apisixpluginconfig.go
@@ -0,0 +1,141 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You 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"
+
+ v2beta2 "github.com/apache/apisix-ingress-controller/pkg/kube/apisix/apis/config/v2beta2"
+ 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"
+)
+
+// FakeApisixPluginConfigs implements ApisixPluginConfigInterface
+type FakeApisixPluginConfigs struct {
+ Fake *FakeApisixV2beta2
+ ns string
+}
+
+var apisixpluginconfigsResource = schema.GroupVersionResource{Group: "apisix.apache.org", Version: "v2beta2", Resource: "apisixpluginconfigs"}
+
+var apisixpluginconfigsKind = schema.GroupVersionKind{Group: "apisix.apache.org", Version: "v2beta2", Kind: "ApisixPluginConfig"}
+
+// Get takes name of the apisixPluginConfig, and returns the corresponding apisixPluginConfig object, and an error if there is any.
+func (c *FakeApisixPluginConfigs) Get(ctx context.Context, name string, options v1.GetOptions) (result *v2beta2.ApisixPluginConfig, err error) {
+ obj, err := c.Fake.
+ Invokes(testing.NewGetAction(apisixpluginconfigsResource, c.ns, name), &v2beta2.ApisixPluginConfig{})
+
+ if obj == nil {
+ return nil, err
+ }
+ return obj.(*v2beta2.ApisixPluginConfig), err
+}
+
+// List takes label and field selectors, and returns the list of ApisixPluginConfigs that match those selectors.
+func (c *FakeApisixPluginConfigs) List(ctx context.Context, opts v1.ListOptions) (result *v2beta2.ApisixPluginConfigList, err error) {
+ obj, err := c.Fake.
+ Invokes(testing.NewListAction(apisixpluginconfigsResource, apisixpluginconfigsKind, c.ns, opts), &v2beta2.ApisixPluginConfigList{})
+
+ if obj == nil {
+ return nil, err
+ }
+
+ label, _, _ := testing.ExtractFromListOptions(opts)
+ if label == nil {
+ label = labels.Everything()
+ }
+ list := &v2beta2.ApisixPluginConfigList{ListMeta: obj.(*v2beta2.ApisixPluginConfigList).ListMeta}
+ for _, item := range obj.(*v2beta2.ApisixPluginConfigList).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 apisixPluginConfigs.
+func (c *FakeApisixPluginConfigs) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) {
+ return c.Fake.
+ InvokesWatch(testing.NewWatchAction(apisixpluginconfigsResource, c.ns, opts))
+
+}
+
+// Create takes the representation of a apisixPluginConfig and creates it. Returns the server's representation of the apisixPluginConfig, and an error, if there is any.
+func (c *FakeApisixPluginConfigs) Create(ctx context.Context, apisixPluginConfig *v2beta2.ApisixPluginConfig, opts v1.CreateOptions) (result *v2beta2.ApisixPluginConfig, err error) {
+ obj, err := c.Fake.
+ Invokes(testing.NewCreateAction(apisixpluginconfigsResource, c.ns, apisixPluginConfig), &v2beta2.ApisixPluginConfig{})
+
+ if obj == nil {
+ return nil, err
+ }
+ return obj.(*v2beta2.ApisixPluginConfig), err
+}
+
+// Update takes the representation of a apisixPluginConfig and updates it. Returns the server's representation of the apisixPluginConfig, and an error, if there is any.
+func (c *FakeApisixPluginConfigs) Update(ctx context.Context, apisixPluginConfig *v2beta2.ApisixPluginConfig, opts v1.UpdateOptions) (result *v2beta2.ApisixPluginConfig, err error) {
+ obj, err := c.Fake.
+ Invokes(testing.NewUpdateAction(apisixpluginconfigsResource, c.ns, apisixPluginConfig), &v2beta2.ApisixPluginConfig{})
+
+ if obj == nil {
+ return nil, err
+ }
+ return obj.(*v2beta2.ApisixPluginConfig), 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 *FakeApisixPluginConfigs) UpdateStatus(ctx context.Context, apisixPluginConfig *v2beta2.ApisixPluginConfig, opts v1.UpdateOptions) (*v2beta2.ApisixPluginConfig, error) {
+ obj, err := c.Fake.
+ Invokes(testing.NewUpdateSubresourceAction(apisixpluginconfigsResource, "status", c.ns, apisixPluginConfig), &v2beta2.ApisixPluginConfig{})
+
+ if obj == nil {
+ return nil, err
+ }
+ return obj.(*v2beta2.ApisixPluginConfig), err
+}
+
+// Delete takes name of the apisixPluginConfig and deletes it. Returns an error if one occurs.
+func (c *FakeApisixPluginConfigs) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error {
+ _, err := c.Fake.
+ Invokes(testing.NewDeleteAction(apisixpluginconfigsResource, c.ns, name), &v2beta2.ApisixPluginConfig{})
+
+ return err
+}
+
+// DeleteCollection deletes a collection of objects.
+func (c *FakeApisixPluginConfigs) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error {
+ action := testing.NewDeleteCollectionAction(apisixpluginconfigsResource, c.ns, listOpts)
+
+ _, err := c.Fake.Invokes(action, &v2beta2.ApisixPluginConfigList{})
+ return err
+}
+
+// Patch applies the patch and returns the patched apisixPluginConfig.
+func (c *FakeApisixPluginConfigs) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v2beta2.ApisixPluginConfig, err error) {
+ obj, err := c.Fake.
+ Invokes(testing.NewPatchSubresourceAction(apisixpluginconfigsResource, c.ns, name, pt, data, subresources...), &v2beta2.ApisixPluginConfig{})
+
+ if obj == nil {
+ return nil, err
+ }
+ return obj.(*v2beta2.ApisixPluginConfig), err
+}
diff --git a/pkg/kube/apisix/client/clientset/versioned/typed/config/v2beta2/fake/fake_config_client.go b/pkg/kube/apisix/client/clientset/versioned/typed/config/v2beta2/fake/fake_config_client.go
index 1898d4a..2ae3899 100644
--- a/pkg/kube/apisix/client/clientset/versioned/typed/config/v2beta2/fake/fake_config_client.go
+++ b/pkg/kube/apisix/client/clientset/versioned/typed/config/v2beta2/fake/fake_config_client.go
@@ -27,6 +27,10 @@ type FakeApisixV2beta2 struct {
*testing.Fake
}
+func (c *FakeApisixV2beta2) ApisixPluginConfigs(namespace string) v2beta2.ApisixPluginConfigInterface {
+ return &FakeApisixPluginConfigs{c, namespace}
+}
+
func (c *FakeApisixV2beta2) ApisixRoutes(namespace string) v2beta2.ApisixRouteInterface {
return &FakeApisixRoutes{c, namespace}
}
diff --git a/pkg/kube/apisix/client/clientset/versioned/typed/config/v2beta2/generated_expansion.go b/pkg/kube/apisix/client/clientset/versioned/typed/config/v2beta2/generated_expansion.go
index c837df3..f2aaabc 100644
--- a/pkg/kube/apisix/client/clientset/versioned/typed/config/v2beta2/generated_expansion.go
+++ b/pkg/kube/apisix/client/clientset/versioned/typed/config/v2beta2/generated_expansion.go
@@ -17,4 +17,6 @@
package v2beta2
+type ApisixPluginConfigExpansion interface{}
+
type ApisixRouteExpansion interface{}
diff --git a/pkg/kube/apisix/client/informers/externalversions/config/v2beta2/apisixpluginconfig.go b/pkg/kube/apisix/client/informers/externalversions/config/v2beta2/apisixpluginconfig.go
new file mode 100644
index 0000000..4eaa183
--- /dev/null
+++ b/pkg/kube/apisix/client/informers/externalversions/config/v2beta2/apisixpluginconfig.go
@@ -0,0 +1,89 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You 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 informer-gen. DO NOT EDIT.
+
+package v2beta2
+
+import (
+ "context"
+ time "time"
+
+ configv2beta2 "github.com/apache/apisix-ingress-controller/pkg/kube/apisix/apis/config/v2beta2"
+ versioned "github.com/apache/apisix-ingress-controller/pkg/kube/apisix/client/clientset/versioned"
+ internalinterfaces "github.com/apache/apisix-ingress-controller/pkg/kube/apisix/client/informers/externalversions/internalinterfaces"
+ v2beta2 "github.com/apache/apisix-ingress-controller/pkg/kube/apisix/client/listers/config/v2beta2"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ApisixPluginConfigInformer provides access to a shared informer and lister for
+// ApisixPluginConfigs.
+type ApisixPluginConfigInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() v2beta2.ApisixPluginConfigLister
+}
+
+type apisixPluginConfigInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewApisixPluginConfigInformer constructs a new informer for ApisixPluginConfig type.
+// Always prefer using an informer factory to get a shared informer instead of getting an independent
+// one. This reduces memory footprint and number of connections to the server.
+func NewApisixPluginConfigInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredApisixPluginConfigInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredApisixPluginConfigInformer constructs a new informer for ApisixPluginConfig type.
+// Always prefer using an informer factory to get a shared informer instead of getting an independent
+// one. This reduces memory footprint and number of connections to the server.
+func NewFilteredApisixPluginConfigInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ApisixV2beta2().ApisixPluginConfigs(namespace).List(context.TODO(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ApisixV2beta2().ApisixPluginConfigs(namespace).Watch(context.TODO(), options)
+ },
+ },
+ &configv2beta2.ApisixPluginConfig{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *apisixPluginConfigInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredApisixPluginConfigInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *apisixPluginConfigInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&configv2beta2.ApisixPluginConfig{}, f.defaultInformer)
+}
+
+func (f *apisixPluginConfigInformer) Lister() v2beta2.ApisixPluginConfigLister {
+ return v2beta2.NewApisixPluginConfigLister(f.Informer().GetIndexer())
+}
diff --git a/pkg/kube/apisix/client/informers/externalversions/config/v2beta2/interface.go b/pkg/kube/apisix/client/informers/externalversions/config/v2beta2/interface.go
index 778022f..aed683c 100644
--- a/pkg/kube/apisix/client/informers/externalversions/config/v2beta2/interface.go
+++ b/pkg/kube/apisix/client/informers/externalversions/config/v2beta2/interface.go
@@ -23,6 +23,8 @@ import (
// Interface provides access to all the informers in this group version.
type Interface interface {
+ // ApisixPluginConfigs returns a ApisixPluginConfigInformer.
+ ApisixPluginConfigs() ApisixPluginConfigInformer
// ApisixRoutes returns a ApisixRouteInformer.
ApisixRoutes() ApisixRouteInformer
}
@@ -38,6 +40,11 @@ func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakList
return &version{factory: f, namespace: namespace, tweakListOptions: tweakListOptions}
}
+// ApisixPluginConfigs returns a ApisixPluginConfigInformer.
+func (v *version) ApisixPluginConfigs() ApisixPluginConfigInformer {
+ return &apisixPluginConfigInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
// ApisixRoutes returns a ApisixRouteInformer.
func (v *version) ApisixRoutes() ApisixRouteInformer {
return &apisixRouteInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
diff --git a/pkg/kube/apisix/client/informers/externalversions/generic.go b/pkg/kube/apisix/client/informers/externalversions/generic.go
index 6491abb..f4034ee 100644
--- a/pkg/kube/apisix/client/informers/externalversions/generic.go
+++ b/pkg/kube/apisix/client/informers/externalversions/generic.go
@@ -75,6 +75,8 @@ func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource
return &genericInformer{resource: resource.GroupResource(), informer: f.Apisix().V2beta1().ApisixRoutes().Informer()}, nil
// Group=apisix.apache.org, Version=v2beta2
+ case v2beta2.SchemeGroupVersion.WithResource("apisixpluginconfigs"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Apisix().V2beta2().ApisixPluginConfigs().Informer()}, nil
case v2beta2.SchemeGroupVersion.WithResource("apisixroutes"):
return &genericInformer{resource: resource.GroupResource(), informer: f.Apisix().V2beta2().ApisixRoutes().Informer()}, nil
diff --git a/pkg/kube/apisix/client/listers/config/v2beta2/apisixpluginconfig.go b/pkg/kube/apisix/client/listers/config/v2beta2/apisixpluginconfig.go
new file mode 100644
index 0000000..e23217a
--- /dev/null
+++ b/pkg/kube/apisix/client/listers/config/v2beta2/apisixpluginconfig.go
@@ -0,0 +1,98 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You 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 lister-gen. DO NOT EDIT.
+
+package v2beta2
+
+import (
+ v2beta2 "github.com/apache/apisix-ingress-controller/pkg/kube/apisix/apis/config/v2beta2"
+ "k8s.io/apimachinery/pkg/api/errors"
+ "k8s.io/apimachinery/pkg/labels"
+ "k8s.io/client-go/tools/cache"
+)
+
+// ApisixPluginConfigLister helps list ApisixPluginConfigs.
+// All objects returned here must be treated as read-only.
+type ApisixPluginConfigLister interface {
+ // List lists all ApisixPluginConfigs in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*v2beta2.ApisixPluginConfig, err error)
+ // ApisixPluginConfigs returns an object that can list and get ApisixPluginConfigs.
+ ApisixPluginConfigs(namespace string) ApisixPluginConfigNamespaceLister
+ ApisixPluginConfigListerExpansion
+}
+
+// apisixPluginConfigLister implements the ApisixPluginConfigLister interface.
+type apisixPluginConfigLister struct {
+ indexer cache.Indexer
+}
+
+// NewApisixPluginConfigLister returns a new ApisixPluginConfigLister.
+func NewApisixPluginConfigLister(indexer cache.Indexer) ApisixPluginConfigLister {
+ return &apisixPluginConfigLister{indexer: indexer}
+}
+
+// List lists all ApisixPluginConfigs in the indexer.
+func (s *apisixPluginConfigLister) List(selector labels.Selector) (ret []*v2beta2.ApisixPluginConfig, err error) {
+ err = cache.ListAll(s.indexer, selector, func(m interface{}) {
+ ret = append(ret, m.(*v2beta2.ApisixPluginConfig))
+ })
+ return ret, err
+}
+
+// ApisixPluginConfigs returns an object that can list and get ApisixPluginConfigs.
+func (s *apisixPluginConfigLister) ApisixPluginConfigs(namespace string) ApisixPluginConfigNamespaceLister {
+ return apisixPluginConfigNamespaceLister{indexer: s.indexer, namespace: namespace}
+}
+
+// ApisixPluginConfigNamespaceLister helps list and get ApisixPluginConfigs.
+// All objects returned here must be treated as read-only.
+type ApisixPluginConfigNamespaceLister interface {
+ // List lists all ApisixPluginConfigs in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*v2beta2.ApisixPluginConfig, err error)
+ // Get retrieves the ApisixPluginConfig from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*v2beta2.ApisixPluginConfig, error)
+ ApisixPluginConfigNamespaceListerExpansion
+}
+
+// apisixPluginConfigNamespaceLister implements the ApisixPluginConfigNamespaceLister
+// interface.
+type apisixPluginConfigNamespaceLister struct {
+ indexer cache.Indexer
+ namespace string
+}
+
+// List lists all ApisixPluginConfigs in the indexer for a given namespace.
+func (s apisixPluginConfigNamespaceLister) List(selector labels.Selector) (ret []*v2beta2.ApisixPluginConfig, err error) {
+ err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) {
+ ret = append(ret, m.(*v2beta2.ApisixPluginConfig))
+ })
+ return ret, err
+}
+
+// Get retrieves the ApisixPluginConfig from the indexer for a given namespace and name.
+func (s apisixPluginConfigNamespaceLister) Get(name string) (*v2beta2.ApisixPluginConfig, error) {
+ obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name)
+ if err != nil {
+ return nil, err
+ }
+ if !exists {
+ return nil, errors.NewNotFound(v2beta2.Resource("apisixpluginconfig"), name)
+ }
+ return obj.(*v2beta2.ApisixPluginConfig), nil
+}
diff --git a/pkg/kube/apisix/client/listers/config/v2beta2/expansion_generated.go b/pkg/kube/apisix/client/listers/config/v2beta2/expansion_generated.go
index 6922ad2..5643751 100644
--- a/pkg/kube/apisix/client/listers/config/v2beta2/expansion_generated.go
+++ b/pkg/kube/apisix/client/listers/config/v2beta2/expansion_generated.go
@@ -17,6 +17,14 @@
package v2beta2
+// ApisixPluginConfigListerExpansion allows custom methods to be added to
+// ApisixPluginConfigLister.
+type ApisixPluginConfigListerExpansion interface{}
+
+// ApisixPluginConfigNamespaceListerExpansion allows custom methods to be added to
+// ApisixPluginConfigNamespaceLister.
+type ApisixPluginConfigNamespaceListerExpansion interface{}
+
// ApisixRouteListerExpansion allows custom methods to be added to
// ApisixRouteLister.
type ApisixRouteListerExpansion interface{}
diff --git a/samples/deploy/crd/v1/ApisixPluginConfig.yaml b/samples/deploy/crd/v1/ApisixPluginConfig.yaml
new file mode 100644
index 0000000..d2597aa
--- /dev/null
+++ b/samples/deploy/crd/v1/ApisixPluginConfig.yaml
@@ -0,0 +1,83 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+#
+
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: apisixpluginconfigs.apisix.apache.org
+spec:
+ group: apisix.apache.org
+ scope: Namespaced
+ names:
+ plural: apisixpluginconfigs
+ singular: apisixpluginconfig
+ kind: ApisixPluginConfig
+ shortNames:
+ - apc
+ versions:
+ - name: v2beta2
+ served: true
+ storage: true
+ subresources:
+ status: {}
+ additionalPrinterColumns:
+ - jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ priority: 0
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ type: object
+ required:
+ - plugins
+ properties:
+ plugins:
+ type: array
+ items:
+ type: object
+ properties:
+ name:
+ type: string
+ minLength: 1
+ enable:
+ type: boolean
+ config:
+ type: object
+ required:
+ - name
+ - enable
+ status:
+ type: object
+ properties:
+ conditions:
+ type: array
+ items:
+ type: object
+ properties:
+ "type":
+ type: string
+ reason:
+ type: string
+ status:
+ type: string
+ message:
+ type: string
+ observedGeneration:
+ type: integer
diff --git a/samples/deploy/crd/v1/kustomization.yaml b/samples/deploy/crd/v1/kustomization.yaml
index 356b080..3ef0cda 100644
--- a/samples/deploy/crd/v1/kustomization.yaml
+++ b/samples/deploy/crd/v1/kustomization.yaml
@@ -21,3 +21,4 @@ resources:
- ./ApisixTls.yaml
- ./ApisixClusterConfig.yaml
- ./ApisixConsumer.yaml
+ - ./ApisixPluginConfig.yaml
diff --git a/samples/deploy/rbac/apisix_view_clusterrole.yaml b/samples/deploy/rbac/apisix_view_clusterrole.yaml
index 7a9ff16..6394903 100644
--- a/samples/deploy/rbac/apisix_view_clusterrole.yaml
+++ b/samples/deploy/rbac/apisix_view_clusterrole.yaml
@@ -149,6 +149,8 @@ rules:
- apisixclusterconfigs/status
- apisixconsumers
- apisixconsumers/status
+ - apisixpluginconfig
+ - apisixpluginconfig/status
verbs:
- '*'
- apiGroups:
diff --git a/test/e2e/scaffold/ingress.go b/test/e2e/scaffold/ingress.go
index 4de7a0c..bd6ddbd 100644
--- a/test/e2e/scaffold/ingress.go
+++ b/test/e2e/scaffold/ingress.go
@@ -168,6 +168,8 @@ rules:
- apisixclusterconfigs/status
- apisixconsumers
- apisixconsumers/status
+ - apisixpluginconfig
+ - apisixpluginconfig/status
verbs:
- '*'
- apiGroups: