@@ -46,6 +46,7 @@ const LabelMetalNodeName = "kubernetes.metal.cloud.sap/name"
4646
4747// +kubebuilder:rbac:groups="",resources=nodes,verbs=get;list;watch
4848// +kubebuilder:rbac:groups="",resources=nodes/status,verbs=get
49+ // +kubebuilder:rbac:groups=kvm.cloud.sap,resources=hypervisors,verbs=get;list;watch;create;update;patch;delete
4950
5051func (r * NodeReconciler ) getNode (ctx context.Context ) (* v1.Node , error ) {
5152 // Fetch the Node we're current running on
@@ -111,30 +112,27 @@ func (r *NodeReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.
111112 }); err != nil {
112113 return ctrl.Result {}, fmt .Errorf ("failed creating hypervisor: %w" , err )
113114 }
115+ return ctrl.Result {}, nil
116+ }
114117
115- // fetch hypervisor
116- hv := & kvmv1alpha1. Hypervisor {}
117- if err = r .Get (ctx , types. NamespacedName { Name : node . Name , Namespace : namespace }, hv ); err != nil {
118- return ctrl.Result {}, fmt .Errorf ("failed fetching hypervisor: %w" , err )
118+ if node . ObjectMeta . DeletionTimestamp != nil {
119+ // node is being deleted, cleanup hypervisor
120+ if err = r .Delete (ctx , & hypervisors . Items [ 0 ] ); client . IgnoreNotFound ( err ) != nil {
121+ return ctrl.Result {}, fmt .Errorf ("failed cleanup up hypervisor: %w" , err )
119122 }
123+ return ctrl.Result {}, nil
124+ }
120125
121- hv .Status .Node = types .NodeName (node .Name )
122- if name , ok := node .Labels [LabelMetalNodeName ]; ok {
123- hv .Status .Node = types .NodeName (name )
124- }
126+ hv := hypervisors .Items [0 ].DeepCopy ()
127+ hv .Status .Node = types .NodeName (node .Name )
128+ if name , ok := node .Labels [LabelMetalNodeName ]; ok {
129+ hv .Status .Node = types .NodeName (name )
130+ }
125131
126- // Update Status
127- err = r .Status ().Update (ctx , hv )
128- if err != nil {
129- return ctrl.Result {}, fmt .Errorf ("failed updating hypervisor status: %w" , err )
130- }
131- } else {
132- if node .ObjectMeta .DeletionTimestamp != nil {
133- // node is being deleted, cleanup hypervisor
134- if err = r .Delete (ctx , & hypervisors .Items [0 ]); client .IgnoreNotFound (err ) != nil {
135- return ctrl.Result {}, fmt .Errorf ("failed cleanup up hypervisor: %w" , err )
136- }
137- }
132+ // Update Status
133+ err = r .Status ().Patch (ctx , hv , client .MergeFrom (& hypervisors .Items [0 ]))
134+ if err != nil {
135+ return ctrl.Result {}, fmt .Errorf ("failed patching hypervisor status: %w" , err )
138136 }
139137
140138 return ctrl.Result {}, nil
0 commit comments