Skip to content

Commit 53f3699

Browse files
authored
Merge pull request kubernetes#89778 from cmluciano/cml/ingressv1
ingress: Add Ingress to v1 API and update backend to defaultBackend
2 parents 19d2200 + 2b091f6 commit 53f3699

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+10012
-770
lines changed

api/openapi-spec/swagger.json

Lines changed: 2370 additions & 55 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/apis/extensions/v1beta1/BUILD

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,20 +37,26 @@ go_library(
3737

3838
go_test(
3939
name = "go_default_test",
40-
srcs = ["defaults_test.go"],
40+
srcs = [
41+
"conversion_test.go",
42+
"defaults_test.go",
43+
],
4144
embed = [":go_default_library"],
4245
deps = [
4346
"//pkg/api/legacyscheme:go_default_library",
4447
"//pkg/apis/core:go_default_library",
4548
"//pkg/apis/core/install:go_default_library",
4649
"//pkg/apis/extensions/install:go_default_library",
50+
"//pkg/apis/networking:go_default_library",
4751
"//staging/src/k8s.io/api/core/v1:go_default_library",
4852
"//staging/src/k8s.io/api/extensions/v1beta1:go_default_library",
4953
"//staging/src/k8s.io/apimachinery/pkg/api/equality:go_default_library",
5054
"//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library",
5155
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
5256
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
5357
"//staging/src/k8s.io/apimachinery/pkg/util/intstr:go_default_library",
58+
"//vendor/github.com/stretchr/testify/assert:go_default_library",
59+
"//vendor/github.com/stretchr/testify/require:go_default_library",
5460
"//vendor/k8s.io/utils/pointer:go_default_library",
5561
],
5662
)

pkg/apis/extensions/v1beta1/conversion.go

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2424
"k8s.io/apimachinery/pkg/conversion"
2525
"k8s.io/apimachinery/pkg/labels"
26+
"k8s.io/apimachinery/pkg/util/intstr"
2627
"k8s.io/kubernetes/pkg/apis/autoscaling"
2728
"k8s.io/kubernetes/pkg/apis/networking"
2829
)
@@ -157,3 +158,57 @@ func Convert_networking_IPBlock_To_v1beta1_IPBlock(in *networking.IPBlock, out *
157158
copy(out.Except, in.Except)
158159
return nil
159160
}
161+
162+
func Convert_v1beta1_IngressBackend_To_networking_IngressBackend(in *extensionsv1beta1.IngressBackend, out *networking.IngressBackend, s conversion.Scope) error {
163+
if err := autoConvert_v1beta1_IngressBackend_To_networking_IngressBackend(in, out, s); err != nil {
164+
return err
165+
}
166+
if len(in.ServiceName) > 0 || in.ServicePort.IntVal != 0 || in.ServicePort.StrVal != "" || in.ServicePort.Type == intstr.String {
167+
out.Service = &networking.IngressServiceBackend{}
168+
out.Service.Name = in.ServiceName
169+
out.Service.Port.Name = in.ServicePort.StrVal
170+
out.Service.Port.Number = in.ServicePort.IntVal
171+
}
172+
return nil
173+
}
174+
175+
func Convert_networking_IngressBackend_To_v1beta1_IngressBackend(in *networking.IngressBackend, out *extensionsv1beta1.IngressBackend, s conversion.Scope) error {
176+
if err := autoConvert_networking_IngressBackend_To_v1beta1_IngressBackend(in, out, s); err != nil {
177+
return err
178+
}
179+
if in.Service != nil {
180+
out.ServiceName = in.Service.Name
181+
if len(in.Service.Port.Name) > 0 {
182+
out.ServicePort = intstr.FromString(in.Service.Port.Name)
183+
} else {
184+
out.ServicePort = intstr.FromInt(int(in.Service.Port.Number))
185+
}
186+
}
187+
return nil
188+
}
189+
190+
func Convert_v1beta1_IngressSpec_To_networking_IngressSpec(in *extensionsv1beta1.IngressSpec, out *networking.IngressSpec, s conversion.Scope) error {
191+
if err := autoConvert_v1beta1_IngressSpec_To_networking_IngressSpec(in, out, s); err != nil {
192+
return nil
193+
}
194+
if in.Backend != nil {
195+
out.DefaultBackend = &networking.IngressBackend{}
196+
if err := Convert_v1beta1_IngressBackend_To_networking_IngressBackend(in.Backend, out.DefaultBackend, s); err != nil {
197+
return err
198+
}
199+
}
200+
return nil
201+
}
202+
203+
func Convert_networking_IngressSpec_To_v1beta1_IngressSpec(in *networking.IngressSpec, out *extensionsv1beta1.IngressSpec, s conversion.Scope) error {
204+
if err := autoConvert_networking_IngressSpec_To_v1beta1_IngressSpec(in, out, s); err != nil {
205+
return nil
206+
}
207+
if in.DefaultBackend != nil {
208+
out.Backend = &extensionsv1beta1.IngressBackend{}
209+
if err := Convert_networking_IngressBackend_To_v1beta1_IngressBackend(in.DefaultBackend, out.Backend, s); err != nil {
210+
return err
211+
}
212+
}
213+
return nil
214+
}
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
/*
2+
Copyright 2020 The Kubernetes Authors.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package v1beta1
18+
19+
import (
20+
"testing"
21+
22+
"github.com/stretchr/testify/assert"
23+
"github.com/stretchr/testify/require"
24+
"k8s.io/api/extensions/v1beta1"
25+
"k8s.io/apimachinery/pkg/runtime"
26+
"k8s.io/apimachinery/pkg/util/intstr"
27+
"k8s.io/kubernetes/pkg/apis/networking"
28+
)
29+
30+
func TestIngressBackendConversion(t *testing.T) {
31+
scheme := runtime.NewScheme()
32+
assert.NoError(t, RegisterConversions(scheme))
33+
34+
tests := map[string]struct {
35+
external v1beta1.IngressSpec
36+
internal networking.IngressSpec
37+
}{
38+
"service-port-number": {
39+
external: v1beta1.IngressSpec{
40+
Backend: &v1beta1.IngressBackend{
41+
ServiceName: "test-backend",
42+
ServicePort: intstr.FromInt(8080),
43+
},
44+
},
45+
internal: networking.IngressSpec{
46+
DefaultBackend: &networking.IngressBackend{
47+
Service: &networking.IngressServiceBackend{
48+
Name: "test-backend",
49+
Port: networking.ServiceBackendPort{
50+
Name: "",
51+
Number: 8080,
52+
},
53+
},
54+
},
55+
},
56+
},
57+
"service-named-port": {
58+
external: v1beta1.IngressSpec{
59+
Backend: &v1beta1.IngressBackend{
60+
ServiceName: "test-backend",
61+
ServicePort: intstr.FromString("https"),
62+
},
63+
},
64+
internal: networking.IngressSpec{
65+
DefaultBackend: &networking.IngressBackend{
66+
Service: &networking.IngressServiceBackend{
67+
Name: "test-backend",
68+
Port: networking.ServiceBackendPort{
69+
Name: "https",
70+
},
71+
},
72+
},
73+
},
74+
},
75+
"empty-service-name": {
76+
external: v1beta1.IngressSpec{
77+
Backend: &v1beta1.IngressBackend{
78+
ServiceName: "",
79+
ServicePort: intstr.FromString("https"),
80+
},
81+
},
82+
internal: networking.IngressSpec{
83+
DefaultBackend: &networking.IngressBackend{
84+
Service: &networking.IngressServiceBackend{
85+
Name: "",
86+
Port: networking.ServiceBackendPort{
87+
Name: "https",
88+
},
89+
},
90+
},
91+
},
92+
},
93+
}
94+
95+
for name, test := range tests {
96+
t.Run(name, func(t *testing.T) {
97+
convertedInternal := networking.IngressSpec{}
98+
require.NoError(t,
99+
Convert_v1beta1_IngressSpec_To_networking_IngressSpec(&test.external, &convertedInternal, nil))
100+
assert.Equal(t, test.internal, convertedInternal, "v1beta1.IngressSpec -> networking.IngressSpec")
101+
102+
convertedV1beta1 := v1beta1.IngressSpec{}
103+
require.NoError(t,
104+
Convert_networking_IngressSpec_To_v1beta1_IngressSpec(&test.internal, &convertedV1beta1, nil))
105+
assert.Equal(t, test.external, convertedV1beta1, "networking.IngressSpec -> v1beta1.IngressSpec")
106+
})
107+
}
108+
}

0 commit comments

Comments
 (0)