@@ -26,6 +26,7 @@ import (
2626
2727 kvmv1 "github.com/cobaltcore-dev/openstack-hypervisor-operator/api/v1"
2828 "k8s.io/apimachinery/pkg/api/meta"
29+ "k8s.io/apimachinery/pkg/api/resource"
2930 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3031 "k8s.io/apimachinery/pkg/runtime"
3132 ctrl "sigs.k8s.io/controller-runtime"
@@ -51,9 +52,11 @@ type HypervisorReconciler struct {
5152}
5253
5354const (
54- OSUpdateType = "OperatingSystemUpdate"
55- LibVirtType = "LibVirtConnection"
56- CapabilitiesClientType = "CapabilitiesClientConnection"
55+ OSUpdateType = "OperatingSystemUpdate"
56+ LibVirtType = "LibVirtConnection"
57+ CapabilitiesClientType = "CapabilitiesClientConnection"
58+ DomainInfoClientType = "DomainInfoClientConnection"
59+ DomainCapabilitiesClientType = "DomainCapabilitiesClientConnection"
5760)
5861
5962// +kubebuilder:rbac:groups=kvm.cloud.sap,resources=hypervisors,verbs=get;list;watch;update;patch;delete
@@ -190,20 +193,64 @@ func (r *HypervisorReconciler) Reconcile(ctx context.Context, req ctrl.Request)
190193 // Update capabilities status.
191194 if capabilities , err := r .Libvirt .GetCapabilities (); err == nil {
192195 hypervisor .Status .Capabilities = capabilities
196+ hypervisor .Status .Capacity = map [string ]resource.Quantity {
197+ "cpu" : capabilities .HostCpus ,
198+ "memory" : capabilities .HostMemory ,
199+ }
193200 meta .SetStatusCondition (& hypervisor .Status .Conditions , metav1.Condition {
194201 Type : CapabilitiesClientType ,
195202 Status : metav1 .ConditionTrue ,
196203 Reason : "CapabilitiesClientGetSucceeded" ,
197204 })
198205 } else {
199206 log .Error (err , "failed to get capabilities" )
207+ hypervisor .Status .Capabilities = kvmv1.Capabilities {}
208+ hypervisor .Status .Capacity = nil
200209 meta .SetStatusCondition (& hypervisor .Status .Conditions , metav1.Condition {
201210 Type : CapabilitiesClientType ,
202211 Status : metav1 .ConditionFalse ,
203212 Message : err .Error (),
204213 Reason : "CapabilitiesClientGetFailed" ,
205214 })
206215 }
216+
217+ // Update the hypervisor allocation.
218+ if allocatedResources , err := r .Libvirt .GetAllocatedResources (); err == nil {
219+ hypervisor .Status .Allocation = allocatedResources
220+ meta .SetStatusCondition (& hypervisor .Status .Conditions , metav1.Condition {
221+ Type : DomainInfoClientType ,
222+ Status : metav1 .ConditionTrue ,
223+ Reason : "DomainInfoClientGetSucceeded" ,
224+ })
225+ } else {
226+ log .Error (err , "failed to get allocated resources" )
227+ hypervisor .Status .Allocation = nil
228+ meta .SetStatusCondition (& hypervisor .Status .Conditions , metav1.Condition {
229+ Type : DomainInfoClientType ,
230+ Status : metav1 .ConditionFalse ,
231+ Message : err .Error (),
232+ Reason : "DomainInfoClientGetFailed" ,
233+ })
234+ }
235+
236+ // Update the domain capabilities status.
237+ if domainCapabilities , err := r .Libvirt .GetDomainCapabilities (); err == nil {
238+ hypervisor .Status .DomainCapabilities = domainCapabilities
239+ meta .SetStatusCondition (& hypervisor .Status .Conditions , metav1.Condition {
240+ Type : DomainCapabilitiesClientType ,
241+ Status : metav1 .ConditionTrue ,
242+ Reason : "DomainCapabilitiesClientGetSucceeded" ,
243+ })
244+ } else {
245+ log .Error (err , "failed to get domain capabilities" )
246+ hypervisor .Status .DomainCapabilities = kvmv1.DomainCapabilities {}
247+ meta .SetStatusCondition (& hypervisor .Status .Conditions , metav1.Condition {
248+ Type : DomainCapabilitiesClientType ,
249+ Status : metav1 .ConditionFalse ,
250+ Message : err .Error (),
251+ Reason : "DomainCapabilitiesClientGetFailed" ,
252+ })
253+ }
207254 }
208255
209256 // Reconcile operating system update
0 commit comments