diff --git a/api/v1alpha1/agentgateway_backend_types.go b/api/v1alpha1/agentgateway_backend_types.go index ff0059b8bfd..ac6a23a7e41 100644 --- a/api/v1alpha1/agentgateway_backend_types.go +++ b/api/v1alpha1/agentgateway_backend_types.go @@ -10,6 +10,7 @@ import ( // +kubebuilder:printcolumn:name="Accepted",type=string,JSONPath=".status.conditions[?(@.type=='Accepted')].status",description="Backend configuration acceptance status" // +kubebuilder:printcolumn:name="Age",type=date,JSONPath=".metadata.creationTimestamp",description="The age of the backend." +// +kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp` // +genclient // +kubebuilder:object:root=true diff --git a/api/v1alpha1/agentgateway_parameters_types.go b/api/v1alpha1/agentgateway_parameters_types.go new file mode 100644 index 00000000000..33dec764102 --- /dev/null +++ b/api/v1alpha1/agentgateway_parameters_types.go @@ -0,0 +1,176 @@ +package v1alpha1 + +import ( + "encoding/json" + "fmt" + "strings" + + corev1 "k8s.io/api/core/v1" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +kubebuilder:rbac:groups=gateway.kgateway.dev,resources=agentgatewayparameters,verbs=get;list;watch +// +kubebuilder:rbac:groups=gateway.kgateway.dev,resources=agentgatewayparameters/status,verbs=get;update;patch + +// +kubebuilder:printcolumn:name="Accepted",type=string,JSONPath=".status.ancestors[*].conditions[?(@.type=='Accepted')].status",description="Agentgateway policy acceptance status" +// +kubebuilder:printcolumn:name="Attached",type=string,JSONPath=".status.ancestors[*].conditions[?(@.type=='Attached')].status",description="Agentgateway policy attachment status" +// +kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp` + +// +genclient +// +kubebuilder:object:root=true +// +kubebuilder:metadata:labels={app=kgateway,app.kubernetes.io/name=kgateway} +// +kubebuilder:resource:categories=kgateway,shortName=agpar +// +kubebuilder:subresource:status +// +kubebuilder:metadata:labels="gateway.networking.k8s.io/policy=Direct" +type AgentgatewayParameters struct { + metav1.TypeMeta `json:",inline"` + // metadata for the object + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + metav1.ObjectMeta `json:"metadata,omitempty"` + + // spec defines the desired state of AgentgatewayParameters. + // +required + Spec AgentgatewayParametersSpec `json:"spec"` + + // status defines the current state of AgentgatewayParameters. + // +optional + Status AgentgatewayParametersStatus `json:"status,omitempty"` +} + +// The current conditions of the GatewayParameters. This is not currently implemented. +type AgentgatewayParametersStatus struct{} + +// +kubebuilder:object:root=true +type AgentgatewayParametersList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []AgentgatewayParameters `json:"items"` +} + +type AgentgatewayParametersSpec struct { + AgentgatewayParametersConfigs `json:",inline"` + AgentgatewayParametersOverlays `json:",inline"` +} + +// +kubebuilder:validation:Enum=Json;Plain +type AgentgatewayParametersLoggingFormat string + +const ( + AgentgatewayParametersLoggingJson AgentgatewayParametersLoggingFormat = "Json" + AgentgatewayParametersLoggingPlain AgentgatewayParametersLoggingFormat = "Plain" +) + +type AgentgatewayParametersLogging struct { + Level ListOrString `json:"level,omitempty"` + Format AgentgatewayParametersLoggingFormat `json:"format,omitempty"` +} + +type AgentgatewayParametersConfigs struct { + // Common set of labels to apply to all generated resources. + // +optional + Labels map[string]string `json:"labels,omitempty"` + + // Common set of annotations to apply to all generated resources. + // +optional + Annotations map[string]string `json:"annotations,omitempty"` + + // logging configuration for Agentgateway. By default, all logs are set to "info" level. + // +optional + Logging *AgentgatewayParametersLogging `json:"logging,omitempty"` + // The agentgateway container image. See + // https://kubernetes.io/docs/concepts/containers/images + // for details. + // + // Default values, which may be overridden individually: + // + // registry: ghcr.io/agentgateway + // repository: agentgateway + // tag: + // pullPolicy: IfNotPresent + // + // +optional + Image *Image `json:"image,omitempty"` + // The container environment variables. + // + // +optional + Env []corev1.EnvVar `json:"env,omitempty"` + // The compute resources required by this container. See + // https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ + // for details. + // + // +optional + Resources *corev1.ResourceRequirements `json:"resources,omitempty"` +} + +type AgentgatewayParametersOverlays struct { + // deployment allows specifying overrides for the generated Deployment resource. + Deployment *AgentgatewayParametersObjectOverlay `json:"deployment,omitempty"` + // service allows specifying overrides for the generated Service resource. + Service *AgentgatewayParametersObjectOverlay `json:"service,omitempty"` + // serviceAccount allows specifying overrides for the generated ServiceAccount resource. + ServiceAccount *AgentgatewayParametersObjectOverlay `json:"serviceAccount,omitempty"` + // podDisruptionBudget allows specifying overrides for the generated PodDisruptionBudget resource. + // Note: a PodDisruptionBudget is not deployed by default. Setting this field enables a default one. + // If you just want the default, without customizations, use `podDisruptionBudget: {}`. + PodDisruptionBudget *AgentgatewayParametersObjectOverlay `json:"podDisruptionBudget,omitempty"` + // horizontalPodAutoscaler allows specifying overrides for the generated HorizontalPodAutoscaler resource. + // Note: a HorizontalPodAutoscaler is not deployed by default. Setting this field enables a default one. + // If you just want the default, without customizations, use `horizontalPodAutoscaler: {}`. + HorizontalPodAutoscaler *AgentgatewayParametersObjectOverlay `json:"horizontalPodAutoscaler,omitempty"` +} + +type AgentgatewayParametersObjectMetadata struct { + // Map of string keys and values that can be used to organize and categorize + // (scope and select) objects. May match selectors of replication controllers + // and services. + // More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels + // +optional + Labels map[string]string `json:"labels,omitempty"` + + // Annotations is an unstructured key value map stored with a resource that may be + // set by external tools to store and retrieve arbitrary metadata. They are not + // queryable and should be preserved when modifying objects. + // More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations + // +optional + Annotations map[string]string `json:"annotations,omitempty"` +} +type AgentgatewayParametersObjectOverlay struct { + // metadata defines a subset of object metadata to be customized. + // +optional + Metadata AgentgatewayParametersObjectMetadata `json:"metadata,omitempty"` + // spec defines an overlay to apply onto the object, using [Strategic Merge Patch](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-api-machinery/strategic-merge-patch.md). + // The patch is applied after all other fields are applied. + // +optional + Spec apiextensionsv1.JSON `json:"spec,omitempty"` +} + +// TODO: this doesn't work +// ListOrString is a type that can hold either a single string or a list of strings +// +kubebuilder:validation:Type=array +// +kubebuilder:validation:Type=string +type ListOrString []string + +// UnmarshalJSON implements the json.Unmarshaller interface +func (l *ListOrString) UnmarshalJSON(data []byte) error { + if len(data) == 0 || string(data) == "null" { + return nil + } + + // Try to unmarshal as string first + var strVal string + if err := json.Unmarshal(data, &strVal); err == nil { + *l = strings.Split(strVal, ",") + return nil + } + + // Try to unmarshal as array + var arrVal []string + if err := json.Unmarshal(data, &arrVal); err == nil { + *l = arrVal + return nil + } + + return fmt.Errorf("cannot unmarshal %s into ListOrString", string(data)) +} diff --git a/api/v1alpha1/agentgateway_policy_types.go b/api/v1alpha1/agentgateway_policy_types.go index 7c17e3e1fa1..4561bcd79e5 100644 --- a/api/v1alpha1/agentgateway_policy_types.go +++ b/api/v1alpha1/agentgateway_policy_types.go @@ -11,6 +11,7 @@ import ( // +kubebuilder:printcolumn:name="Accepted",type=string,JSONPath=".status.ancestors[*].conditions[?(@.type=='Accepted')].status",description="Agentgateway policy acceptance status" // +kubebuilder:printcolumn:name="Attached",type=string,JSONPath=".status.ancestors[*].conditions[?(@.type=='Attached')].status",description="Agentgateway policy attachment status" +// +kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp` // +genclient // +kubebuilder:object:root=true diff --git a/api/v1alpha1/zz_generated.deepcopy.go b/api/v1alpha1/zz_generated.deepcopy.go index 80488ee49ad..c0638c2fe6a 100644 --- a/api/v1alpha1/zz_generated.deepcopy.go +++ b/api/v1alpha1/zz_generated.deepcopy.go @@ -1041,6 +1041,254 @@ func (in *AgentgatewayKeepalive) DeepCopy() *AgentgatewayKeepalive { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AgentgatewayParameters) DeepCopyInto(out *AgentgatewayParameters) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + out.Status = in.Status +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AgentgatewayParameters. +func (in *AgentgatewayParameters) DeepCopy() *AgentgatewayParameters { + if in == nil { + return nil + } + out := new(AgentgatewayParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *AgentgatewayParameters) 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 *AgentgatewayParametersConfigs) DeepCopyInto(out *AgentgatewayParametersConfigs) { + *out = *in + if in.Labels != nil { + in, out := &in.Labels, &out.Labels + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.Annotations != nil { + in, out := &in.Annotations, &out.Annotations + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.Logging != nil { + in, out := &in.Logging, &out.Logging + *out = new(AgentgatewayParametersLogging) + (*in).DeepCopyInto(*out) + } + if in.Image != nil { + in, out := &in.Image, &out.Image + *out = new(Image) + (*in).DeepCopyInto(*out) + } + if in.Env != nil { + in, out := &in.Env, &out.Env + *out = make([]corev1.EnvVar, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Resources != nil { + in, out := &in.Resources, &out.Resources + *out = new(corev1.ResourceRequirements) + (*in).DeepCopyInto(*out) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AgentgatewayParametersConfigs. +func (in *AgentgatewayParametersConfigs) DeepCopy() *AgentgatewayParametersConfigs { + if in == nil { + return nil + } + out := new(AgentgatewayParametersConfigs) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AgentgatewayParametersList) DeepCopyInto(out *AgentgatewayParametersList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]AgentgatewayParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AgentgatewayParametersList. +func (in *AgentgatewayParametersList) DeepCopy() *AgentgatewayParametersList { + if in == nil { + return nil + } + out := new(AgentgatewayParametersList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *AgentgatewayParametersList) 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 *AgentgatewayParametersLogging) DeepCopyInto(out *AgentgatewayParametersLogging) { + *out = *in + if in.Level != nil { + in, out := &in.Level, &out.Level + *out = make(ListOrString, len(*in)) + copy(*out, *in) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AgentgatewayParametersLogging. +func (in *AgentgatewayParametersLogging) DeepCopy() *AgentgatewayParametersLogging { + if in == nil { + return nil + } + out := new(AgentgatewayParametersLogging) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AgentgatewayParametersObjectMetadata) DeepCopyInto(out *AgentgatewayParametersObjectMetadata) { + *out = *in + if in.Labels != nil { + in, out := &in.Labels, &out.Labels + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.Annotations != nil { + in, out := &in.Annotations, &out.Annotations + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AgentgatewayParametersObjectMetadata. +func (in *AgentgatewayParametersObjectMetadata) DeepCopy() *AgentgatewayParametersObjectMetadata { + if in == nil { + return nil + } + out := new(AgentgatewayParametersObjectMetadata) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AgentgatewayParametersObjectOverlay) DeepCopyInto(out *AgentgatewayParametersObjectOverlay) { + *out = *in + in.Metadata.DeepCopyInto(&out.Metadata) + in.Spec.DeepCopyInto(&out.Spec) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AgentgatewayParametersObjectOverlay. +func (in *AgentgatewayParametersObjectOverlay) DeepCopy() *AgentgatewayParametersObjectOverlay { + if in == nil { + return nil + } + out := new(AgentgatewayParametersObjectOverlay) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AgentgatewayParametersOverlays) DeepCopyInto(out *AgentgatewayParametersOverlays) { + *out = *in + if in.Deployment != nil { + in, out := &in.Deployment, &out.Deployment + *out = new(AgentgatewayParametersObjectOverlay) + (*in).DeepCopyInto(*out) + } + if in.Service != nil { + in, out := &in.Service, &out.Service + *out = new(AgentgatewayParametersObjectOverlay) + (*in).DeepCopyInto(*out) + } + if in.ServiceAccount != nil { + in, out := &in.ServiceAccount, &out.ServiceAccount + *out = new(AgentgatewayParametersObjectOverlay) + (*in).DeepCopyInto(*out) + } + if in.PodDisruptionBudget != nil { + in, out := &in.PodDisruptionBudget, &out.PodDisruptionBudget + *out = new(AgentgatewayParametersObjectOverlay) + (*in).DeepCopyInto(*out) + } + if in.HorizontalPodAutoscaler != nil { + in, out := &in.HorizontalPodAutoscaler, &out.HorizontalPodAutoscaler + *out = new(AgentgatewayParametersObjectOverlay) + (*in).DeepCopyInto(*out) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AgentgatewayParametersOverlays. +func (in *AgentgatewayParametersOverlays) DeepCopy() *AgentgatewayParametersOverlays { + if in == nil { + return nil + } + out := new(AgentgatewayParametersOverlays) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AgentgatewayParametersSpec) DeepCopyInto(out *AgentgatewayParametersSpec) { + *out = *in + in.AgentgatewayParametersConfigs.DeepCopyInto(&out.AgentgatewayParametersConfigs) + in.AgentgatewayParametersOverlays.DeepCopyInto(&out.AgentgatewayParametersOverlays) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AgentgatewayParametersSpec. +func (in *AgentgatewayParametersSpec) DeepCopy() *AgentgatewayParametersSpec { + if in == nil { + return nil + } + out := new(AgentgatewayParametersSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AgentgatewayParametersStatus) DeepCopyInto(out *AgentgatewayParametersStatus) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AgentgatewayParametersStatus. +func (in *AgentgatewayParametersStatus) DeepCopy() *AgentgatewayParametersStatus { + if in == nil { + return nil + } + out := new(AgentgatewayParametersStatus) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *AgentgatewayPolicy) DeepCopyInto(out *AgentgatewayPolicy) { *out = *in @@ -4303,6 +4551,25 @@ func (in *LLMProvider) DeepCopy() *LLMProvider { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in ListOrString) DeepCopyInto(out *ListOrString) { + { + in := &in + *out = make(ListOrString, len(*in)) + copy(*out, *in) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ListOrString. +func (in ListOrString) DeepCopy() ListOrString { + if in == nil { + return nil + } + out := new(ListOrString) + in.DeepCopyInto(out) + return *out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ListenerPolicy) DeepCopyInto(out *ListenerPolicy) { *out = *in diff --git a/api/v1alpha1/zz_generated.register.go b/api/v1alpha1/zz_generated.register.go index 1503abef2ae..39f52144f9c 100644 --- a/api/v1alpha1/zz_generated.register.go +++ b/api/v1alpha1/zz_generated.register.go @@ -47,6 +47,8 @@ func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &AgentgatewayBackend{}, &AgentgatewayBackendList{}, + &AgentgatewayParameters{}, + &AgentgatewayParametersList{}, &AgentgatewayPolicy{}, &AgentgatewayPolicyList{}, &Backend{}, diff --git a/go.mod b/go.mod index 071bb873d0a..6aecf31ed92 100644 --- a/go.mod +++ b/go.mod @@ -27,13 +27,13 @@ require ( github.com/prometheus/common v0.67.1 github.com/solo-io/envoy-gloo/go v0.0.0-20250924144543-9d47b99b2130 github.com/solo-io/go-list-licenses v0.1.4 - github.com/spf13/afero v1.14.0 + github.com/spf13/afero v1.15.0 github.com/spf13/cobra v1.10.1 github.com/stretchr/testify v1.11.1 go.opencensus.io v0.24.0 go.uber.org/zap v1.27.0 golang.org/x/exp v0.0.0-20251017212417-90e834f514db - golang.org/x/net v0.46.0 // indirect + golang.org/x/net v0.47.0 // indirect google.golang.org/grpc v1.76.0 google.golang.org/protobuf v1.36.10 helm.sh/helm/v3 v3.19.2 @@ -70,7 +70,7 @@ require ( github.com/AdminBenni/iota-mixing v1.0.0 // indirect github.com/AlwxSin/noinlineerr v1.0.5 // indirect github.com/Masterminds/vcs v1.13.3 // indirect - github.com/MirrexOne/unqueryvet v1.2.1 // indirect + github.com/MirrexOne/unqueryvet v1.3.0 // indirect github.com/agnivade/levenshtein v1.2.1 // indirect github.com/alecthomas/chroma/v2 v2.20.0 // indirect github.com/alfatraining/structtag v1.0.0 // indirect @@ -247,7 +247,7 @@ require ( github.com/caarlos0/go-shellwords v1.0.12 // indirect github.com/caarlos0/go-version v0.2.1 // indirect github.com/carlmjohnson/versioninfo v0.22.5 // indirect - github.com/catenacyber/perfsprint v0.10.0 // indirect + github.com/catenacyber/perfsprint v0.10.1 // indirect github.com/cavaliergopher/cpio v1.0.1 // indirect github.com/ccojocar/zxcvbn-go v1.0.4 // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect @@ -350,7 +350,7 @@ require ( github.com/golangci/dupl v0.0.0-20250308024227-f665c8d69b32 // indirect github.com/golangci/go-printf-func-name v0.1.1 // indirect github.com/golangci/gofmt v0.0.0-20250106114630-d62b90e6713d // indirect - github.com/golangci/golangci-lint/v2 v2.6.2 // indirect + github.com/golangci/golangci-lint/v2 v2.6.3-0.20251124203043-9a9fd5b1d9fd // indirect github.com/golangci/golines v0.0.0-20250217134842-442fd0091d95 // indirect github.com/golangci/misspell v0.7.0 // indirect github.com/golangci/plugin-module-register v0.1.2 // indirect @@ -456,7 +456,7 @@ require ( github.com/mattn/go-localereader v0.0.2-0.20220822084749-2491eb6c1c75 // indirect github.com/mattn/go-mastodon v0.0.10 // indirect github.com/mattn/go-runewidth v0.0.17 // indirect - github.com/mgechev/revive v1.12.0 // indirect + github.com/mgechev/revive v1.13.0 // indirect github.com/miekg/dns v1.1.68 // indirect github.com/minio/sha256-simd v1.0.1 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect @@ -545,7 +545,7 @@ require ( github.com/spf13/viper v1.20.1 // indirect github.com/spiffe/go-spiffe/v2 v2.5.0 // indirect github.com/ssgreg/nlreturn/v2 v2.2.1 // indirect - github.com/stbenjam/no-sprintf-host-port v0.2.0 // indirect + github.com/stbenjam/no-sprintf-host-port v0.3.1 // indirect github.com/stoewer/go-strcase v1.3.1 // indirect github.com/stretchr/objx v0.5.2 // indirect github.com/subosito/gotenv v1.6.0 // indirect @@ -596,16 +596,16 @@ require ( go.uber.org/automaxprocs v1.6.0 // indirect go.uber.org/multierr v1.11.0 // indirect gocloud.dev v0.42.0 // indirect - golang.org/x/crypto v0.43.0 // indirect + golang.org/x/crypto v0.44.0 // indirect golang.org/x/exp/typeparams v0.0.0-20251023183803-a4bb9ffd2546 // indirect - golang.org/x/mod v0.29.0 // indirect + golang.org/x/mod v0.30.0 // indirect golang.org/x/oauth2 v0.32.0 // indirect golang.org/x/sync v0.18.0 // indirect - golang.org/x/sys v0.37.0 // indirect - golang.org/x/term v0.36.0 // indirect - golang.org/x/text v0.30.0 // indirect + golang.org/x/sys v0.38.0 // indirect + golang.org/x/term v0.37.0 // indirect + golang.org/x/text v0.31.0 // indirect golang.org/x/time v0.14.0 - golang.org/x/tools v0.38.0 // indirect + golang.org/x/tools v0.39.0 // indirect golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect gomodules.xyz/jsonpatch/v2 v2.5.0 // indirect google.golang.org/api v0.246.0 // indirect diff --git a/go.sum b/go.sum index 2ee43c239a7..d52929311ca 100644 --- a/go.sum +++ b/go.sum @@ -177,8 +177,8 @@ github.com/Masterminds/vcs v1.13.3/go.mod h1:TiE7xuEjl1N4j016moRd6vezp6e6Lz23gyp github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= -github.com/MirrexOne/unqueryvet v1.2.1 h1:M+zdXMq84g+E1YOLa7g7ExN3dWfZQrdDSTCM7gC+m/A= -github.com/MirrexOne/unqueryvet v1.2.1/go.mod h1:IWwCwMQlSWjAIteW0t+28Q5vouyktfujzYznSIWiuOg= +github.com/MirrexOne/unqueryvet v1.3.0 h1:5slWSomgqpYU4zFuZ3NNOfOUxVPlXFDBPAVasZOGlAY= +github.com/MirrexOne/unqueryvet v1.3.0/go.mod h1:IWwCwMQlSWjAIteW0t+28Q5vouyktfujzYznSIWiuOg= github.com/Netflix/go-expect v0.0.0-20180615182759-c93bf25de8e8/go.mod h1:oX5x61PbNXchhh0oikYAH+4Pcfw5LKv21+Jnpr6r6Pc= github.com/Netflix/go-expect v0.0.0-20180928190340-9d1f4485533b/go.mod h1:oX5x61PbNXchhh0oikYAH+4Pcfw5LKv21+Jnpr6r6Pc= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= @@ -375,8 +375,8 @@ github.com/caarlos0/testfs v0.4.4 h1:3PHvzHi5Lt+g332CiShwS8ogTgS3HjrmzZxCm6JCDr8 github.com/caarlos0/testfs v0.4.4/go.mod h1:bRN55zgG4XCUVVHZCeU+/Tz1Q6AxEJOEJTliBy+1DMk= github.com/carlmjohnson/versioninfo v0.22.5 h1:O00sjOLUAFxYQjlN/bzYTuZiS0y6fWDQjMRvwtKgwwc= github.com/carlmjohnson/versioninfo v0.22.5/go.mod h1:QT9mph3wcVfISUKd0i9sZfVrPviHuSF+cUtLjm2WSf8= -github.com/catenacyber/perfsprint v0.10.0 h1:AZj1mYyxbxLRqmnYOeguZXEQwWOgQGm2wzLI5d7Hl/0= -github.com/catenacyber/perfsprint v0.10.0/go.mod h1:DJTGsi/Zufpuus6XPGJyKOTMELe347o6akPvWG9Zcsc= +github.com/catenacyber/perfsprint v0.10.1 h1:u7Riei30bk46XsG8nknMhKLXG9BcXz3+3tl/WpKm0PQ= +github.com/catenacyber/perfsprint v0.10.1/go.mod h1:DJTGsi/Zufpuus6XPGJyKOTMELe347o6akPvWG9Zcsc= github.com/cavaliergopher/cpio v1.0.1 h1:KQFSeKmZhv0cr+kawA3a0xTQCU4QxXF1vhU7P7av2KM= github.com/cavaliergopher/cpio v1.0.1/go.mod h1:pBdaqQjnvXxdS/6CvNDwIANIFSP0xRKI16PX4xejRQc= github.com/ccojocar/zxcvbn-go v1.0.4 h1:FWnCIRMXPj43ukfX000kvBZvV6raSxakYr1nzyNrUcc= @@ -772,8 +772,8 @@ github.com/golangci/go-printf-func-name v0.1.1 h1:hIYTFJqAGp1iwoIfsNTpoq1xZAarog github.com/golangci/go-printf-func-name v0.1.1/go.mod h1:Es64MpWEZbh0UBtTAICOZiB+miW53w/K9Or/4QogJss= github.com/golangci/gofmt v0.0.0-20250106114630-d62b90e6713d h1:viFft9sS/dxoYY0aiOTsLKO2aZQAPT4nlQCsimGcSGE= github.com/golangci/gofmt v0.0.0-20250106114630-d62b90e6713d/go.mod h1:ivJ9QDg0XucIkmwhzCDsqcnxxlDStoTl89jDMIoNxKY= -github.com/golangci/golangci-lint/v2 v2.6.2 h1:jkMSVv36JmyTENcEertckvimvjPcD5qxNM7W7qhECvI= -github.com/golangci/golangci-lint/v2 v2.6.2/go.mod h1:fSIMDiBt9kzdpnvvV7GO6iWzyv5uaeZ+iPor+2uRczE= +github.com/golangci/golangci-lint/v2 v2.6.3-0.20251124203043-9a9fd5b1d9fd h1:ZxW0KupUzt1UckkoyVeSULru2VY1WN8wsC9nZUWo5hI= +github.com/golangci/golangci-lint/v2 v2.6.3-0.20251124203043-9a9fd5b1d9fd/go.mod h1:CFPRGk0bg9XlN/g/hXPZiI/crHbphtfavWAD9fL5hGs= github.com/golangci/golines v0.0.0-20250217134842-442fd0091d95 h1:AkK+w9FZBXlU/xUmBtSJN1+tAI4FIvy5WtnUnY8e4p8= github.com/golangci/golines v0.0.0-20250217134842-442fd0091d95/go.mod h1:k9mmcyWKSTMcPPvQUCfRWWQ9VHJ1U9Dc0R7kaXAgtnQ= github.com/golangci/misspell v0.7.0 h1:4GOHr/T1lTW0hhR4tgaaV1WS/lJ+ncvYCoFKmqJsj0c= @@ -1196,8 +1196,8 @@ github.com/mattn/go-sqlite3 v1.14.24/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxU github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/mfridman/tparse v0.18.0 h1:wh6dzOKaIwkUGyKgOntDW4liXSo37qg5AXbIhkMV3vE= github.com/mfridman/tparse v0.18.0/go.mod h1:gEvqZTuCgEhPbYk/2lS3Kcxg1GmTxxU7kTC8DvP0i/A= -github.com/mgechev/revive v1.12.0 h1:Q+/kkbbwerrVYPv9d9efaPGmAO/NsxwW/nE6ahpQaCU= -github.com/mgechev/revive v1.12.0/go.mod h1:VXsY2LsTigk8XU9BpZauVLjVrhICMOV3k1lpB3CXrp8= +github.com/mgechev/revive v1.13.0 h1:yFbEVliCVKRXY8UgwEO7EOYNopvjb1BFbmYqm9hZjBM= +github.com/mgechev/revive v1.13.0/go.mod h1:efJfeBVCX2JUumNQ7dtOLDja+QKj9mYGgEZA7rt5u+0= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d h1:5PJl274Y63IEHC+7izoQE9x6ikvDFZS2mDVS3drnohI= github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= @@ -1544,8 +1544,8 @@ github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0b github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= -github.com/spf13/afero v1.14.0 h1:9tH6MapGnn/j0eb0yIXiLjERO8RB6xIVZRDCX7PtqWA= -github.com/spf13/afero v1.14.0/go.mod h1:acJQ8t0ohCGuMN3O+Pv0V0hgMxNYDlvdk+VTfyZmbYo= +github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I= +github.com/spf13/afero v1.15.0/go.mod h1:NC2ByUVxtQs4b3sIUphxK0NioZnmxgyCrfzeuq8lxMg= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.8.0 h1:gEN9K4b8Xws4EX0+a0reLmhq8moKn7ntRlQYgjPeCDk= github.com/spf13/cast v1.8.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= @@ -1568,8 +1568,8 @@ github.com/spiffe/go-spiffe/v2 v2.5.0/go.mod h1:P+NxobPc6wXhVtINNtFjNWGBTreew1GB github.com/src-d/gcfg v1.4.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI= github.com/ssgreg/nlreturn/v2 v2.2.1 h1:X4XDI7jstt3ySqGU86YGAURbxw3oTDPK9sPEi6YEwQ0= github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I= -github.com/stbenjam/no-sprintf-host-port v0.2.0 h1:i8pxvGrt1+4G0czLr/WnmyH7zbZ8Bg8etvARQ1rpyl4= -github.com/stbenjam/no-sprintf-host-port v0.2.0/go.mod h1:eL0bQ9PasS0hsyTyfTjjG+E80QIyPnBVQbYZyv20Jfk= +github.com/stbenjam/no-sprintf-host-port v0.3.1 h1:AyX7+dxI4IdLBPtDbsGAyqiTSLpCP9hWRrXQDU4Cm/g= +github.com/stbenjam/no-sprintf-host-port v0.3.1/go.mod h1:ODbZesTCHMVKthBHskvUUexdcNHAQRXk9NpSsL8p/HQ= github.com/stoewer/go-strcase v1.3.1 h1:iS0MdW+kVTxgMoE1LAZyMiYJFKlOzLooE4MxjirtkAs= github.com/stoewer/go-strcase v1.3.1/go.mod h1:fAH5hQ5pehh+j3nZfvwdk2RgEgQjAoM8wodgtPmh1xo= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -1845,8 +1845,8 @@ golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliY golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= -golang.org/x/crypto v0.43.0 h1:dduJYIi3A3KOfdGOHX8AVZ/jGiyPa3IbBozJ5kNuE04= -golang.org/x/crypto v0.43.0/go.mod h1:BFbav4mRNlXJL4wNeejLpWxB7wMbc79PdRGhWKncxR0= +golang.org/x/crypto v0.44.0 h1:A97SsFvM3AIwEEmTBiaxPPTYpDC47w720rdiiUvgoAU= +golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1891,8 +1891,8 @@ golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA= -golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w= +golang.org/x/mod v0.30.0 h1:fDEXFVZ/fmCKProc/yAXXUijritrDzahmwwefnjoPFk= +golang.org/x/mod v0.30.0/go.mod h1:lAsf5O2EvJeSFMiBxXDki7sCgAxEUcZHXoXMKT4GJKc= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1931,8 +1931,8 @@ golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/net v0.16.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= -golang.org/x/net v0.46.0 h1:giFlY12I07fugqwPuWJi68oOnpfqFnJIJzaIIm2JVV4= -golang.org/x/net v0.46.0/go.mod h1:Q9BGdFy1y4nkUwiLvT5qtyhAnEHgnQ/zd8PfU6nc210= +golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY= +golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -2016,8 +2016,8 @@ golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ= -golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc= +golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= @@ -2026,8 +2026,8 @@ golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= -golang.org/x/term v0.36.0 h1:zMPR+aF8gfksFprF/Nc/rd1wRS1EI6nDBGyWAvDzx2Q= -golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss= +golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU= +golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -2039,8 +2039,8 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.30.0 h1:yznKA/E9zq54KzlzBEAWn1NXSQ8DIp/NYMy88xJjl4k= -golang.org/x/text v0.30.0/go.mod h1:yDdHFIX9t+tORqspjENWgzaCVXgk0yYnYuSZ8UzzBVM= +golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM= +golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -2098,8 +2098,8 @@ golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg= golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps= -golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ= -golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs= +golang.org/x/tools v0.39.0 h1:ik4ho21kwuQln40uelmciQPp9SipgNDdrafrYA4TmQQ= +golang.org/x/tools v0.39.0/go.mod h1:JnefbkDPyD8UU2kI5fuf8ZX4/yUeh9W877ZeBONxUqQ= golang.org/x/tools/go/expect v0.1.1-deprecated h1:jpBZDwmgPhXsKZC6WhL20P4b/wmnpsEAGHaNy0n/rJM= golang.org/x/tools/go/expect v0.1.1-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY= golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated h1:1h2MnaIAIXISqTFKdENegdpAgUXz6NrPEsbIeWaBRvM= diff --git a/hack/utils/oss_compliance/osa_provided.md b/hack/utils/oss_compliance/osa_provided.md index 617eeecf8c7..c5a1d3bcb32 100644 --- a/hack/utils/oss_compliance/osa_provided.md +++ b/hack/utils/oss_compliance/osa_provided.md @@ -31,7 +31,7 @@ Name|Version|License [prometheus/client_model](https://github.com/prometheus/client_model)|v0.6.2|Apache License 2.0 [prometheus/common](https://github.com/prometheus/common)|v0.67.1|Apache License 2.0 [sergi/go-diff](https://github.com/sergi/go-diff)|v1.3.2-0.20230802210424-5b0b94c5c0d3|MIT License -[spf13/afero](https://github.com/spf13/afero)|v1.14.0|Apache License 2.0 +[spf13/afero](https://github.com/spf13/afero)|v1.15.0|Apache License 2.0 [spf13/cobra](https://github.com/spf13/cobra)|v1.10.1|Apache License 2.0 [stretchr/testify](https://github.com/stretchr/testify)|v1.11.1|MIT License [go.opencensus.io](https://go.opencensus.io)|v0.24.0|Apache License 2.0 diff --git a/install/helm/kgateway-crds/templates/gateway.kgateway.dev_agentgatewaybackends.yaml b/install/helm/kgateway-crds/templates/gateway.kgateway.dev_agentgatewaybackends.yaml index f1c473d0982..61b49fb891b 100644 --- a/install/helm/kgateway-crds/templates/gateway.kgateway.dev_agentgatewaybackends.yaml +++ b/install/helm/kgateway-crds/templates/gateway.kgateway.dev_agentgatewaybackends.yaml @@ -30,6 +30,9 @@ spec: jsonPath: .metadata.creationTimestamp name: Age type: date + - jsonPath: .metadata.creationTimestamp + name: Age + type: date name: v1alpha1 schema: openAPIV3Schema: diff --git a/install/helm/kgateway-crds/templates/gateway.kgateway.dev_agentgatewayparameters.yaml b/install/helm/kgateway-crds/templates/gateway.kgateway.dev_agentgatewayparameters.yaml new file mode 100644 index 00000000000..64859328ae7 --- /dev/null +++ b/install/helm/kgateway-crds/templates/gateway.kgateway.dev_agentgatewayparameters.yaml @@ -0,0 +1,510 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.19.1-0.20251023132335-bf7d6b742e6a + labels: + app: kgateway + app.kubernetes.io/name: kgateway + gateway.networking.k8s.io/policy: Direct + name: agentgatewayparameters.gateway.kgateway.dev +spec: + group: gateway.kgateway.dev + names: + categories: + - kgateway + kind: AgentgatewayParameters + listKind: AgentgatewayParametersList + plural: agentgatewayparameters + shortNames: + - agpar + singular: agentgatewayparameters + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: Agentgateway policy acceptance status + jsonPath: .status.ancestors[*].conditions[?(@.type=='Accepted')].status + name: Accepted + type: string + - description: Agentgateway policy attachment status + jsonPath: .status.ancestors[*].conditions[?(@.type=='Attached')].status + name: Attached + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: spec defines the desired state of AgentgatewayParameters. + properties: + annotations: + additionalProperties: + type: string + description: Common set of annotations to apply to all generated resources. + type: object + deployment: + description: deployment allows specifying overrides for the generated + Deployment resource. + properties: + metadata: + description: metadata defines a subset of object metadata to be + customized. + properties: + annotations: + additionalProperties: + type: string + description: |- + Annotations is an unstructured key value map stored with a resource that may be + set by external tools to store and retrieve arbitrary metadata. They are not + queryable and should be preserved when modifying objects. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations + type: object + labels: + additionalProperties: + type: string + description: |- + Map of string keys and values that can be used to organize and categorize + (scope and select) objects. May match selectors of replication controllers + and services. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels + type: object + type: object + spec: + description: |- + spec defines an overlay to apply onto the object, using [Strategic Merge Patch](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-api-machinery/strategic-merge-patch.md). + The patch is applied after all other fields are applied. + x-kubernetes-preserve-unknown-fields: true + type: object + env: + description: The container environment variables. + items: + description: EnvVar represents an environment variable present in + a Container. + properties: + name: + description: |- + Name of the environment variable. + May consist of any printable ASCII characters except '='. + type: string + value: + description: |- + Variable references $(VAR_NAME) are expanded + using the previously defined environment variables in the container and + any service environment variables. If a variable cannot be resolved, + the reference in the input string will be unchanged. Double $$ are reduced + to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. + "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)". + Escaped references will never be expanded, regardless of whether the variable + exists or not. + Defaults to "". + type: string + valueFrom: + description: Source for the environment variable's value. Cannot + be used if value is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + default: "" + description: |- + Name of the referent. + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + type: string + optional: + description: Specify whether the ConfigMap or its key + must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + description: |- + Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['']`, `metadata.annotations['']`, + spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs. + properties: + apiVersion: + description: Version of the schema the FieldPath is + written in terms of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to select in the specified + API version. + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + fileKeyRef: + description: |- + FileKeyRef selects a key of the env file. + Requires the EnvFiles feature gate to be enabled. + properties: + key: + description: |- + The key within the env file. An invalid key will prevent the pod from starting. + The keys defined within a source may consist of any printable ASCII characters except '='. + During Alpha stage of the EnvFiles feature gate, the key size is limited to 128 characters. + type: string + optional: + default: false + description: |- + Specify whether the file or its key must be defined. If the file or key + does not exist, then the env var is not published. + If optional is set to true and the specified key does not exist, + the environment variable will not be set in the Pod's containers. + + If optional is set to false and the specified key does not exist, + an error will be returned during Pod creation. + type: boolean + path: + description: |- + The path within the volume from which to select the file. + Must be relative and may not contain the '..' path or start with '..'. + type: string + volumeName: + description: The name of the volume mount containing + the env file. + type: string + required: + - key + - path + - volumeName + type: object + x-kubernetes-map-type: atomic + resourceFieldRef: + description: |- + Selects a resource of the container: only resources limits and requests + (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported. + properties: + containerName: + description: 'Container name: required for volumes, + optional for env vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output format of the exposed + resources, defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource to select' + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + secretKeyRef: + description: Selects a key of a secret in the pod's namespace + properties: + key: + description: The key of the secret to select from. Must + be a valid secret key. + type: string + name: + default: "" + description: |- + Name of the referent. + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + type: string + optional: + description: Specify whether the Secret or its key must + be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + horizontalPodAutoscaler: + description: |- + horizontalPodAutoscaler allows specifying overrides for the generated HorizontalPodAutoscaler resource. + Note: a HorizontalPodAutoscaler is not deployed by default. Setting this field enables a default one. + If you just want the default, without customizations, use `horizontalPodAutoscaler: {}`. + properties: + metadata: + description: metadata defines a subset of object metadata to be + customized. + properties: + annotations: + additionalProperties: + type: string + description: |- + Annotations is an unstructured key value map stored with a resource that may be + set by external tools to store and retrieve arbitrary metadata. They are not + queryable and should be preserved when modifying objects. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations + type: object + labels: + additionalProperties: + type: string + description: |- + Map of string keys and values that can be used to organize and categorize + (scope and select) objects. May match selectors of replication controllers + and services. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels + type: object + type: object + spec: + description: |- + spec defines an overlay to apply onto the object, using [Strategic Merge Patch](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-api-machinery/strategic-merge-patch.md). + The patch is applied after all other fields are applied. + x-kubernetes-preserve-unknown-fields: true + type: object + image: + description: "The agentgateway container image. See\nhttps://kubernetes.io/docs/concepts/containers/images\nfor + details.\n\nDefault values, which may be overridden individually:\n\n\tregistry: + ghcr.io/agentgateway\n\trepository: agentgateway\n\ttag: \n\tpullPolicy: IfNotPresent" + properties: + digest: + description: The hash digest of the image, e.g. `sha256:12345...` + type: string + pullPolicy: + description: |- + The image pull policy for the container. See + https://kubernetes.io/docs/concepts/containers/images/#image-pull-policy + for details. + type: string + registry: + description: The image registry. + type: string + repository: + description: The image repository (name). + type: string + tag: + description: The image tag. + type: string + type: object + labels: + additionalProperties: + type: string + description: Common set of labels to apply to all generated resources. + type: object + logging: + description: logging configuration for Agentgateway. By default, all + logs are set to "info" level. + properties: + format: + enum: + - Json + - Plain + type: string + level: + description: ListOrString is a type that can hold either a single + string or a list of strings + items: + type: string + type: string + type: object + podDisruptionBudget: + description: |- + podDisruptionBudget allows specifying overrides for the generated PodDisruptionBudget resource. + Note: a PodDisruptionBudget is not deployed by default. Setting this field enables a default one. + If you just want the default, without customizations, use `podDisruptionBudget: {}`. + properties: + metadata: + description: metadata defines a subset of object metadata to be + customized. + properties: + annotations: + additionalProperties: + type: string + description: |- + Annotations is an unstructured key value map stored with a resource that may be + set by external tools to store and retrieve arbitrary metadata. They are not + queryable and should be preserved when modifying objects. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations + type: object + labels: + additionalProperties: + type: string + description: |- + Map of string keys and values that can be used to organize and categorize + (scope and select) objects. May match selectors of replication controllers + and services. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels + type: object + type: object + spec: + description: |- + spec defines an overlay to apply onto the object, using [Strategic Merge Patch](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-api-machinery/strategic-merge-patch.md). + The patch is applied after all other fields are applied. + x-kubernetes-preserve-unknown-fields: true + type: object + resources: + description: |- + The compute resources required by this container. See + https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ + for details. + properties: + claims: + description: |- + Claims lists the names of resources, defined in spec.resourceClaims, + that are used by this container. + + This field depends on the + DynamicResourceAllocation feature gate. + + This field is immutable. It can only be set for containers. + items: + description: ResourceClaim references one entry in PodSpec.ResourceClaims. + properties: + name: + description: |- + Name must match the name of one entry in pod.spec.resourceClaims of + the Pod where this field is used. It makes that resource available + inside a container. + type: string + request: + description: |- + Request is the name chosen for a request in the referenced claim. + If empty, everything from the claim is made available, otherwise + only the result of this request. + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: |- + Limits describes the maximum amount of compute resources allowed. + More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: |- + Requests describes the minimum amount of compute resources required. + If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + otherwise to an implementation-defined value. Requests cannot exceed Limits. + More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ + type: object + type: object + service: + description: service allows specifying overrides for the generated + Service resource. + properties: + metadata: + description: metadata defines a subset of object metadata to be + customized. + properties: + annotations: + additionalProperties: + type: string + description: |- + Annotations is an unstructured key value map stored with a resource that may be + set by external tools to store and retrieve arbitrary metadata. They are not + queryable and should be preserved when modifying objects. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations + type: object + labels: + additionalProperties: + type: string + description: |- + Map of string keys and values that can be used to organize and categorize + (scope and select) objects. May match selectors of replication controllers + and services. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels + type: object + type: object + spec: + description: |- + spec defines an overlay to apply onto the object, using [Strategic Merge Patch](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-api-machinery/strategic-merge-patch.md). + The patch is applied after all other fields are applied. + x-kubernetes-preserve-unknown-fields: true + type: object + serviceAccount: + description: serviceAccount allows specifying overrides for the generated + ServiceAccount resource. + properties: + metadata: + description: metadata defines a subset of object metadata to be + customized. + properties: + annotations: + additionalProperties: + type: string + description: |- + Annotations is an unstructured key value map stored with a resource that may be + set by external tools to store and retrieve arbitrary metadata. They are not + queryable and should be preserved when modifying objects. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations + type: object + labels: + additionalProperties: + type: string + description: |- + Map of string keys and values that can be used to organize and categorize + (scope and select) objects. May match selectors of replication controllers + and services. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels + type: object + type: object + spec: + description: |- + spec defines an overlay to apply onto the object, using [Strategic Merge Patch](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-api-machinery/strategic-merge-patch.md). + The patch is applied after all other fields are applied. + x-kubernetes-preserve-unknown-fields: true + type: object + type: object + status: + description: status defines the current state of AgentgatewayParameters. + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} diff --git a/install/helm/kgateway-crds/templates/gateway.kgateway.dev_agentgatewaypolicies.yaml b/install/helm/kgateway-crds/templates/gateway.kgateway.dev_agentgatewaypolicies.yaml index db60c306eb7..cbcb935fbab 100644 --- a/install/helm/kgateway-crds/templates/gateway.kgateway.dev_agentgatewaypolicies.yaml +++ b/install/helm/kgateway-crds/templates/gateway.kgateway.dev_agentgatewaypolicies.yaml @@ -31,6 +31,9 @@ spec: jsonPath: .status.ancestors[*].conditions[?(@.type=='Attached')].status name: Attached type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date name: v1alpha1 schema: openAPIV3Schema: diff --git a/install/helm/kgateway/templates/role.yaml b/install/helm/kgateway/templates/role.yaml index 468fb63814f..275927e43a6 100644 --- a/install/helm/kgateway/templates/role.yaml +++ b/install/helm/kgateway/templates/role.yaml @@ -93,6 +93,7 @@ rules: - gateway.kgateway.dev resources: - agentgatewaybackends + - agentgatewayparameters - agentgatewaypolicies - backendconfigpolicies - backends @@ -110,6 +111,7 @@ rules: - gateway.kgateway.dev resources: - agentgatewaybackends/status + - agentgatewayparameters/status - agentgatewaypolicies/status - backendconfigpolicies/status - backends/status diff --git a/pkg/client/clientset/versioned/typed/api/v1alpha1/agentgatewayparameters.go b/pkg/client/clientset/versioned/typed/api/v1alpha1/agentgatewayparameters.go new file mode 100644 index 00000000000..dc9873cf884 --- /dev/null +++ b/pkg/client/clientset/versioned/typed/api/v1alpha1/agentgatewayparameters.go @@ -0,0 +1,54 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + context "context" + + apiv1alpha1 "github.com/kgateway-dev/kgateway/v2/api/v1alpha1" + scheme "github.com/kgateway-dev/kgateway/v2/pkg/client/clientset/versioned/scheme" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + gentype "k8s.io/client-go/gentype" +) + +// AgentgatewayParametersesGetter has a method to return a AgentgatewayParametersInterface. +// A group's client should implement this interface. +type AgentgatewayParametersesGetter interface { + AgentgatewayParameterses(namespace string) AgentgatewayParametersInterface +} + +// AgentgatewayParametersInterface has methods to work with AgentgatewayParameters resources. +type AgentgatewayParametersInterface interface { + Create(ctx context.Context, agentgatewayParameters *apiv1alpha1.AgentgatewayParameters, opts v1.CreateOptions) (*apiv1alpha1.AgentgatewayParameters, error) + Update(ctx context.Context, agentgatewayParameters *apiv1alpha1.AgentgatewayParameters, opts v1.UpdateOptions) (*apiv1alpha1.AgentgatewayParameters, error) + // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). + UpdateStatus(ctx context.Context, agentgatewayParameters *apiv1alpha1.AgentgatewayParameters, opts v1.UpdateOptions) (*apiv1alpha1.AgentgatewayParameters, 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) (*apiv1alpha1.AgentgatewayParameters, error) + List(ctx context.Context, opts v1.ListOptions) (*apiv1alpha1.AgentgatewayParametersList, 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 *apiv1alpha1.AgentgatewayParameters, err error) + AgentgatewayParametersExpansion +} + +// agentgatewayParameterses implements AgentgatewayParametersInterface +type agentgatewayParameterses struct { + *gentype.ClientWithList[*apiv1alpha1.AgentgatewayParameters, *apiv1alpha1.AgentgatewayParametersList] +} + +// newAgentgatewayParameterses returns a AgentgatewayParameterses +func newAgentgatewayParameterses(c *GatewayV1alpha1Client, namespace string) *agentgatewayParameterses { + return &agentgatewayParameterses{ + gentype.NewClientWithList[*apiv1alpha1.AgentgatewayParameters, *apiv1alpha1.AgentgatewayParametersList]( + "agentgatewayparameterses", + c.RESTClient(), + scheme.ParameterCodec, + namespace, + func() *apiv1alpha1.AgentgatewayParameters { return &apiv1alpha1.AgentgatewayParameters{} }, + func() *apiv1alpha1.AgentgatewayParametersList { return &apiv1alpha1.AgentgatewayParametersList{} }, + ), + } +} diff --git a/pkg/client/clientset/versioned/typed/api/v1alpha1/api_client.go b/pkg/client/clientset/versioned/typed/api/v1alpha1/api_client.go index 29b0aea32df..ba9e2fbed2f 100644 --- a/pkg/client/clientset/versioned/typed/api/v1alpha1/api_client.go +++ b/pkg/client/clientset/versioned/typed/api/v1alpha1/api_client.go @@ -13,6 +13,7 @@ import ( type GatewayV1alpha1Interface interface { RESTClient() rest.Interface AgentgatewayBackendsGetter + AgentgatewayParametersesGetter AgentgatewayPoliciesGetter BackendsGetter BackendConfigPoliciesGetter @@ -33,6 +34,10 @@ func (c *GatewayV1alpha1Client) AgentgatewayBackends(namespace string) Agentgate return newAgentgatewayBackends(c, namespace) } +func (c *GatewayV1alpha1Client) AgentgatewayParameterses(namespace string) AgentgatewayParametersInterface { + return newAgentgatewayParameterses(c, namespace) +} + func (c *GatewayV1alpha1Client) AgentgatewayPolicies(namespace string) AgentgatewayPolicyInterface { return newAgentgatewayPolicies(c, namespace) } diff --git a/pkg/client/clientset/versioned/typed/api/v1alpha1/fake/fake_agentgatewayparameters.go b/pkg/client/clientset/versioned/typed/api/v1alpha1/fake/fake_agentgatewayparameters.go new file mode 100644 index 00000000000..2fb8045c59e --- /dev/null +++ b/pkg/client/clientset/versioned/typed/api/v1alpha1/fake/fake_agentgatewayparameters.go @@ -0,0 +1,36 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + v1alpha1 "github.com/kgateway-dev/kgateway/v2/api/v1alpha1" + apiv1alpha1 "github.com/kgateway-dev/kgateway/v2/pkg/client/clientset/versioned/typed/api/v1alpha1" + gentype "k8s.io/client-go/gentype" +) + +// fakeAgentgatewayParameterses implements AgentgatewayParametersInterface +type fakeAgentgatewayParameterses struct { + *gentype.FakeClientWithList[*v1alpha1.AgentgatewayParameters, *v1alpha1.AgentgatewayParametersList] + Fake *FakeGatewayV1alpha1 +} + +func newFakeAgentgatewayParameterses(fake *FakeGatewayV1alpha1, namespace string) apiv1alpha1.AgentgatewayParametersInterface { + return &fakeAgentgatewayParameterses{ + gentype.NewFakeClientWithList[*v1alpha1.AgentgatewayParameters, *v1alpha1.AgentgatewayParametersList]( + fake.Fake, + namespace, + v1alpha1.SchemeGroupVersion.WithResource("agentgatewayparameterses"), + v1alpha1.SchemeGroupVersion.WithKind("AgentgatewayParameters"), + func() *v1alpha1.AgentgatewayParameters { return &v1alpha1.AgentgatewayParameters{} }, + func() *v1alpha1.AgentgatewayParametersList { return &v1alpha1.AgentgatewayParametersList{} }, + func(dst, src *v1alpha1.AgentgatewayParametersList) { dst.ListMeta = src.ListMeta }, + func(list *v1alpha1.AgentgatewayParametersList) []*v1alpha1.AgentgatewayParameters { + return gentype.ToPointerSlice(list.Items) + }, + func(list *v1alpha1.AgentgatewayParametersList, items []*v1alpha1.AgentgatewayParameters) { + list.Items = gentype.FromPointerSlice(items) + }, + ), + fake, + } +} diff --git a/pkg/client/clientset/versioned/typed/api/v1alpha1/fake/fake_api_client.go b/pkg/client/clientset/versioned/typed/api/v1alpha1/fake/fake_api_client.go index 3c88725e10c..a6b366c734f 100644 --- a/pkg/client/clientset/versioned/typed/api/v1alpha1/fake/fake_api_client.go +++ b/pkg/client/clientset/versioned/typed/api/v1alpha1/fake/fake_api_client.go @@ -16,6 +16,10 @@ func (c *FakeGatewayV1alpha1) AgentgatewayBackends(namespace string) v1alpha1.Ag return newFakeAgentgatewayBackends(c, namespace) } +func (c *FakeGatewayV1alpha1) AgentgatewayParameterses(namespace string) v1alpha1.AgentgatewayParametersInterface { + return newFakeAgentgatewayParameterses(c, namespace) +} + func (c *FakeGatewayV1alpha1) AgentgatewayPolicies(namespace string) v1alpha1.AgentgatewayPolicyInterface { return newFakeAgentgatewayPolicies(c, namespace) } diff --git a/pkg/client/clientset/versioned/typed/api/v1alpha1/generated_expansion.go b/pkg/client/clientset/versioned/typed/api/v1alpha1/generated_expansion.go index 7d5d3882f0c..92b3fc438b2 100644 --- a/pkg/client/clientset/versioned/typed/api/v1alpha1/generated_expansion.go +++ b/pkg/client/clientset/versioned/typed/api/v1alpha1/generated_expansion.go @@ -4,6 +4,8 @@ package v1alpha1 type AgentgatewayBackendExpansion interface{} +type AgentgatewayParametersExpansion interface{} + type AgentgatewayPolicyExpansion interface{} type BackendExpansion interface{}