Skip to content

Commit ddcb99d

Browse files
authored
Merge pull request #2100 from vincepri/release-0.14
🌱 Prepare for release 0.14
2 parents 3da2de0 + 69f0938 commit ddcb99d

29 files changed

+468
-150
lines changed

OWNERS_ALIASES

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,8 @@ aliases:
44
# active folks who can be contacted to perform admin-related
55
# tasks on the repo, or otherwise approve any PRS.
66
controller-runtime-admins:
7-
- droot
8-
- mengqiy
9-
- pwittrock
7+
- vincepri
8+
- joelanford
109

1110
# non-admin folks who have write-access and can approve any PRs in the repo
1211
controller-runtime-maintainers:
@@ -15,17 +14,15 @@ aliases:
1514

1615
# non-admin folks who can approve any PRs in the repo
1716
controller-runtime-approvers:
18-
- gerred
19-
- shawn-hurley
2017
- alvaroaleman
18+
- fillzpp
19+
- sbueringer
2120

2221
# folks who can review and LGTM any PRs in the repo (doesn't
2322
# include approvers & admins -- those count too via the OWNERS
2423
# file)
2524
controller-runtime-reviewers:
26-
- alenkacz
2725
- vincepri
28-
- alexeldeib
2926
- varshaprasad96
3027
- fillzpp
3128
- sbueringer
@@ -40,3 +37,7 @@ aliases:
4037
# but are no longer directly involved
4138
controller-runtime-emeritus-maintainers:
4239
- directxman12
40+
controller-runtime-emeritus-admins:
41+
- droot
42+
- mengqiy
43+
- pwittrock

go.mod

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,22 @@ require (
88
github.com/go-logr/logr v1.2.3
99
github.com/go-logr/zapr v1.2.3
1010
github.com/google/go-cmp v0.5.9
11-
github.com/onsi/ginkgo/v2 v2.5.1
11+
github.com/onsi/ginkgo/v2 v2.6.0
1212
github.com/onsi/gomega v1.24.1
1313
github.com/prometheus/client_golang v1.14.0
1414
github.com/prometheus/client_model v0.3.0
1515
go.uber.org/goleak v1.2.0
1616
go.uber.org/zap v1.24.0
1717
golang.org/x/sys v0.3.0
18-
golang.org/x/time v0.0.0-20220609170525-579cf78fd858
18+
golang.org/x/time v0.3.0
1919
gomodules.xyz/jsonpatch/v2 v2.2.0
20-
k8s.io/api v0.26.0-alpha.3
21-
k8s.io/apiextensions-apiserver v0.26.0-alpha.3
22-
k8s.io/apimachinery v0.26.0-alpha.3
23-
k8s.io/client-go v0.26.0-alpha.3
24-
k8s.io/component-base v0.26.0-alpha.3
20+
k8s.io/api v0.26.0
21+
k8s.io/apiextensions-apiserver v0.26.0
22+
k8s.io/apimachinery v0.26.0
23+
k8s.io/client-go v0.26.0
24+
k8s.io/component-base v0.26.0
2525
k8s.io/klog/v2 v2.80.1
26-
k8s.io/utils v0.0.0-20220922133306-665eaaec4324
26+
k8s.io/utils v0.0.0-20221128185143-99ec85e7a448
2727
sigs.k8s.io/yaml v1.3.0
2828
)
2929

@@ -42,7 +42,7 @@ require (
4242
github.com/google/gnostic v0.5.7-v3refs // indirect
4343
github.com/google/gofuzz v1.1.0 // indirect
4444
github.com/google/uuid v1.1.2 // indirect
45-
github.com/imdario/mergo v0.3.12 // indirect
45+
github.com/imdario/mergo v0.3.6 // indirect
4646
github.com/josharian/intern v1.0.0 // indirect
4747
github.com/json-iterator/go v1.1.12 // indirect
4848
github.com/mailru/easyjson v0.7.6 // indirect
@@ -56,11 +56,10 @@ require (
5656
github.com/spf13/pflag v1.0.5 // indirect
5757
go.uber.org/atomic v1.7.0 // indirect
5858
go.uber.org/multierr v1.6.0 // indirect
59-
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 // indirect
60-
golang.org/x/net v0.2.0 // indirect
59+
golang.org/x/net v0.3.1-0.20221206200815-1e63c2f08a10 // indirect
6160
golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b // indirect
62-
golang.org/x/term v0.2.0 // indirect
63-
golang.org/x/text v0.4.0 // indirect
61+
golang.org/x/term v0.3.0 // indirect
62+
golang.org/x/text v0.5.0 // indirect
6463
google.golang.org/appengine v1.6.7 // indirect
6564
google.golang.org/protobuf v1.28.1 // indirect
6665
gopkg.in/inf.v0 v0.9.1 // indirect

go.sum

Lines changed: 25 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -165,8 +165,8 @@ github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5m
165165
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
166166
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
167167
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
168-
github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU=
169-
github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
168+
github.com/imdario/mergo v0.3.6 h1:xTNEAn+kxVO7dTZGu0CegyqKZmoWFI0rF8UxjlB2d28=
169+
github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
170170
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
171171
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
172172
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
@@ -211,8 +211,8 @@ github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRW
211211
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
212212
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
213213
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
214-
github.com/onsi/ginkgo/v2 v2.5.1 h1:auzK7OI497k6x4OvWq+TKAcpcSAlod0doAH72oIN0Jw=
215-
github.com/onsi/ginkgo/v2 v2.5.1/go.mod h1:63DOGlLAH8+REH8jUGdL3YpCpu7JODesutUjdENfUAc=
214+
github.com/onsi/ginkgo/v2 v2.6.0 h1:9t9b9vRUbFq3C4qKFCGkVuq/fIHji802N1nrtkh1mNc=
215+
github.com/onsi/ginkgo/v2 v2.6.0/go.mod h1:63DOGlLAH8+REH8jUGdL3YpCpu7JODesutUjdENfUAc=
216216
github.com/onsi/gomega v1.24.1 h1:KORJXNNTzJXzu4ScJWssJfJMnJ+2QJqhoQSRwNlze9E=
217217
github.com/onsi/gomega v1.24.1/go.mod h1:3AOiACssS3/MajrniINInwbfOOtfZvplPzuRSmvt1jM=
218218
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@@ -309,9 +309,8 @@ golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHl
309309
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
310310
golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
311311
golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
312+
golang.org/x/lint v0.0.0-20200302205851-738671d3881b h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k=
312313
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
313-
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug=
314-
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
315314
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
316315
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
317316
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
@@ -352,8 +351,8 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY
352351
golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
353352
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
354353
golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
355-
golang.org/x/net v0.2.0 h1:sZfSu1wtKLGlWI4ZZayP0ck9Y73K1ynO6gqzTdBVdPU=
356-
golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
354+
golang.org/x/net v0.3.1-0.20221206200815-1e63c2f08a10 h1:Frnccbp+ok2GkUS2tC84yAq/U9Vg+0sIO7aRL3T4Xnc=
355+
golang.org/x/net v0.3.1-0.20221206200815-1e63c2f08a10/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE=
357356
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
358357
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
359358
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -416,22 +415,22 @@ golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ=
416415
golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
417416
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
418417
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
419-
golang.org/x/term v0.2.0 h1:z85xZCsEl7bi/KwbNADeBYoOP0++7W1ipu+aGnpwzRM=
420-
golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
418+
golang.org/x/term v0.3.0 h1:qoo4akIqOcDME5bhc/NgxUdovd6BSS2uMsVjB56q1xI=
419+
golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA=
421420
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
422421
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
423422
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
424423
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
425424
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
426425
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
427426
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
428-
golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg=
429-
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
427+
golang.org/x/text v0.5.0 h1:OLmvp0KP+FVG99Ct/qFiL/Fhk4zp4QQnZ7b2U+5piUM=
428+
golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
430429
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
431430
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
432431
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
433-
golang.org/x/time v0.0.0-20220609170525-579cf78fd858 h1:Dpdu/EMxGMFgq0CeYMh4fazTD2vtlZRYE7wyynxJb9U=
434-
golang.org/x/time v0.0.0-20220609170525-579cf78fd858/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
432+
golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
433+
golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
435434
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
436435
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
437436
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
@@ -591,22 +590,22 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
591590
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
592591
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
593592
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
594-
k8s.io/api v0.26.0-alpha.3 h1:BDEgBeZMrDND/zz9qZ3lCt7Q+dl5F9RkZSG9zgZgVJE=
595-
k8s.io/api v0.26.0-alpha.3/go.mod h1:aZAAOxt17tk0NlKqpw0CUdwZXV8QJ4PSOxh7ZkPq7+0=
596-
k8s.io/apiextensions-apiserver v0.26.0-alpha.3 h1:cXcCIkR6z/FzRUbvdaLo5mHAZfe7fhjGHrVOVSM4wk8=
597-
k8s.io/apiextensions-apiserver v0.26.0-alpha.3/go.mod h1:xrcDutAClgZrMVKTwdAIbNQyrIM+3PehfgzwUh3sX3w=
598-
k8s.io/apimachinery v0.26.0-alpha.3 h1:Tfo5DZs+FJEO5+VRDO2t5/GFPfDC96exqvux7QH5aNs=
599-
k8s.io/apimachinery v0.26.0-alpha.3/go.mod h1:zSkBXgO5G/dSQOe256tx5Yo2OJytojpY3bsXu/4/ZJE=
600-
k8s.io/client-go v0.26.0-alpha.3 h1:3XWtCf3gWOnrTyuEZ32QSI8vZVqZuQI9CLtkYjmTZpY=
601-
k8s.io/client-go v0.26.0-alpha.3/go.mod h1:zDKMziul3e15XShoRBGcoF9jp/V/QaauvDUhv8/0o7E=
602-
k8s.io/component-base v0.26.0-alpha.3 h1:zbYawCLVDrMQhMcxKZ0Z7h4OYRRY5QCxP/S3KR5oBn4=
603-
k8s.io/component-base v0.26.0-alpha.3/go.mod h1:PjyV13TXUPcTZEqK63PUe5GLZsm8MsSelkRPJ7vBcqA=
593+
k8s.io/api v0.26.0 h1:IpPlZnxBpV1xl7TGk/X6lFtpgjgntCg8PJ+qrPHAC7I=
594+
k8s.io/api v0.26.0/go.mod h1:k6HDTaIFC8yn1i6pSClSqIwLABIcLV9l5Q4EcngKnQg=
595+
k8s.io/apiextensions-apiserver v0.26.0 h1:Gy93Xo1eg2ZIkNX/8vy5xviVSxwQulsnUdQ00nEdpDo=
596+
k8s.io/apiextensions-apiserver v0.26.0/go.mod h1:7ez0LTiyW5nq3vADtK6C3kMESxadD51Bh6uz3JOlqWQ=
597+
k8s.io/apimachinery v0.26.0 h1:1feANjElT7MvPqp0JT6F3Ss6TWDwmcjLypwoPpEf7zg=
598+
k8s.io/apimachinery v0.26.0/go.mod h1:tnPmbONNJ7ByJNz9+n9kMjNP8ON+1qoAIIC70lztu74=
599+
k8s.io/client-go v0.26.0 h1:lT1D3OfO+wIi9UFolCrifbjUUgu7CpLca0AD8ghRLI8=
600+
k8s.io/client-go v0.26.0/go.mod h1:I2Sh57A79EQsDmn7F7ASpmru1cceh3ocVT9KlX2jEZg=
601+
k8s.io/component-base v0.26.0 h1:0IkChOCohtDHttmKuz+EP3j3+qKmV55rM9gIFTXA7Vs=
602+
k8s.io/component-base v0.26.0/go.mod h1:lqHwlfV1/haa14F/Z5Zizk5QmzaVf23nQzCwVOQpfC8=
604603
k8s.io/klog/v2 v2.80.1 h1:atnLQ121W371wYYFawwYx1aEY2eUfs4l3J72wtgAwV4=
605604
k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
606605
k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 h1:+70TFaan3hfJzs+7VK2o+OGxg8HsuBr/5f6tVAjDu6E=
607606
k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280/go.mod h1:+Axhij7bCpeqhklhUTe3xmOn6bWxolyZEeyaFpjGtl4=
608-
k8s.io/utils v0.0.0-20220922133306-665eaaec4324 h1:i+xdFemcSNuJvIfBlaYuXgRondKxK4z4prVPKzEaelI=
609-
k8s.io/utils v0.0.0-20220922133306-665eaaec4324/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
607+
k8s.io/utils v0.0.0-20221128185143-99ec85e7a448 h1:KTgPnR10d5zhztWptI952TNtt/4u5h3IzDXkdIMuo2Y=
608+
k8s.io/utils v0.0.0-20221128185143-99ec85e7a448/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
610609
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
611610
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
612611
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=

pkg/builder/controller.go

Lines changed: 35 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ limitations under the License.
1717
package builder
1818

1919
import (
20+
"errors"
2021
"fmt"
2122
"strings"
2223

@@ -182,10 +183,6 @@ func (blder *Builder) Build(r reconcile.Reconciler) (controller.Controller, erro
182183
if blder.forInput.err != nil {
183184
return nil, blder.forInput.err
184185
}
185-
// Checking the reconcile type exist or not
186-
if blder.forInput.object == nil {
187-
return nil, fmt.Errorf("must provide an object for reconciliation")
188-
}
189186

190187
// Set the ControllerManagedBy
191188
if err := blder.doController(r); err != nil {
@@ -231,6 +228,9 @@ func (blder *Builder) doWatch() error {
231228
}
232229

233230
// Watches the managed types
231+
if len(blder.ownsInput) > 0 && blder.forInput.object == nil {
232+
return errors.New("Owns() can only be used together with For()")
233+
}
234234
for _, own := range blder.ownsInput {
235235
typeForSrc, err := blder.project(own.object, own.objectProjection)
236236
if err != nil {
@@ -249,6 +249,9 @@ func (blder *Builder) doWatch() error {
249249
}
250250

251251
// Do the watch requests
252+
if len(blder.watchesInput) == 0 && blder.forInput.object == nil {
253+
return errors.New("there are no watches configured, controller will never get triggered. Use For(), Owns() or Watches() to set them up")
254+
}
252255
for _, w := range blder.watchesInput {
253256
allPredicates := append([]predicate.Predicate(nil), blder.globalPredicates...)
254257
allPredicates = append(allPredicates, w.predicates...)
@@ -269,11 +272,14 @@ func (blder *Builder) doWatch() error {
269272
return nil
270273
}
271274

272-
func (blder *Builder) getControllerName(gvk schema.GroupVersionKind) string {
275+
func (blder *Builder) getControllerName(gvk schema.GroupVersionKind, hasGVK bool) (string, error) {
273276
if blder.name != "" {
274-
return blder.name
277+
return blder.name, nil
278+
}
279+
if !hasGVK {
280+
return "", errors.New("one of For() or Named() must be called")
275281
}
276-
return strings.ToLower(gvk.Kind)
282+
return strings.ToLower(gvk.Kind), nil
277283
}
278284

279285
func (blder *Builder) doController(r reconcile.Reconciler) error {
@@ -286,13 +292,18 @@ func (blder *Builder) doController(r reconcile.Reconciler) error {
286292

287293
// Retrieve the GVK from the object we're reconciling
288294
// to prepopulate logger information, and to optionally generate a default name.
289-
gvk, err := getGvk(blder.forInput.object, blder.mgr.GetScheme())
290-
if err != nil {
291-
return err
295+
var gvk schema.GroupVersionKind
296+
hasGVK := blder.forInput.object != nil
297+
if hasGVK {
298+
var err error
299+
gvk, err = getGvk(blder.forInput.object, blder.mgr.GetScheme())
300+
if err != nil {
301+
return err
302+
}
292303
}
293304

294305
// Setup concurrency.
295-
if ctrlOptions.MaxConcurrentReconciles == 0 {
306+
if ctrlOptions.MaxConcurrentReconciles == 0 && hasGVK {
296307
groupKind := gvk.GroupKind().String()
297308

298309
if concurrency, ok := globalOpts.GroupKindConcurrency[groupKind]; ok && concurrency > 0 {
@@ -305,21 +316,30 @@ func (blder *Builder) doController(r reconcile.Reconciler) error {
305316
ctrlOptions.CacheSyncTimeout = *globalOpts.CacheSyncTimeout
306317
}
307318

308-
controllerName := blder.getControllerName(gvk)
319+
controllerName, err := blder.getControllerName(gvk, hasGVK)
320+
if err != nil {
321+
return err
322+
}
309323

310324
// Setup the logger.
311325
if ctrlOptions.LogConstructor == nil {
312326
log := blder.mgr.GetLogger().WithValues(
313327
"controller", controllerName,
314-
"controllerGroup", gvk.Group,
315-
"controllerKind", gvk.Kind,
316328
)
329+
if hasGVK {
330+
log = log.WithValues(
331+
"controllerGroup", gvk.Group,
332+
"controllerKind", gvk.Kind,
333+
)
334+
}
317335

318336
ctrlOptions.LogConstructor = func(req *reconcile.Request) logr.Logger {
319337
log := log
320338
if req != nil {
339+
if hasGVK {
340+
log = log.WithValues(gvk.Kind, klog.KRef(req.Namespace, req.Name))
341+
}
321342
log = log.WithValues(
322-
gvk.Kind, klog.KRef(req.Namespace, req.Name),
323343
"namespace", req.Namespace, "name", req.Name,
324344
)
325345
}

pkg/builder/controller_test.go

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,16 +112,55 @@ var _ = Describe("application", func() {
112112
Expect(instance).To(BeNil())
113113
})
114114

115-
It("should return an error if For function is not called", func() {
115+
It("should return an error if For and Named function are not called", func() {
116116
By("creating a controller manager")
117117
m, err := manager.New(cfg, manager.Options{})
118118
Expect(err).NotTo(HaveOccurred())
119119

120120
instance, err := ControllerManagedBy(m).
121+
Watches(&source.Kind{Type: &appsv1.ReplicaSet{}}, &handler.EnqueueRequestForObject{}).
122+
Build(noop)
123+
Expect(err).To(MatchError(ContainSubstring("one of For() or Named() must be called")))
124+
Expect(instance).To(BeNil())
125+
})
126+
127+
It("should return an error when using Owns without For", func() {
128+
By("creating a controller manager")
129+
m, err := manager.New(cfg, manager.Options{})
130+
Expect(err).NotTo(HaveOccurred())
131+
132+
instance, err := ControllerManagedBy(m).
133+
Named("my_controller").
121134
Owns(&appsv1.ReplicaSet{}).
122135
Build(noop)
123-
Expect(err).To(MatchError(ContainSubstring("must provide an object for reconciliation")))
136+
Expect(err).To(MatchError(ContainSubstring("Owns() can only be used together with For()")))
124137
Expect(instance).To(BeNil())
138+
139+
})
140+
141+
It("should return an error when there are no watches", func() {
142+
By("creating a controller manager")
143+
m, err := manager.New(cfg, manager.Options{})
144+
Expect(err).NotTo(HaveOccurred())
145+
146+
instance, err := ControllerManagedBy(m).
147+
Named("my_controller").
148+
Build(noop)
149+
Expect(err).To(MatchError(ContainSubstring("there are no watches configured, controller will never get triggered. Use For(), Owns() or Watches() to set them up")))
150+
Expect(instance).To(BeNil())
151+
})
152+
153+
It("should allow creating a controllerw without calling For", func() {
154+
By("creating a controller manager")
155+
m, err := manager.New(cfg, manager.Options{})
156+
Expect(err).NotTo(HaveOccurred())
157+
158+
instance, err := ControllerManagedBy(m).
159+
Named("my_controller").
160+
Watches(&source.Kind{Type: &appsv1.ReplicaSet{}}, &handler.EnqueueRequestForObject{}).
161+
Build(noop)
162+
Expect(err).NotTo(HaveOccurred())
163+
Expect(instance).NotTo(BeNil())
125164
})
126165

127166
It("should return an error if there is no GVK for an object, and thus we can't default the controller name", func() {

0 commit comments

Comments
 (0)