| Giorgi Lekveishvili | 46743d4 | 2023-12-10 15:47:23 +0400 | [diff] [blame] | 1 | package tasks |
| 2 | |
| 3 | import ( |
| Giorgi Lekveishvili | d2f3dca | 2023-12-20 09:31:30 +0400 | [diff] [blame] | 4 | "context" |
| Giorgi Lekveishvili | 2df23db | 2023-12-14 07:55:22 +0400 | [diff] [blame] | 5 | "fmt" |
| Giorgi Lekveishvili | 46743d4 | 2023-12-10 15:47:23 +0400 | [diff] [blame] | 6 | |
| 7 | "github.com/charmbracelet/keygen" |
| 8 | |
| 9 | "github.com/giolekva/pcloud/core/installer" |
| gio | e72b54f | 2024-04-22 10:44:41 +0400 | [diff] [blame] | 10 | "github.com/giolekva/pcloud/core/installer/dns" |
| 11 | "github.com/giolekva/pcloud/core/installer/http" |
| Giorgi Lekveishvili | 46743d4 | 2023-12-10 15:47:23 +0400 | [diff] [blame] | 12 | "github.com/giolekva/pcloud/core/installer/soft" |
| 13 | ) |
| 14 | |
| 15 | type state struct { |
| gio | 3cdee59 | 2024-04-17 10:15:56 +0400 | [diff] [blame] | 16 | infoListener EnvInfoListener |
| gio | 3cdee59 | 2024-04-17 10:15:56 +0400 | [diff] [blame] | 17 | nsCreator installer.NamespaceCreator |
| gio | f884341 | 2024-05-22 16:38:05 +0400 | [diff] [blame] | 18 | jc installer.JobCreator |
| 19 | hf installer.HelmFetcher |
| gio | e72b54f | 2024-04-22 10:44:41 +0400 | [diff] [blame] | 20 | dnsFetcher installer.ZoneStatusFetcher |
| 21 | httpClient http.Client |
| 22 | dnsClient dns.Client |
| 23 | repo soft.RepoIO |
| 24 | repoClient soft.ClientGetter |
| gio | 3cdee59 | 2024-04-17 10:15:56 +0400 | [diff] [blame] | 25 | ssAdminKeys *keygen.KeyPair |
| gio | e72b54f | 2024-04-22 10:44:41 +0400 | [diff] [blame] | 26 | ssClient soft.Client |
| gio | 3cdee59 | 2024-04-17 10:15:56 +0400 | [diff] [blame] | 27 | fluxUserName string |
| 28 | keys *keygen.KeyPair |
| 29 | appManager *installer.AppManager |
| 30 | appsRepo installer.AppRepository |
| 31 | infraAppManager *installer.InfraAppManager |
| Giorgi Lekveishvili | 46743d4 | 2023-12-10 15:47:23 +0400 | [diff] [blame] | 32 | } |
| 33 | |
| Giorgi Lekveishvili | ab7ff6e | 2024-03-29 13:11:30 +0400 | [diff] [blame] | 34 | type EnvInfoListener func(string) |
| 35 | |
| Giorgi Lekveishvili | 46743d4 | 2023-12-10 15:47:23 +0400 | [diff] [blame] | 36 | func NewCreateEnvTask( |
| gio | e72b54f | 2024-04-22 10:44:41 +0400 | [diff] [blame] | 37 | env installer.EnvConfig, |
| Giorgi Lekveishvili | 46743d4 | 2023-12-10 15:47:23 +0400 | [diff] [blame] | 38 | nsCreator installer.NamespaceCreator, |
| gio | f884341 | 2024-05-22 16:38:05 +0400 | [diff] [blame] | 39 | jc installer.JobCreator, |
| 40 | hf installer.HelmFetcher, |
| gio | e72b54f | 2024-04-22 10:44:41 +0400 | [diff] [blame] | 41 | dnsFetcher installer.ZoneStatusFetcher, |
| 42 | httpClient http.Client, |
| 43 | dnsClient dns.Client, |
| 44 | repo soft.RepoIO, |
| 45 | repoClient soft.ClientGetter, |
| gio | 3cdee59 | 2024-04-17 10:15:56 +0400 | [diff] [blame] | 46 | mgr *installer.InfraAppManager, |
| Giorgi Lekveishvili | ab7ff6e | 2024-03-29 13:11:30 +0400 | [diff] [blame] | 47 | infoListener EnvInfoListener, |
| gio | e72b54f | 2024-04-22 10:44:41 +0400 | [diff] [blame] | 48 | ) (Task, installer.EnvDNS) { |
| Giorgi Lekveishvili | 77ee2dc | 2023-12-11 16:51:10 +0400 | [diff] [blame] | 49 | st := state{ |
| gio | 3cdee59 | 2024-04-17 10:15:56 +0400 | [diff] [blame] | 50 | infoListener: infoListener, |
| gio | 3cdee59 | 2024-04-17 10:15:56 +0400 | [diff] [blame] | 51 | nsCreator: nsCreator, |
| gio | f884341 | 2024-05-22 16:38:05 +0400 | [diff] [blame] | 52 | jc: jc, |
| 53 | hf: hf, |
| gio | e72b54f | 2024-04-22 10:44:41 +0400 | [diff] [blame] | 54 | dnsFetcher: dnsFetcher, |
| 55 | httpClient: httpClient, |
| 56 | dnsClient: dnsClient, |
| gio | 3cdee59 | 2024-04-17 10:15:56 +0400 | [diff] [blame] | 57 | repo: repo, |
| gio | e72b54f | 2024-04-22 10:44:41 +0400 | [diff] [blame] | 58 | repoClient: repoClient, |
| gio | 3cdee59 | 2024-04-17 10:15:56 +0400 | [diff] [blame] | 59 | infraAppManager: mgr, |
| Giorgi Lekveishvili | 46743d4 | 2023-12-10 15:47:23 +0400 | [diff] [blame] | 60 | } |
| Giorgi Lekveishvili | 2df23db | 2023-12-14 07:55:22 +0400 | [diff] [blame] | 61 | t := newSequentialParentTask( |
| Giorgi Lekveishvili | 77ee2dc | 2023-12-11 16:51:10 +0400 | [diff] [blame] | 62 | "Create env", |
| Giorgi Lekveishvili | 5c1b06e | 2024-03-28 15:19:44 +0400 | [diff] [blame] | 63 | true, |
| 64 | SetupConfigRepoTask(env, &st), |
| gio | e72b54f | 2024-04-22 10:44:41 +0400 | [diff] [blame] | 65 | SetupZoneTask(env, mgr, &st), |
| 66 | SetupInfra(env, &st), |
| Giorgi Lekveishvili | 2df23db | 2023-12-14 07:55:22 +0400 | [diff] [blame] | 67 | ) |
| Giorgi Lekveishvili | ab7ff6e | 2024-03-29 13:11:30 +0400 | [diff] [blame] | 68 | t.afterDone = func() { |
| 69 | infoListener(fmt.Sprintf("dodo environment for %s has been provisioned successfully. Visit [https://welcome.%s](https://welcome.%s) to create administrative account and log into the system.", env.Domain, env.Domain, env.Domain)) |
| 70 | } |
| Giorgi Lekveishvili | d2f3dca | 2023-12-20 09:31:30 +0400 | [diff] [blame] | 71 | rctx, done := context.WithCancel(context.Background()) |
| Giorgi Lekveishvili | 2df23db | 2023-12-14 07:55:22 +0400 | [diff] [blame] | 72 | t.OnDone(func(_ error) { |
| Giorgi Lekveishvili | d2f3dca | 2023-12-20 09:31:30 +0400 | [diff] [blame] | 73 | done() |
| Giorgi Lekveishvili | 2df23db | 2023-12-14 07:55:22 +0400 | [diff] [blame] | 74 | }) |
| Giorgi Lekveishvili | d2f3dca | 2023-12-20 09:31:30 +0400 | [diff] [blame] | 75 | pr := NewFluxcdReconciler( // TODO(gio): make reconciler address a flag |
| 76 | "http://fluxcd-reconciler.dodo-fluxcd-reconciler.svc.cluster.local", |
| gio | e72b54f | 2024-04-22 10:44:41 +0400 | [diff] [blame] | 77 | fmt.Sprintf("%s-flux", env.InfraName), |
| Giorgi Lekveishvili | d2f3dca | 2023-12-20 09:31:30 +0400 | [diff] [blame] | 78 | ) |
| 79 | er := NewFluxcdReconciler( |
| 80 | "http://fluxcd-reconciler.dodo-fluxcd-reconciler.svc.cluster.local", |
| gio | e72b54f | 2024-04-22 10:44:41 +0400 | [diff] [blame] | 81 | env.Id, |
| Giorgi Lekveishvili | d2f3dca | 2023-12-20 09:31:30 +0400 | [diff] [blame] | 82 | ) |
| 83 | go pr.Reconcile(rctx) |
| 84 | go er.Reconcile(rctx) |
| gio | e72b54f | 2024-04-22 10:44:41 +0400 | [diff] [blame] | 85 | return t, installer.EnvDNS{ |
| 86 | Zone: env.Domain, |
| 87 | Address: fmt.Sprintf("http://dns-api.%sdns.svc.cluster.local/records-to-publish", env.NamespacePrefix), |
| 88 | } |
| Giorgi Lekveishvili | 2df23db | 2023-12-14 07:55:22 +0400 | [diff] [blame] | 89 | } |