forked from kubevirt/kubevirt
-
Notifications
You must be signed in to change notification settings - Fork 3
/
conditions.go
52 lines (45 loc) · 1.48 KB
/
conditions.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package controller
import (
k8sv1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"kubevirt.io/kubevirt/pkg/api/v1"
)
type VirtualMachineConditionManager struct {
}
func (d *VirtualMachineConditionManager) CheckFailure(vm *v1.VirtualMachine, syncErr error, reason string) (changed bool) {
if syncErr != nil && !d.HasCondition(vm, v1.VirtualMachineSynchronized) {
vm.Status.Conditions = append(vm.Status.Conditions, v1.VirtualMachineCondition{
Type: v1.VirtualMachineSynchronized,
Reason: reason,
Message: syncErr.Error(),
LastTransitionTime: metav1.Now(),
Status: k8sv1.ConditionFalse,
})
return true
} else if syncErr == nil && d.HasCondition(vm, v1.VirtualMachineSynchronized) {
d.RemoveCondition(vm, v1.VirtualMachineSynchronized)
return true
}
return false
}
func (d *VirtualMachineConditionManager) HasCondition(vm *v1.VirtualMachine, cond v1.VirtualMachineConditionType) bool {
for _, c := range vm.Status.Conditions {
if c.Type == cond {
return true
}
}
return false
}
func (d *VirtualMachineConditionManager) RemoveCondition(vm *v1.VirtualMachine, cond v1.VirtualMachineConditionType) {
var conds []v1.VirtualMachineCondition
for _, c := range vm.Status.Conditions {
if c.Type == cond {
continue
}
conds = append(conds, c)
}
vm.Status.Conditions = conds
}
func NewVirtualMachineConditionManager() *VirtualMachineConditionManager {
return &VirtualMachineConditionManager{}
}