blob: 1bd0d6e8a2733e2ab72f17aec70a8a7f953900ad [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"
giof8acc612025-04-26 08:20:55 +04007 "github.com/giolekva/pcloud/core/installer/status"
gio778577f2024-04-29 09:44:38 +04008)
9
giof8acc612025-04-26 08:20:55 +040010func NewMonitorReleaseTasks(mon status.ResourceMonitor, rr installer.ReleaseResources) []Task {
gio778577f2024-04-29 09:44:38 +040011 var t []Task
12 for _, h := range rr.Helm {
13 t = append(t, newMonitorHelm(mon, h))
14 }
gio1cd65152024-08-16 08:18:49 +040015 return t
16}
17
giof8acc612025-04-26 08:20:55 +040018func NewMonitorRelease(mon status.ResourceMonitor, rr installer.ReleaseResources) Task {
gio1cd65152024-08-16 08:18:49 +040019 return newConcurrentParentTask("Monitor", true, NewMonitorReleaseTasks(mon, rr)...)
gio778577f2024-04-29 09:44:38 +040020}
21
giof8acc612025-04-26 08:20:55 +040022func newMonitorHelm(mon status.ResourceMonitor, h installer.Resource) Task {
gio268787a2025-04-24 21:18:06 +040023 rType := h.Annotations["dodo.cloud/resource-type"]
24 var name string
25 switch rType {
26 case "virtual-machine":
27 name = h.Annotations["dodo.cloud/resource.virtual-machine.name"]
28 case "mongodb":
29 name = h.Annotations["dodo.cloud/resource.mongodb.name"]
30 case "postgresql":
31 name = h.Annotations["dodo.cloud/resource.postgresql.name"]
32 case "volume":
33 name = h.Annotations["dodo.cloud/resource.volume.name"]
34 case "ingress":
35 name = h.Annotations["dodo.cloud/resource.ingress.host"]
36 case "service":
37 name = h.Annotations["dodo.cloud/resource.service.name"]
38 }
39 t := newResourceLeafTask(h.Info, &ResourceId{rType, name}, func() error {
giof8acc612025-04-26 08:20:55 +040040 ref := status.ResourceRef{
41 Name: h.Name,
42 Namespace: h.Namespace,
43 }
gio778577f2024-04-29 09:44:38 +040044 for {
giof8acc612025-04-26 08:20:55 +040045 if s, err := mon.Get(ref); err != nil {
46 return err
47 } else if status.IsStatusTerminal(s) {
48 return nil
49 } else {
50 time.Sleep(5 * time.Second)
gio778577f2024-04-29 09:44:38 +040051 }
gio778577f2024-04-29 09:44:38 +040052 }
53 return nil
54 })
55 return &t
56}