blob: 059d1ee4c95576e19070777e07184041a9a8b877 [file] [log] [blame]
gio778577f2024-04-29 09:44:38 +04001package tasks
2
3import (
gio778577f2024-04-29 09:44:38 +04004 "time"
5
6 "github.com/giolekva/pcloud/core/installer"
7)
8
gio1cd65152024-08-16 08:18:49 +04009func NewMonitorReleaseTasks(mon installer.HelmReleaseMonitor, rr installer.ReleaseResources) []Task {
gio778577f2024-04-29 09:44:38 +040010 var t []Task
11 for _, h := range rr.Helm {
12 t = append(t, newMonitorHelm(mon, h))
13 }
gio1cd65152024-08-16 08:18:49 +040014 return t
15}
16
17func NewMonitorRelease(mon installer.HelmReleaseMonitor, rr installer.ReleaseResources) Task {
18 return newConcurrentParentTask("Monitor", true, NewMonitorReleaseTasks(mon, rr)...)
gio778577f2024-04-29 09:44:38 +040019}
20
21func newMonitorHelm(mon installer.HelmReleaseMonitor, h installer.Resource) Task {
gio268787a2025-04-24 21:18:06 +040022 rType := h.Annotations["dodo.cloud/resource-type"]
23 var name string
24 switch rType {
25 case "virtual-machine":
26 name = h.Annotations["dodo.cloud/resource.virtual-machine.name"]
27 case "mongodb":
28 name = h.Annotations["dodo.cloud/resource.mongodb.name"]
29 case "postgresql":
30 name = h.Annotations["dodo.cloud/resource.postgresql.name"]
31 case "volume":
32 name = h.Annotations["dodo.cloud/resource.volume.name"]
33 case "ingress":
34 name = h.Annotations["dodo.cloud/resource.ingress.host"]
35 case "service":
36 name = h.Annotations["dodo.cloud/resource.service.name"]
37 }
38 t := newResourceLeafTask(h.Info, &ResourceId{rType, name}, func() error {
gio778577f2024-04-29 09:44:38 +040039 for {
40 if ok, err := mon.IsReleased(h.Namespace, h.Name); err == nil && ok {
41 break
42 }
43 time.Sleep(5 * time.Second)
44 }
45 return nil
46 })
47 return &t
48}