blob: dfec9909a7da309a71b96d3262630234aaca056c [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{
gioda708652025-04-30 14:57:38 +040041 Id: h.Annotations["dodo.cloud/id"],
giof8acc612025-04-26 08:20:55 +040042 Name: h.Name,
43 Namespace: h.Namespace,
44 }
gio778577f2024-04-29 09:44:38 +040045 for {
giof8acc612025-04-26 08:20:55 +040046 if s, err := mon.Get(ref); err != nil {
47 return err
48 } else if status.IsStatusTerminal(s) {
49 return nil
50 } else {
51 time.Sleep(5 * time.Second)
gio778577f2024-04-29 09:44:38 +040052 }
gio778577f2024-04-29 09:44:38 +040053 }
54 return nil
55 })
56 return &t
57}