mirror of https://github.com/k3s-io/k3s
Merge pull request #48546 from deads2k/tpr-19-ripples
Automatic merge from submit-queue (batch tested with PRs 48497, 48604, 48599, 48560, 48546) remove dead code This removes the dead code cruft since we stopped serving TPRs. ref #48152pull/6/head
commit
a2e463f6d0
|
@ -39,7 +39,7 @@ go_library(
|
||||||
"//pkg/kubeapiserver/options:go_default_library",
|
"//pkg/kubeapiserver/options:go_default_library",
|
||||||
"//pkg/kubeapiserver/server:go_default_library",
|
"//pkg/kubeapiserver/server:go_default_library",
|
||||||
"//pkg/master:go_default_library",
|
"//pkg/master:go_default_library",
|
||||||
"//pkg/master/thirdparty:go_default_library",
|
"//pkg/master/controller/crdregistration:go_default_library",
|
||||||
"//pkg/master/tunneler:go_default_library",
|
"//pkg/master/tunneler:go_default_library",
|
||||||
"//pkg/quota/install:go_default_library",
|
"//pkg/quota/install:go_default_library",
|
||||||
"//pkg/registry/cachesize:go_default_library",
|
"//pkg/registry/cachesize:go_default_library",
|
||||||
|
@ -89,7 +89,6 @@ go_library(
|
||||||
"//vendor/k8s.io/apiserver/pkg/admission:go_default_library",
|
"//vendor/k8s.io/apiserver/pkg/admission:go_default_library",
|
||||||
"//vendor/k8s.io/apiserver/pkg/authentication/authenticator:go_default_library",
|
"//vendor/k8s.io/apiserver/pkg/authentication/authenticator:go_default_library",
|
||||||
"//vendor/k8s.io/apiserver/pkg/authorization/authorizer:go_default_library",
|
"//vendor/k8s.io/apiserver/pkg/authorization/authorizer:go_default_library",
|
||||||
"//vendor/k8s.io/apiserver/pkg/registry/generic:go_default_library",
|
|
||||||
"//vendor/k8s.io/apiserver/pkg/server:go_default_library",
|
"//vendor/k8s.io/apiserver/pkg/server:go_default_library",
|
||||||
"//vendor/k8s.io/apiserver/pkg/server/filters:go_default_library",
|
"//vendor/k8s.io/apiserver/pkg/server/filters:go_default_library",
|
||||||
"//vendor/k8s.io/apiserver/pkg/server/healthz:go_default_library",
|
"//vendor/k8s.io/apiserver/pkg/server/healthz:go_default_library",
|
||||||
|
|
|
@ -41,7 +41,7 @@ import (
|
||||||
apiregistrationclient "k8s.io/kube-aggregator/pkg/client/clientset_generated/internalclientset/typed/apiregistration/internalversion"
|
apiregistrationclient "k8s.io/kube-aggregator/pkg/client/clientset_generated/internalclientset/typed/apiregistration/internalversion"
|
||||||
"k8s.io/kube-aggregator/pkg/controllers/autoregister"
|
"k8s.io/kube-aggregator/pkg/controllers/autoregister"
|
||||||
"k8s.io/kubernetes/cmd/kube-apiserver/app/options"
|
"k8s.io/kubernetes/cmd/kube-apiserver/app/options"
|
||||||
"k8s.io/kubernetes/pkg/master/thirdparty"
|
"k8s.io/kubernetes/pkg/master/controller/crdregistration"
|
||||||
)
|
)
|
||||||
|
|
||||||
func createAggregatorConfig(kubeAPIServerConfig genericapiserver.Config, commandOptions *options.ServerRunOptions, externalInformers kubeexternalinformers.SharedInformerFactory, serviceResolver aggregatorapiserver.ServiceResolver, proxyTransport *http.Transport) (*aggregatorapiserver.Config, error) {
|
func createAggregatorConfig(kubeAPIServerConfig genericapiserver.Config, commandOptions *options.ServerRunOptions, externalInformers kubeexternalinformers.SharedInformerFactory, serviceResolver aggregatorapiserver.ServiceResolver, proxyTransport *http.Transport) (*aggregatorapiserver.Config, error) {
|
||||||
|
@ -97,7 +97,7 @@ func createAggregatorServer(aggregatorConfig *aggregatorapiserver.Config, delega
|
||||||
}
|
}
|
||||||
autoRegistrationController := autoregister.NewAutoRegisterController(aggregatorServer.APIRegistrationInformers.Apiregistration().InternalVersion().APIServices(), apiRegistrationClient)
|
autoRegistrationController := autoregister.NewAutoRegisterController(aggregatorServer.APIRegistrationInformers.Apiregistration().InternalVersion().APIServices(), apiRegistrationClient)
|
||||||
apiServices := apiServicesToRegister(delegateAPIServer, autoRegistrationController)
|
apiServices := apiServicesToRegister(delegateAPIServer, autoRegistrationController)
|
||||||
crdRegistrationController := thirdparty.NewAutoRegistrationController(
|
crdRegistrationController := crdregistration.NewAutoRegistrationController(
|
||||||
apiExtensionInformers.Apiextensions().InternalVersion().CustomResourceDefinitions(),
|
apiExtensionInformers.Apiextensions().InternalVersion().CustomResourceDefinitions(),
|
||||||
autoRegistrationController)
|
autoRegistrationController)
|
||||||
|
|
||||||
|
|
|
@ -47,7 +47,6 @@ import (
|
||||||
"k8s.io/apiserver/pkg/admission"
|
"k8s.io/apiserver/pkg/admission"
|
||||||
"k8s.io/apiserver/pkg/authentication/authenticator"
|
"k8s.io/apiserver/pkg/authentication/authenticator"
|
||||||
"k8s.io/apiserver/pkg/authorization/authorizer"
|
"k8s.io/apiserver/pkg/authorization/authorizer"
|
||||||
genericregistry "k8s.io/apiserver/pkg/registry/generic"
|
|
||||||
genericapiserver "k8s.io/apiserver/pkg/server"
|
genericapiserver "k8s.io/apiserver/pkg/server"
|
||||||
"k8s.io/apiserver/pkg/server/filters"
|
"k8s.io/apiserver/pkg/server/filters"
|
||||||
"k8s.io/apiserver/pkg/server/options/encryptionconfig"
|
"k8s.io/apiserver/pkg/server/options/encryptionconfig"
|
||||||
|
@ -132,7 +131,7 @@ func Run(runOptions *options.ServerRunOptions, stopCh <-chan struct{}) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
kubeAPIServer, err := CreateKubeAPIServer(kubeAPIServerConfig, apiExtensionsServer.GenericAPIServer, sharedInformers, apiExtensionsConfig.CRDRESTOptionsGetter)
|
kubeAPIServer, err := CreateKubeAPIServer(kubeAPIServerConfig, apiExtensionsServer.GenericAPIServer, sharedInformers)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -178,8 +177,8 @@ func Run(runOptions *options.ServerRunOptions, stopCh <-chan struct{}) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// CreateKubeAPIServer creates and wires a workable kube-apiserver
|
// CreateKubeAPIServer creates and wires a workable kube-apiserver
|
||||||
func CreateKubeAPIServer(kubeAPIServerConfig *master.Config, delegateAPIServer genericapiserver.DelegationTarget, sharedInformers informers.SharedInformerFactory, crdRESTOptionsGetter genericregistry.RESTOptionsGetter) (*master.Master, error) {
|
func CreateKubeAPIServer(kubeAPIServerConfig *master.Config, delegateAPIServer genericapiserver.DelegationTarget, sharedInformers informers.SharedInformerFactory) (*master.Master, error) {
|
||||||
kubeAPIServer, err := kubeAPIServerConfig.Complete().New(delegateAPIServer, crdRESTOptionsGetter)
|
kubeAPIServer, err := kubeAPIServerConfig.Complete().New(delegateAPIServer)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,55 +40,6 @@ import (
|
||||||
psputil "k8s.io/kubernetes/pkg/security/podsecuritypolicy/util"
|
psputil "k8s.io/kubernetes/pkg/security/podsecuritypolicy/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
func ValidateThirdPartyResourceUpdate(update, old *extensions.ThirdPartyResource) field.ErrorList {
|
|
||||||
allErrs := field.ErrorList{}
|
|
||||||
allErrs = append(allErrs, apivalidation.ValidateObjectMetaUpdate(&update.ObjectMeta, &old.ObjectMeta, field.NewPath("metadata"))...)
|
|
||||||
allErrs = append(allErrs, ValidateThirdPartyResource(update)...)
|
|
||||||
return allErrs
|
|
||||||
}
|
|
||||||
|
|
||||||
func ValidateThirdPartyResourceName(name string, prefix bool) []string {
|
|
||||||
// Make sure it's a valid DNS subdomain
|
|
||||||
if msgs := apivalidation.NameIsDNSSubdomain(name, prefix); len(msgs) != 0 {
|
|
||||||
return msgs
|
|
||||||
}
|
|
||||||
|
|
||||||
// Make sure it's at least three segments (kind + two-segment group name)
|
|
||||||
if !prefix {
|
|
||||||
parts := strings.Split(name, ".")
|
|
||||||
if len(parts) < 3 {
|
|
||||||
return []string{"must be at least three segments long: <kind>.<domain>.<tld>"}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func ValidateThirdPartyResource(obj *extensions.ThirdPartyResource) field.ErrorList {
|
|
||||||
allErrs := field.ErrorList{}
|
|
||||||
allErrs = append(allErrs, apivalidation.ValidateObjectMeta(&obj.ObjectMeta, false, ValidateThirdPartyResourceName, field.NewPath("metadata"))...)
|
|
||||||
|
|
||||||
versions := sets.String{}
|
|
||||||
if len(obj.Versions) == 0 {
|
|
||||||
allErrs = append(allErrs, field.Required(field.NewPath("versions"), "must specify at least one version"))
|
|
||||||
}
|
|
||||||
for ix := range obj.Versions {
|
|
||||||
version := &obj.Versions[ix]
|
|
||||||
if len(version.Name) == 0 {
|
|
||||||
allErrs = append(allErrs, field.Invalid(field.NewPath("versions").Index(ix).Child("name"), version, "must not be empty"))
|
|
||||||
} else {
|
|
||||||
for _, msg := range validation.IsDNS1123Label(version.Name) {
|
|
||||||
allErrs = append(allErrs, field.Invalid(field.NewPath("versions").Index(ix).Child("name"), version, msg))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if versions.Has(version.Name) {
|
|
||||||
allErrs = append(allErrs, field.Duplicate(field.NewPath("versions").Index(ix).Child("name"), version))
|
|
||||||
}
|
|
||||||
versions.Insert(version.Name)
|
|
||||||
}
|
|
||||||
return allErrs
|
|
||||||
}
|
|
||||||
|
|
||||||
// ValidateDaemonSet tests if required fields in the DaemonSet are set.
|
// ValidateDaemonSet tests if required fields in the DaemonSet are set.
|
||||||
func ValidateDaemonSet(ds *extensions.DaemonSet) field.ErrorList {
|
func ValidateDaemonSet(ds *extensions.DaemonSet) field.ErrorList {
|
||||||
allErrs := apivalidation.ValidateObjectMeta(&ds.ObjectMeta, true, ValidateDaemonSetName, field.NewPath("metadata"))
|
allErrs := apivalidation.ValidateObjectMeta(&ds.ObjectMeta, true, ValidateDaemonSetName, field.NewPath("metadata"))
|
||||||
|
@ -427,14 +378,6 @@ func ValidateDeploymentRollback(obj *extensions.DeploymentRollback) field.ErrorL
|
||||||
return allErrs
|
return allErrs
|
||||||
}
|
}
|
||||||
|
|
||||||
func ValidateThirdPartyResourceDataUpdate(update, old *extensions.ThirdPartyResourceData) field.ErrorList {
|
|
||||||
return apivalidation.ValidateObjectMetaUpdate(&update.ObjectMeta, &old.ObjectMeta, field.NewPath("metadata"))
|
|
||||||
}
|
|
||||||
|
|
||||||
func ValidateThirdPartyResourceData(obj *extensions.ThirdPartyResourceData) field.ErrorList {
|
|
||||||
return apivalidation.ValidateObjectMeta(&obj.ObjectMeta, true, apivalidation.NameIsDNSLabel, field.NewPath("metadata"))
|
|
||||||
}
|
|
||||||
|
|
||||||
// ValidateIngress tests if required fields in the Ingress are set.
|
// ValidateIngress tests if required fields in the Ingress are set.
|
||||||
func ValidateIngress(ingress *extensions.Ingress) field.ErrorList {
|
func ValidateIngress(ingress *extensions.Ingress) field.ErrorList {
|
||||||
allErrs := apivalidation.ValidateObjectMeta(&ingress.ObjectMeta, true, ValidateIngressName, field.NewPath("metadata"))
|
allErrs := apivalidation.ValidateObjectMeta(&ingress.ObjectMeta, true, ValidateIngressName, field.NewPath("metadata"))
|
||||||
|
|
|
@ -225,7 +225,7 @@ func (o AnnotateOptions) RunAnnotate(f cmdutil.Factory, cmd *cobra.Command) erro
|
||||||
var outputObj runtime.Object
|
var outputObj runtime.Object
|
||||||
var obj runtime.Object
|
var obj runtime.Object
|
||||||
|
|
||||||
obj, err = cmdutil.MaybeConvertObject(info.Object, info.Mapping.GroupVersionKind.GroupVersion(), info.Mapping)
|
obj, err = info.Mapping.ConvertToVersion(info.Object, info.Mapping.GroupVersionKind.GroupVersion())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -238,7 +238,6 @@ __custom_func() {
|
||||||
* services (aka 'svc')
|
* services (aka 'svc')
|
||||||
* statefulsets
|
* statefulsets
|
||||||
* storageclasses
|
* storageclasses
|
||||||
* thirdpartyresources
|
|
||||||
`
|
`
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -150,7 +150,7 @@ func RunPatch(f cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []strin
|
||||||
return fmt.Errorf("unable to parse %q: %v", patch, err)
|
return fmt.Errorf("unable to parse %q: %v", patch, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: fix --local to work with thirdpartyresources without making use of the discovery client.
|
// TODO: fix --local to work with customresources without making use of the discovery client.
|
||||||
// https://github.com/kubernetes/kubernetes/issues/46722
|
// https://github.com/kubernetes/kubernetes/issues/46722
|
||||||
builder, err := f.NewUnstructuredBuilder(true)
|
builder, err := f.NewUnstructuredBuilder(true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -45,7 +45,6 @@ import (
|
||||||
"k8s.io/apimachinery/pkg/util/yaml"
|
"k8s.io/apimachinery/pkg/util/yaml"
|
||||||
"k8s.io/client-go/tools/clientcmd"
|
"k8s.io/client-go/tools/clientcmd"
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/apis/extensions"
|
|
||||||
"k8s.io/kubernetes/pkg/kubectl"
|
"k8s.io/kubernetes/pkg/kubectl"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/resource"
|
"k8s.io/kubernetes/pkg/kubectl/resource"
|
||||||
"k8s.io/kubernetes/pkg/printers"
|
"k8s.io/kubernetes/pkg/printers"
|
||||||
|
@ -676,18 +675,6 @@ func ParsePairs(pairArgs []string, pairType string, supportRemove bool) (newPair
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// MaybeConvertObject attempts to convert an object to a specific group/version. If the object is
|
|
||||||
// a third party resource it is simply passed through.
|
|
||||||
func MaybeConvertObject(obj runtime.Object, gv schema.GroupVersion, converter runtime.ObjectConvertor) (runtime.Object, error) {
|
|
||||||
switch obj.(type) {
|
|
||||||
case *extensions.ThirdPartyResourceData:
|
|
||||||
// conversion is not supported for 3rd party objects
|
|
||||||
return obj, nil
|
|
||||||
default:
|
|
||||||
return converter.ConvertToVersion(obj, gv)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// MustPrintWithKinds determines if printer is dealing
|
// MustPrintWithKinds determines if printer is dealing
|
||||||
// with multiple resource kinds, in which case it will
|
// with multiple resource kinds, in which case it will
|
||||||
// return true, indicating resource kind will be
|
// return true, indicating resource kind will be
|
||||||
|
|
|
@ -25,7 +25,6 @@ import (
|
||||||
"syscall"
|
"syscall"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"k8s.io/api/core/v1"
|
|
||||||
apiequality "k8s.io/apimachinery/pkg/api/equality"
|
apiequality "k8s.io/apimachinery/pkg/api/equality"
|
||||||
"k8s.io/apimachinery/pkg/api/errors"
|
"k8s.io/apimachinery/pkg/api/errors"
|
||||||
"k8s.io/apimachinery/pkg/api/meta"
|
"k8s.io/apimachinery/pkg/api/meta"
|
||||||
|
@ -36,7 +35,6 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/testapi"
|
"k8s.io/kubernetes/pkg/api/testapi"
|
||||||
apitesting "k8s.io/kubernetes/pkg/api/testing"
|
apitesting "k8s.io/kubernetes/pkg/api/testing"
|
||||||
"k8s.io/kubernetes/pkg/apis/extensions"
|
|
||||||
uexec "k8s.io/kubernetes/pkg/util/exec"
|
uexec "k8s.io/kubernetes/pkg/util/exec"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -321,53 +319,3 @@ func TestDumpReaderToFile(t *testing.T) {
|
||||||
t.Fatalf("Wrong file content %s != %s", testString, stringData)
|
t.Fatalf("Wrong file content %s != %s", testString, stringData)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestMaybeConvert(t *testing.T) {
|
|
||||||
tests := []struct {
|
|
||||||
input runtime.Object
|
|
||||||
gv schema.GroupVersion
|
|
||||||
expected runtime.Object
|
|
||||||
}{
|
|
||||||
{
|
|
||||||
input: &api.Pod{
|
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
|
||||||
Name: "foo",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
gv: schema.GroupVersion{Group: "", Version: "v1"},
|
|
||||||
expected: &v1.Pod{
|
|
||||||
TypeMeta: metav1.TypeMeta{
|
|
||||||
APIVersion: "v1",
|
|
||||||
Kind: "Pod",
|
|
||||||
},
|
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
|
||||||
Name: "foo",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
input: &extensions.ThirdPartyResourceData{
|
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
|
||||||
Name: "foo",
|
|
||||||
},
|
|
||||||
Data: []byte("this is some data"),
|
|
||||||
},
|
|
||||||
expected: &extensions.ThirdPartyResourceData{
|
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
|
||||||
Name: "foo",
|
|
||||||
},
|
|
||||||
Data: []byte("this is some data"),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, test := range tests {
|
|
||||||
obj, err := MaybeConvertObject(test.input, test.gv, testapi.Default.Converter())
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("unexpected error: %v", err)
|
|
||||||
}
|
|
||||||
if !apiequality.Semantic.DeepEqual(test.expected, obj) {
|
|
||||||
t.Errorf("expected:\n%#v\nsaw:\n%#v\n", test.expected, obj)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -26,7 +26,6 @@ go_library(
|
||||||
deps = [
|
deps = [
|
||||||
"//pkg/api:go_default_library",
|
"//pkg/api:go_default_library",
|
||||||
"//pkg/api/validation:go_default_library",
|
"//pkg/api/validation:go_default_library",
|
||||||
"//pkg/apis/extensions:go_default_library",
|
|
||||||
"//vendor/github.com/golang/glog:go_default_library",
|
"//vendor/github.com/golang/glog:go_default_library",
|
||||||
"//vendor/golang.org/x/text/encoding/unicode:go_default_library",
|
"//vendor/golang.org/x/text/encoding/unicode:go_default_library",
|
||||||
"//vendor/golang.org/x/text/transform:go_default_library",
|
"//vendor/golang.org/x/text/transform:go_default_library",
|
||||||
|
|
|
@ -30,7 +30,6 @@ import (
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
"k8s.io/apimachinery/pkg/watch"
|
"k8s.io/apimachinery/pkg/watch"
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/apis/extensions"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// ErrMatchFunc can be used to filter errors that may not be true failures.
|
// ErrMatchFunc can be used to filter errors that may not be true failures.
|
||||||
|
@ -266,13 +265,6 @@ func AsVersionedObjects(infos []*Info, version schema.GroupVersion, encoder runt
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: use info.VersionedObject as the value?
|
|
||||||
switch obj := info.Object.(type) {
|
|
||||||
case *extensions.ThirdPartyResourceData:
|
|
||||||
objects = append(objects, &runtime.Unknown{Raw: obj.Data})
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
// objects that are not part of api.Scheme must be converted to JSON
|
// objects that are not part of api.Scheme must be converted to JSON
|
||||||
// TODO: convert to map[string]interface{}, attach to runtime.Unknown?
|
// TODO: convert to map[string]interface{}, attach to runtime.Unknown?
|
||||||
if !version.Empty() {
|
if !version.Empty() {
|
||||||
|
|
|
@ -165,8 +165,8 @@ filegroup(
|
||||||
name = "all-srcs",
|
name = "all-srcs",
|
||||||
srcs = [
|
srcs = [
|
||||||
":package-srcs",
|
":package-srcs",
|
||||||
|
"//pkg/master/controller/crdregistration:all-srcs",
|
||||||
"//pkg/master/ports:all-srcs",
|
"//pkg/master/ports:all-srcs",
|
||||||
"//pkg/master/thirdparty:all-srcs",
|
|
||||||
"//pkg/master/tunneler:all-srcs",
|
"//pkg/master/tunneler:all-srcs",
|
||||||
],
|
],
|
||||||
tags = ["automanaged"],
|
tags = ["automanaged"],
|
||||||
|
|
|
@ -10,7 +10,7 @@ load(
|
||||||
|
|
||||||
go_library(
|
go_library(
|
||||||
name = "go_default_library",
|
name = "go_default_library",
|
||||||
srcs = ["tprregistration_controller.go"],
|
srcs = ["crdregistration_controller.go"],
|
||||||
tags = ["automanaged"],
|
tags = ["automanaged"],
|
||||||
deps = [
|
deps = [
|
||||||
"//pkg/controller:go_default_library",
|
"//pkg/controller:go_default_library",
|
||||||
|
@ -44,7 +44,7 @@ filegroup(
|
||||||
|
|
||||||
go_test(
|
go_test(
|
||||||
name = "go_default_test",
|
name = "go_default_test",
|
||||||
srcs = ["tprregistration_controller_test.go"],
|
srcs = ["crdregistration_controller_test.go"],
|
||||||
library = ":go_default_library",
|
library = ":go_default_library",
|
||||||
tags = ["automanaged"],
|
tags = ["automanaged"],
|
||||||
deps = [
|
deps = [
|
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package thirdparty
|
package crdregistration
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package thirdparty
|
package crdregistration
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"reflect"
|
"reflect"
|
|
@ -45,7 +45,6 @@ import (
|
||||||
utilnet "k8s.io/apimachinery/pkg/util/net"
|
utilnet "k8s.io/apimachinery/pkg/util/net"
|
||||||
"k8s.io/apiserver/pkg/endpoints/discovery"
|
"k8s.io/apiserver/pkg/endpoints/discovery"
|
||||||
"k8s.io/apiserver/pkg/registry/generic"
|
"k8s.io/apiserver/pkg/registry/generic"
|
||||||
genericregistry "k8s.io/apiserver/pkg/registry/generic"
|
|
||||||
genericapiserver "k8s.io/apiserver/pkg/server"
|
genericapiserver "k8s.io/apiserver/pkg/server"
|
||||||
"k8s.io/apiserver/pkg/server/healthz"
|
"k8s.io/apiserver/pkg/server/healthz"
|
||||||
serverstorage "k8s.io/apiserver/pkg/server/storage"
|
serverstorage "k8s.io/apiserver/pkg/server/storage"
|
||||||
|
@ -209,7 +208,7 @@ func (c *Config) SkipComplete() completedConfig {
|
||||||
// Certain config fields will be set to a default value if unset.
|
// Certain config fields will be set to a default value if unset.
|
||||||
// Certain config fields must be specified, including:
|
// Certain config fields must be specified, including:
|
||||||
// KubeletClientConfig
|
// KubeletClientConfig
|
||||||
func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget, crdRESTOptionsGetter genericregistry.RESTOptionsGetter) (*Master, error) {
|
func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget) (*Master, error) {
|
||||||
if reflect.DeepEqual(c.KubeletClientConfig, kubeletclient.KubeletClientConfig{}) {
|
if reflect.DeepEqual(c.KubeletClientConfig, kubeletclient.KubeletClientConfig{}) {
|
||||||
return nil, fmt.Errorf("Master.New() called with empty config.KubeletClientConfig")
|
return nil, fmt.Errorf("Master.New() called with empty config.KubeletClientConfig")
|
||||||
}
|
}
|
||||||
|
@ -257,7 +256,6 @@ func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget,
|
||||||
autoscalingrest.RESTStorageProvider{},
|
autoscalingrest.RESTStorageProvider{},
|
||||||
batchrest.RESTStorageProvider{},
|
batchrest.RESTStorageProvider{},
|
||||||
certificatesrest.RESTStorageProvider{},
|
certificatesrest.RESTStorageProvider{},
|
||||||
// TODO(enisoc): Remove crdRESTOptionsGetter input argument when TPR code is removed.
|
|
||||||
extensionsrest.RESTStorageProvider{},
|
extensionsrest.RESTStorageProvider{},
|
||||||
networkingrest.RESTStorageProvider{},
|
networkingrest.RESTStorageProvider{},
|
||||||
policyrest.RESTStorageProvider{},
|
policyrest.RESTStorageProvider{},
|
||||||
|
@ -411,7 +409,6 @@ func DefaultAPIResourceConfigSource() *serverstorage.ResourceConfig {
|
||||||
extensionsapiv1beta1.SchemeGroupVersion.WithResource("ingresses"),
|
extensionsapiv1beta1.SchemeGroupVersion.WithResource("ingresses"),
|
||||||
extensionsapiv1beta1.SchemeGroupVersion.WithResource("networkpolicies"),
|
extensionsapiv1beta1.SchemeGroupVersion.WithResource("networkpolicies"),
|
||||||
extensionsapiv1beta1.SchemeGroupVersion.WithResource("replicasets"),
|
extensionsapiv1beta1.SchemeGroupVersion.WithResource("replicasets"),
|
||||||
extensionsapiv1beta1.SchemeGroupVersion.WithResource("thirdpartyresources"),
|
|
||||||
extensionsapiv1beta1.SchemeGroupVersion.WithResource("podsecuritypolicies"),
|
extensionsapiv1beta1.SchemeGroupVersion.WithResource("podsecuritypolicies"),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -54,7 +54,7 @@ func TestValidOpenAPISpec(t *testing.T) {
|
||||||
}
|
}
|
||||||
config.GenericConfig.SwaggerConfig = genericapiserver.DefaultSwaggerConfig()
|
config.GenericConfig.SwaggerConfig = genericapiserver.DefaultSwaggerConfig()
|
||||||
|
|
||||||
master, err := config.Complete().New(genericapiserver.EmptyDelegate, nil)
|
master, err := config.Complete().New(genericapiserver.EmptyDelegate)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("Error in bringing up the master: %v", err)
|
t.Fatalf("Error in bringing up the master: %v", err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -115,7 +115,7 @@ func setUp(t *testing.T) (*etcdtesting.EtcdTestServer, Config, *assert.Assertion
|
||||||
func newMaster(t *testing.T) (*Master, *etcdtesting.EtcdTestServer, Config, *assert.Assertions) {
|
func newMaster(t *testing.T) (*Master, *etcdtesting.EtcdTestServer, Config, *assert.Assertions) {
|
||||||
etcdserver, config, assert := setUp(t)
|
etcdserver, config, assert := setUp(t)
|
||||||
|
|
||||||
master, err := config.Complete().New(genericapiserver.EmptyDelegate, nil)
|
master, err := config.Complete().New(genericapiserver.EmptyDelegate)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("Error in bringing up the master: %v", err)
|
t.Fatalf("Error in bringing up the master: %v", err)
|
||||||
}
|
}
|
||||||
|
@ -141,7 +141,7 @@ func limitedAPIResourceConfigSource() *serverstorage.ResourceConfig {
|
||||||
func newLimitedMaster(t *testing.T) (*Master, *etcdtesting.EtcdTestServer, Config, *assert.Assertions) {
|
func newLimitedMaster(t *testing.T) (*Master, *etcdtesting.EtcdTestServer, Config, *assert.Assertions) {
|
||||||
etcdserver, config, assert := setUp(t)
|
etcdserver, config, assert := setUp(t)
|
||||||
config.APIResourceConfigSource = limitedAPIResourceConfigSource()
|
config.APIResourceConfigSource = limitedAPIResourceConfigSource()
|
||||||
master, err := config.Complete().New(genericapiserver.EmptyDelegate, nil)
|
master, err := config.Complete().New(genericapiserver.EmptyDelegate)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("Error in bringing up the master: %v", err)
|
t.Fatalf("Error in bringing up the master: %v", err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -82,8 +82,6 @@ var (
|
||||||
storageClassColumns = []string{"NAME", "PROVISIONER"}
|
storageClassColumns = []string{"NAME", "PROVISIONER"}
|
||||||
statusColumns = []string{"STATUS", "REASON", "MESSAGE"}
|
statusColumns = []string{"STATUS", "REASON", "MESSAGE"}
|
||||||
|
|
||||||
// TODO: consider having 'KIND' for third party resource data
|
|
||||||
thirdPartyResourceDataColumns = []string{"NAME", "LABELS", "DATA"}
|
|
||||||
horizontalPodAutoscalerColumns = []string{"NAME", "REFERENCE", "TARGETS", "MINPODS", "MAXPODS", "REPLICAS", "AGE"}
|
horizontalPodAutoscalerColumns = []string{"NAME", "REFERENCE", "TARGETS", "MINPODS", "MAXPODS", "REPLICAS", "AGE"}
|
||||||
deploymentColumns = []string{"NAME", "DESIRED", "CURRENT", "UP-TO-DATE", "AVAILABLE", "AGE"}
|
deploymentColumns = []string{"NAME", "DESIRED", "CURRENT", "UP-TO-DATE", "AVAILABLE", "AGE"}
|
||||||
deploymentWideColumns = []string{"CONTAINER(S)", "IMAGE(S)", "SELECTOR"}
|
deploymentWideColumns = []string{"CONTAINER(S)", "IMAGE(S)", "SELECTOR"}
|
||||||
|
@ -232,8 +230,6 @@ func AddHandlers(h printers.PrintHandler) {
|
||||||
h.Handler(configMapColumns, nil, printConfigMapList)
|
h.Handler(configMapColumns, nil, printConfigMapList)
|
||||||
h.Handler(podSecurityPolicyColumns, nil, printPodSecurityPolicy)
|
h.Handler(podSecurityPolicyColumns, nil, printPodSecurityPolicy)
|
||||||
h.Handler(podSecurityPolicyColumns, nil, printPodSecurityPolicyList)
|
h.Handler(podSecurityPolicyColumns, nil, printPodSecurityPolicyList)
|
||||||
h.Handler(thirdPartyResourceDataColumns, nil, printThirdPartyResourceData)
|
|
||||||
h.Handler(thirdPartyResourceDataColumns, nil, printThirdPartyResourceDataList)
|
|
||||||
h.Handler(clusterColumns, nil, printCluster)
|
h.Handler(clusterColumns, nil, printCluster)
|
||||||
h.Handler(clusterColumns, nil, printClusterList)
|
h.Handler(clusterColumns, nil, printClusterList)
|
||||||
h.Handler(networkPolicyColumns, nil, printExtensionsNetworkPolicy)
|
h.Handler(networkPolicyColumns, nil, printExtensionsNetworkPolicy)
|
||||||
|
@ -1488,30 +1484,6 @@ func truncate(str string, maxLen int) string {
|
||||||
return str
|
return str
|
||||||
}
|
}
|
||||||
|
|
||||||
func printThirdPartyResourceData(rsrc *extensions.ThirdPartyResourceData, w io.Writer, options printers.PrintOptions) error {
|
|
||||||
name := printers.FormatResourceName(options.Kind, rsrc.Name, options.WithKind)
|
|
||||||
|
|
||||||
l := labels.FormatLabels(rsrc.Labels)
|
|
||||||
truncateCols := 50
|
|
||||||
if options.Wide {
|
|
||||||
truncateCols = 100
|
|
||||||
}
|
|
||||||
if _, err := fmt.Fprintf(w, "%s\t%s\t%s\n", name, l, truncate(string(rsrc.Data), truncateCols)); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func printThirdPartyResourceDataList(list *extensions.ThirdPartyResourceDataList, w io.Writer, options printers.PrintOptions) error {
|
|
||||||
for _, item := range list.Items {
|
|
||||||
if err := printThirdPartyResourceData(&item, w, options); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func printDeployment(deployment *extensions.Deployment, w io.Writer, options printers.PrintOptions) error {
|
func printDeployment(deployment *extensions.Deployment, w io.Writer, options printers.PrintOptions) error {
|
||||||
name := printers.FormatResourceName(options.Kind, deployment.Name, options.WithKind)
|
name := printers.FormatResourceName(options.Kind, deployment.Name, options.WithKind)
|
||||||
|
|
||||||
|
|
|
@ -102,8 +102,8 @@ func TestValidateObjectMetaOwnerReferences(t *testing.T) {
|
||||||
description: "simple success - third party extension.",
|
description: "simple success - third party extension.",
|
||||||
ownerReferences: []metav1.OwnerReference{
|
ownerReferences: []metav1.OwnerReference{
|
||||||
{
|
{
|
||||||
APIVersion: "thirdpartyVersion",
|
APIVersion: "customresourceVersion",
|
||||||
Kind: "thirdpartyKind",
|
Kind: "customresourceKind",
|
||||||
Name: "name",
|
Name: "name",
|
||||||
UID: "1",
|
UID: "1",
|
||||||
},
|
},
|
||||||
|
@ -128,29 +128,29 @@ func TestValidateObjectMetaOwnerReferences(t *testing.T) {
|
||||||
description: "simple controller ref success - one reference with Controller set",
|
description: "simple controller ref success - one reference with Controller set",
|
||||||
ownerReferences: []metav1.OwnerReference{
|
ownerReferences: []metav1.OwnerReference{
|
||||||
{
|
{
|
||||||
APIVersion: "thirdpartyVersion",
|
APIVersion: "customresourceVersion",
|
||||||
Kind: "thirdpartyKind",
|
Kind: "customresourceKind",
|
||||||
Name: "name",
|
Name: "name",
|
||||||
UID: "1",
|
UID: "1",
|
||||||
Controller: &falseVar,
|
Controller: &falseVar,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
APIVersion: "thirdpartyVersion",
|
APIVersion: "customresourceVersion",
|
||||||
Kind: "thirdpartyKind",
|
Kind: "customresourceKind",
|
||||||
Name: "name",
|
Name: "name",
|
||||||
UID: "2",
|
UID: "2",
|
||||||
Controller: &trueVar,
|
Controller: &trueVar,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
APIVersion: "thirdpartyVersion",
|
APIVersion: "customresourceVersion",
|
||||||
Kind: "thirdpartyKind",
|
Kind: "customresourceKind",
|
||||||
Name: "name",
|
Name: "name",
|
||||||
UID: "3",
|
UID: "3",
|
||||||
Controller: &falseVar,
|
Controller: &falseVar,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
APIVersion: "thirdpartyVersion",
|
APIVersion: "customresourceVersion",
|
||||||
Kind: "thirdpartyKind",
|
Kind: "customresourceKind",
|
||||||
Name: "name",
|
Name: "name",
|
||||||
UID: "4",
|
UID: "4",
|
||||||
},
|
},
|
||||||
|
@ -162,29 +162,29 @@ func TestValidateObjectMetaOwnerReferences(t *testing.T) {
|
||||||
description: "simple controller ref failure - two references with Controller set",
|
description: "simple controller ref failure - two references with Controller set",
|
||||||
ownerReferences: []metav1.OwnerReference{
|
ownerReferences: []metav1.OwnerReference{
|
||||||
{
|
{
|
||||||
APIVersion: "thirdpartyVersion",
|
APIVersion: "customresourceVersion",
|
||||||
Kind: "thirdpartyKind",
|
Kind: "customresourceKind",
|
||||||
Name: "name",
|
Name: "name",
|
||||||
UID: "1",
|
UID: "1",
|
||||||
Controller: &falseVar,
|
Controller: &falseVar,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
APIVersion: "thirdpartyVersion",
|
APIVersion: "customresourceVersion",
|
||||||
Kind: "thirdpartyKind",
|
Kind: "customresourceKind",
|
||||||
Name: "name",
|
Name: "name",
|
||||||
UID: "2",
|
UID: "2",
|
||||||
Controller: &trueVar,
|
Controller: &trueVar,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
APIVersion: "thirdpartyVersion",
|
APIVersion: "customresourceVersion",
|
||||||
Kind: "thirdpartyKind",
|
Kind: "customresourceKind",
|
||||||
Name: "name",
|
Name: "name",
|
||||||
UID: "3",
|
UID: "3",
|
||||||
Controller: &trueVar,
|
Controller: &trueVar,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
APIVersion: "thirdpartyVersion",
|
APIVersion: "customresourceVersion",
|
||||||
Kind: "thirdpartyKind",
|
Kind: "customresourceKind",
|
||||||
Name: "name",
|
Name: "name",
|
||||||
UID: "4",
|
UID: "4",
|
||||||
},
|
},
|
||||||
|
|
|
@ -42,10 +42,6 @@ type APIRegistrationManager struct {
|
||||||
// registeredGroupVersions stores all API group versions for which RegisterGroup is called.
|
// registeredGroupVersions stores all API group versions for which RegisterGroup is called.
|
||||||
registeredVersions map[schema.GroupVersion]struct{}
|
registeredVersions map[schema.GroupVersion]struct{}
|
||||||
|
|
||||||
// thirdPartyGroupVersions are API versions which are dynamically
|
|
||||||
// registered (and unregistered) via API calls to the apiserver
|
|
||||||
thirdPartyGroupVersions []schema.GroupVersion
|
|
||||||
|
|
||||||
// enabledVersions represents all enabled API versions. It should be a
|
// enabledVersions represents all enabled API versions. It should be a
|
||||||
// subset of registeredVersions. Please call EnableVersions() to add
|
// subset of registeredVersions. Please call EnableVersions() to add
|
||||||
// enabled versions.
|
// enabled versions.
|
||||||
|
@ -66,11 +62,10 @@ type APIRegistrationManager struct {
|
||||||
// wish to test.
|
// wish to test.
|
||||||
func NewAPIRegistrationManager(kubeAPIVersions string) (*APIRegistrationManager, error) {
|
func NewAPIRegistrationManager(kubeAPIVersions string) (*APIRegistrationManager, error) {
|
||||||
m := &APIRegistrationManager{
|
m := &APIRegistrationManager{
|
||||||
registeredVersions: map[schema.GroupVersion]struct{}{},
|
registeredVersions: map[schema.GroupVersion]struct{}{},
|
||||||
thirdPartyGroupVersions: []schema.GroupVersion{},
|
enabledVersions: map[schema.GroupVersion]struct{}{},
|
||||||
enabledVersions: map[schema.GroupVersion]struct{}{},
|
groupMetaMap: map[string]*apimachinery.GroupMeta{},
|
||||||
groupMetaMap: map[string]*apimachinery.GroupMeta{},
|
envRequestedVersions: []schema.GroupVersion{},
|
||||||
envRequestedVersions: []schema.GroupVersion{},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(kubeAPIVersions) != 0 {
|
if len(kubeAPIVersions) != 0 {
|
||||||
|
@ -211,41 +206,6 @@ func (m *APIRegistrationManager) RegisteredGroupVersions() []schema.GroupVersion
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsThirdPartyAPIGroupVersion returns true if the api version is a user-registered group/version.
|
|
||||||
func (m *APIRegistrationManager) IsThirdPartyAPIGroupVersion(gv schema.GroupVersion) bool {
|
|
||||||
for ix := range m.thirdPartyGroupVersions {
|
|
||||||
if m.thirdPartyGroupVersions[ix] == gv {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// AddThirdPartyAPIGroupVersions sets the list of third party versions,
|
|
||||||
// registers them in the API machinery and enables them.
|
|
||||||
// Skips GroupVersions that are already registered.
|
|
||||||
// Returns the list of GroupVersions that were skipped.
|
|
||||||
func (m *APIRegistrationManager) AddThirdPartyAPIGroupVersions(gvs ...schema.GroupVersion) []schema.GroupVersion {
|
|
||||||
filteredGVs := []schema.GroupVersion{}
|
|
||||||
skippedGVs := []schema.GroupVersion{}
|
|
||||||
for ix := range gvs {
|
|
||||||
if !m.IsRegisteredVersion(gvs[ix]) {
|
|
||||||
filteredGVs = append(filteredGVs, gvs[ix])
|
|
||||||
} else {
|
|
||||||
glog.V(3).Infof("Skipping %s, because its already registered", gvs[ix].String())
|
|
||||||
skippedGVs = append(skippedGVs, gvs[ix])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if len(filteredGVs) == 0 {
|
|
||||||
return skippedGVs
|
|
||||||
}
|
|
||||||
m.RegisterVersions(filteredGVs)
|
|
||||||
m.EnableVersions(filteredGVs...)
|
|
||||||
m.thirdPartyGroupVersions = append(m.thirdPartyGroupVersions, filteredGVs...)
|
|
||||||
|
|
||||||
return skippedGVs
|
|
||||||
}
|
|
||||||
|
|
||||||
// InterfacesFor is a union meta.VersionInterfacesFunc func for all registered types
|
// InterfacesFor is a union meta.VersionInterfacesFunc func for all registered types
|
||||||
func (m *APIRegistrationManager) InterfacesFor(version schema.GroupVersion) (*meta.VersionInterfaces, error) {
|
func (m *APIRegistrationManager) InterfacesFor(version schema.GroupVersion) (*meta.VersionInterfaces, error) {
|
||||||
groupMeta, err := m.Group(version.Group)
|
groupMeta, err := m.Group(version.Group)
|
||||||
|
|
|
@ -23,83 +23,6 @@ import (
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestAddThirdPartyVersionsBasic(t *testing.T) {
|
|
||||||
m, err := NewAPIRegistrationManager("")
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("Unexpected failure to make a manager: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
registered := []schema.GroupVersion{
|
|
||||||
{
|
|
||||||
Group: "",
|
|
||||||
Version: "v1",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
skipped := registered
|
|
||||||
thirdParty := []schema.GroupVersion{
|
|
||||||
{
|
|
||||||
Group: "company.com",
|
|
||||||
Version: "v1",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Group: "company.com",
|
|
||||||
Version: "v2",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
gvs := append(registered, thirdParty...)
|
|
||||||
|
|
||||||
m.RegisterVersions(registered)
|
|
||||||
wasSkipped := m.AddThirdPartyAPIGroupVersions(gvs...)
|
|
||||||
if len(wasSkipped) != len(skipped) {
|
|
||||||
t.Errorf("Expected %v, found %v", skipped, wasSkipped)
|
|
||||||
}
|
|
||||||
for ix := range wasSkipped {
|
|
||||||
found := false
|
|
||||||
for _, gv := range skipped {
|
|
||||||
if gv.String() == wasSkipped[ix].String() {
|
|
||||||
found = true
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if !found {
|
|
||||||
t.Errorf("Couldn't find %v in %v", wasSkipped[ix], skipped)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, gv := range thirdParty {
|
|
||||||
if !m.IsThirdPartyAPIGroupVersion(gv) {
|
|
||||||
t.Errorf("Expected %v to be third party.", gv)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestAddThirdPartyVersionsMultiple(t *testing.T) {
|
|
||||||
thirdParty := []schema.GroupVersion{
|
|
||||||
{
|
|
||||||
Group: "company.com",
|
|
||||||
Version: "v1",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Group: "company.com",
|
|
||||||
Version: "v2",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
m, err := NewAPIRegistrationManager("")
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("Unexpected failure to make a manager: %v", err)
|
|
||||||
}
|
|
||||||
for _, gv := range thirdParty {
|
|
||||||
wasSkipped := m.AddThirdPartyAPIGroupVersions(gv)
|
|
||||||
if len(wasSkipped) != 0 {
|
|
||||||
t.Errorf("Expected length 0, found %v", wasSkipped)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, gv := range thirdParty {
|
|
||||||
if !m.IsThirdPartyAPIGroupVersion(gv) {
|
|
||||||
t.Errorf("Expected %v to be third party.", gv)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestAllPreferredGroupVersions(t *testing.T) {
|
func TestAllPreferredGroupVersions(t *testing.T) {
|
||||||
testCases := []struct {
|
testCases := []struct {
|
||||||
groupMetas []apimachinery.GroupMeta
|
groupMetas []apimachinery.GroupMeta
|
||||||
|
|
|
@ -272,7 +272,6 @@ func TestWatchRead(t *testing.T) {
|
||||||
// TODO: yaml stream serialization requires that RawExtension.MarshalJSON
|
// TODO: yaml stream serialization requires that RawExtension.MarshalJSON
|
||||||
// be able to understand nested encoding (since yaml calls json.Marshal
|
// be able to understand nested encoding (since yaml calls json.Marshal
|
||||||
// rather than yaml.Marshal, which results in the raw bytes being in yaml).
|
// rather than yaml.Marshal, which results in the raw bytes being in yaml).
|
||||||
// Same problem as thirdparty object.
|
|
||||||
/*{
|
/*{
|
||||||
Accept: "application/yaml",
|
Accept: "application/yaml",
|
||||||
ExpectedContentType: "application/yaml;stream=watch",
|
ExpectedContentType: "application/yaml;stream=watch",
|
||||||
|
|
|
@ -298,9 +298,9 @@ func (versionedParameterEncoderWithV1Fallback) DecodeParameters(parameters url.V
|
||||||
}
|
}
|
||||||
|
|
||||||
// VersionedParameterEncoderWithV1Fallback is useful for encoding query
|
// VersionedParameterEncoderWithV1Fallback is useful for encoding query
|
||||||
// parameters for thirdparty resources. It tries to convert object to the
|
// parameters for custom resources. It tries to convert object to the
|
||||||
// specified version before converting it to query parameters, and falls back to
|
// specified version before converting it to query parameters, and falls back to
|
||||||
// converting to v1 if the object is not registered in the specified version.
|
// converting to v1 if the object is not registered in the specified version.
|
||||||
// For the record, currently API server always treats query parameters sent to a
|
// For the record, currently API server always treats query parameters sent to a
|
||||||
// thirdparty resource endpoint as v1.
|
// custom resource endpoint as v1.
|
||||||
var VersionedParameterEncoderWithV1Fallback runtime.ParameterCodec = versionedParameterEncoderWithV1Fallback{}
|
var VersionedParameterEncoderWithV1Fallback runtime.ParameterCodec = versionedParameterEncoderWithV1Fallback{}
|
||||||
|
|
|
@ -612,7 +612,7 @@ func startRealMasterOrDie(t *testing.T, certDir string) (*allClient, clientv3.KV
|
||||||
|
|
||||||
kubeAPIServerConfig.APIResourceConfigSource = &allResourceSource{} // force enable all resources
|
kubeAPIServerConfig.APIResourceConfigSource = &allResourceSource{} // force enable all resources
|
||||||
|
|
||||||
kubeAPIServer, err := app.CreateKubeAPIServer(kubeAPIServerConfig, genericapiserver.EmptyDelegate, sharedInformers, nil)
|
kubeAPIServer, err := app.CreateKubeAPIServer(kubeAPIServerConfig, genericapiserver.EmptyDelegate, sharedInformers)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -122,7 +122,7 @@ func TestAggregatedAPIServer(t *testing.T) {
|
||||||
}
|
}
|
||||||
kubeClientConfigValue.Store(kubeAPIServerConfig.GenericConfig.LoopbackClientConfig)
|
kubeClientConfigValue.Store(kubeAPIServerConfig.GenericConfig.LoopbackClientConfig)
|
||||||
|
|
||||||
kubeAPIServer, err := app.CreateKubeAPIServer(kubeAPIServerConfig, genericapiserver.EmptyDelegate, sharedInformers, nil)
|
kubeAPIServer, err := app.CreateKubeAPIServer(kubeAPIServerConfig, genericapiserver.EmptyDelegate, sharedInformers)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -253,7 +253,7 @@ func startMasterOrDie(masterConfig *master.Config, incomingServer *httptest.Serv
|
||||||
}
|
}
|
||||||
masterConfig.GenericConfig.SharedInformerFactory = extinformers.NewSharedInformerFactory(clientset, masterConfig.GenericConfig.LoopbackClientConfig.Timeout)
|
masterConfig.GenericConfig.SharedInformerFactory = extinformers.NewSharedInformerFactory(clientset, masterConfig.GenericConfig.LoopbackClientConfig.Timeout)
|
||||||
|
|
||||||
m, err = masterConfig.Complete().New(genericapiserver.EmptyDelegate, nil)
|
m, err = masterConfig.Complete().New(genericapiserver.EmptyDelegate)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
closeFn()
|
closeFn()
|
||||||
glog.Fatalf("error in bringing up the master: %v", err)
|
glog.Fatalf("error in bringing up the master: %v", err)
|
||||||
|
|
Loading…
Reference in New Issue