mirror of
https://github.com/kubernetes/kubernetes.git
synced 2026-02-03 20:40:26 -05:00
Merge pull request #131068 from soltysh/sample_controller_scheme
Switch sample-controller to use NewClientset supporting applyconfiguration rather than deprecated NewSimpleClientset
This commit is contained in:
commit
a7b940cde2
18 changed files with 3584 additions and 28 deletions
16
api/api-rules/sample_controller_violation_exceptions.list
Normal file
16
api/api-rules/sample_controller_violation_exceptions.list
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
API rule violation: names_match,k8s.io/apimachinery/pkg/api/resource,Quantity,Format
|
||||||
|
API rule violation: names_match,k8s.io/apimachinery/pkg/api/resource,Quantity,d
|
||||||
|
API rule violation: names_match,k8s.io/apimachinery/pkg/api/resource,Quantity,i
|
||||||
|
API rule violation: names_match,k8s.io/apimachinery/pkg/api/resource,Quantity,s
|
||||||
|
API rule violation: names_match,k8s.io/apimachinery/pkg/api/resource,int64Amount,scale
|
||||||
|
API rule violation: names_match,k8s.io/apimachinery/pkg/api/resource,int64Amount,value
|
||||||
|
API rule violation: names_match,k8s.io/apimachinery/pkg/apis/meta/v1,APIResourceList,APIResources
|
||||||
|
API rule violation: names_match,k8s.io/apimachinery/pkg/apis/meta/v1,Duration,Duration
|
||||||
|
API rule violation: names_match,k8s.io/apimachinery/pkg/apis/meta/v1,InternalEvent,Object
|
||||||
|
API rule violation: names_match,k8s.io/apimachinery/pkg/apis/meta/v1,InternalEvent,Type
|
||||||
|
API rule violation: names_match,k8s.io/apimachinery/pkg/apis/meta/v1,MicroTime,Time
|
||||||
|
API rule violation: names_match,k8s.io/apimachinery/pkg/apis/meta/v1,StatusCause,Type
|
||||||
|
API rule violation: names_match,k8s.io/apimachinery/pkg/apis/meta/v1,Time,Time
|
||||||
|
API rule violation: names_match,k8s.io/apimachinery/pkg/runtime,Unknown,ContentEncoding
|
||||||
|
API rule violation: names_match,k8s.io/apimachinery/pkg/runtime,Unknown,ContentType
|
||||||
|
API rule violation: streaming_list_type_json_tags,k8s.io/sample-controller/pkg/apis/samplecontroller/v1alpha1,FooList,ListMeta
|
||||||
|
|
@ -113,7 +113,7 @@ fi
|
||||||
# Some of the later codegens depend on the results of this, so it needs to come
|
# Some of the later codegens depend on the results of this, so it needs to come
|
||||||
# first in the case of regenerating everything.
|
# first in the case of regenerating everything.
|
||||||
function codegen::protobuf() {
|
function codegen::protobuf() {
|
||||||
if [[ -n "${LINT:-}" ]]; then
|
if [[ -n "${LINT:-}" ]]; then
|
||||||
if [[ "${KUBE_VERBOSE}" -gt 2 ]]; then
|
if [[ "${KUBE_VERBOSE}" -gt 2 ]]; then
|
||||||
kube::log::status "No linter for protobuf codegen"
|
kube::log::status "No linter for protobuf codegen"
|
||||||
fi
|
fi
|
||||||
|
|
@ -657,7 +657,8 @@ function codegen::openapi() {
|
||||||
kube::util::read-array tag_files < <(
|
kube::util::read-array tag_files < <(
|
||||||
k8s_tag_files_except \
|
k8s_tag_files_except \
|
||||||
staging/src/k8s.io/code-generator \
|
staging/src/k8s.io/code-generator \
|
||||||
staging/src/k8s.io/sample-apiserver
|
staging/src/k8s.io/sample-apiserver \
|
||||||
|
staging/src/k8s.io/sample-controller
|
||||||
)
|
)
|
||||||
|
|
||||||
local tag_dirs=()
|
local tag_dirs=()
|
||||||
|
|
|
||||||
|
|
@ -85,8 +85,8 @@ func newFoo(name string, replicas *int32) *samplecontroller.Foo {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *fixture) newController(ctx context.Context) (*Controller, informers.SharedInformerFactory, kubeinformers.SharedInformerFactory) {
|
func (f *fixture) newController(ctx context.Context) (*Controller, informers.SharedInformerFactory, kubeinformers.SharedInformerFactory) {
|
||||||
f.client = fake.NewSimpleClientset(f.objects...)
|
f.client = fake.NewClientset(f.objects...)
|
||||||
f.kubeclient = k8sfake.NewSimpleClientset(f.kubeobjects...)
|
f.kubeclient = k8sfake.NewClientset(f.kubeobjects...)
|
||||||
|
|
||||||
i := informers.NewSharedInformerFactory(f.client, noResyncPeriodFunc())
|
i := informers.NewSharedInformerFactory(f.client, noResyncPeriodFunc())
|
||||||
k8sI := kubeinformers.NewSharedInformerFactory(f.kubeclient, noResyncPeriodFunc())
|
k8sI := kubeinformers.NewSharedInformerFactory(f.kubeclient, noResyncPeriodFunc())
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,9 @@ require (
|
||||||
k8s.io/client-go v0.0.0
|
k8s.io/client-go v0.0.0
|
||||||
k8s.io/code-generator v0.0.0
|
k8s.io/code-generator v0.0.0
|
||||||
k8s.io/klog/v2 v2.130.1
|
k8s.io/klog/v2 v2.130.1
|
||||||
|
k8s.io/kube-openapi v0.0.0-20260127142750-a19766b6e2d4
|
||||||
k8s.io/utils v0.0.0-20251219084037-98d557b7f1e7
|
k8s.io/utils v0.0.0-20251219084037-98d557b7f1e7
|
||||||
|
sigs.k8s.io/structured-merge-diff/v6 v6.3.1
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
|
@ -50,10 +52,8 @@ require (
|
||||||
gopkg.in/inf.v0 v0.9.1 // indirect
|
gopkg.in/inf.v0 v0.9.1 // indirect
|
||||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
k8s.io/gengo/v2 v2.0.0-20250922181213-ec3ebc5fd46b // indirect
|
k8s.io/gengo/v2 v2.0.0-20250922181213-ec3ebc5fd46b // indirect
|
||||||
k8s.io/kube-openapi v0.0.0-20260127142750-a19766b6e2d4 // indirect
|
|
||||||
sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 // indirect
|
sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 // indirect
|
||||||
sigs.k8s.io/randfill v1.0.0 // indirect
|
sigs.k8s.io/randfill v1.0.0 // indirect
|
||||||
sigs.k8s.io/structured-merge-diff/v6 v6.3.1 // indirect
|
|
||||||
sigs.k8s.io/yaml v1.6.0 // indirect
|
sigs.k8s.io/yaml v1.6.0 // indirect
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,16 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright YEAR The Kubernetes sample-controller Authors.
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
@ -29,8 +29,26 @@ kube::codegen::gen_helpers \
|
||||||
--boilerplate "${SCRIPT_ROOT}/hack/boilerplate.go.txt" \
|
--boilerplate "${SCRIPT_ROOT}/hack/boilerplate.go.txt" \
|
||||||
"${SCRIPT_ROOT}/pkg/apis"
|
"${SCRIPT_ROOT}/pkg/apis"
|
||||||
|
|
||||||
|
if [[ -n "${API_KNOWN_VIOLATIONS_DIR:-}" ]]; then
|
||||||
|
report_filename="${API_KNOWN_VIOLATIONS_DIR}/sample_controller_violation_exceptions.list"
|
||||||
|
if [[ "${UPDATE_API_KNOWN_VIOLATIONS:-}" == "true" ]]; then
|
||||||
|
update_report="--update-report"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
kube::codegen::gen_openapi \
|
||||||
|
--output-dir "${SCRIPT_ROOT}/pkg/generated/openapi" \
|
||||||
|
--output-pkg "k8s.io/${THIS_PKG}/pkg/generated/openapi" \
|
||||||
|
--report-filename "${report_filename:-"/dev/null"}" \
|
||||||
|
--output-model-name-file "zz_generated.model_name.go" \
|
||||||
|
${update_report:+"${update_report}"} \
|
||||||
|
--boilerplate "${SCRIPT_ROOT}/hack/boilerplate.go.txt" \
|
||||||
|
"${SCRIPT_ROOT}/pkg/apis"
|
||||||
|
|
||||||
kube::codegen::gen_client \
|
kube::codegen::gen_client \
|
||||||
--with-watch \
|
--with-watch \
|
||||||
|
--with-applyconfig \
|
||||||
|
--applyconfig-openapi-schema <(go run k8s.io/sample-controller/pkg/generated/openapi/cmd/models-schema) \
|
||||||
--output-dir "${SCRIPT_ROOT}/pkg/generated" \
|
--output-dir "${SCRIPT_ROOT}/pkg/generated" \
|
||||||
--output-pkg "${THIS_PKG}/pkg/generated" \
|
--output-pkg "${THIS_PKG}/pkg/generated" \
|
||||||
--boilerplate "${SCRIPT_ROOT}/hack/boilerplate.go.txt" \
|
--boilerplate "${SCRIPT_ROOT}/hack/boilerplate.go.txt" \
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,19 @@ trap "cleanup" EXIT SIGINT
|
||||||
|
|
||||||
cleanup
|
cleanup
|
||||||
|
|
||||||
|
# Ensure model-schema generator matches the version from
|
||||||
|
# k8s.io/kubernetes/pkg/generated/openapi/cmd/models-schema/main.go
|
||||||
|
echo "Ensuring models-schema is up-to-date"
|
||||||
|
K8S_MODELS_SCHEMA="${SCRIPT_ROOT}/../../../../pkg/generated/openapi/cmd/models-schema/main.go"
|
||||||
|
SAMPLE_CONTROLLER_MODELS_SCHEMA="${SCRIPT_ROOT}/pkg/generated/openapi/cmd/models-schema/main.go"
|
||||||
|
# these two files will only differ in the imported lines for generated openapi
|
||||||
|
if ! diff -I "k8s.io/kubernetes/pkg/generated/openapi" \
|
||||||
|
-I "k8s.io/sample-controller/pkg/generated/openapi" \
|
||||||
|
"${K8S_MODELS_SCHEMA}" "${SAMPLE_CONTROLLER_MODELS_SCHEMA}"; then
|
||||||
|
echo "${SAMPLE_CONTROLLER_MODELS_SCHEMA} is out of date. Compare changes with ${K8S_MODELS_SCHEMA}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
mkdir -p "${TMP_DIFFROOT}"
|
mkdir -p "${TMP_DIFFROOT}"
|
||||||
cp -a "${DIFFROOT}"/* "${TMP_DIFFROOT}"
|
cp -a "${DIFFROOT}"/* "${TMP_DIFFROOT}"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// +k8s:deepcopy-gen=package
|
// +k8s:deepcopy-gen=package
|
||||||
|
// +k8s:openapi-gen=true
|
||||||
// +groupName=samplecontroller.k8s.io
|
// +groupName=samplecontroller.k8s.io
|
||||||
|
|
||||||
// Package v1alpha1 is the v1alpha1 version of the API.
|
// Package v1alpha1 is the v1alpha1 version of the API.
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,72 @@
|
||||||
|
/*
|
||||||
|
Copyright The Kubernetes Authors.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Code generated by applyconfiguration-gen. DO NOT EDIT.
|
||||||
|
|
||||||
|
package internal
|
||||||
|
|
||||||
|
import (
|
||||||
|
fmt "fmt"
|
||||||
|
sync "sync"
|
||||||
|
|
||||||
|
typed "sigs.k8s.io/structured-merge-diff/v6/typed"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Parser() *typed.Parser {
|
||||||
|
parserOnce.Do(func() {
|
||||||
|
var err error
|
||||||
|
parser, err = typed.NewParser(schemaYAML)
|
||||||
|
if err != nil {
|
||||||
|
panic(fmt.Sprintf("Failed to parse schema: %v", err))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return parser
|
||||||
|
}
|
||||||
|
|
||||||
|
var parserOnce sync.Once
|
||||||
|
var parser *typed.Parser
|
||||||
|
var schemaYAML = typed.YAMLObject(`types:
|
||||||
|
- name: io.k8s.sample-controller.pkg.apis.samplecontroller.v1alpha1.Foo
|
||||||
|
scalar: untyped
|
||||||
|
list:
|
||||||
|
elementType:
|
||||||
|
namedType: __untyped_atomic_
|
||||||
|
elementRelationship: atomic
|
||||||
|
map:
|
||||||
|
elementType:
|
||||||
|
namedType: __untyped_deduced_
|
||||||
|
elementRelationship: separable
|
||||||
|
- name: __untyped_atomic_
|
||||||
|
scalar: untyped
|
||||||
|
list:
|
||||||
|
elementType:
|
||||||
|
namedType: __untyped_atomic_
|
||||||
|
elementRelationship: atomic
|
||||||
|
map:
|
||||||
|
elementType:
|
||||||
|
namedType: __untyped_atomic_
|
||||||
|
elementRelationship: atomic
|
||||||
|
- name: __untyped_deduced_
|
||||||
|
scalar: untyped
|
||||||
|
list:
|
||||||
|
elementType:
|
||||||
|
namedType: __untyped_atomic_
|
||||||
|
elementRelationship: atomic
|
||||||
|
map:
|
||||||
|
elementType:
|
||||||
|
namedType: __untyped_deduced_
|
||||||
|
elementRelationship: separable
|
||||||
|
`)
|
||||||
|
|
@ -0,0 +1,289 @@
|
||||||
|
/*
|
||||||
|
Copyright The Kubernetes Authors.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Code generated by applyconfiguration-gen. DO NOT EDIT.
|
||||||
|
|
||||||
|
package v1alpha1
|
||||||
|
|
||||||
|
import (
|
||||||
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
types "k8s.io/apimachinery/pkg/types"
|
||||||
|
managedfields "k8s.io/apimachinery/pkg/util/managedfields"
|
||||||
|
v1 "k8s.io/client-go/applyconfigurations/meta/v1"
|
||||||
|
samplecontrollerv1alpha1 "k8s.io/sample-controller/pkg/apis/samplecontroller/v1alpha1"
|
||||||
|
internal "k8s.io/sample-controller/pkg/generated/applyconfiguration/internal"
|
||||||
|
)
|
||||||
|
|
||||||
|
// FooApplyConfiguration represents a declarative configuration of the Foo type for use
|
||||||
|
// with apply.
|
||||||
|
//
|
||||||
|
// Foo is a specification for a Foo resource
|
||||||
|
type FooApplyConfiguration struct {
|
||||||
|
v1.TypeMetaApplyConfiguration `json:",inline"`
|
||||||
|
*v1.ObjectMetaApplyConfiguration `json:"metadata,omitempty"`
|
||||||
|
Spec *FooSpecApplyConfiguration `json:"spec,omitempty"`
|
||||||
|
Status *FooStatusApplyConfiguration `json:"status,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Foo constructs a declarative configuration of the Foo type for use with
|
||||||
|
// apply.
|
||||||
|
func Foo(name, namespace string) *FooApplyConfiguration {
|
||||||
|
b := &FooApplyConfiguration{}
|
||||||
|
b.WithName(name)
|
||||||
|
b.WithNamespace(namespace)
|
||||||
|
b.WithKind("Foo")
|
||||||
|
b.WithAPIVersion("samplecontroller.k8s.io/v1alpha1")
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExtractFooFrom extracts the applied configuration owned by fieldManager from
|
||||||
|
// foo for the specified subresource. Pass an empty string for subresource to extract
|
||||||
|
// the main resource. Common subresources include "status", "scale", etc.
|
||||||
|
// foo must be a unmodified Foo API object that was retrieved from the Kubernetes API.
|
||||||
|
// ExtractFooFrom provides a way to perform a extract/modify-in-place/apply workflow.
|
||||||
|
// Note that an extracted apply configuration will contain fewer fields than what the fieldManager previously
|
||||||
|
// applied if another fieldManager has updated or force applied any of the previously applied fields.
|
||||||
|
func ExtractFooFrom(foo *samplecontrollerv1alpha1.Foo, fieldManager string, subresource string) (*FooApplyConfiguration, error) {
|
||||||
|
b := &FooApplyConfiguration{}
|
||||||
|
err := managedfields.ExtractInto(foo, internal.Parser().Type("io.k8s.sample-controller.pkg.apis.samplecontroller.v1alpha1.Foo"), fieldManager, b, subresource)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
b.WithName(foo.Name)
|
||||||
|
b.WithNamespace(foo.Namespace)
|
||||||
|
|
||||||
|
b.WithKind("Foo")
|
||||||
|
b.WithAPIVersion("samplecontroller.k8s.io/v1alpha1")
|
||||||
|
return b, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExtractFoo extracts the applied configuration owned by fieldManager from
|
||||||
|
// foo. If no managedFields are found in foo for fieldManager, a
|
||||||
|
// FooApplyConfiguration is returned with only the Name, Namespace (if applicable),
|
||||||
|
// APIVersion and Kind populated. It is possible that no managed fields were found for because other
|
||||||
|
// field managers have taken ownership of all the fields previously owned by fieldManager, or because
|
||||||
|
// the fieldManager never owned fields any fields.
|
||||||
|
// foo must be a unmodified Foo API object that was retrieved from the Kubernetes API.
|
||||||
|
// ExtractFoo provides a way to perform a extract/modify-in-place/apply workflow.
|
||||||
|
// Note that an extracted apply configuration will contain fewer fields than what the fieldManager previously
|
||||||
|
// applied if another fieldManager has updated or force applied any of the previously applied fields.
|
||||||
|
func ExtractFoo(foo *samplecontrollerv1alpha1.Foo, fieldManager string) (*FooApplyConfiguration, error) {
|
||||||
|
return ExtractFooFrom(foo, fieldManager, "")
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExtractFooStatus extracts the applied configuration owned by fieldManager from
|
||||||
|
// foo for the status subresource.
|
||||||
|
func ExtractFooStatus(foo *samplecontrollerv1alpha1.Foo, fieldManager string) (*FooApplyConfiguration, error) {
|
||||||
|
return ExtractFooFrom(foo, fieldManager, "status")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b FooApplyConfiguration) IsApplyConfiguration() {}
|
||||||
|
|
||||||
|
// WithKind sets the Kind field in the declarative configuration to the given value
|
||||||
|
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
||||||
|
// If called multiple times, the Kind field is set to the value of the last call.
|
||||||
|
func (b *FooApplyConfiguration) WithKind(value string) *FooApplyConfiguration {
|
||||||
|
b.TypeMetaApplyConfiguration.Kind = &value
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithAPIVersion sets the APIVersion field in the declarative configuration to the given value
|
||||||
|
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
||||||
|
// If called multiple times, the APIVersion field is set to the value of the last call.
|
||||||
|
func (b *FooApplyConfiguration) WithAPIVersion(value string) *FooApplyConfiguration {
|
||||||
|
b.TypeMetaApplyConfiguration.APIVersion = &value
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithName sets the Name field in the declarative configuration to the given value
|
||||||
|
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
||||||
|
// If called multiple times, the Name field is set to the value of the last call.
|
||||||
|
func (b *FooApplyConfiguration) WithName(value string) *FooApplyConfiguration {
|
||||||
|
b.ensureObjectMetaApplyConfigurationExists()
|
||||||
|
b.ObjectMetaApplyConfiguration.Name = &value
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithGenerateName sets the GenerateName field in the declarative configuration to the given value
|
||||||
|
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
||||||
|
// If called multiple times, the GenerateName field is set to the value of the last call.
|
||||||
|
func (b *FooApplyConfiguration) WithGenerateName(value string) *FooApplyConfiguration {
|
||||||
|
b.ensureObjectMetaApplyConfigurationExists()
|
||||||
|
b.ObjectMetaApplyConfiguration.GenerateName = &value
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithNamespace sets the Namespace field in the declarative configuration to the given value
|
||||||
|
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
||||||
|
// If called multiple times, the Namespace field is set to the value of the last call.
|
||||||
|
func (b *FooApplyConfiguration) WithNamespace(value string) *FooApplyConfiguration {
|
||||||
|
b.ensureObjectMetaApplyConfigurationExists()
|
||||||
|
b.ObjectMetaApplyConfiguration.Namespace = &value
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithUID sets the UID field in the declarative configuration to the given value
|
||||||
|
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
||||||
|
// If called multiple times, the UID field is set to the value of the last call.
|
||||||
|
func (b *FooApplyConfiguration) WithUID(value types.UID) *FooApplyConfiguration {
|
||||||
|
b.ensureObjectMetaApplyConfigurationExists()
|
||||||
|
b.ObjectMetaApplyConfiguration.UID = &value
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithResourceVersion sets the ResourceVersion field in the declarative configuration to the given value
|
||||||
|
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
||||||
|
// If called multiple times, the ResourceVersion field is set to the value of the last call.
|
||||||
|
func (b *FooApplyConfiguration) WithResourceVersion(value string) *FooApplyConfiguration {
|
||||||
|
b.ensureObjectMetaApplyConfigurationExists()
|
||||||
|
b.ObjectMetaApplyConfiguration.ResourceVersion = &value
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithGeneration sets the Generation field in the declarative configuration to the given value
|
||||||
|
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
||||||
|
// If called multiple times, the Generation field is set to the value of the last call.
|
||||||
|
func (b *FooApplyConfiguration) WithGeneration(value int64) *FooApplyConfiguration {
|
||||||
|
b.ensureObjectMetaApplyConfigurationExists()
|
||||||
|
b.ObjectMetaApplyConfiguration.Generation = &value
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithCreationTimestamp sets the CreationTimestamp field in the declarative configuration to the given value
|
||||||
|
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
||||||
|
// If called multiple times, the CreationTimestamp field is set to the value of the last call.
|
||||||
|
func (b *FooApplyConfiguration) WithCreationTimestamp(value metav1.Time) *FooApplyConfiguration {
|
||||||
|
b.ensureObjectMetaApplyConfigurationExists()
|
||||||
|
b.ObjectMetaApplyConfiguration.CreationTimestamp = &value
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithDeletionTimestamp sets the DeletionTimestamp field in the declarative configuration to the given value
|
||||||
|
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
||||||
|
// If called multiple times, the DeletionTimestamp field is set to the value of the last call.
|
||||||
|
func (b *FooApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *FooApplyConfiguration {
|
||||||
|
b.ensureObjectMetaApplyConfigurationExists()
|
||||||
|
b.ObjectMetaApplyConfiguration.DeletionTimestamp = &value
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithDeletionGracePeriodSeconds sets the DeletionGracePeriodSeconds field in the declarative configuration to the given value
|
||||||
|
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
||||||
|
// If called multiple times, the DeletionGracePeriodSeconds field is set to the value of the last call.
|
||||||
|
func (b *FooApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *FooApplyConfiguration {
|
||||||
|
b.ensureObjectMetaApplyConfigurationExists()
|
||||||
|
b.ObjectMetaApplyConfiguration.DeletionGracePeriodSeconds = &value
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithLabels puts the entries into the Labels field in the declarative configuration
|
||||||
|
// and returns the receiver, so that objects can be build by chaining "With" function invocations.
|
||||||
|
// If called multiple times, the entries provided by each call will be put on the Labels field,
|
||||||
|
// overwriting an existing map entries in Labels field with the same key.
|
||||||
|
func (b *FooApplyConfiguration) WithLabels(entries map[string]string) *FooApplyConfiguration {
|
||||||
|
b.ensureObjectMetaApplyConfigurationExists()
|
||||||
|
if b.ObjectMetaApplyConfiguration.Labels == nil && len(entries) > 0 {
|
||||||
|
b.ObjectMetaApplyConfiguration.Labels = make(map[string]string, len(entries))
|
||||||
|
}
|
||||||
|
for k, v := range entries {
|
||||||
|
b.ObjectMetaApplyConfiguration.Labels[k] = v
|
||||||
|
}
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithAnnotations puts the entries into the Annotations field in the declarative configuration
|
||||||
|
// and returns the receiver, so that objects can be build by chaining "With" function invocations.
|
||||||
|
// If called multiple times, the entries provided by each call will be put on the Annotations field,
|
||||||
|
// overwriting an existing map entries in Annotations field with the same key.
|
||||||
|
func (b *FooApplyConfiguration) WithAnnotations(entries map[string]string) *FooApplyConfiguration {
|
||||||
|
b.ensureObjectMetaApplyConfigurationExists()
|
||||||
|
if b.ObjectMetaApplyConfiguration.Annotations == nil && len(entries) > 0 {
|
||||||
|
b.ObjectMetaApplyConfiguration.Annotations = make(map[string]string, len(entries))
|
||||||
|
}
|
||||||
|
for k, v := range entries {
|
||||||
|
b.ObjectMetaApplyConfiguration.Annotations[k] = v
|
||||||
|
}
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithOwnerReferences adds the given value to the OwnerReferences field in the declarative configuration
|
||||||
|
// and returns the receiver, so that objects can be build by chaining "With" function invocations.
|
||||||
|
// If called multiple times, values provided by each call will be appended to the OwnerReferences field.
|
||||||
|
func (b *FooApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerReferenceApplyConfiguration) *FooApplyConfiguration {
|
||||||
|
b.ensureObjectMetaApplyConfigurationExists()
|
||||||
|
for i := range values {
|
||||||
|
if values[i] == nil {
|
||||||
|
panic("nil value passed to WithOwnerReferences")
|
||||||
|
}
|
||||||
|
b.ObjectMetaApplyConfiguration.OwnerReferences = append(b.ObjectMetaApplyConfiguration.OwnerReferences, *values[i])
|
||||||
|
}
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithFinalizers adds the given value to the Finalizers field in the declarative configuration
|
||||||
|
// and returns the receiver, so that objects can be build by chaining "With" function invocations.
|
||||||
|
// If called multiple times, values provided by each call will be appended to the Finalizers field.
|
||||||
|
func (b *FooApplyConfiguration) WithFinalizers(values ...string) *FooApplyConfiguration {
|
||||||
|
b.ensureObjectMetaApplyConfigurationExists()
|
||||||
|
for i := range values {
|
||||||
|
b.ObjectMetaApplyConfiguration.Finalizers = append(b.ObjectMetaApplyConfiguration.Finalizers, values[i])
|
||||||
|
}
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *FooApplyConfiguration) ensureObjectMetaApplyConfigurationExists() {
|
||||||
|
if b.ObjectMetaApplyConfiguration == nil {
|
||||||
|
b.ObjectMetaApplyConfiguration = &v1.ObjectMetaApplyConfiguration{}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithSpec sets the Spec field in the declarative configuration to the given value
|
||||||
|
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
||||||
|
// If called multiple times, the Spec field is set to the value of the last call.
|
||||||
|
func (b *FooApplyConfiguration) WithSpec(value *FooSpecApplyConfiguration) *FooApplyConfiguration {
|
||||||
|
b.Spec = value
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithStatus sets the Status field in the declarative configuration to the given value
|
||||||
|
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
||||||
|
// If called multiple times, the Status field is set to the value of the last call.
|
||||||
|
func (b *FooApplyConfiguration) WithStatus(value *FooStatusApplyConfiguration) *FooApplyConfiguration {
|
||||||
|
b.Status = value
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetKind retrieves the value of the Kind field in the declarative configuration.
|
||||||
|
func (b *FooApplyConfiguration) GetKind() *string {
|
||||||
|
return b.TypeMetaApplyConfiguration.Kind
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetAPIVersion retrieves the value of the APIVersion field in the declarative configuration.
|
||||||
|
func (b *FooApplyConfiguration) GetAPIVersion() *string {
|
||||||
|
return b.TypeMetaApplyConfiguration.APIVersion
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetName retrieves the value of the Name field in the declarative configuration.
|
||||||
|
func (b *FooApplyConfiguration) GetName() *string {
|
||||||
|
b.ensureObjectMetaApplyConfigurationExists()
|
||||||
|
return b.ObjectMetaApplyConfiguration.Name
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetNamespace retrieves the value of the Namespace field in the declarative configuration.
|
||||||
|
func (b *FooApplyConfiguration) GetNamespace() *string {
|
||||||
|
b.ensureObjectMetaApplyConfigurationExists()
|
||||||
|
return b.ObjectMetaApplyConfiguration.Namespace
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,50 @@
|
||||||
|
/*
|
||||||
|
Copyright The Kubernetes Authors.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Code generated by applyconfiguration-gen. DO NOT EDIT.
|
||||||
|
|
||||||
|
package v1alpha1
|
||||||
|
|
||||||
|
// FooSpecApplyConfiguration represents a declarative configuration of the FooSpec type for use
|
||||||
|
// with apply.
|
||||||
|
//
|
||||||
|
// FooSpec is the spec for a Foo resource
|
||||||
|
type FooSpecApplyConfiguration struct {
|
||||||
|
DeploymentName *string `json:"deploymentName,omitempty"`
|
||||||
|
Replicas *int32 `json:"replicas,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// FooSpecApplyConfiguration constructs a declarative configuration of the FooSpec type for use with
|
||||||
|
// apply.
|
||||||
|
func FooSpec() *FooSpecApplyConfiguration {
|
||||||
|
return &FooSpecApplyConfiguration{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithDeploymentName sets the DeploymentName field in the declarative configuration to the given value
|
||||||
|
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
||||||
|
// If called multiple times, the DeploymentName field is set to the value of the last call.
|
||||||
|
func (b *FooSpecApplyConfiguration) WithDeploymentName(value string) *FooSpecApplyConfiguration {
|
||||||
|
b.DeploymentName = &value
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithReplicas sets the Replicas field in the declarative configuration to the given value
|
||||||
|
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
||||||
|
// If called multiple times, the Replicas field is set to the value of the last call.
|
||||||
|
func (b *FooSpecApplyConfiguration) WithReplicas(value int32) *FooSpecApplyConfiguration {
|
||||||
|
b.Replicas = &value
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,41 @@
|
||||||
|
/*
|
||||||
|
Copyright The Kubernetes Authors.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Code generated by applyconfiguration-gen. DO NOT EDIT.
|
||||||
|
|
||||||
|
package v1alpha1
|
||||||
|
|
||||||
|
// FooStatusApplyConfiguration represents a declarative configuration of the FooStatus type for use
|
||||||
|
// with apply.
|
||||||
|
//
|
||||||
|
// FooStatus is the status for a Foo resource
|
||||||
|
type FooStatusApplyConfiguration struct {
|
||||||
|
AvailableReplicas *int32 `json:"availableReplicas,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// FooStatusApplyConfiguration constructs a declarative configuration of the FooStatus type for use with
|
||||||
|
// apply.
|
||||||
|
func FooStatus() *FooStatusApplyConfiguration {
|
||||||
|
return &FooStatusApplyConfiguration{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithAvailableReplicas sets the AvailableReplicas field in the declarative configuration to the given value
|
||||||
|
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
||||||
|
// If called multiple times, the AvailableReplicas field is set to the value of the last call.
|
||||||
|
func (b *FooStatusApplyConfiguration) WithAvailableReplicas(value int32) *FooStatusApplyConfiguration {
|
||||||
|
b.AvailableReplicas = &value
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,48 @@
|
||||||
|
/*
|
||||||
|
Copyright The Kubernetes Authors.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Code generated by applyconfiguration-gen. DO NOT EDIT.
|
||||||
|
|
||||||
|
package applyconfiguration
|
||||||
|
|
||||||
|
import (
|
||||||
|
runtime "k8s.io/apimachinery/pkg/runtime"
|
||||||
|
schema "k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
|
managedfields "k8s.io/apimachinery/pkg/util/managedfields"
|
||||||
|
v1alpha1 "k8s.io/sample-controller/pkg/apis/samplecontroller/v1alpha1"
|
||||||
|
internal "k8s.io/sample-controller/pkg/generated/applyconfiguration/internal"
|
||||||
|
samplecontrollerv1alpha1 "k8s.io/sample-controller/pkg/generated/applyconfiguration/samplecontroller/v1alpha1"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ForKind returns an apply configuration type for the given GroupVersionKind, or nil if no
|
||||||
|
// apply configuration type exists for the given GroupVersionKind.
|
||||||
|
func ForKind(kind schema.GroupVersionKind) interface{} {
|
||||||
|
switch kind {
|
||||||
|
// Group=samplecontroller.k8s.io, Version=v1alpha1
|
||||||
|
case v1alpha1.SchemeGroupVersion.WithKind("Foo"):
|
||||||
|
return &samplecontrollerv1alpha1.FooApplyConfiguration{}
|
||||||
|
case v1alpha1.SchemeGroupVersion.WithKind("FooSpec"):
|
||||||
|
return &samplecontrollerv1alpha1.FooSpecApplyConfiguration{}
|
||||||
|
case v1alpha1.SchemeGroupVersion.WithKind("FooStatus"):
|
||||||
|
return &samplecontrollerv1alpha1.FooStatusApplyConfiguration{}
|
||||||
|
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewTypeConverter(scheme *runtime.Scheme) managedfields.TypeConverter {
|
||||||
|
return managedfields.NewSchemeTypeConverter(scheme, internal.Parser())
|
||||||
|
}
|
||||||
|
|
@ -25,6 +25,7 @@ import (
|
||||||
"k8s.io/client-go/discovery"
|
"k8s.io/client-go/discovery"
|
||||||
fakediscovery "k8s.io/client-go/discovery/fake"
|
fakediscovery "k8s.io/client-go/discovery/fake"
|
||||||
"k8s.io/client-go/testing"
|
"k8s.io/client-go/testing"
|
||||||
|
applyconfiguration "k8s.io/sample-controller/pkg/generated/applyconfiguration"
|
||||||
clientset "k8s.io/sample-controller/pkg/generated/clientset/versioned"
|
clientset "k8s.io/sample-controller/pkg/generated/clientset/versioned"
|
||||||
samplecontrollerv1alpha1 "k8s.io/sample-controller/pkg/generated/clientset/versioned/typed/samplecontroller/v1alpha1"
|
samplecontrollerv1alpha1 "k8s.io/sample-controller/pkg/generated/clientset/versioned/typed/samplecontroller/v1alpha1"
|
||||||
fakesamplecontrollerv1alpha1 "k8s.io/sample-controller/pkg/generated/clientset/versioned/typed/samplecontroller/v1alpha1/fake"
|
fakesamplecontrollerv1alpha1 "k8s.io/sample-controller/pkg/generated/clientset/versioned/typed/samplecontroller/v1alpha1/fake"
|
||||||
|
|
@ -94,6 +95,42 @@ func (c *Clientset) IsWatchListSemanticsUnSupported() bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewClientset returns a clientset that will respond with the provided objects.
|
||||||
|
// It's backed by a very simple object tracker that processes creates, updates and deletions as-is,
|
||||||
|
// without applying any validations and/or defaults. It shouldn't be considered a replacement
|
||||||
|
// for a real clientset and is mostly useful in simple unit tests.
|
||||||
|
func NewClientset(objects ...runtime.Object) *Clientset {
|
||||||
|
o := testing.NewFieldManagedObjectTracker(
|
||||||
|
scheme,
|
||||||
|
codecs.UniversalDecoder(),
|
||||||
|
applyconfiguration.NewTypeConverter(scheme),
|
||||||
|
)
|
||||||
|
for _, obj := range objects {
|
||||||
|
if err := o.Add(obj); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cs := &Clientset{tracker: o}
|
||||||
|
cs.discovery = &fakediscovery.FakeDiscovery{Fake: &cs.Fake}
|
||||||
|
cs.AddReactor("*", "*", testing.ObjectReaction(o))
|
||||||
|
cs.AddWatchReactor("*", func(action testing.Action) (handled bool, ret watch.Interface, err error) {
|
||||||
|
var opts metav1.ListOptions
|
||||||
|
if watchAction, ok := action.(testing.WatchActionImpl); ok {
|
||||||
|
opts = watchAction.ListOptions
|
||||||
|
}
|
||||||
|
gvr := action.GetResource()
|
||||||
|
ns := action.GetNamespace()
|
||||||
|
watch, err := o.Watch(gvr, ns, opts)
|
||||||
|
if err != nil {
|
||||||
|
return false, nil, err
|
||||||
|
}
|
||||||
|
return true, watch, nil
|
||||||
|
})
|
||||||
|
|
||||||
|
return cs
|
||||||
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
_ clientset.Interface = &Clientset{}
|
_ clientset.Interface = &Clientset{}
|
||||||
_ testing.FakeClient = &Clientset{}
|
_ testing.FakeClient = &Clientset{}
|
||||||
|
|
|
||||||
|
|
@ -21,18 +21,19 @@ package fake
|
||||||
import (
|
import (
|
||||||
gentype "k8s.io/client-go/gentype"
|
gentype "k8s.io/client-go/gentype"
|
||||||
v1alpha1 "k8s.io/sample-controller/pkg/apis/samplecontroller/v1alpha1"
|
v1alpha1 "k8s.io/sample-controller/pkg/apis/samplecontroller/v1alpha1"
|
||||||
samplecontrollerv1alpha1 "k8s.io/sample-controller/pkg/generated/clientset/versioned/typed/samplecontroller/v1alpha1"
|
samplecontrollerv1alpha1 "k8s.io/sample-controller/pkg/generated/applyconfiguration/samplecontroller/v1alpha1"
|
||||||
|
typedsamplecontrollerv1alpha1 "k8s.io/sample-controller/pkg/generated/clientset/versioned/typed/samplecontroller/v1alpha1"
|
||||||
)
|
)
|
||||||
|
|
||||||
// fakeFoos implements FooInterface
|
// fakeFoos implements FooInterface
|
||||||
type fakeFoos struct {
|
type fakeFoos struct {
|
||||||
*gentype.FakeClientWithList[*v1alpha1.Foo, *v1alpha1.FooList]
|
*gentype.FakeClientWithListAndApply[*v1alpha1.Foo, *v1alpha1.FooList, *samplecontrollerv1alpha1.FooApplyConfiguration]
|
||||||
Fake *FakeSamplecontrollerV1alpha1
|
Fake *FakeSamplecontrollerV1alpha1
|
||||||
}
|
}
|
||||||
|
|
||||||
func newFakeFoos(fake *FakeSamplecontrollerV1alpha1, namespace string) samplecontrollerv1alpha1.FooInterface {
|
func newFakeFoos(fake *FakeSamplecontrollerV1alpha1, namespace string) typedsamplecontrollerv1alpha1.FooInterface {
|
||||||
return &fakeFoos{
|
return &fakeFoos{
|
||||||
gentype.NewFakeClientWithList[*v1alpha1.Foo, *v1alpha1.FooList](
|
gentype.NewFakeClientWithListAndApply[*v1alpha1.Foo, *v1alpha1.FooList, *samplecontrollerv1alpha1.FooApplyConfiguration](
|
||||||
fake.Fake,
|
fake.Fake,
|
||||||
namespace,
|
namespace,
|
||||||
v1alpha1.SchemeGroupVersion.WithResource("foos"),
|
v1alpha1.SchemeGroupVersion.WithResource("foos"),
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@ import (
|
||||||
watch "k8s.io/apimachinery/pkg/watch"
|
watch "k8s.io/apimachinery/pkg/watch"
|
||||||
gentype "k8s.io/client-go/gentype"
|
gentype "k8s.io/client-go/gentype"
|
||||||
samplecontrollerv1alpha1 "k8s.io/sample-controller/pkg/apis/samplecontroller/v1alpha1"
|
samplecontrollerv1alpha1 "k8s.io/sample-controller/pkg/apis/samplecontroller/v1alpha1"
|
||||||
|
applyconfigurationsamplecontrollerv1alpha1 "k8s.io/sample-controller/pkg/generated/applyconfiguration/samplecontroller/v1alpha1"
|
||||||
scheme "k8s.io/sample-controller/pkg/generated/clientset/versioned/scheme"
|
scheme "k8s.io/sample-controller/pkg/generated/clientset/versioned/scheme"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -47,18 +48,21 @@ type FooInterface interface {
|
||||||
List(ctx context.Context, opts v1.ListOptions) (*samplecontrollerv1alpha1.FooList, error)
|
List(ctx context.Context, opts v1.ListOptions) (*samplecontrollerv1alpha1.FooList, error)
|
||||||
Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, 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 *samplecontrollerv1alpha1.Foo, err error)
|
Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *samplecontrollerv1alpha1.Foo, err error)
|
||||||
|
Apply(ctx context.Context, foo *applyconfigurationsamplecontrollerv1alpha1.FooApplyConfiguration, opts v1.ApplyOptions) (result *samplecontrollerv1alpha1.Foo, err error)
|
||||||
|
// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus().
|
||||||
|
ApplyStatus(ctx context.Context, foo *applyconfigurationsamplecontrollerv1alpha1.FooApplyConfiguration, opts v1.ApplyOptions) (result *samplecontrollerv1alpha1.Foo, err error)
|
||||||
FooExpansion
|
FooExpansion
|
||||||
}
|
}
|
||||||
|
|
||||||
// foos implements FooInterface
|
// foos implements FooInterface
|
||||||
type foos struct {
|
type foos struct {
|
||||||
*gentype.ClientWithList[*samplecontrollerv1alpha1.Foo, *samplecontrollerv1alpha1.FooList]
|
*gentype.ClientWithListAndApply[*samplecontrollerv1alpha1.Foo, *samplecontrollerv1alpha1.FooList, *applyconfigurationsamplecontrollerv1alpha1.FooApplyConfiguration]
|
||||||
}
|
}
|
||||||
|
|
||||||
// newFoos returns a Foos
|
// newFoos returns a Foos
|
||||||
func newFoos(c *SamplecontrollerV1alpha1Client, namespace string) *foos {
|
func newFoos(c *SamplecontrollerV1alpha1Client, namespace string) *foos {
|
||||||
return &foos{
|
return &foos{
|
||||||
gentype.NewClientWithList[*samplecontrollerv1alpha1.Foo, *samplecontrollerv1alpha1.FooList](
|
gentype.NewClientWithListAndApply[*samplecontrollerv1alpha1.Foo, *samplecontrollerv1alpha1.FooList, *applyconfigurationsamplecontrollerv1alpha1.FooApplyConfiguration](
|
||||||
"foos",
|
"foos",
|
||||||
c.RESTClient(),
|
c.RESTClient(),
|
||||||
scheme.ParameterCodec,
|
scheme.ParameterCodec,
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,76 @@
|
||||||
|
/*
|
||||||
|
Copyright 2021 The Kubernetes Authors.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"k8s.io/kube-openapi/pkg/common"
|
||||||
|
"k8s.io/kube-openapi/pkg/validation/spec"
|
||||||
|
"k8s.io/sample-controller/pkg/generated/openapi"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Outputs openAPI schema JSON containing the schema definitions in zz_generated.openapi.go.
|
||||||
|
func main() {
|
||||||
|
err := output()
|
||||||
|
if err != nil {
|
||||||
|
os.Stderr.WriteString(fmt.Sprintf("Failed: %v", err)) // nolint:errcheck
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func output() error {
|
||||||
|
refFunc := func(name string) spec.Ref {
|
||||||
|
return spec.MustCreateRef(fmt.Sprintf("#/definitions/%s", name))
|
||||||
|
}
|
||||||
|
defs := openapi.GetOpenAPIDefinitions(refFunc)
|
||||||
|
schemaDefs := make(map[string]spec.Schema, len(defs))
|
||||||
|
for k, v := range defs {
|
||||||
|
// Replace top-level schema with v2 if a v2 schema is embedded
|
||||||
|
// so that the output of this program is always in OpenAPI v2.
|
||||||
|
// This is done by looking up an extension that marks the embedded v2
|
||||||
|
// schema, and, if the v2 schema is found, make it the resulting schema for
|
||||||
|
// the type.
|
||||||
|
if schema, ok := v.Schema.Extensions[common.ExtensionV2Schema]; ok {
|
||||||
|
if v2Schema, isOpenAPISchema := schema.(spec.Schema); isOpenAPISchema {
|
||||||
|
schemaDefs[k] = v2Schema
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
schemaDefs[k] = v.Schema
|
||||||
|
}
|
||||||
|
data, err := json.Marshal(&spec.Swagger{
|
||||||
|
SwaggerProps: spec.SwaggerProps{
|
||||||
|
Definitions: schemaDefs,
|
||||||
|
Info: &spec.Info{
|
||||||
|
InfoProps: spec.InfoProps{
|
||||||
|
Title: "Kubernetes",
|
||||||
|
Version: "unversioned",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Swagger: "2.0",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error serializing api definitions: %w", err)
|
||||||
|
}
|
||||||
|
os.Stdout.Write(data) // nolint:errcheck
|
||||||
|
return nil
|
||||||
|
}
|
||||||
2905
staging/src/k8s.io/sample-controller/pkg/generated/openapi/zz_generated.openapi.go
generated
Normal file
2905
staging/src/k8s.io/sample-controller/pkg/generated/openapi/zz_generated.openapi.go
generated
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue