Reconciler: Reconcile dodo Apps as well

Fix service-account assignment.

Change-Id: Ic66c46ae5b728e09ee9118f61e31ab860623bce0
diff --git a/core/installer/welcome/appmanager.go b/core/installer/welcome/appmanager.go
index 4fecf36..82421e9 100644
--- a/core/installer/welcome/appmanager.go
+++ b/core/installer/welcome/appmanager.go
@@ -25,7 +25,7 @@
 	port       int
 	m          *installer.AppManager
 	r          installer.AppRepository
-	reconciler tasks.Reconciler
+	reconciler *tasks.FixedReconciler
 	h          installer.HelmReleaseMonitor
 	tasks      map[string]tasks.Task
 	ta         map[string]installer.EnvApp
@@ -64,7 +64,7 @@
 	port int,
 	m *installer.AppManager,
 	r installer.AppRepository,
-	reconciler tasks.Reconciler,
+	reconciler *tasks.FixedReconciler,
 	h installer.HelmReleaseMonitor,
 ) (*AppManagerServer, error) {
 	tmpl, err := parseTemplatesAppManager(appTmpls)
@@ -239,10 +239,13 @@
 	appDir := fmt.Sprintf("/apps/%s", instanceId)
 	namespace := fmt.Sprintf("%s%s%s", env.NamespacePrefix, a.Namespace(), suffix)
 	t := tasks.NewInstallTask(s.h, func() (installer.ReleaseResources, error) {
-		return s.m.Install(a, instanceId, appDir, namespace, values)
+		rr, err := s.m.Install(a, instanceId, appDir, namespace, values)
+		if err == nil {
+			ctx, _ := context.WithTimeout(context.Background(), 5*time.Second)
+			go s.reconciler.Reconcile(ctx)
+		}
+		return rr, err
 	})
-	ctx, _ := context.WithTimeout(context.Background(), 2*time.Minute)
-	go s.reconciler.Reconcile(ctx)
 	if _, ok := s.tasks[instanceId]; ok {
 		panic("MUST NOT REACH!")
 	}
diff --git a/core/installer/welcome/dodo_app.go b/core/installer/welcome/dodo_app.go
index fbf732b..a19fecf 100644
--- a/core/installer/welcome/dodo_app.go
+++ b/core/installer/welcome/dodo_app.go
@@ -21,6 +21,7 @@
 
 	"github.com/giolekva/pcloud/core/installer"
 	"github.com/giolekva/pcloud/core/installer/soft"
+	"github.com/giolekva/pcloud/core/installer/tasks"
 
 	"github.com/gorilla/mux"
 	"github.com/gorilla/securecookie"
@@ -106,6 +107,7 @@
 	appTmpls          AppTmplStore
 	external          bool
 	fetchUsersAddr    string
+	reconciler        tasks.Reconciler
 	logs              map[string]string
 }
 
@@ -133,6 +135,7 @@
 	env installer.EnvConfig,
 	external bool,
 	fetchUsersAddr string,
+	reconciler tasks.Reconciler,
 ) (*DodoAppServer, error) {
 	tmplts, err := parseTemplatesDodoApp(dodoAppTmplFS)
 	if err != nil {
@@ -169,6 +172,7 @@
 		appTmpls,
 		external,
 		fetchUsersAddr,
+		reconciler,
 		map[string]string{},
 	}
 	config, err := client.GetRepo(ConfigRepoName)
@@ -1004,6 +1008,8 @@
 			}
 		}()
 	}
+	ctx, _ := context.WithTimeout(context.Background(), 2*time.Minute)
+	go s.reconciler.Reconcile(ctx, s.namespace, "config")
 	return nil
 }
 
@@ -1035,29 +1041,28 @@
 	} `json:"input"`
 }
 
-func (s *DodoAppServer) updateDodoApp(appStatus installer.EnvApp, name, namespace string, networks []installer.Network) (installer.ReleaseResources, error) {
-	fmt.Println("111")
+func (s *DodoAppServer) updateDodoApp(
+	appStatus installer.EnvApp,
+	name, namespace string,
+	networks []installer.Network,
+) (installer.ReleaseResources, error) {
 	repo, err := s.client.GetRepo(name)
 	if err != nil {
 		return installer.ReleaseResources{}, err
 	}
-	fmt.Println("111")
 	hf := installer.NewGitHelmFetcher()
 	m, err := installer.NewAppManager(repo, s.nsc, s.jc, hf, "/.dodo")
 	if err != nil {
 		return installer.ReleaseResources{}, err
 	}
-	fmt.Println("111")
 	appCfg, err := soft.ReadFile(repo, "app.cue")
 	if err != nil {
 		return installer.ReleaseResources{}, err
 	}
-	fmt.Println("111")
 	app, err := installer.NewDodoApp(appCfg)
 	if err != nil {
 		return installer.ReleaseResources{}, err
 	}
-	fmt.Println("111")
 	lg := installer.GitRepositoryLocalChartGenerator{"app", namespace}
 	var ret installer.ReleaseResources
 	if _, err := repo.Do(func(r soft.RepoFS) (string, error) {
@@ -1079,16 +1084,13 @@
 			installer.WithLocalChartGenerator(lg),
 			installer.WithNoLock(),
 		)
-		fmt.Println("111")
 		if err != nil {
 			return "", err
 		}
-		fmt.Println("111")
 		var rendered dodoAppRendered
 		if err := json.NewDecoder(bytes.NewReader(ret.RenderedRaw)).Decode(&rendered); err != nil {
 			return "", nil
 		}
-		fmt.Println("111")
 		if _, err := m.Install(
 			appStatus,
 			"status",
@@ -1108,7 +1110,6 @@
 		); err != nil {
 			return "", err
 		}
-		fmt.Println("111")
 		return "install app", nil
 	},
 		soft.WithCommitToBranch("dodo"),
@@ -1116,6 +1117,8 @@
 	); err != nil {
 		return installer.ReleaseResources{}, err
 	}
+	ctx, _ := context.WithTimeout(context.Background(), 2*time.Minute)
+	go s.reconciler.Reconcile(ctx, namespace, "app")
 	return ret, nil
 }