Skip to content

Commit 60c13c6

Browse files
authored
Merge pull request #4217 from camilamacedo86/fix-rbac-generattion-external-types
🐛 fix support for external types by allowing the domain be empty, and properly generate the sample for cert-manager.
2 parents 5d6cffa + 9dd5480 commit 60c13c6

File tree

24 files changed

+58
-66
lines changed

24 files changed

+58
-66
lines changed

docs/book/src/reference/using_an_external_resource.md

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -28,22 +28,22 @@ kubebuilder create api --group <theirgroup> --version <theirversion> --kind <the
2828
For example, if you're managing Certificates from Cert Manager:
2929

3030
```shell
31-
kubebuilder create api --group certmanager --version v1 --kind Certificate --controller=true --resource=false --external-api-path=github.com/cert-manager/cert-manager/pkg/apis/certmanager/v1 --external-api-domain=cert-manager.io
31+
kubebuilder create api --group certmanager --version v1 --kind Certificate --controller=true --resource=false --external-api-path=github.com/cert-manager/cert-manager/pkg/apis/certmanager/v1 --external-api-domain=io
3232
```
3333

34-
See the RBAC markers generated for this:
34+
See the RBAC [markers][markers-rbac] generated for this:
3535

3636
```go
37-
// +kubebuilder:rbac:groups=certmanager.cert-manager.io,resources=certificates,verbs=get;list;watch;create;update;patch;delete
38-
// +kubebuilder:rbac:groups=certmanager.cert-manager.io,resources=certificates/status,verbs=get;update;patch
39-
// +kubebuilder:rbac:groups=certmanager.cert-manager.io,resources=certificates/finalizers,verbs=update
37+
// +kubebuilder:rbac:groups=cert-manager.io,resources=certificates,verbs=get;list;watch;create;update;patch;delete
38+
// +kubebuilder:rbac:groups=cert-manager.io,resources=certificates/status,verbs=get;update;patch
39+
// +kubebuilder:rbac:groups=cert-manager.io,resources=certificates/finalizers,verbs=update
4040
```
4141

4242
Also, the RBAC role:
4343

4444
```ymal
4545
- apiGroups:
46-
- certmanager.cert-manager.io
46+
- cert-manager.io
4747
resources:
4848
- certificates
4949
verbs:
@@ -55,13 +55,13 @@ Also, the RBAC role:
5555
- update
5656
- watch
5757
- apiGroups:
58-
- certmanager.cert-manager.io
58+
- cert-manager.io
5959
resources:
6060
- certificates/finalizers
6161
verbs:
6262
- update
6363
- apiGroups:
64-
- certmanager.cert-manager.io
64+
- cert-manager.io
6565
resources:
6666
- certificates/status
6767
verbs:
@@ -126,15 +126,15 @@ For instance, to create a controller to manage Deployment the command would be l
126126
create api --group apps --version v1 --kind Deployment --controller=true --resource=false
127127
```
128128

129-
See the RBAC markers generated for this:
129+
See the RBAC [markers][markers-rbac] generated for this:
130130

131131
```go
132132
// +kubebuilder:rbac:groups=apps,resources=deployments,verbs=get;list;watch;create;update;patch;delete
133133
// +kubebuilder:rbac:groups=apps,resources=deployments/status,verbs=get;update;patch
134134
// +kubebuilder:rbac:groups=apps,resources=deployments/finalizers,verbs=update
135135
```
136136

137-
Also, the RBAC for the above markers:
137+
Also, the RBAC for the above [markers][markers-rbac]:
138138

139139
```yaml
140140
- apiGroups:
@@ -176,4 +176,4 @@ See an example:
176176
```go
177177
kubebuilder create webhook --group core --version v1 --kind Pod --programmatic-validation
178178
```
179-
179+
[markers-rbac]: ./markers/rbac.md

pkg/plugins/golang/v4/api.go

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -146,14 +146,6 @@ func (p *createAPISubcommand) InjectResource(res *resource.Resource) error {
146146
}
147147
}
148148

149-
// Ensure that if any external API flag is set, both must be provided.
150-
if len(p.options.ExternalAPIPath) != 0 || len(p.options.ExternalAPIDomain) != 0 {
151-
if len(p.options.ExternalAPIPath) == 0 || len(p.options.ExternalAPIDomain) == 0 {
152-
return errors.New("Both '--external-api-path' and '--external-api-domain' must be " +
153-
"specified together when referencing an external API.")
154-
}
155-
}
156-
157149
p.options.UpdateResource(p.resource, p.config)
158150

159151
if err := p.resource.Validate(); err != nil {

test/testdata/generate.sh

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,9 @@ function scaffold_test_project {
4646
$kb create api --group crew --version v1 --kind Admiral --plural=admirales --controller=true --resource=true --namespaced=false --make=false
4747
$kb create webhook --group crew --version v1 --kind Admiral --plural=admirales --defaulting
4848
# Controller for External types
49-
$kb create api --group certmanager --version v1 --kind Certificate --controller=true --resource=false --make=false --external-api-path=github.com/cert-manager/cert-manager/pkg/apis/certmanager/v1 --external-api-domain=cert-manager.io
49+
$kb create api --group "cert-manager" --version v1 --kind Certificate --controller=true --resource=false --make=false --external-api-path=github.com/cert-manager/cert-manager/pkg/apis/certmanager/v1 --external-api-domain=io
5050
# Webhook for External types
51-
$kb create webhook --group certmanager --version v1 --kind Issuer --defaulting --external-api-path=github.com/cert-manager/cert-manager/pkg/apis/certmanager/v1 --external-api-domain=cert-manager.io
51+
$kb create webhook --group "cert-manager" --version v1 --kind Issuer --defaulting --external-api-path=github.com/cert-manager/cert-manager/pkg/apis/certmanager/v1 --external-api-domain=io
5252
# Webhook for Core type
5353
$kb create webhook --group core --version v1 --kind Pod --defaulting
5454
fi
@@ -76,9 +76,9 @@ function scaffold_test_project {
7676
$kb create api --group foo --version v1 --kind Bar --controller=true --resource=true --make=false
7777
$kb create api --group fiz --version v1 --kind Bar --controller=true --resource=true --make=false
7878
# Controller for External types
79-
$kb create api --group certmanager --version v1 --kind Certificate --controller=true --resource=false --make=false --external-api-path=github.com/cert-manager/cert-manager/pkg/apis/certmanager/v1 --external-api-domain=cert-manager.io
79+
$kb create api --group "cert-manager" --version v1 --kind Certificate --controller=true --resource=false --make=false --external-api-path=github.com/cert-manager/cert-manager/pkg/apis/certmanager/v1 --external-api-domain=io
8080
# Webhook for External types
81-
$kb create webhook --group certmanager --version v1 --kind Issuer --defaulting --external-api-path=github.com/cert-manager/cert-manager/pkg/apis/certmanager/v1 --external-api-domain=cert-manager.io
81+
$kb create webhook --group "cert-manager" --version v1 --kind Issuer --defaulting --external-api-path=github.com/cert-manager/cert-manager/pkg/apis/certmanager/v1 --external-api-domain=io
8282
# Webhook for Core type
8383
$kb create webhook --group core --version v1 --kind Pod --programmatic-validation
8484
fi

testdata/project-v4-multigroup/PROJECT

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -127,15 +127,15 @@ resources:
127127
path: sigs.k8s.io/kubebuilder/testdata/project-v4-multigroup/api/fiz/v1
128128
version: v1
129129
- controller: true
130-
domain: cert-manager.io
130+
domain: io
131131
external: true
132-
group: certmanager
132+
group: cert-manager
133133
kind: Certificate
134134
path: github.com/cert-manager/cert-manager/pkg/apis/certmanager/v1
135135
version: v1
136-
- domain: cert-manager.io
136+
- domain: io
137137
external: true
138-
group: certmanager
138+
group: cert-manager
139139
kind: Issuer
140140
path: github.com/cert-manager/cert-manager/pkg/apis/certmanager/v1
141141
version: v1

testdata/project-v4-multigroup/cmd/main.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,15 +48,15 @@ import (
4848
shipv1beta1 "sigs.k8s.io/kubebuilder/testdata/project-v4-multigroup/api/ship/v1beta1"
4949
shipv2alpha1 "sigs.k8s.io/kubebuilder/testdata/project-v4-multigroup/api/ship/v2alpha1"
5050
appscontroller "sigs.k8s.io/kubebuilder/testdata/project-v4-multigroup/internal/controller/apps"
51-
certmanagercontroller "sigs.k8s.io/kubebuilder/testdata/project-v4-multigroup/internal/controller/certmanager"
51+
certmanagercontroller "sigs.k8s.io/kubebuilder/testdata/project-v4-multigroup/internal/controller/cert-manager"
5252
crewcontroller "sigs.k8s.io/kubebuilder/testdata/project-v4-multigroup/internal/controller/crew"
5353
examplecomcontroller "sigs.k8s.io/kubebuilder/testdata/project-v4-multigroup/internal/controller/example.com"
5454
fizcontroller "sigs.k8s.io/kubebuilder/testdata/project-v4-multigroup/internal/controller/fiz"
5555
foocontroller "sigs.k8s.io/kubebuilder/testdata/project-v4-multigroup/internal/controller/foo"
5656
foopolicycontroller "sigs.k8s.io/kubebuilder/testdata/project-v4-multigroup/internal/controller/foo.policy"
5757
seacreaturescontroller "sigs.k8s.io/kubebuilder/testdata/project-v4-multigroup/internal/controller/sea-creatures"
5858
shipcontroller "sigs.k8s.io/kubebuilder/testdata/project-v4-multigroup/internal/controller/ship"
59-
webhookcertmanagerv1 "sigs.k8s.io/kubebuilder/testdata/project-v4-multigroup/internal/webhook/certmanager/v1"
59+
webhookcertmanagerv1 "sigs.k8s.io/kubebuilder/testdata/project-v4-multigroup/internal/webhook/cert-manager/v1"
6060
webhookcorev1 "sigs.k8s.io/kubebuilder/testdata/project-v4-multigroup/internal/webhook/core/v1"
6161
webhookcrewv1 "sigs.k8s.io/kubebuilder/testdata/project-v4-multigroup/internal/webhook/crew/v1"
6262
webhookexamplecomv1alpha1 "sigs.k8s.io/kubebuilder/testdata/project-v4-multigroup/internal/webhook/example.com/v1alpha1"

testdata/project-v4-multigroup/config/crd/patches/cainjection_in_certmanager_issuers.yaml renamed to testdata/project-v4-multigroup/config/crd/patches/cainjection_in_cert-manager_issuers.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ kind: CustomResourceDefinition
44
metadata:
55
annotations:
66
cert-manager.io/inject-ca-from: CERTIFICATE_NAMESPACE/CERTIFICATE_NAME
7-
name: issuers.certmanager.cert-manager.io
7+
name: issuers.cert-manager.io

testdata/project-v4-multigroup/config/crd/patches/webhook_in_certmanager_issuers.yaml renamed to testdata/project-v4-multigroup/config/crd/patches/webhook_in_cert-manager_issuers.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
apiVersion: apiextensions.k8s.io/v1
33
kind: CustomResourceDefinition
44
metadata:
5-
name: issuers.certmanager.cert-manager.io
5+
name: issuers.cert-manager.io
66
spec:
77
conversion:
88
strategy: Webhook

testdata/project-v4-multigroup/config/rbac/role.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ rules:
4646
- patch
4747
- update
4848
- apiGroups:
49-
- certmanager.cert-manager.io
49+
- cert-manager.io
5050
resources:
5151
- certificates
5252
verbs:
@@ -58,13 +58,13 @@ rules:
5858
- update
5959
- watch
6060
- apiGroups:
61-
- certmanager.cert-manager.io
61+
- cert-manager.io
6262
resources:
6363
- certificates/finalizers
6464
verbs:
6565
- update
6666
- apiGroups:
67-
- certmanager.cert-manager.io
67+
- cert-manager.io
6868
resources:
6969
- certificates/status
7070
verbs:

testdata/project-v4-multigroup/config/webhook/manifests.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@ webhooks:
1010
service:
1111
name: webhook-service
1212
namespace: system
13-
path: /mutate-certmanager-cert-manager-io-v1-issuer
13+
path: /mutate-cert-manager-io-v1-issuer
1414
failurePolicy: Fail
1515
name: missuer-v1.kb.io
1616
rules:
1717
- apiGroups:
18-
- certmanager.cert-manager.io
18+
- cert-manager.io
1919
apiVersions:
2020
- v1
2121
operations:

testdata/project-v4-multigroup/dist/install.yaml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1177,7 +1177,7 @@ rules:
11771177
- patch
11781178
- update
11791179
- apiGroups:
1180-
- certmanager.cert-manager.io
1180+
- cert-manager.io
11811181
resources:
11821182
- certificates
11831183
verbs:
@@ -1189,13 +1189,13 @@ rules:
11891189
- update
11901190
- watch
11911191
- apiGroups:
1192-
- certmanager.cert-manager.io
1192+
- cert-manager.io
11931193
resources:
11941194
- certificates/finalizers
11951195
verbs:
11961196
- update
11971197
- apiGroups:
1198-
- certmanager.cert-manager.io
1198+
- cert-manager.io
11991199
resources:
12001200
- certificates/status
12011201
verbs:
@@ -1820,12 +1820,12 @@ webhooks:
18201820
service:
18211821
name: project-v4-multigroup-webhook-service
18221822
namespace: project-v4-multigroup-system
1823-
path: /mutate-certmanager-cert-manager-io-v1-issuer
1823+
path: /mutate-cert-manager-io-v1-issuer
18241824
failurePolicy: Fail
18251825
name: missuer-v1.kb.io
18261826
rules:
18271827
- apiGroups:
1828-
- certmanager.cert-manager.io
1828+
- cert-manager.io
18291829
apiVersions:
18301830
- v1
18311831
operations:

testdata/project-v4-multigroup/internal/controller/certmanager/certificate_controller.go renamed to testdata/project-v4-multigroup/internal/controller/cert-manager/certificate_controller.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@ type CertificateReconciler struct {
3232
Scheme *runtime.Scheme
3333
}
3434

35-
// +kubebuilder:rbac:groups=certmanager.cert-manager.io,resources=certificates,verbs=get;list;watch;create;update;patch;delete
36-
// +kubebuilder:rbac:groups=certmanager.cert-manager.io,resources=certificates/status,verbs=get;update;patch
37-
// +kubebuilder:rbac:groups=certmanager.cert-manager.io,resources=certificates/finalizers,verbs=update
35+
// +kubebuilder:rbac:groups=cert-manager.io,resources=certificates,verbs=get;list;watch;create;update;patch;delete
36+
// +kubebuilder:rbac:groups=cert-manager.io,resources=certificates/status,verbs=get;update;patch
37+
// +kubebuilder:rbac:groups=cert-manager.io,resources=certificates/finalizers,verbs=update
3838

3939
// Reconcile is part of the main kubernetes reconciliation loop which aims to
4040
// move the current state of the cluster closer to the desired state.
@@ -57,6 +57,6 @@ func (r *CertificateReconciler) Reconcile(ctx context.Context, req ctrl.Request)
5757
func (r *CertificateReconciler) SetupWithManager(mgr ctrl.Manager) error {
5858
return ctrl.NewControllerManagedBy(mgr).
5959
For(&certmanagerv1.Certificate{}).
60-
Named("certmanager-certificate").
60+
Named("cert-manager-certificate").
6161
Complete(r)
6262
}

testdata/project-v4-multigroup/internal/webhook/certmanager/v1/issuer_webhook.go renamed to testdata/project-v4-multigroup/internal/webhook/cert-manager/v1/issuer_webhook.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ func SetupIssuerWebhookWithManager(mgr ctrl.Manager) error {
4040

4141
// TODO(user): EDIT THIS FILE! THIS IS SCAFFOLDING FOR YOU TO OWN!
4242

43-
// +kubebuilder:webhook:path=/mutate-certmanager-cert-manager-io-v1-issuer,mutating=true,failurePolicy=fail,sideEffects=None,groups=certmanager.cert-manager.io,resources=issuers,verbs=create;update,versions=v1,name=missuer-v1.kb.io,admissionReviewVersions=v1
43+
// +kubebuilder:webhook:path=/mutate-cert-manager-io-v1-issuer,mutating=true,failurePolicy=fail,sideEffects=None,groups=cert-manager.io,resources=issuers,verbs=create;update,versions=v1,name=missuer-v1.kb.io,admissionReviewVersions=v1
4444

4545
// IssuerCustomDefaulter struct is responsible for setting default values on the custom resource of the
4646
// Kind Issuer when those are created or updated.

testdata/project-v4/PROJECT

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,15 +46,15 @@ resources:
4646
defaulting: true
4747
webhookVersion: v1
4848
- controller: true
49-
domain: cert-manager.io
49+
domain: io
5050
external: true
51-
group: certmanager
51+
group: cert-manager
5252
kind: Certificate
5353
path: github.com/cert-manager/cert-manager/pkg/apis/certmanager/v1
5454
version: v1
55-
- domain: cert-manager.io
55+
- domain: io
5656
external: true
57-
group: certmanager
57+
group: cert-manager
5858
kind: Issuer
5959
path: github.com/cert-manager/cert-manager/pkg/apis/certmanager/v1
6060
version: v1

testdata/project-v4/config/crd/patches/cainjection_in_issuers.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ kind: CustomResourceDefinition
44
metadata:
55
annotations:
66
cert-manager.io/inject-ca-from: CERTIFICATE_NAMESPACE/CERTIFICATE_NAME
7-
name: issuers.certmanager.cert-manager.io
7+
name: issuers.cert-manager.io

testdata/project-v4/config/crd/patches/webhook_in_issuers.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
apiVersion: apiextensions.k8s.io/v1
33
kind: CustomResourceDefinition
44
metadata:
5-
name: issuers.certmanager.cert-manager.io
5+
name: issuers.cert-manager.io
66
spec:
77
conversion:
88
strategy: Webhook

testdata/project-v4/config/rbac/role.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ metadata:
55
name: manager-role
66
rules:
77
- apiGroups:
8-
- certmanager.cert-manager.io
8+
- cert-manager.io
99
resources:
1010
- certificates
1111
verbs:
@@ -17,13 +17,13 @@ rules:
1717
- update
1818
- watch
1919
- apiGroups:
20-
- certmanager.cert-manager.io
20+
- cert-manager.io
2121
resources:
2222
- certificates/finalizers
2323
verbs:
2424
- update
2525
- apiGroups:
26-
- certmanager.cert-manager.io
26+
- cert-manager.io
2727
resources:
2828
- certificates/status
2929
verbs:

testdata/project-v4/config/webhook/manifests.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,12 @@ webhooks:
5050
service:
5151
name: webhook-service
5252
namespace: system
53-
path: /mutate-certmanager-cert-manager-io-v1-issuer
53+
path: /mutate-cert-manager-io-v1-issuer
5454
failurePolicy: Fail
5555
name: missuer-v1.kb.io
5656
rules:
5757
- apiGroups:
58-
- certmanager.cert-manager.io
58+
- cert-manager.io
5959
apiVersions:
6060
- v1
6161
operations:

testdata/project-v4/dist/install.yaml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -405,7 +405,7 @@ metadata:
405405
name: project-v4-manager-role
406406
rules:
407407
- apiGroups:
408-
- certmanager.cert-manager.io
408+
- cert-manager.io
409409
resources:
410410
- certificates
411411
verbs:
@@ -417,13 +417,13 @@ rules:
417417
- update
418418
- watch
419419
- apiGroups:
420-
- certmanager.cert-manager.io
420+
- cert-manager.io
421421
resources:
422422
- certificates/finalizers
423423
verbs:
424424
- update
425425
- apiGroups:
426-
- certmanager.cert-manager.io
426+
- cert-manager.io
427427
resources:
428428
- certificates/status
429429
verbs:
@@ -694,12 +694,12 @@ webhooks:
694694
service:
695695
name: project-v4-webhook-service
696696
namespace: project-v4-system
697-
path: /mutate-certmanager-cert-manager-io-v1-issuer
697+
path: /mutate-cert-manager-io-v1-issuer
698698
failurePolicy: Fail
699699
name: missuer-v1.kb.io
700700
rules:
701701
- apiGroups:
702-
- certmanager.cert-manager.io
702+
- cert-manager.io
703703
apiVersions:
704704
- v1
705705
operations:

testdata/project-v4/internal/controller/certificate_controller.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@ type CertificateReconciler struct {
3232
Scheme *runtime.Scheme
3333
}
3434

35-
// +kubebuilder:rbac:groups=certmanager.cert-manager.io,resources=certificates,verbs=get;list;watch;create;update;patch;delete
36-
// +kubebuilder:rbac:groups=certmanager.cert-manager.io,resources=certificates/status,verbs=get;update;patch
37-
// +kubebuilder:rbac:groups=certmanager.cert-manager.io,resources=certificates/finalizers,verbs=update
35+
// +kubebuilder:rbac:groups=cert-manager.io,resources=certificates,verbs=get;list;watch;create;update;patch;delete
36+
// +kubebuilder:rbac:groups=cert-manager.io,resources=certificates/status,verbs=get;update;patch
37+
// +kubebuilder:rbac:groups=cert-manager.io,resources=certificates/finalizers,verbs=update
3838

3939
// Reconcile is part of the main kubernetes reconciliation loop which aims to
4040
// move the current state of the cluster closer to the desired state.

0 commit comments

Comments
 (0)