diff --git a/pkg/apis/core/v1/zz_generated.defaults.go b/pkg/apis/core/v1/zz_generated.defaults.go index 2863cc3ab8f7..493d9903e1b5 100644 --- a/pkg/apis/core/v1/zz_generated.defaults.go +++ b/pkg/apis/core/v1/zz_generated.defaults.go @@ -913,6 +913,12 @@ func SetObjectDefaults_SecretList(in *v1.SecretList) { func SetObjectDefaults_Service(in *v1.Service) { SetDefaults_Service(in) + for i := range in.Spec.Ports { + a := &in.Spec.Ports[i] + if a.Protocol == "" { + a.Protocol = "TCP" + } + } } func SetObjectDefaults_ServiceList(in *v1.ServiceList) { diff --git a/staging/src/k8s.io/api/core/v1/generated.proto b/staging/src/k8s.io/api/core/v1/generated.proto index 386e4bdb461f..742602b2db68 100644 --- a/staging/src/k8s.io/api/core/v1/generated.proto +++ b/staging/src/k8s.io/api/core/v1/generated.proto @@ -4751,6 +4751,7 @@ message ServicePort { // The IP protocol for this port. Supports "TCP", "UDP", and "SCTP". // Default is TCP. + // +default="TCP" // +optional optional string protocol = 2; diff --git a/staging/src/k8s.io/api/core/v1/types.go b/staging/src/k8s.io/api/core/v1/types.go index 6465fc53959c..59feb2d74add 100644 --- a/staging/src/k8s.io/api/core/v1/types.go +++ b/staging/src/k8s.io/api/core/v1/types.go @@ -4265,6 +4265,7 @@ type ServicePort struct { // The IP protocol for this port. Supports "TCP", "UDP", and "SCTP". // Default is TCP. + // +default="TCP" // +optional Protocol Protocol `json:"protocol,omitempty" protobuf:"bytes,2,opt,name=protocol,casttype=Protocol"` diff --git a/staging/src/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go b/staging/src/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go index d0ab3186a9a5..25027835c0b9 100644 --- a/staging/src/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go +++ b/staging/src/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go @@ -163,11 +163,6 @@ func (cfg *Config) Complete() CompletedConfig { // NewWithDelegate returns a new instance of APIAggregator from the given config. func (c completedConfig) NewWithDelegate(delegationTarget genericapiserver.DelegationTarget) (*APIAggregator, error) { - // Prevent generic API server to install OpenAPI handler. Aggregator server - // has its own customized OpenAPI handler. - openAPIConfig := c.GenericConfig.OpenAPIConfig - c.GenericConfig.OpenAPIConfig = nil - genericServer, err := c.GenericConfig.New("kube-aggregator", delegationTarget) if err != nil { return nil, err @@ -191,7 +186,7 @@ func (c completedConfig) NewWithDelegate(delegationTarget genericapiserver.Deleg lister: informerFactory.Apiregistration().V1().APIServices().Lister(), APIRegistrationInformers: informerFactory, serviceResolver: c.ExtraConfig.ServiceResolver, - openAPIConfig: openAPIConfig, + openAPIConfig: c.GenericConfig.OpenAPIConfig, egressSelector: c.GenericConfig.EgressSelector, proxyCurrentCertKeyContent: func() (bytes []byte, bytes2 []byte) { return nil, nil }, } diff --git a/test/integration/apiserver/apply/status_test.go b/test/integration/apiserver/apply/status_test.go index 32b82735a3b8..864bf0bbf6e4 100644 --- a/test/integration/apiserver/apply/status_test.go +++ b/test/integration/apiserver/apply/status_test.go @@ -60,15 +60,7 @@ var statusData = map[schema.GroupVersionResource]string{ gvr("internal.apiserver.k8s.io", "v1alpha1", "storageversions"): `{"status": {"commonEncodingVersion":"v1","storageVersions":[{"apiServerID":"1","decodableVersions":["v1","v2"],"encodingVersion":"v1"}],"conditions":[{"type":"AllEncodingVersionsEqual","status":"True","lastTransitionTime":"2020-01-01T00:00:00Z","reason":"allEncodingVersionsEqual","message":"all encoding versions are set to v1"}]}}`, } -const statusDefault = `{"status": {"conditions": [{"type": "MyStatus", "status":"true"}]}}` - -// DO NOT ADD TO THIS LIST. -// This list is used to ignore known bugs. We shouldn't introduce new bugs. -var ignoreList = map[schema.GroupVersionResource]struct{}{ - // TODO(#89264): apiservices doesn't work because the openapi is not routed properly. - gvr("apiregistration.k8s.io", "v1beta1", "apiservices"): {}, - gvr("apiregistration.k8s.io", "v1", "apiservices"): {}, -} +const statusDefault = `{"status": {"conditions": [{"type": "MyStatus", "status":"True"}]}}` // Some status-only APIs have empty object on creation. Therefore we don't expect create_test // managedFields for these APIs @@ -146,9 +138,6 @@ func TestApplyStatus(t *testing.T) { t.Fatal(err) } t.Run(mapping.Resource.String(), func(t *testing.T) { - if _, ok := ignoreList[mapping.Resource]; ok { - t.Skip() - } status, ok := statusData[mapping.Resource] if !ok { status = statusDefault @@ -167,8 +156,17 @@ func TestApplyStatus(t *testing.T) { namespace = "" } name := newObj.GetName() + + // etcd test stub data doesn't contain apiVersion/kind (!), but apply requires it + newObj.SetGroupVersionKind(mapping.GroupVersionKind) + createData, err := json.Marshal(newObj.Object) + if err != nil { + t.Fatal(err) + } + rsc := dynamicClient.Resource(mapping.Resource).Namespace(namespace) - _, err := rsc.Create(context.TODO(), &newObj, metav1.CreateOptions{FieldManager: "create_test"}) + // apply to create + _, err = rsc.Patch(context.TODO(), name, types.ApplyPatchType, []byte(createData), metav1.PatchOptions{FieldManager: "create_test"}) if err != nil { t.Fatal(err) }