@@ -24,6 +24,7 @@ import (
24
24
"strings"
25
25
26
26
corev1 "k8s.io/api/core/v1"
27
+ "k8s.io/apimachinery/pkg/api/resource"
27
28
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
28
29
virtv1 "kubevirt.io/api/core/v1"
29
30
"sigs.k8s.io/controller-runtime/pkg/reconcile"
@@ -59,27 +60,17 @@ func (h *DiscoveryHandler) Handle(ctx context.Context, s state.VirtualMachineCla
59
60
60
61
cpuType := current .Spec .CPU .Type
61
62
62
- if cpuType == virtv2 .CPUTypeHostPassthrough || cpuType == virtv2 .CPUTypeHost {
63
- cb := conditions .NewConditionBuilder (vmclasscondition .TypeDiscovered ).
64
- Generation (current .GetGeneration ()).
65
- Message (fmt .Sprintf ("Discovery not needed for cpu.type %q" , cpuType )).
66
- Reason (vmclasscondition .ReasonDiscoverySkip ).
67
- Status (metav1 .ConditionFalse )
68
-
69
- conditions .SetCondition (cb , & changed .Status .Conditions )
70
- return reconcile.Result {}, nil
71
- }
72
-
73
63
nodes , err := s .Nodes (ctx )
74
64
if err != nil {
75
65
return reconcile.Result {}, err
76
66
}
67
+
77
68
availableNodes , err := s .AvailableNodes (nodes )
78
69
if err != nil {
79
70
return reconcile.Result {}, err
80
71
}
81
- availableNodeNames := make ([]string , len (availableNodes ))
82
72
73
+ availableNodeNames := make ([]string , len (availableNodes ))
83
74
for i , n := range availableNodes {
84
75
availableNodeNames [i ] = n .GetName ()
85
76
}
@@ -123,14 +114,14 @@ func (h *DiscoveryHandler) Handle(ctx context.Context, s state.VirtualMachineCla
123
114
Reason (vmclasscondition .ReasonDiscoverySkip ).
124
115
Status (metav1 .ConditionFalse )
125
116
}
126
-
127
117
conditions .SetCondition (cb , & changed .Status .Conditions )
128
118
129
119
sort .Strings (availableNodeNames )
130
120
sort .Strings (featuresEnabled )
131
121
sort .Strings (featuresNotEnabled )
132
122
133
123
changed .Status .AvailableNodes = availableNodeNames
124
+ changed .Status .MaxAllocatableResources = h .maxAllocatableResources (availableNodes )
134
125
changed .Status .CpuFeatures = virtv2.CpuFeatures {
135
126
Enabled : featuresEnabled ,
136
127
NotEnabledCommon : featuresNotEnabled ,
@@ -163,3 +154,24 @@ func (h *DiscoveryHandler) discoveryCommonFeatures(nodes []corev1.Node) []string
163
154
}
164
155
return features
165
156
}
157
+
158
+ func (h * DiscoveryHandler ) maxAllocatableResources (nodes []corev1.Node ) corev1.ResourceList {
159
+ var (
160
+ resourceList corev1.ResourceList = make (map [corev1.ResourceName ]resource.Quantity )
161
+ resourceNames = []corev1.ResourceName {corev1 .ResourceCPU , corev1 .ResourceMemory }
162
+ )
163
+
164
+ for _ , node := range nodes {
165
+ for _ , resourceName := range resourceNames {
166
+ newQ := node .Status .Allocatable [resourceName ]
167
+ if newQ .IsZero () {
168
+ continue
169
+ }
170
+ oldQ := resourceList [resourceName ]
171
+ if newQ .Cmp (oldQ ) == 1 {
172
+ resourceList [resourceName ] = newQ
173
+ }
174
+ }
175
+ }
176
+ return resourceList
177
+ }
0 commit comments