Skip to content

Commit a07a90a

Browse files
authored
feat(api): add crd and reconciler templates for FederatedService (#136)
I am adding these templates to avoid conflicts when we will work on different controllers in parallel. How I tested this change: ``` keast apply -f - <<EOF apiVersion: federation.openshift-service-mesh.io/v1alpha1 kind: FederatedService metadata: name: test namespace: istio-system spec: foo: bar EOF ``` I got the following log: ``` 2025-01-20T00:12:33Z INFO Reconciling object {"controller": "federatedservice", "controllerGroup": "federation.openshift-service-mesh.io", "controllerKind": "FederatedService", "FederatedService": {"name":"test","namespace":"istio-system"}, "namespace": "istio-system", "name": "test", "reconcileID": "04eaf13a-6438-4428-807e-f2db9d69a521", "name": "test", "namespace": "istio-system"} ``` Signed-off-by: Jacek Ewertowski <[email protected]>
1 parent 85a2220 commit a07a90a

13 files changed

+383
-2
lines changed

PROJECT

+9
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,13 @@ resources:
1616
kind: MeshFederation
1717
path: github.com/openshift-service-mesh/federation/api/v1alpha1
1818
version: v1alpha1
19+
- api:
20+
crdVersion: v1
21+
namespaced: true
22+
controller: true
23+
domain: openshift-service-mesh.io
24+
group: federation
25+
kind: FederatedService
26+
path: github.com/openshift-service-mesh/federation/api/v1alpha1
27+
version: v1alpha1
1928
version: "3"
+62
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
// Copyright Red Hat, Inc.
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the License);
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an AS IS BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
package v1alpha1
16+
17+
import (
18+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
19+
)
20+
21+
// EDIT THIS FILE! THIS IS SCAFFOLDING FOR YOU TO OWN!
22+
// NOTE: json tags are required. Any new fields you add must have json tags for the fields to be serialized.
23+
24+
// FederatedServiceSpec defines the desired state of FederatedService.
25+
type FederatedServiceSpec struct {
26+
// INSERT ADDITIONAL SPEC FIELDS - desired state of cluster
27+
// Important: Run "make" to regenerate code after modifying this file
28+
29+
// Foo is an example field of FederatedService. Edit federatedservice_types.go to remove/update
30+
Foo string `json:"foo,omitempty"`
31+
}
32+
33+
// FederatedServiceStatus defines the observed state of FederatedService.
34+
type FederatedServiceStatus struct {
35+
// INSERT ADDITIONAL STATUS FIELD - define observed state of cluster
36+
// Important: Run "make" to regenerate code after modifying this file
37+
}
38+
39+
// +kubebuilder:object:root=true
40+
// +kubebuilder:subresource:status
41+
42+
// FederatedService is the Schema for the federatedservices API.
43+
type FederatedService struct {
44+
metav1.TypeMeta `json:",inline"`
45+
metav1.ObjectMeta `json:"metadata,omitempty"`
46+
47+
Spec FederatedServiceSpec `json:"spec,omitempty"`
48+
Status FederatedServiceStatus `json:"status,omitempty"`
49+
}
50+
51+
// +kubebuilder:object:root=true
52+
53+
// FederatedServiceList contains a list of FederatedService.
54+
type FederatedServiceList struct {
55+
metav1.TypeMeta `json:",inline"`
56+
metav1.ListMeta `json:"metadata,omitempty"`
57+
Items []FederatedService `json:"items"`
58+
}
59+
60+
func init() {
61+
SchemeBuilder.Register(&FederatedService{}, &FederatedServiceList{})
62+
}

api/v1alpha1/zz_generated.deepcopy.go

+89
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
---
2+
apiVersion: apiextensions.k8s.io/v1
3+
kind: CustomResourceDefinition
4+
metadata:
5+
annotations:
6+
controller-gen.kubebuilder.io/version: v0.16.4
7+
name: federatedservices.federation.openshift-service-mesh.io
8+
spec:
9+
group: federation.openshift-service-mesh.io
10+
names:
11+
kind: FederatedService
12+
listKind: FederatedServiceList
13+
plural: federatedservices
14+
singular: federatedservice
15+
scope: Namespaced
16+
versions:
17+
- name: v1alpha1
18+
schema:
19+
openAPIV3Schema:
20+
description: FederatedService is the Schema for the federatedservices API.
21+
properties:
22+
apiVersion:
23+
description: |-
24+
APIVersion defines the versioned schema of this representation of an object.
25+
Servers should convert recognized schemas to the latest internal value, and
26+
may reject unrecognized values.
27+
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
28+
type: string
29+
kind:
30+
description: |-
31+
Kind is a string value representing the REST resource this object represents.
32+
Servers may infer this from the endpoint the client submits requests to.
33+
Cannot be updated.
34+
In CamelCase.
35+
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
36+
type: string
37+
metadata:
38+
type: object
39+
spec:
40+
description: FederatedServiceSpec defines the desired state of FederatedService.
41+
properties:
42+
foo:
43+
description: Foo is an example field of FederatedService. Edit federatedservice_types.go
44+
to remove/update
45+
type: string
46+
type: object
47+
status:
48+
description: FederatedServiceStatus defines the observed state of FederatedService.
49+
type: object
50+
type: object
51+
served: true
52+
storage: true
53+
subresources:
54+
status: {}

chart/templates/clusterrole.yaml

+2-2
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ rules:
2626
verbs: ["get", "list", "create", "update", "patch", "delete"]
2727
{{- end }}
2828
- apiGroups: ["federation.openshift-service-mesh.io"]
29-
resources: ["meshfederations"]
29+
resources: ["meshfederations", "federatedservices"]
3030
verbs: ["create", "delete", "get", "list", "patch", "update", "watch"]
3131
- apiGroups: ["federation.openshift-service-mesh.io"]
32-
resources: ["meshfederations/status"]
32+
resources: ["meshfederations/status", "federatedservices/status"]
3333
verbs: ["get"]

cmd/federation-controller/main.go

+8
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ var (
7575
func init() {
7676
utilruntime.Must(clientgoscheme.AddToScheme(scheme))
7777
utilruntime.Must(v1alpha1.AddToScheme(scheme))
78+
utilruntime.Must(v1alpha1.AddToScheme(scheme))
7879
// +kubebuilder:scaffold:scheme
7980
}
8081

@@ -142,6 +143,13 @@ func main() {
142143
log.Errorf("unable to create controller for MeshFederation custom resource: %s", err)
143144
os.Exit(1)
144145
}
146+
if err = (&controller.FederatedServiceReconciler{
147+
Client: mgr.GetClient(),
148+
Scheme: mgr.GetScheme(),
149+
}).SetupWithManager(mgr); err != nil {
150+
log.Errorf("unable to create FederatedService controller: %s", err)
151+
os.Exit(1)
152+
}
145153
// +kubebuilder:scaffold:builder
146154

147155
if err := mgr.AddHealthzCheck("healthz", healthz.Ping); err != nil {

config/crd/kustomization.yaml

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# This kustomization.yaml is not intended to be run by itself,
2+
# since it depends on service name and namespace that are out of this kustomize package.
3+
# It should be run by config/default
4+
resources:
5+
- bases/federation.openshift-service-mesh.io_federatedservices.yaml
6+
# +kubebuilder:scaffold:crdkustomizeresource
7+
8+
patches:
9+
# [WEBHOOK] To enable webhook, uncomment all the sections with [WEBHOOK] prefix.
10+
# patches here are for enabling the conversion webhook for each CRD
11+
# +kubebuilder:scaffold:crdkustomizewebhookpatch
12+
13+
# [CERTMANAGER] To enable cert-manager, uncomment all the sections with [CERTMANAGER] prefix.
14+
# patches here are for enabling the CA injection for each CRD
15+
# +kubebuilder:scaffold:crdkustomizecainjectionpatch
16+
17+
# [WEBHOOK] To enable webhook, uncomment the following section
18+
# the following config is for teaching kustomize how to do kustomization for CRDs.
19+
#configurations:
20+
#- kustomizeconfig.yaml

config/crd/kustomizeconfig.yaml

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# This file is for teaching kustomize how to substitute name and namespace reference in CRD
2+
nameReference:
3+
- kind: Service
4+
version: v1
5+
fieldSpecs:
6+
- kind: CustomResourceDefinition
7+
version: v1
8+
group: apiextensions.k8s.io
9+
path: spec/conversion/webhook/clientConfig/service/name
10+
11+
namespace:
12+
- kind: CustomResourceDefinition
13+
version: v1
14+
group: apiextensions.k8s.io
15+
path: spec/conversion/webhook/clientConfig/service/namespace
16+
create: false
17+
18+
varReference:
19+
- path: metadata/annotations
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# permissions for end users to edit federatedservices.
2+
apiVersion: rbac.authorization.k8s.io/v1
3+
kind: ClusterRole
4+
metadata:
5+
labels:
6+
app.kubernetes.io/name: federation
7+
app.kubernetes.io/managed-by: kustomize
8+
name: federatedservice-editor-role
9+
rules:
10+
- apiGroups:
11+
- federation.openshift-service-mesh.io
12+
resources:
13+
- federatedservices
14+
verbs:
15+
- create
16+
- delete
17+
- get
18+
- list
19+
- patch
20+
- update
21+
- watch
22+
- apiGroups:
23+
- federation.openshift-service-mesh.io
24+
resources:
25+
- federatedservices/status
26+
verbs:
27+
- get
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# permissions for end users to view federatedservices.
2+
apiVersion: rbac.authorization.k8s.io/v1
3+
kind: ClusterRole
4+
metadata:
5+
labels:
6+
app.kubernetes.io/name: federation
7+
app.kubernetes.io/managed-by: kustomize
8+
name: federatedservice-viewer-role
9+
rules:
10+
- apiGroups:
11+
- federation.openshift-service-mesh.io
12+
resources:
13+
- federatedservices
14+
verbs:
15+
- get
16+
- list
17+
- watch
18+
- apiGroups:
19+
- federation.openshift-service-mesh.io
20+
resources:
21+
- federatedservices/status
22+
verbs:
23+
- get
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
apiVersion: federation.openshift-service-mesh.io/v1alpha1
2+
kind: FederatedService
3+
metadata:
4+
labels:
5+
app.kubernetes.io/name: federation
6+
app.kubernetes.io/managed-by: kustomize
7+
name: federatedservice-sample
8+
spec:
9+
# TODO(user): Add fields here

config/samples/kustomization.yaml

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
## Append samples of your project ##
2+
resources:
3+
- federation_v1alpha1_federatedservice.yaml
4+
# +kubebuilder:scaffold:manifestskustomizesamples

0 commit comments

Comments
 (0)