blob: 8b5bef7117a30dd60bd89b2eb1a9ad2763133341 [file] [log] [blame]
gio1cd65152024-08-16 08:18:49 +04001package tasks
2
3import (
4 "github.com/giolekva/pcloud/core/installer"
5)
6
7type InstallFunc func() (installer.ReleaseResources, error)
8
9type dynamicTaskSlice struct {
10 t []Task
11}
12
13func (d *dynamicTaskSlice) Tasks() []Task {
14 return d.t
15}
16
17func (d *dynamicTaskSlice) Append(t Task) {
18 d.t = append(d.t, t)
19}
20
21func NewInstallTask(mon installer.HelmReleaseMonitor, fn InstallFunc) Task {
22 d := &dynamicTaskSlice{t: []Task{}}
23 var rr installer.ReleaseResources
24 done := make(chan error)
25 installTask := newLeafTask("Downloading configuration files", func() error {
26 var err error
27 rr, err = fn()
28 return err
29 })
30 d.Append(&installTask)
31 installTask.OnDone(func(err error) {
32 if err != nil {
33 done <- err
34 return
35 }
36 monTasks := NewMonitorReleaseTasks(mon, rr)
37 for _, mt := range monTasks {
38 d.Append(mt)
39 }
40 monitor := newConcurrentParentTask("Monitor", true, monTasks...)
41 monitor.OnDone(func(err error) {
42 done <- err
43 })
44 monitor.Start()
45 })
46 start := func() error {
47 installTask.Start()
48 return <-done
49 }
50 t := newParentTask("Installing application", true, start, d)
51 return &t
52}