| gio | 778577f | 2024-04-29 09:44:38 +0400 | [diff] [blame] | 1 | package tasks |
| 2 | |
| 3 | import ( |
| gio | 778577f | 2024-04-29 09:44:38 +0400 | [diff] [blame] | 4 | "time" |
| 5 | |
| 6 | "github.com/giolekva/pcloud/core/installer" |
| gio | f8acc61 | 2025-04-26 08:20:55 +0400 | [diff] [blame] | 7 | "github.com/giolekva/pcloud/core/installer/status" |
| gio | 778577f | 2024-04-29 09:44:38 +0400 | [diff] [blame] | 8 | ) |
| 9 | |
| gio | f8acc61 | 2025-04-26 08:20:55 +0400 | [diff] [blame] | 10 | func NewMonitorReleaseTasks(mon status.ResourceMonitor, rr installer.ReleaseResources) []Task { |
| gio | 778577f | 2024-04-29 09:44:38 +0400 | [diff] [blame] | 11 | var t []Task |
| 12 | for _, h := range rr.Helm { |
| 13 | t = append(t, newMonitorHelm(mon, h)) |
| 14 | } |
| gio | 1cd6515 | 2024-08-16 08:18:49 +0400 | [diff] [blame] | 15 | return t |
| 16 | } |
| 17 | |
| gio | f8acc61 | 2025-04-26 08:20:55 +0400 | [diff] [blame] | 18 | func NewMonitorRelease(mon status.ResourceMonitor, rr installer.ReleaseResources) Task { |
| gio | 1cd6515 | 2024-08-16 08:18:49 +0400 | [diff] [blame] | 19 | return newConcurrentParentTask("Monitor", true, NewMonitorReleaseTasks(mon, rr)...) |
| gio | 778577f | 2024-04-29 09:44:38 +0400 | [diff] [blame] | 20 | } |
| 21 | |
| gio | f8acc61 | 2025-04-26 08:20:55 +0400 | [diff] [blame] | 22 | func newMonitorHelm(mon status.ResourceMonitor, h installer.Resource) Task { |
| gio | 268787a | 2025-04-24 21:18:06 +0400 | [diff] [blame] | 23 | 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 { |
| gio | f8acc61 | 2025-04-26 08:20:55 +0400 | [diff] [blame] | 40 | ref := status.ResourceRef{ |
| gio | da70865 | 2025-04-30 14:57:38 +0400 | [diff] [blame] | 41 | Id: h.Annotations["dodo.cloud/id"], |
| gio | f8acc61 | 2025-04-26 08:20:55 +0400 | [diff] [blame] | 42 | Name: h.Name, |
| 43 | Namespace: h.Namespace, |
| 44 | } |
| gio | 778577f | 2024-04-29 09:44:38 +0400 | [diff] [blame] | 45 | for { |
| gio | f8acc61 | 2025-04-26 08:20:55 +0400 | [diff] [blame] | 46 | 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) |
| gio | 778577f | 2024-04-29 09:44:38 +0400 | [diff] [blame] | 52 | } |
| gio | 778577f | 2024-04-29 09:44:38 +0400 | [diff] [blame] | 53 | } |
| 54 | return nil |
| 55 | }) |
| 56 | return &t |
| 57 | } |