Add backup maintenance and guest update controls
This commit is contained in:
@@ -17,6 +17,51 @@ type MaintenanceWindow struct {
|
||||
AllAlerts bool `json:"allAlerts"`
|
||||
ServiceIDs []int64 `json:"serviceIds"`
|
||||
VMIDs []int `json:"vmids"`
|
||||
Automatic bool `json:"automatic"`
|
||||
Source string `json:"source,omitempty"`
|
||||
}
|
||||
|
||||
func automaticBackupMaintenance(activity ProxmoxActivity, links []ServiceLink, now time.Time) MaintenanceWindow {
|
||||
vmids := []int{}
|
||||
backupRunning := false
|
||||
for _, task := range activity.Tasks {
|
||||
if task.Type != "vzdump" || task.EndTime > 0 || (task.Status != "" && !strings.EqualFold(task.Status, "running")) {
|
||||
continue
|
||||
}
|
||||
backupRunning = true
|
||||
if vmid := backupTaskVMID(task); vmid > 0 {
|
||||
vmids = append(vmids, vmid)
|
||||
}
|
||||
}
|
||||
vmids = uniqueInt(vmids)
|
||||
if !backupRunning {
|
||||
return MaintenanceWindow{}
|
||||
}
|
||||
selected := map[int]bool{}
|
||||
for _, vmid := range vmids {
|
||||
selected[vmid] = true
|
||||
}
|
||||
serviceIDs := []int64{}
|
||||
for _, link := range links {
|
||||
if selected[link.VMID] {
|
||||
serviceIDs = append(serviceIDs, link.ServiceID)
|
||||
}
|
||||
}
|
||||
return MaintenanceWindow{Enabled: true, Active: true, StartedAt: now.Unix(), EndsAt: now.Add(2 * time.Minute).Unix(), Reason: "Автоматически: выполняется backup VM/LXC", VMIDs: vmids, ServiceIDs: uniqueInt64(serviceIDs), AllAlerts: len(vmids) == 0, Automatic: true, Source: "backup"}
|
||||
}
|
||||
|
||||
func backupTaskVMID(task ProxmoxTask) int {
|
||||
if vmid, err := strconv.Atoi(strings.TrimSpace(task.ID)); err == nil && vmid > 0 {
|
||||
return vmid
|
||||
}
|
||||
parts := strings.Split(task.UPID, ":")
|
||||
for i, part := range parts {
|
||||
if part == "vzdump" && i+1 < len(parts) {
|
||||
vmid, _ := strconv.Atoi(parts[i+1])
|
||||
return vmid
|
||||
}
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (s *Store) MaintenanceWindow() MaintenanceWindow {
|
||||
|
||||
Reference in New Issue
Block a user