Skip to content

Commit bdebaaf

Browse files
committed
controller
1 parent 2c9020f commit bdebaaf

File tree

7 files changed

+64
-27
lines changed

7 files changed

+64
-27
lines changed

api/v1alpha1/deployment_types.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,9 @@ type DeploymentSpec struct {
3232

3333
// DeploymentStatus defines the observed state of a provider.
3434
type DeploymentStatus struct {
35-
// INSERT ADDITIONAL STATUS FIELD - define observed state of cluster
36-
// Important: Run "make" to regenerate code after modifying this file
35+
ObservedGeneration int64 `json:"observedGeneration"`
36+
37+
Phase string `json:"phase,omitempty"`
3738
}
3839

3940
type ObjectReference struct {

docs/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
<!-- Do not edit this file, as it is auto-generated!-->
22
# Documentation Index
33

4+
## Resources
5+
6+

docs/resources/.docnames

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"header": "Resources"
3+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
apiVersion: openmcp.cloud/v1alpha1
2+
kind: ClusterProvider
3+
metadata:
4+
name: cluster-provider-gardener
5+
spec:
6+
image: "ghcr.io/openmcp-project/images/cluster-provider-gardener:v0.0.1"
7+
imagePullSecrets: []
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
apiVersion: openmcp.cloud/v1alpha1
2+
kind: ServiceProvider
3+
metadata:
4+
name: service-provider-landscaper
5+
spec:
6+
image: "ghcr.io/openmcp-project/images/service-provider-landscaper:v0.0.4"
7+
imagePullSecrets: []

internal/controller/provider_controller.go

Lines changed: 39 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -15,42 +15,51 @@ import (
1515
)
1616

1717
type ProviderReconciler struct {
18-
Name string
1918
schema.GroupVersionKind
20-
client.Client
19+
PlatformClient client.Client
20+
}
21+
22+
func (r *ProviderReconciler) ControllerName() string {
23+
return r.GroupVersionKind.String()
2124
}
2225

2326
func (r *ProviderReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
24-
log := logging.FromContextOrPanic(ctx).WithName(r.Name)
27+
log := logging.FromContextOrPanic(ctx).WithName(r.ControllerName())
28+
ctx = logging.NewContext(ctx, log)
29+
log.Debug("Starting reconcile")
2530

26-
deployable := &unstructured.Unstructured{}
27-
deployable.SetGroupVersionKind(r.GroupVersionKind)
31+
provider := &unstructured.Unstructured{}
32+
provider.SetGroupVersionKind(r.GroupVersionKind)
2833

29-
if err := r.Get(ctx, req.NamespacedName, deployable); err != nil {
30-
return ctrl.Result{}, err
34+
if err := r.PlatformClient.Get(ctx, req.NamespacedName, provider); err != nil {
35+
return ctrl.Result{}, fmt.Errorf("failed to get provider resource: %w", err)
3136
}
3237

33-
deployableOrig := deployable.DeepCopy()
34-
35-
log.Info("Reconciling deployable")
38+
providerOrig := provider.DeepCopy()
3639

37-
deployableSpec := v1alpha1.DeploymentSpec{}
38-
deploymentSpecRaw, found, err := unstructured.NestedFieldNoCopy(deployable.Object, "spec", "deploymentSpec")
40+
deploymentSpec := v1alpha1.DeploymentSpec{}
41+
deploymentSpecRaw, found, err := unstructured.NestedFieldNoCopy(provider.Object, "spec")
3942
if !found {
40-
return ctrl.Result{}, fmt.Errorf("deploymentSpec not found")
43+
return ctrl.Result{}, fmt.Errorf("provider spec not found")
4144
}
4245
if err != nil {
43-
return ctrl.Result{}, err
46+
return ctrl.Result{}, fmt.Errorf("failed to get provider spec: %w", err)
4447
}
4548

46-
if err = runtime.DefaultUnstructuredConverter.FromUnstructured(deploymentSpecRaw.(map[string]interface{}), &deployableSpec); err != nil {
47-
return ctrl.Result{}, err
49+
if err = runtime.DefaultUnstructuredConverter.FromUnstructured(deploymentSpecRaw.(map[string]interface{}), &deploymentSpec); err != nil {
50+
return ctrl.Result{}, fmt.Errorf("failed to convert provider spec: %w", err)
4851
}
4952

50-
log.Info("DeployableSpec", "deployableSpec", deployableSpec)
53+
log.Info("DeployableSpec", "deploymentSpec", deploymentSpec)
54+
55+
//if provider.GetDeletionTimestamp().IsZero() {
56+
// res, err = r.handleCreateUpdateOperation(ctx, provider)
57+
//} else {
58+
// res, err = r.handleDeleteOperation(ctx, provider)
59+
//}
5160

5261
deployableStatus := v1alpha1.DeploymentStatus{}
53-
deploymentStatusRaw, found, _ := unstructured.NestedFieldNoCopy(deployable.Object, "status", "deploymentStatus")
62+
deploymentStatusRaw, found, _ := unstructured.NestedFieldNoCopy(provider.Object, "status", "deploymentStatus")
5463
if found {
5564
if err = runtime.DefaultUnstructuredConverter.FromUnstructured(deploymentStatusRaw.(map[string]interface{}), &deployableStatus); err != nil {
5665
return ctrl.Result{}, err
@@ -65,22 +74,30 @@ func (r *ProviderReconciler) Reconcile(ctx context.Context, req ctrl.Request) (c
6574
return ctrl.Result{}, err
6675
}
6776

68-
statusRaw, found, _ := unstructured.NestedFieldNoCopy(deployable.Object, "status")
77+
statusRaw, found, _ := unstructured.NestedFieldNoCopy(provider.Object, "status")
6978
if !found {
7079
statusRaw = map[string]interface{}{}
71-
if err = unstructured.SetNestedField(deployable.Object, statusRaw.(map[string]interface{}), "status"); err != nil {
80+
if err = unstructured.SetNestedField(provider.Object, statusRaw.(map[string]interface{}), "status"); err != nil {
7281
return ctrl.Result{}, err
7382
}
7483
}
7584

76-
if err = unstructured.SetNestedField(deployable.Object, deploymentSpecRaw, "status", "deploymentStatus"); err != nil {
85+
if err = unstructured.SetNestedField(provider.Object, deploymentSpecRaw, "status", "deploymentStatus"); err != nil {
7786
return ctrl.Result{}, err
7887
}
7988

8089
// patch the status
81-
if err = r.Status().Patch(ctx, deployable, client.MergeFrom(deployableOrig)); err != nil {
90+
if err = r.PlatformClient.Status().Patch(ctx, provider, client.MergeFrom(providerOrig)); err != nil {
8291
return ctrl.Result{}, err
8392
}
8493

8594
return ctrl.Result{}, nil
8695
}
96+
97+
func (r *ProviderReconciler) handleCreateUpdateOperation(ctx context.Context, provider *unstructured.Unstructured) (ctrl.Result, error) {
98+
return ctrl.Result{}, nil
99+
}
100+
101+
func (r *ProviderReconciler) handleDeleteOperation(ctx context.Context, provider *unstructured.Unstructured) (ctrl.Result, error) {
102+
return ctrl.Result{}, nil
103+
}

internal/controller/provider_controller_list.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,17 +39,16 @@ func (r *ProviderReconcilerList) SetupWithManager(mgr ctrl.Manager, providerGKVL
3939

4040
for i, gvk := range providerGKVList {
4141
r.Reconcilers[i] = &ProviderReconciler{
42-
Name: gvk.String(),
4342
GroupVersionKind: gvk,
44-
Client: mgr.GetClient(),
43+
PlatformClient: mgr.GetClient(),
4544
}
4645

4746
obj := &unstructured.Unstructured{}
4847
obj.SetGroupVersionKind(gvk)
4948

5049
err := ctrl.NewControllerManagedBy(mgr).
5150
For(obj).
52-
Named(r.Reconcilers[i].Name).
51+
Named(r.Reconcilers[i].ControllerName()).
5352
Complete(r.Reconcilers[i])
5453
if err != nil {
5554
allErrs = append(allErrs, field.InternalError(field.NewPath(gvk.String()), err))

0 commit comments

Comments
 (0)