From c77d8be83a29ddfa862478a5deec1ab8c55f5735 Mon Sep 17 00:00:00 2001 From: Tim Ramlot <42113979+inteon@users.noreply.github.com> Date: Tue, 27 May 2025 17:16:55 +0200 Subject: [PATCH 1/2] use replace directive such that we can directly use issuer-lib changes in our example Signed-off-by: Tim Ramlot <42113979+inteon@users.noreply.github.com> --- examples/simple/go.mod | 36 +++++++++++------------ examples/simple/go.sum | 65 +++++++++++++++++++++--------------------- 2 files changed, 51 insertions(+), 50 deletions(-) diff --git a/examples/simple/go.mod b/examples/simple/go.mod index 9a2fdaf..f275fd1 100644 --- a/examples/simple/go.mod +++ b/examples/simple/go.mod @@ -1,15 +1,17 @@ module simple-issuer -go 1.24 +go 1.24.0 + +replace github.com/cert-manager/issuer-lib => ../../ require ( github.com/cert-manager/cert-manager v1.17.2 - github.com/cert-manager/issuer-lib v0.8.0 + github.com/cert-manager/issuer-lib v0.0.0-00010101000000-000000000000 github.com/stretchr/testify v1.10.0 go.uber.org/zap v1.27.0 - k8s.io/api v0.32.1 - k8s.io/apimachinery v0.32.1 - k8s.io/client-go v0.32.1 + k8s.io/api v0.33.1 + k8s.io/apimachinery v0.33.1 + k8s.io/client-go v0.33.1 k8s.io/klog/v2 v2.130.1 sigs.k8s.io/controller-runtime v0.20.4 ) @@ -32,25 +34,22 @@ require ( github.com/go-openapi/jsonreference v0.21.0 // indirect github.com/go-openapi/swag v0.23.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang/protobuf v1.5.4 // indirect github.com/google/btree v1.1.3 // indirect github.com/google/gnostic-models v0.6.9 // indirect - github.com/google/go-cmp v0.6.0 // indirect - github.com/google/gofuzz v1.2.0 // indirect + github.com/google/go-cmp v0.7.0 // indirect github.com/google/uuid v1.6.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect - github.com/klauspost/compress v1.17.11 // indirect github.com/mailru/easyjson v0.9.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/prometheus/client_golang v1.20.5 // indirect + github.com/prometheus/client_golang v1.22.0 // indirect github.com/prometheus/client_model v0.6.1 // indirect - github.com/prometheus/common v0.61.0 // indirect + github.com/prometheus/common v0.62.0 // indirect github.com/prometheus/procfs v0.15.1 // indirect github.com/spf13/cobra v1.8.1 // indirect github.com/spf13/pflag v1.0.5 // indirect @@ -61,22 +60,23 @@ require ( golang.org/x/crypto v0.36.0 // indirect golang.org/x/net v0.38.0 // indirect golang.org/x/oauth2 v0.28.0 // indirect - golang.org/x/sync v0.12.0 // indirect + golang.org/x/sync v0.14.0 // indirect golang.org/x/sys v0.31.0 // indirect golang.org/x/term v0.30.0 // indirect golang.org/x/text v0.23.0 // indirect - golang.org/x/time v0.8.0 // indirect + golang.org/x/time v0.9.0 // indirect gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect - google.golang.org/protobuf v1.36.0 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/apiextensions-apiserver v0.32.1 // indirect - k8s.io/component-base v0.32.1 // indirect - k8s.io/kube-openapi v0.0.0-20241212222426-2c72e554b1e7 // indirect + k8s.io/apiextensions-apiserver v0.33.1 // indirect + k8s.io/component-base v0.33.1 // indirect + k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff // indirect k8s.io/utils v0.0.0-20241210054802-24370beab758 // indirect sigs.k8s.io/gateway-api v1.1.0 // indirect sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect - sigs.k8s.io/structured-merge-diff/v4 v4.5.0 // indirect + sigs.k8s.io/randfill v1.0.0 // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.6.0 // indirect sigs.k8s.io/yaml v1.4.0 // indirect ) diff --git a/examples/simple/go.sum b/examples/simple/go.sum index 85188e0..c5d4f58 100644 --- a/examples/simple/go.sum +++ b/examples/simple/go.sum @@ -8,8 +8,6 @@ github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= github.com/cert-manager/cert-manager v1.17.2 h1:QQYTEOsHf/Z3BFzKH2sIILHJwZA5Ut0LYZlHyNViupg= github.com/cert-manager/cert-manager v1.17.2/go.mod h1:2TmjsTQF8GZqc8fgLhXWCfbA6YwWCUHKxerJNbFh9eU= -github.com/cert-manager/issuer-lib v0.8.0 h1:eOU+P3EQkEKcZc823iLqMH8/Ithkg0Zs8vsXe0lHH4g= -github.com/cert-manager/issuer-lib v0.8.0/go.mod h1:UjE2o4BAboql9XV2VuFz2zfL8qrKEPwuQwLFqjL5pK8= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= @@ -46,15 +44,13 @@ github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1v github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= -github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg= github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= github.com/google/gnostic-models v0.6.9 h1:MU/8wDLif2qCXZmzncUQ/BOfxWfthHi63KqpoNbWqVw= github.com/google/gnostic-models v0.6.9/go.mod h1:CiWsm0s6BSQd1hRn8/QmxqB6BesYcbSZxsz9b0KuDBw= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -87,8 +83,8 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc= -github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= +github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= +github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= @@ -113,12 +109,12 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y= -github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= +github.com/prometheus/client_golang v1.22.0 h1:rb93p9lokFEsctTys46VnV1kLCDpVZ0a/Y92Vm0Zc6Q= +github.com/prometheus/client_golang v1.22.0/go.mod h1:R7ljNsLXhuQXYZYtw6GAE9AZg8Y7vEW5scdCXrWRXC0= github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= -github.com/prometheus/common v0.61.0 h1:3gv/GThfX0cV2lpO7gkTUwZru38mxevy90Bj8YFSRQQ= -github.com/prometheus/common v0.61.0/go.mod h1:zr29OCN/2BsJRaFwG8QOBr41D6kkchKbpeNH7pAjb/s= +github.com/prometheus/common v0.62.0 h1:xasJaQlnWAeyHdUBeGjXmutelfJHWMRr+Fg4QszZ2Io= +github.com/prometheus/common v0.62.0/go.mod h1:vyBcEuLSvWos9B1+CyL7JZ2up+uFzXhkqml0W5zIY1I= github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= @@ -131,6 +127,8 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= @@ -187,8 +185,8 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= -golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.14.0 h1:woo0S4Yywslg6hp4eUFjTVOyKt0RookbpAHG4c1HmhQ= +golang.org/x/sync v0.14.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -218,8 +216,8 @@ golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= -golang.org/x/time v0.8.0 h1:9i3RxcPv3PZnitoVGMPDKZSq1xW1gK1Xy3ArNOGZfEg= -golang.org/x/time v0.8.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY= +golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= @@ -234,8 +232,8 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= -google.golang.org/protobuf v1.36.0 h1:mjIs9gYtt56AzC4ZaffQuh88TZurBGhIJMBZGSxNerQ= -google.golang.org/protobuf v1.36.0/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= @@ -247,20 +245,20 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -k8s.io/api v0.32.1 h1:f562zw9cy+GvXzXf0CKlVQ7yHJVYzLfL6JAS4kOAaOc= -k8s.io/api v0.32.1/go.mod h1:/Yi/BqkuueW1BgpoePYBRdDYfjPF5sgTr5+YqDZra5k= -k8s.io/apiextensions-apiserver v0.32.1 h1:hjkALhRUeCariC8DiVmb5jj0VjIc1N0DREP32+6UXZw= -k8s.io/apiextensions-apiserver v0.32.1/go.mod h1:sxWIGuGiYov7Io1fAS2X06NjMIk5CbRHc2StSmbaQto= -k8s.io/apimachinery v0.32.1 h1:683ENpaCBjma4CYqsmZyhEzrGz6cjn1MY/X2jB2hkZs= -k8s.io/apimachinery v0.32.1/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE= -k8s.io/client-go v0.32.1 h1:otM0AxdhdBIaQh7l1Q0jQpmo7WOFIk5FFa4bg6YMdUU= -k8s.io/client-go v0.32.1/go.mod h1:aTTKZY7MdxUaJ/KiUs8D+GssR9zJZi77ZqtzcGXIiDg= -k8s.io/component-base v0.32.1 h1:/5IfJ0dHIKBWysGV0yKTFfacZ5yNV1sulPh3ilJjRZk= -k8s.io/component-base v0.32.1/go.mod h1:j1iMMHi/sqAHeG5z+O9BFNCF698a1u0186zkjMZQ28w= +k8s.io/api v0.33.1 h1:tA6Cf3bHnLIrUK4IqEgb2v++/GYUtqiu9sRVk3iBXyw= +k8s.io/api v0.33.1/go.mod h1:87esjTn9DRSRTD4fWMXamiXxJhpOIREjWOSjsW1kEHw= +k8s.io/apiextensions-apiserver v0.33.1 h1:N7ccbSlRN6I2QBcXevB73PixX2dQNIW0ZRuguEE91zI= +k8s.io/apiextensions-apiserver v0.33.1/go.mod h1:uNQ52z1A1Gu75QSa+pFK5bcXc4hq7lpOXbweZgi4dqA= +k8s.io/apimachinery v0.33.1 h1:mzqXWV8tW9Rw4VeW9rEkqvnxj59k1ezDUl20tFK/oM4= +k8s.io/apimachinery v0.33.1/go.mod h1:BHW0YOu7n22fFv/JkYOEfkUYNRN0fj0BlvMFWA7b+SM= +k8s.io/client-go v0.33.1 h1:ZZV/Ks2g92cyxWkRRnfUDsnhNn28eFpt26aGc8KbXF4= +k8s.io/client-go v0.33.1/go.mod h1:JAsUrl1ArO7uRVFWfcj6kOomSlCv+JpvIsp6usAGefA= +k8s.io/component-base v0.33.1 h1:EoJ0xA+wr77T+G8p6T3l4efT2oNwbqBVKR71E0tBIaI= +k8s.io/component-base v0.33.1/go.mod h1:guT/w/6piyPfTgq7gfvgetyXMIh10zuXA6cRRm3rDuY= k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= -k8s.io/kube-openapi v0.0.0-20241212222426-2c72e554b1e7 h1:hcha5B1kVACrLujCKLbr8XWMxCxzQx42DY8QKYJrDLg= -k8s.io/kube-openapi v0.0.0-20241212222426-2c72e554b1e7/go.mod h1:GewRfANuJ70iYzvn+i4lezLDAFzvjxZYK1gn1lWcfas= +k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff h1:/usPimJzUKKu+m+TE36gUyGcf03XZEP0ZIKgKj35LS4= +k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff/go.mod h1:5jIi+8yX4RIb8wk3XwBo5Pq2ccx4FP10ohkbSKCZoK8= k8s.io/utils v0.0.0-20241210054802-24370beab758 h1:sdbE21q2nlQtFh65saZY+rRM6x6aJJI8IUa1AmH/qa0= k8s.io/utils v0.0.0-20241210054802-24370beab758/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= sigs.k8s.io/controller-runtime v0.20.4 h1:X3c+Odnxz+iPTRobG4tp092+CvBU9UK0t/bRf+n0DGU= @@ -269,7 +267,10 @@ sigs.k8s.io/gateway-api v1.1.0 h1:DsLDXCi6jR+Xz8/xd0Z1PYl2Pn0TyaFMOPPZIj4inDM= sigs.k8s.io/gateway-api v1.1.0/go.mod h1:ZH4lHrL2sDi0FHZ9jjneb8kKnGzFWyrTya35sWUTrRs= sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 h1:gBQPwqORJ8d8/YNZWEjoZs7npUVDpVXUUOFfW6CgAqE= sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg= -sigs.k8s.io/structured-merge-diff/v4 v4.5.0 h1:nbCitCK2hfnhyiKo6uf2HxUPTCodY6Qaf85SbDIaMBk= -sigs.k8s.io/structured-merge-diff/v4 v4.5.0/go.mod h1:N8f93tFZh9U6vpxwRArLiikrE5/2tiu1w1AGfACIGE4= +sigs.k8s.io/randfill v0.0.0-20250304075658-069ef1bbf016/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY= +sigs.k8s.io/randfill v1.0.0 h1:JfjMILfT8A6RbawdsK2JXGBR5AQVfd+9TbzrlneTyrU= +sigs.k8s.io/randfill v1.0.0/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY= +sigs.k8s.io/structured-merge-diff/v4 v4.6.0 h1:IUA9nvMmnKWcj5jl84xn+T5MnlZKThmUW1TdblaLVAc= +sigs.k8s.io/structured-merge-diff/v4 v4.6.0/go.mod h1:dDy58f92j70zLsuZVuUX5Wp9vtxXpaZnkPGWeqDfCps= sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= From 89d66702ab3b28049070c9f5630d097c30ea31d3 Mon Sep 17 00:00:00 2001 From: Tim Ramlot <42113979+inteon@users.noreply.github.com> Date: Wed, 27 Nov 2024 10:31:29 +0000 Subject: [PATCH 2/2] remove GetIssuerTypeIdentifier from issuer API, moving it to the controller initialisation Signed-off-by: Tim Ramlot <42113979+inteon@users.noreply.github.com> --- api/v1alpha1/issuer_interface.go | 11 +- ...caterequest_controller_integration_test.go | 33 +++-- .../certificaterequest_controller_test.go | 85 ++++++++----- .../certificatesigningrequest_controller.go | 2 +- ...rtificatesigningrequest_controller_test.go | 119 +++++++++++------- controllers/combined_controller.go | 17 ++- .../combined_controller_integration_test.go | 24 ++-- controllers/predicates_test.go | 4 - controllers/request_controller.go | 32 +++-- docs/api.md | 13 +- .../simple/api/simple_cluster_issuer_types.go | 7 +- examples/simple/api/simple_issuer_types.go | 7 +- examples/simple/controller/signer.go | 9 +- .../testapi/api/test_cluster_issuer_types.go | 7 +- internal/testapi/api/test_issuer_types.go | 7 +- 15 files changed, 221 insertions(+), 156 deletions(-) diff --git a/api/v1alpha1/issuer_interface.go b/api/v1alpha1/issuer_interface.go index a250518..3a28f3a 100644 --- a/api/v1alpha1/issuer_interface.go +++ b/api/v1alpha1/issuer_interface.go @@ -27,15 +27,6 @@ import ( type Issuer interface { runtime.Object metav1.Object - GetStatus() *IssuerStatus - // GetIssuerTypeIdentifier returns a string that uniquely identifies the - // issuer type. This should be a constant across all instances of this - // issuer type. This string is used as a prefix when determining the - // issuer type for a Kubernetes CertificateSigningRequest resource based - // on the issuerName field. The value should be formatted as follows: - // ".". For example, the value - // "simpleclusterissuers.issuer.cert-manager.io" will match all CSRs - // with an issuerName set to eg. "simpleclusterissuers.issuer.cert-manager.io/issuer1". - GetIssuerTypeIdentifier() string + GetStatus() *IssuerStatus } diff --git a/controllers/certificaterequest_controller_integration_test.go b/controllers/certificaterequest_controller_integration_test.go index 308a85d..117fb92 100644 --- a/controllers/certificaterequest_controller_integration_test.go +++ b/controllers/certificaterequest_controller_integration_test.go @@ -32,6 +32,7 @@ import ( "github.com/stretchr/testify/require" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/watch" "k8s.io/client-go/tools/record" @@ -84,12 +85,16 @@ func TestCertificateRequestControllerIntegrationIssuerInitiallyNotFoundAndNotRea func(mgr ctrl.Manager) controllerInterface { return &CertificateRequestReconciler{ RequestController: RequestController{ - IssuerTypes: []v1alpha1.Issuer{&api.TestIssuer{}}, - ClusterIssuerTypes: []v1alpha1.Issuer{&api.TestClusterIssuer{}}, - FieldOwner: fieldOwner, - MaxRetryDuration: time.Minute, - EventSource: kubeutil.NewEventStore(), - Client: mgr.GetClient(), + IssuerTypes: map[schema.GroupResource]v1alpha1.Issuer{ + api.TestIssuerGroupVersionResource.GroupResource(): &api.TestIssuer{}, + }, + ClusterIssuerTypes: map[schema.GroupResource]v1alpha1.Issuer{ + api.TestClusterIssuerGroupVersionResource.GroupResource(): &api.TestClusterIssuer{}, + }, + FieldOwner: fieldOwner, + MaxRetryDuration: time.Minute, + EventSource: kubeutil.NewEventStore(), + Client: mgr.GetClient(), Sign: func(_ context.Context, cr signer.CertificateRequestObject, _ v1alpha1.Issuer) (signer.PEMBundle, error) { atomic.AddUint64(&counters[extractIdFromNamespace(t, cr.GetNamespace())], 1) return signer.PEMBundle{ @@ -223,12 +228,16 @@ func TestCertificateRequestControllerIntegrationSetCondition(t *testing.T) { func(mgr ctrl.Manager) controllerInterface { return &CertificateRequestReconciler{ RequestController: RequestController{ - IssuerTypes: []v1alpha1.Issuer{&api.TestIssuer{}}, - ClusterIssuerTypes: []v1alpha1.Issuer{&api.TestClusterIssuer{}}, - FieldOwner: fieldOwner, - MaxRetryDuration: time.Minute, - EventSource: kubeutil.NewEventStore(), - Client: mgr.GetClient(), + IssuerTypes: map[schema.GroupResource]v1alpha1.Issuer{ + api.TestIssuerGroupVersionResource.GroupResource(): &api.TestIssuer{}, + }, + ClusterIssuerTypes: map[schema.GroupResource]v1alpha1.Issuer{ + api.TestClusterIssuerGroupVersionResource.GroupResource(): &api.TestClusterIssuer{}, + }, + FieldOwner: fieldOwner, + MaxRetryDuration: time.Minute, + EventSource: kubeutil.NewEventStore(), + Client: mgr.GetClient(), Sign: func(ctx context.Context, cr signer.CertificateRequestObject, _ v1alpha1.Issuer) (signer.PEMBundle, error) { atomic.AddUint64(&counter, 1) select { diff --git a/controllers/certificaterequest_controller_test.go b/controllers/certificaterequest_controller_test.go index 8c944e8..affbfaf 100644 --- a/controllers/certificaterequest_controller_test.go +++ b/controllers/certificaterequest_controller_test.go @@ -31,6 +31,7 @@ import ( "github.com/stretchr/testify/require" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/tools/record" clocktesting "k8s.io/utils/clock/testing" @@ -942,15 +943,19 @@ func TestCertificateRequestReconcilerReconcile(t *testing.T) { controller := (&CertificateRequestReconciler{ RequestController: RequestController{ - IssuerTypes: []v1alpha1.Issuer{&api.TestIssuer{}}, - ClusterIssuerTypes: []v1alpha1.Issuer{&api.TestClusterIssuer{}}, - FieldOwner: fieldOwner, - MaxRetryDuration: time.Minute, - EventSource: kubeutil.NewEventStore(), - Client: fakeClient, - Sign: tc.sign, - EventRecorder: fakeRecorder, - Clock: fakeClock2, + IssuerTypes: map[schema.GroupResource]v1alpha1.Issuer{ + api.TestIssuerGroupVersionResource.GroupResource(): &api.TestIssuer{}, + }, + ClusterIssuerTypes: map[schema.GroupResource]v1alpha1.Issuer{ + api.TestClusterIssuerGroupVersionResource.GroupResource(): &api.TestClusterIssuer{}, + }, + FieldOwner: fieldOwner, + MaxRetryDuration: time.Minute, + EventSource: kubeutil.NewEventStore(), + Client: fakeClient, + Sign: tc.sign, + EventRecorder: fakeRecorder, + Clock: fakeClock2, }, }).Init() @@ -1000,8 +1005,8 @@ func TestCertificateRequestMatchIssuerType(t *testing.T) { type testcase struct { name string - issuerTypes []v1alpha1.Issuer - clusterIssuerTypes []v1alpha1.Issuer + issuerTypes map[schema.GroupResource]v1alpha1.Issuer + clusterIssuerTypes map[schema.GroupResource]v1alpha1.Issuer cr *cmapi.CertificateRequest expectedIssuerType v1alpha1.Issuer @@ -1046,46 +1051,64 @@ func TestCertificateRequestMatchIssuerType(t *testing.T) { expectedError: errormatch.ErrorContains("no issuer found for reference: [Group=\"test\", Kind=\"\", Name=\"name\"]"), }, { - name: "match issuer", - issuerTypes: []v1alpha1.Issuer{&api.TestIssuer{}}, - clusterIssuerTypes: []v1alpha1.Issuer{&api.TestClusterIssuer{}}, - cr: createCr("name", "namespace", "TestIssuer", "testing.cert-manager.io"), + name: "match issuer", + issuerTypes: map[schema.GroupResource]v1alpha1.Issuer{ + api.TestIssuerGroupVersionResource.GroupResource(): &api.TestIssuer{}, + }, + clusterIssuerTypes: map[schema.GroupResource]v1alpha1.Issuer{ + api.TestClusterIssuerGroupVersionResource.GroupResource(): &api.TestClusterIssuer{}, + }, + cr: createCr("name", "namespace", "TestIssuer", "testing.cert-manager.io"), expectedIssuerType: &api.TestIssuer{}, expectedIssuerName: types.NamespacedName{Name: "name", Namespace: "namespace"}, }, { - name: "match cluster issuer", - issuerTypes: []v1alpha1.Issuer{&api.TestIssuer{}}, - clusterIssuerTypes: []v1alpha1.Issuer{&api.TestClusterIssuer{}}, - cr: createCr("name", "namespace", "TestClusterIssuer", "testing.cert-manager.io"), + name: "match cluster issuer", + issuerTypes: map[schema.GroupResource]v1alpha1.Issuer{ + api.TestIssuerGroupVersionResource.GroupResource(): &api.TestIssuer{}, + }, + clusterIssuerTypes: map[schema.GroupResource]v1alpha1.Issuer{ + api.TestClusterIssuerGroupVersionResource.GroupResource(): &api.TestClusterIssuer{}, + }, + cr: createCr("name", "namespace", "TestClusterIssuer", "testing.cert-manager.io"), expectedIssuerType: &api.TestClusterIssuer{}, expectedIssuerName: types.NamespacedName{Name: "name"}, }, { - name: "select kind if empty", - issuerTypes: []v1alpha1.Issuer{}, - clusterIssuerTypes: []v1alpha1.Issuer{&api.TestClusterIssuer{}}, - cr: createCr("name", "namespace", "", "testing.cert-manager.io"), + name: "select kind if empty", + issuerTypes: map[schema.GroupResource]v1alpha1.Issuer{}, + clusterIssuerTypes: map[schema.GroupResource]v1alpha1.Issuer{ + api.TestClusterIssuerGroupVersionResource.GroupResource(): &api.TestClusterIssuer{}, + }, + cr: createCr("name", "namespace", "", "testing.cert-manager.io"), expectedIssuerType: &api.TestClusterIssuer{}, expectedIssuerName: types.NamespacedName{Name: "name"}, }, { - name: "prefer issuer over cluster issuer (v1)", - issuerTypes: []v1alpha1.Issuer{&api.TestIssuer{}}, - clusterIssuerTypes: []v1alpha1.Issuer{&api.TestClusterIssuer{}}, - cr: createCr("name", "namespace", "", "testing.cert-manager.io"), + name: "prefer issuer over cluster issuer (v1)", + issuerTypes: map[schema.GroupResource]v1alpha1.Issuer{ + api.TestIssuerGroupVersionResource.GroupResource(): &api.TestIssuer{}, + }, + clusterIssuerTypes: map[schema.GroupResource]v1alpha1.Issuer{ + api.TestClusterIssuerGroupVersionResource.GroupResource(): &api.TestClusterIssuer{}, + }, + cr: createCr("name", "namespace", "", "testing.cert-manager.io"), expectedIssuerType: &api.TestIssuer{}, expectedIssuerName: types.NamespacedName{Name: "name", Namespace: "namespace"}, }, { - name: "prefer issuer over cluster issuer (v2)", - issuerTypes: []v1alpha1.Issuer{&api.TestIssuer{}}, - clusterIssuerTypes: []v1alpha1.Issuer{&api.TestIssuer{}}, - cr: createCr("name", "namespace", "", "testing.cert-manager.io"), + name: "prefer issuer over cluster issuer (v2)", + issuerTypes: map[schema.GroupResource]v1alpha1.Issuer{ + api.TestIssuerGroupVersionResource.GroupResource(): &api.TestIssuer{}, + }, + clusterIssuerTypes: map[schema.GroupResource]v1alpha1.Issuer{ + api.TestIssuerGroupVersionResource.GroupResource(): &api.TestIssuer{}, + }, + cr: createCr("name", "namespace", "", "testing.cert-manager.io"), expectedIssuerType: &api.TestIssuer{}, expectedIssuerName: types.NamespacedName{Name: "name", Namespace: "namespace"}, diff --git a/controllers/certificatesigningrequest_controller.go b/controllers/certificatesigningrequest_controller.go index 607662a..bee1bfa 100644 --- a/controllers/certificatesigningrequest_controller.go +++ b/controllers/certificatesigningrequest_controller.go @@ -59,7 +59,7 @@ func (r *CertificateSigningRequestReconciler) matchIssuerType(requestObject clie // Search for matching issuer for _, issuerType := range r.AllIssuerTypes() { - if issuerTypeIdentifier != issuerType.Type.GetIssuerTypeIdentifier() { + if issuerTypeIdentifier != issuerType.IssuerTypeIdentifier { continue } diff --git a/controllers/certificatesigningrequest_controller_test.go b/controllers/certificatesigningrequest_controller_test.go index d1a9ce0..086c884 100644 --- a/controllers/certificatesigningrequest_controller_test.go +++ b/controllers/certificatesigningrequest_controller_test.go @@ -33,6 +33,7 @@ import ( v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/tools/record" clocktesting "k8s.io/utils/clock/testing" @@ -207,7 +208,7 @@ func TestCertificateSigningRequestReconcilerReconcile(t *testing.T) { name: "set-ready-pending-missing-issuer", objects: []client.Object{ cmgen.CertificateSigningRequestFrom(cr1, func(cr *certificatesv1.CertificateSigningRequest) { - cr.Spec.SignerName = fmt.Sprintf("%s/%s", clusterIssuer1.GetIssuerTypeIdentifier(), clusterIssuer1.Name) + cr.Spec.SignerName = fmt.Sprintf("%s.%s/%s", api.TestClusterIssuerGroupVersionResource.Resource, api.TestClusterIssuerGroupVersionResource.Group, clusterIssuer1.Name) }), }, expectedStatusPatch: &certificatesv1.CertificateSigningRequestStatus{ @@ -224,7 +225,7 @@ func TestCertificateSigningRequestReconcilerReconcile(t *testing.T) { name: "set-ready-pending-issuer-has-no-ready-condition", objects: []client.Object{ cmgen.CertificateSigningRequestFrom(cr1, func(cr *certificatesv1.CertificateSigningRequest) { - cr.Spec.SignerName = fmt.Sprintf("%s/%s", clusterIssuer1.GetIssuerTypeIdentifier(), clusterIssuer1.Name) + cr.Spec.SignerName = fmt.Sprintf("%s.%s/%s", api.TestClusterIssuerGroupVersionResource.Resource, api.TestClusterIssuerGroupVersionResource.Group, clusterIssuer1.Name) }), testutil.TestClusterIssuerFrom(clusterIssuer1, func(si *api.TestClusterIssuer) { @@ -245,7 +246,7 @@ func TestCertificateSigningRequestReconcilerReconcile(t *testing.T) { name: "set-ready-pending-issuer-is-not-ready", objects: []client.Object{ cmgen.CertificateSigningRequestFrom(cr1, func(cr *certificatesv1.CertificateSigningRequest) { - cr.Spec.SignerName = fmt.Sprintf("%s/%s", clusterIssuer1.GetIssuerTypeIdentifier(), clusterIssuer1.Name) + cr.Spec.SignerName = fmt.Sprintf("%s.%s/%s", api.TestClusterIssuerGroupVersionResource.Resource, api.TestClusterIssuerGroupVersionResource.Group, clusterIssuer1.Name) }), testutil.TestClusterIssuerFrom(clusterIssuer1, testutil.SetTestClusterIssuerStatusCondition( @@ -271,7 +272,7 @@ func TestCertificateSigningRequestReconcilerReconcile(t *testing.T) { name: "set-ready-pending-issuer-ready-outdated", objects: []client.Object{ cmgen.CertificateSigningRequestFrom(cr1, func(cr *certificatesv1.CertificateSigningRequest) { - cr.Spec.SignerName = fmt.Sprintf("%s/%s", clusterIssuer1.GetIssuerTypeIdentifier(), clusterIssuer1.Name) + cr.Spec.SignerName = fmt.Sprintf("%s.%s/%s", api.TestClusterIssuerGroupVersionResource.Resource, api.TestClusterIssuerGroupVersionResource.Group, clusterIssuer1.Name) }), testutil.TestClusterIssuerFrom(clusterIssuer1, testutil.SetTestClusterIssuerGeneration(issuer1.Generation+1), @@ -295,7 +296,7 @@ func TestCertificateSigningRequestReconcilerReconcile(t *testing.T) { objects: []client.Object{ cmgen.CertificateSigningRequestFrom(cr1, func(cr *certificatesv1.CertificateSigningRequest) { - cr.Spec.SignerName = fmt.Sprintf("%s/%s", clusterIssuer1.GetIssuerTypeIdentifier(), clusterIssuer1.Name) + cr.Spec.SignerName = fmt.Sprintf("%s.%s/%s", api.TestClusterIssuerGroupVersionResource.Resource, api.TestClusterIssuerGroupVersionResource.Group, clusterIssuer1.Name) }, func(cr *certificatesv1.CertificateSigningRequest) { cr.CreationTimestamp = metav1.NewTime(fakeTimeObj2.Add(-2 * time.Minute)) @@ -331,7 +332,7 @@ func TestCertificateSigningRequestReconcilerReconcile(t *testing.T) { objects: []client.Object{ cmgen.CertificateSigningRequestFrom(cr1, func(cr *certificatesv1.CertificateSigningRequest) { - cr.Spec.SignerName = fmt.Sprintf("%s/%s", clusterIssuer1.GetIssuerTypeIdentifier(), clusterIssuer1.Name) + cr.Spec.SignerName = fmt.Sprintf("%s.%s/%s", api.TestClusterIssuerGroupVersionResource.Resource, api.TestClusterIssuerGroupVersionResource.Group, clusterIssuer1.Name) }, func(cr *certificatesv1.CertificateSigningRequest) { cr.CreationTimestamp = metav1.NewTime(fakeTimeObj2.Add(-2 * time.Minute)) @@ -372,7 +373,7 @@ func TestCertificateSigningRequestReconcilerReconcile(t *testing.T) { cr.CreationTimestamp = fakeTimeObj2 }, func(cr *certificatesv1.CertificateSigningRequest) { - cr.Spec.SignerName = fmt.Sprintf("%s/%s", clusterIssuer1.GetIssuerTypeIdentifier(), clusterIssuer1.Name) + cr.Spec.SignerName = fmt.Sprintf("%s.%s/%s", api.TestClusterIssuerGroupVersionResource.Resource, api.TestClusterIssuerGroupVersionResource.Group, clusterIssuer1.Name) }, ), testutil.TestClusterIssuerFrom(clusterIssuer1), @@ -417,7 +418,7 @@ func TestCertificateSigningRequestReconcilerReconcile(t *testing.T) { cr.CreationTimestamp = fakeTimeObj2 }, func(cr *certificatesv1.CertificateSigningRequest) { - cr.Spec.SignerName = fmt.Sprintf("%s/%s", clusterIssuer1.GetIssuerTypeIdentifier(), clusterIssuer1.Name) + cr.Spec.SignerName = fmt.Sprintf("%s.%s/%s", api.TestClusterIssuerGroupVersionResource.Resource, api.TestClusterIssuerGroupVersionResource.Group, clusterIssuer1.Name) }, cmgen.SetCertificateSigningRequestStatusCondition(certificatesv1.CertificateSigningRequestCondition{ Type: "[condition type]", @@ -467,7 +468,7 @@ func TestCertificateSigningRequestReconcilerReconcile(t *testing.T) { objects: []client.Object{ cmgen.CertificateSigningRequestFrom(cr1, func(cr *certificatesv1.CertificateSigningRequest) { - cr.Spec.SignerName = fmt.Sprintf("%s/%s", clusterIssuer1.GetIssuerTypeIdentifier(), clusterIssuer1.Name) + cr.Spec.SignerName = fmt.Sprintf("%s.%s/%s", api.TestClusterIssuerGroupVersionResource.Resource, api.TestClusterIssuerGroupVersionResource.Group, clusterIssuer1.Name) }, func(cr *certificatesv1.CertificateSigningRequest) { cr.CreationTimestamp = metav1.NewTime(fakeTimeObj2.Add(-2 * time.Minute)) @@ -520,7 +521,7 @@ func TestCertificateSigningRequestReconcilerReconcile(t *testing.T) { objects: []client.Object{ cmgen.CertificateSigningRequestFrom(cr1, func(cr *certificatesv1.CertificateSigningRequest) { - cr.Spec.SignerName = fmt.Sprintf("%s/%s", clusterIssuer1.GetIssuerTypeIdentifier(), clusterIssuer1.Name) + cr.Spec.SignerName = fmt.Sprintf("%s.%s/%s", api.TestClusterIssuerGroupVersionResource.Resource, api.TestClusterIssuerGroupVersionResource.Group, clusterIssuer1.Name) }, func(cr *certificatesv1.CertificateSigningRequest) { cr.CreationTimestamp = metav1.NewTime(fakeTimeObj2.Add(-2 * time.Minute)) @@ -580,7 +581,7 @@ func TestCertificateSigningRequestReconcilerReconcile(t *testing.T) { objects: []client.Object{ cmgen.CertificateSigningRequestFrom(cr1, func(cr *certificatesv1.CertificateSigningRequest) { - cr.Spec.SignerName = fmt.Sprintf("%s/%s", clusterIssuer1.GetIssuerTypeIdentifier(), clusterIssuer1.Name) + cr.Spec.SignerName = fmt.Sprintf("%s.%s/%s", api.TestClusterIssuerGroupVersionResource.Resource, api.TestClusterIssuerGroupVersionResource.Group, clusterIssuer1.Name) }, func(cr *certificatesv1.CertificateSigningRequest) { cr.CreationTimestamp = metav1.NewTime(fakeTimeObj2.Add(-2 * time.Minute)) @@ -626,7 +627,7 @@ func TestCertificateSigningRequestReconcilerReconcile(t *testing.T) { objects: []client.Object{ cmgen.CertificateSigningRequestFrom(cr1, func(cr *certificatesv1.CertificateSigningRequest) { - cr.Spec.SignerName = fmt.Sprintf("%s/%s", clusterIssuer1.GetIssuerTypeIdentifier(), clusterIssuer1.Name) + cr.Spec.SignerName = fmt.Sprintf("%s.%s/%s", api.TestClusterIssuerGroupVersionResource.Resource, api.TestClusterIssuerGroupVersionResource.Group, clusterIssuer1.Name) }, ), testutil.TestClusterIssuerFrom(clusterIssuer1), @@ -666,7 +667,7 @@ func TestCertificateSigningRequestReconcilerReconcile(t *testing.T) { objects: []client.Object{ cmgen.CertificateSigningRequestFrom(cr1, func(cr *certificatesv1.CertificateSigningRequest) { - cr.Spec.SignerName = fmt.Sprintf("%s/%s", clusterIssuer1.GetIssuerTypeIdentifier(), clusterIssuer1.Name) + cr.Spec.SignerName = fmt.Sprintf("%s.%s/%s", api.TestClusterIssuerGroupVersionResource.Resource, api.TestClusterIssuerGroupVersionResource.Group, clusterIssuer1.Name) }, ), testutil.TestClusterIssuerFrom(clusterIssuer1), @@ -699,7 +700,7 @@ func TestCertificateSigningRequestReconcilerReconcile(t *testing.T) { objects: []client.Object{ cmgen.CertificateSigningRequestFrom(cr1, func(cr *certificatesv1.CertificateSigningRequest) { - cr.Spec.SignerName = fmt.Sprintf("%s/%s", clusterIssuer1.GetIssuerTypeIdentifier(), clusterIssuer1.Name) + cr.Spec.SignerName = fmt.Sprintf("%s.%s/%s", api.TestClusterIssuerGroupVersionResource.Resource, api.TestClusterIssuerGroupVersionResource.Group, clusterIssuer1.Name) }, func(cr *certificatesv1.CertificateSigningRequest) { cr.CreationTimestamp = fakeTimeObj2 @@ -721,7 +722,7 @@ func TestCertificateSigningRequestReconcilerReconcile(t *testing.T) { sign: successSigner("a-signed-certificate"), objects: []client.Object{ cmgen.CertificateSigningRequestFrom(cr1, func(cr *certificatesv1.CertificateSigningRequest) { - cr.Spec.SignerName = fmt.Sprintf("%s/%s.%s", issuer1.GetIssuerTypeIdentifier(), issuer1.Namespace, issuer1.Name) + cr.Spec.SignerName = fmt.Sprintf("%s.%s/%s.%s", api.TestIssuerGroupVersionResource.Resource, api.TestIssuerGroupVersionResource.Group, issuer1.Namespace, issuer1.Name) }), testutil.TestIssuerFrom(issuer1), }, @@ -734,7 +735,7 @@ func TestCertificateSigningRequestReconcilerReconcile(t *testing.T) { sign: successSigner("a-signed-certificate"), objects: []client.Object{ cmgen.CertificateSigningRequestFrom(cr1, func(cr *certificatesv1.CertificateSigningRequest) { - cr.Spec.SignerName = fmt.Sprintf("%s/%s", clusterIssuer1.GetIssuerTypeIdentifier(), clusterIssuer1.Name) + cr.Spec.SignerName = fmt.Sprintf("%s.%s/%s", api.TestClusterIssuerGroupVersionResource.Resource, api.TestClusterIssuerGroupVersionResource.Group, clusterIssuer1.Name) }), testutil.TestClusterIssuerFrom(clusterIssuer1), }, @@ -776,15 +777,19 @@ func TestCertificateSigningRequestReconcilerReconcile(t *testing.T) { controller := (&CertificateSigningRequestReconciler{ RequestController: RequestController{ - IssuerTypes: []v1alpha1.Issuer{&api.TestIssuer{}}, - ClusterIssuerTypes: []v1alpha1.Issuer{&api.TestClusterIssuer{}}, - FieldOwner: fieldOwner, - MaxRetryDuration: time.Minute, - EventSource: kubeutil.NewEventStore(), - Client: fakeClient, - Sign: tc.sign, - EventRecorder: fakeRecorder, - Clock: fakeClock2, + IssuerTypes: map[schema.GroupResource]v1alpha1.Issuer{ + api.TestIssuerGroupVersionResource.GroupResource(): &api.TestIssuer{}, + }, + ClusterIssuerTypes: map[schema.GroupResource]v1alpha1.Issuer{ + api.TestClusterIssuerGroupVersionResource.GroupResource(): &api.TestClusterIssuer{}, + }, + FieldOwner: fieldOwner, + MaxRetryDuration: time.Minute, + EventSource: kubeutil.NewEventStore(), + Client: fakeClient, + Sign: tc.sign, + EventRecorder: fakeRecorder, + Clock: fakeClock2, }, }).Init() @@ -817,8 +822,8 @@ func TestCertificateSigningRequestMatchIssuerType(t *testing.T) { type testcase struct { name string - issuerTypes []v1alpha1.Issuer - clusterIssuerTypes []v1alpha1.Issuer + issuerTypes map[schema.GroupResource]v1alpha1.Issuer + clusterIssuerTypes map[schema.GroupResource]v1alpha1.Issuer csr *certificatesv1.CertificateSigningRequest expectedIssuerType v1alpha1.Issuer @@ -856,48 +861,68 @@ func TestCertificateSigningRequestMatchIssuerType(t *testing.T) { expectedError: errormatch.ErrorContains("invalid signer name, should have format /: \"aaaaaa\""), }, { - name: "unknown issuer type identifier", - issuerTypes: []v1alpha1.Issuer{&api.TestIssuer{}}, - clusterIssuerTypes: []v1alpha1.Issuer{&api.TestClusterIssuer{}}, - csr: createCsr("aaaaa.testing.cert-manager.io/namespace.name"), + name: "unknown issuer type identifier", + issuerTypes: map[schema.GroupResource]v1alpha1.Issuer{ + api.TestIssuerGroupVersionResource.GroupResource(): &api.TestIssuer{}, + }, + clusterIssuerTypes: map[schema.GroupResource]v1alpha1.Issuer{ + api.TestClusterIssuerGroupVersionResource.GroupResource(): &api.TestClusterIssuer{}, + }, + csr: createCsr("aaaaa.testing.cert-manager.io/namespace.name"), expectedIssuerType: nil, expectedIssuerName: types.NamespacedName{}, expectedError: errormatch.ErrorContains("no issuer found for signer name: \"aaaaa.testing.cert-manager.io/namespace.name\""), }, { - name: "match issuer", - issuerTypes: []v1alpha1.Issuer{&api.TestIssuer{}}, - clusterIssuerTypes: []v1alpha1.Issuer{&api.TestClusterIssuer{}}, - csr: createCsr("testissuers.testing.cert-manager.io/namespace.name"), + name: "match issuer", + issuerTypes: map[schema.GroupResource]v1alpha1.Issuer{ + api.TestIssuerGroupVersionResource.GroupResource(): &api.TestIssuer{}, + }, + clusterIssuerTypes: map[schema.GroupResource]v1alpha1.Issuer{ + api.TestClusterIssuerGroupVersionResource.GroupResource(): &api.TestClusterIssuer{}, + }, + csr: createCsr("testissuers.testing.cert-manager.io/namespace.name"), expectedIssuerType: nil, expectedIssuerName: types.NamespacedName{}, expectedError: errormatch.ErrorContains("invalid SignerName, \"testissuers.testing.cert-manager.io\" is a namespaced issuer type, namespaced issuers are not supported for Kubernetes CSRs"), }, { - name: "match cluster issuer", - issuerTypes: []v1alpha1.Issuer{&api.TestIssuer{}}, - clusterIssuerTypes: []v1alpha1.Issuer{&api.TestClusterIssuer{}}, - csr: createCsr("testclusterissuers.testing.cert-manager.io/name"), + name: "match cluster issuer", + issuerTypes: map[schema.GroupResource]v1alpha1.Issuer{ + api.TestIssuerGroupVersionResource.GroupResource(): &api.TestIssuer{}, + }, + clusterIssuerTypes: map[schema.GroupResource]v1alpha1.Issuer{ + api.TestClusterIssuerGroupVersionResource.GroupResource(): &api.TestClusterIssuer{}, + }, + csr: createCsr("testclusterissuers.testing.cert-manager.io/name"), expectedIssuerType: &api.TestClusterIssuer{}, expectedIssuerName: types.NamespacedName{Name: "name"}, }, { - name: "cluster issuer with dot in name", - issuerTypes: []v1alpha1.Issuer{&api.TestIssuer{}}, - clusterIssuerTypes: []v1alpha1.Issuer{&api.TestClusterIssuer{}}, - csr: createCsr("testclusterissuers.testing.cert-manager.io/name.test"), + name: "cluster issuer with dot in name", + issuerTypes: map[schema.GroupResource]v1alpha1.Issuer{ + api.TestIssuerGroupVersionResource.GroupResource(): &api.TestIssuer{}, + }, + clusterIssuerTypes: map[schema.GroupResource]v1alpha1.Issuer{ + api.TestClusterIssuerGroupVersionResource.GroupResource(): &api.TestClusterIssuer{}, + }, + csr: createCsr("testclusterissuers.testing.cert-manager.io/name.test"), expectedIssuerType: &api.TestClusterIssuer{}, expectedIssuerName: types.NamespacedName{Name: "name.test"}, }, { - name: "cluster issuer with empty name", - issuerTypes: []v1alpha1.Issuer{&api.TestIssuer{}}, - clusterIssuerTypes: []v1alpha1.Issuer{&api.TestClusterIssuer{}}, - csr: createCsr("testclusterissuers.testing.cert-manager.io/"), + name: "cluster issuer with empty name", + issuerTypes: map[schema.GroupResource]v1alpha1.Issuer{ + api.TestIssuerGroupVersionResource.GroupResource(): &api.TestIssuer{}, + }, + clusterIssuerTypes: map[schema.GroupResource]v1alpha1.Issuer{ + api.TestClusterIssuerGroupVersionResource.GroupResource(): &api.TestClusterIssuer{}, + }, + csr: createCsr("testclusterissuers.testing.cert-manager.io/"), expectedIssuerType: &api.TestClusterIssuer{}, expectedIssuerName: types.NamespacedName{Name: ""}, diff --git a/controllers/combined_controller.go b/controllers/combined_controller.go index b856877..bcf8327 100644 --- a/controllers/combined_controller.go +++ b/controllers/combined_controller.go @@ -19,6 +19,8 @@ package controllers import ( "context" "fmt" + "maps" + "slices" "time" "k8s.io/apimachinery/pkg/runtime/schema" @@ -34,8 +36,14 @@ import ( ) type CombinedController struct { - IssuerTypes []v1alpha1.Issuer - ClusterIssuerTypes []v1alpha1.Issuer + // IssuerTypes is a map of empty namespaced issuer objects, each supported issuer type + // should have its own entry. The key should be the GroupResource for that issuer, the + // resource being the plural lowercase resource name. + IssuerTypes map[schema.GroupResource]v1alpha1.Issuer + // ClusterIssuerTypes is a map of empty cluster-scoped issuer objects, each supported issuer type + // should have its own entry. The key should be the GroupResource for that issuer, the + // resource being the plural lowercase resource name. + ClusterIssuerTypes map[schema.GroupResource]v1alpha1.Issuer FieldOwner string @@ -102,7 +110,10 @@ func (r *CombinedController) SetupWithManager(ctx context.Context, mgr ctrl.Mana r.Clock = clock.RealClock{} } - for _, issuerType := range append(r.IssuerTypes, r.ClusterIssuerTypes...) { + for _, issuerType := range slices.Concat( + slices.Collect(maps.Values(r.IssuerTypes)), + slices.Collect(maps.Values(r.ClusterIssuerTypes)), + ) { if err = (&IssuerReconciler{ ForObject: issuerType, diff --git a/controllers/combined_controller_integration_test.go b/controllers/combined_controller_integration_test.go index 1339bc2..1cdb305 100644 --- a/controllers/combined_controller_integration_test.go +++ b/controllers/combined_controller_integration_test.go @@ -71,10 +71,14 @@ func TestCombinedControllerTemporaryFailedCertificateRequestRetrigger(t *testing ctx = setupControllersAPIServerAndClient(t, ctx, kubeClients, func(mgr ctrl.Manager) controllerInterface { return &CombinedController{ - IssuerTypes: []v1alpha1.Issuer{&api.TestIssuer{}}, - ClusterIssuerTypes: []v1alpha1.Issuer{&api.TestClusterIssuer{}}, - FieldOwner: fieldOwner, - MaxRetryDuration: time.Minute, + IssuerTypes: map[schema.GroupResource]v1alpha1.Issuer{ + api.TestIssuerGroupVersionResource.GroupResource(): &api.TestIssuer{}, + }, + ClusterIssuerTypes: map[schema.GroupResource]v1alpha1.Issuer{ + api.TestClusterIssuerGroupVersionResource.GroupResource(): &api.TestClusterIssuer{}, + }, + FieldOwner: fieldOwner, + MaxRetryDuration: time.Minute, Check: func(_ context.Context, _ v1alpha1.Issuer) error { select { case err := <-checkResult: @@ -457,10 +461,14 @@ func TestCombinedControllerTiming(t *testing.T) { //nolint:tparallel ctx := setupControllersAPIServerAndClient(t, ctx, kubeClients, func(mgr ctrl.Manager) controllerInterface { return &CombinedController{ - IssuerTypes: []v1alpha1.Issuer{&api.TestIssuer{}}, - ClusterIssuerTypes: []v1alpha1.Issuer{&api.TestClusterIssuer{}}, - FieldOwner: fieldOwner, - MaxRetryDuration: tc.maxRetryDuration, + IssuerTypes: map[schema.GroupResource]v1alpha1.Issuer{ + api.TestIssuerGroupVersionResource.GroupResource(): &api.TestIssuer{}, + }, + ClusterIssuerTypes: map[schema.GroupResource]v1alpha1.Issuer{ + api.TestClusterIssuerGroupVersionResource.GroupResource(): &api.TestClusterIssuer{}, + }, + FieldOwner: fieldOwner, + MaxRetryDuration: tc.maxRetryDuration, Check: func(_ context.Context, _ v1alpha1.Issuer) error { resultsMutex.Lock() defer resultsMutex.Unlock() diff --git a/controllers/predicates_test.go b/controllers/predicates_test.go index 5e9a295..e77e221 100644 --- a/controllers/predicates_test.go +++ b/controllers/predicates_test.go @@ -397,10 +397,6 @@ func (ti *testissuer) GetStatus() *v1alpha1.IssuerStatus { return ti.Status } -func (ti *testissuer) GetIssuerTypeIdentifier() string { - return "test" -} - func TestLinkedIssuerPredicate(t *testing.T) { predicate := controllers.LinkedIssuerPredicate{} diff --git a/controllers/request_controller.go b/controllers/request_controller.go index b1c0474..ee6af3d 100644 --- a/controllers/request_controller.go +++ b/controllers/request_controller.go @@ -53,8 +53,14 @@ import ( // is used to interact with the request object. // Currently, we support cert-manager CertificateRequests and Kubernetes CertificateSigningRequests. type RequestController struct { - IssuerTypes []v1alpha1.Issuer - ClusterIssuerTypes []v1alpha1.Issuer + // IssuerTypes is a map of empty namespaced issuer objects, each supported issuer type + // should have its own entry. The key should be the GroupResource for that issuer, the + // resource being the plural lowercase resource name. + IssuerTypes map[schema.GroupResource]v1alpha1.Issuer + // Cluster is a map of empty cluster-scoped issuer objects, each supported issuer type + // should have its own entry. The key should be the GroupResource for that issuer, the + // resource being the plural lowercase resource name. + ClusterIssuerTypes map[schema.GroupResource]v1alpha1.Issuer FieldOwner string MaxRetryDuration time.Duration @@ -97,8 +103,9 @@ type MatchIssuerType func(client.Object) (v1alpha1.Issuer, client.ObjectKey, err type RequestObjectHelperCreator func(client.Object) RequestObjectHelper type IssuerType struct { - Type v1alpha1.Issuer - IsNamespaced bool + Type v1alpha1.Issuer + IssuerTypeIdentifier string + IsNamespaced bool } func (r *RequestController) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) { @@ -352,17 +359,20 @@ func (r *RequestController) reconcileStatusPatch( func (r *RequestController) setAllIssuerTypesWithGroupVersionKind(scheme *runtime.Scheme) error { issuers := make([]IssuerType, 0, len(r.IssuerTypes)+len(r.ClusterIssuerTypes)) - for _, issuer := range r.IssuerTypes { + for gr, issuer := range r.IssuerTypes { issuers = append(issuers, IssuerType{ - Type: issuer, - IsNamespaced: true, + Type: issuer, + // "." + IssuerTypeIdentifier: fmt.Sprintf("%s.%s", gr.Resource, gr.Group), + IsNamespaced: true, }) - } - for _, issuer := range r.ClusterIssuerTypes { + for gr, issuer := range r.ClusterIssuerTypes { issuers = append(issuers, IssuerType{ - Type: issuer, - IsNamespaced: false, + Type: issuer, + // "." + IssuerTypeIdentifier: fmt.Sprintf("%s.%s", gr.Resource, gr.Group), + IsNamespaced: false, }) } diff --git a/docs/api.md b/docs/api.md index 699a54b..10c9cfd 100644 --- a/docs/api.md +++ b/docs/api.md @@ -50,7 +50,7 @@ const ( ``` -## type [Issuer]() +## type [Issuer]() @@ -58,17 +58,8 @@ const ( type Issuer interface { runtime.Object metav1.Object - GetStatus() *IssuerStatus - // GetIssuerTypeIdentifier returns a string that uniquely identifies the - // issuer type. This should be a constant across all instances of this - // issuer type. This string is used as a prefix when determining the - // issuer type for a Kubernetes CertificateSigningRequest resource based - // on the issuerName field. The value should be formatted as follows: - // ".". For example, the value - // "simpleclusterissuers.issuer.cert-manager.io" will match all CSRs - // with an issuerName set to eg. "simpleclusterissuers.issuer.cert-manager.io/issuer1". - GetIssuerTypeIdentifier() string + GetStatus() *IssuerStatus } ``` diff --git a/examples/simple/api/simple_cluster_issuer_types.go b/examples/simple/api/simple_cluster_issuer_types.go index 15ef353..0e4f66d 100644 --- a/examples/simple/api/simple_cluster_issuer_types.go +++ b/examples/simple/api/simple_cluster_issuer_types.go @@ -18,10 +18,13 @@ package api import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime/schema" "github.com/cert-manager/issuer-lib/api/v1alpha1" ) +var SimpleClusterIssuerGroupVersionResource schema.GroupVersionResource = SchemeGroupVersion.WithResource("simpleclusterissuers") + // +kubebuilder:object:root=true // +kubebuilder:subresource:status // +kubebuilder:resource:scope=Cluster @@ -46,10 +49,6 @@ func (vi *SimpleClusterIssuer) GetStatus() *v1alpha1.IssuerStatus { return &vi.Status } -func (vi *SimpleClusterIssuer) GetIssuerTypeIdentifier() string { - return "simpleclusterissuers.testing.cert-manager.io" -} - var _ v1alpha1.Issuer = &SimpleClusterIssuer{} // +kubebuilder:object:root=true diff --git a/examples/simple/api/simple_issuer_types.go b/examples/simple/api/simple_issuer_types.go index 3ca1693..a16c8df 100644 --- a/examples/simple/api/simple_issuer_types.go +++ b/examples/simple/api/simple_issuer_types.go @@ -18,10 +18,13 @@ package api import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime/schema" "github.com/cert-manager/issuer-lib/api/v1alpha1" ) +var SimpleIssuerGroupVersionResource schema.GroupVersionResource = SchemeGroupVersion.WithResource("simpleissuers") + // +kubebuilder:object:root=true // +kubebuilder:subresource:status // +kubebuilder:printcolumn:name="Ready",type="string",JSONPath=".status.conditions[?(@.type==\"Ready\")].status" @@ -45,10 +48,6 @@ func (vi *SimpleIssuer) GetStatus() *v1alpha1.IssuerStatus { return &vi.Status } -func (vi *SimpleIssuer) GetIssuerTypeIdentifier() string { - return "simpleissuers.testing.cert-manager.io" -} - var _ v1alpha1.Issuer = &SimpleIssuer{} // +kubebuilder:object:root=true diff --git a/examples/simple/controller/signer.go b/examples/simple/controller/signer.go index f1f15df..16eceba 100644 --- a/examples/simple/controller/signer.go +++ b/examples/simple/controller/signer.go @@ -27,6 +27,7 @@ import ( "math/big" "time" + "k8s.io/apimachinery/pkg/runtime/schema" ctrl "sigs.k8s.io/controller-runtime" "simple-issuer/api" @@ -51,8 +52,12 @@ type Signer struct{} func (s Signer) SetupWithManager(ctx context.Context, mgr ctrl.Manager) error { return (&controllers.CombinedController{ - IssuerTypes: []v1alpha1.Issuer{&api.SimpleIssuer{}}, - ClusterIssuerTypes: []v1alpha1.Issuer{&api.SimpleClusterIssuer{}}, + IssuerTypes: map[schema.GroupResource]v1alpha1.Issuer{ + api.SimpleIssuerGroupVersionResource.GroupResource(): &api.SimpleIssuer{}, + }, + ClusterIssuerTypes: map[schema.GroupResource]v1alpha1.Issuer{ + api.SimpleClusterIssuerGroupVersionResource.GroupResource(): &api.SimpleClusterIssuer{}, + }, FieldOwner: "simpleissuer.testing.cert-manager.io", MaxRetryDuration: 1 * time.Minute, diff --git a/internal/testapi/api/test_cluster_issuer_types.go b/internal/testapi/api/test_cluster_issuer_types.go index 3b6a846..15b924a 100644 --- a/internal/testapi/api/test_cluster_issuer_types.go +++ b/internal/testapi/api/test_cluster_issuer_types.go @@ -18,10 +18,13 @@ package api import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime/schema" "github.com/cert-manager/issuer-lib/api/v1alpha1" ) +var TestClusterIssuerGroupVersionResource schema.GroupVersionResource = SchemeGroupVersion.WithResource("testclusterissuers") + // +kubebuilder:object:root=true // +kubebuilder:subresource:status // +kubebuilder:resource:scope=Cluster @@ -46,10 +49,6 @@ func (vi *TestClusterIssuer) GetStatus() *v1alpha1.IssuerStatus { return &vi.Status } -func (vi *TestClusterIssuer) GetIssuerTypeIdentifier() string { - return "testclusterissuers.testing.cert-manager.io" -} - var _ v1alpha1.Issuer = &TestClusterIssuer{} // +kubebuilder:object:root=true diff --git a/internal/testapi/api/test_issuer_types.go b/internal/testapi/api/test_issuer_types.go index efbcde4..5a0b932 100644 --- a/internal/testapi/api/test_issuer_types.go +++ b/internal/testapi/api/test_issuer_types.go @@ -18,10 +18,13 @@ package api import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime/schema" "github.com/cert-manager/issuer-lib/api/v1alpha1" ) +var TestIssuerGroupVersionResource schema.GroupVersionResource = SchemeGroupVersion.WithResource("testissuers") + // +kubebuilder:object:root=true // +kubebuilder:subresource:status // +kubebuilder:printcolumn:name="Ready",type="string",JSONPath=".status.conditions[?(@.type==\"Ready\")].status" @@ -45,10 +48,6 @@ func (vi *TestIssuer) GetStatus() *v1alpha1.IssuerStatus { return &vi.Status } -func (vi *TestIssuer) GetIssuerTypeIdentifier() string { - return "testissuers.testing.cert-manager.io" -} - var _ v1alpha1.Issuer = &TestIssuer{} // +kubebuilder:object:root=true