installer-env: render dns records to publish
diff --git a/core/installer/welcome/env.go b/core/installer/welcome/env.go
index 9dd2abc..7cc3c1a 100644
--- a/core/installer/welcome/env.go
+++ b/core/installer/welcome/env.go
@@ -43,18 +43,29 @@
ss *soft.Client
repo installer.RepoIO
nsCreator installer.NamespaceCreator
+ dnsFetcher installer.ZoneStatusFetcher
nameGenerator installer.NameGenerator
tasks map[string]tasks.Task
+ dns map[string]tasks.DNSZoneRef
}
-func NewEnvServer(port int, ss *soft.Client, repo installer.RepoIO, nsCreator installer.NamespaceCreator, nameGenerator installer.NameGenerator) *EnvServer {
+func NewEnvServer(
+ port int,
+ ss *soft.Client,
+ repo installer.RepoIO,
+ nsCreator installer.NamespaceCreator,
+ dnsFetcher installer.ZoneStatusFetcher,
+ nameGenerator installer.NameGenerator,
+) *EnvServer {
return &EnvServer{
port,
ss,
repo,
nsCreator,
+ dnsFetcher,
nameGenerator,
make(map[string]tasks.Task),
+ make(map[string]tasks.DNSZoneRef),
}
}
@@ -71,19 +82,37 @@
func (s *EnvServer) monitorTask(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
- fmt.Printf("%+v %+v\n", s.tasks, vars)
- t, ok := s.tasks[vars["key"]]
+ key, ok := vars["key"]
+ if !ok {
+ http.Error(w, "Task key not provided", http.StatusBadRequest)
+ return
+ }
+ t, ok := s.tasks[key]
if !ok {
http.Error(w, "Task not found", http.StatusBadRequest)
return
}
+ dnsRef, ok := s.dns[key]
+ if !ok {
+ http.Error(w, "Task dns configuration not found", http.StatusInternalServerError)
+ return
+ }
+ err, ready, records := s.dnsFetcher.Fetch(dnsRef.Namespace, dnsRef.Name)
+ // TODO(gio): check error type
+ if err != nil && (ready || len(records) > 0) {
+ panic("!! SHOULD NOT REACH !!")
+ }
+ if !ready && len(records) > 0 {
+ panic("!! SHOULD NOT REACH !!")
+ }
tmpl, err := htemplate.New("response").Parse(envCreatedHtml)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
if err := tmpl.Execute(w, map[string]any{
- "Root": t,
+ "Root": t,
+ "DNSRecords": records,
}); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
@@ -237,7 +266,7 @@
} else {
req.Name = name
}
- t := tasks.NewCreateEnvTask(
+ t, dns := tasks.NewCreateEnvTask(
tasks.Env{
PCloudEnvName: env.Name,
Name: req.Name,
@@ -253,6 +282,7 @@
s.repo,
)
s.tasks["foo"] = t
+ s.dns["foo"] = dns
go t.Start()
http.Redirect(w, r, "/env/foo", http.StatusSeeOther)
}