Installer: Clean up RepoIO interface
Change-Id: If80d7be1460c725b7df9d1d27c9354cb9141acfe
diff --git a/core/installer/tasks/activate.go b/core/installer/tasks/activate.go
index 1333f28..dffdfbe 100644
--- a/core/installer/tasks/activate.go
+++ b/core/installer/tasks/activate.go
@@ -8,6 +8,8 @@
"path"
"strings"
"text/template"
+
+ "github.com/giolekva/pcloud/core/installer"
)
//go:embed env-tmpl
@@ -29,45 +31,43 @@
return err
}
repoHost := strings.Split(st.ssClient.Addr, ":")[0]
- kust, err := st.repo.ReadKustomization("environments/kustomization.yaml")
- if err != nil {
- return err
- }
- kust.AddResources(env.Name)
- tmpls, err := template.ParseFS(filesTmpls, "env-tmpl/*.yaml")
- if err != nil {
- return err
- }
- var knownHosts bytes.Buffer
- for _, key := range ssPublicKeys {
- fmt.Fprintf(&knownHosts, "%s %s\n", repoHost, key)
- }
- for _, tmpl := range tmpls.Templates() { // TODO(gio): migrate to cue
- dstPath := path.Join("environments", env.Name, tmpl.Name())
- dst, err := st.repo.Writer(dstPath)
+ return st.repo.Atomic(func(r installer.RepoFS) (string, error) {
+ kust, err := installer.ReadKustomization(r, "environments/kustomization.yaml")
if err != nil {
- return err
+ return "", err
}
- defer dst.Close()
-
- if err := tmpl.Execute(dst, map[string]string{
- "Name": env.Name,
- "PrivateKey": base64.StdEncoding.EncodeToString(st.keys.RawPrivateKey()),
- "PublicKey": base64.StdEncoding.EncodeToString(st.keys.RawAuthorizedKey()),
- "RepoHost": repoHost,
- "RepoName": "config",
- "KnownHosts": base64.StdEncoding.EncodeToString(knownHosts.Bytes()),
- }); err != nil {
- return err
+ kust.AddResources(env.Name)
+ tmpls, err := template.ParseFS(filesTmpls, "env-tmpl/*.yaml")
+ if err != nil {
+ return "", err
}
- }
- if err := st.repo.WriteKustomization("environments/kustomization.yaml", *kust); err != nil {
- return err
- }
- if err := st.repo.CommitAndPush(fmt.Sprintf("%s: initialize environment", env.Name)); err != nil {
- return err
- }
- return nil
+ var knownHosts bytes.Buffer
+ for _, key := range ssPublicKeys {
+ fmt.Fprintf(&knownHosts, "%s %s\n", repoHost, key)
+ }
+ for _, tmpl := range tmpls.Templates() { // TODO(gio): migrate to cue
+ dstPath := path.Join("environments", env.Name, tmpl.Name())
+ dst, err := r.Writer(dstPath)
+ if err != nil {
+ return "", err
+ }
+ defer dst.Close()
+ if err := tmpl.Execute(dst, map[string]string{
+ "Name": env.Name,
+ "PrivateKey": base64.StdEncoding.EncodeToString(st.keys.RawPrivateKey()),
+ "PublicKey": base64.StdEncoding.EncodeToString(st.keys.RawAuthorizedKey()),
+ "RepoHost": repoHost,
+ "RepoName": "config",
+ "KnownHosts": base64.StdEncoding.EncodeToString(knownHosts.Bytes()),
+ }); err != nil {
+ return "", err
+ }
+ }
+ if err := installer.WriteYaml(r, "environments/kustomization.yaml", kust); err != nil {
+ return "", err
+ }
+ return fmt.Sprintf("%s: initialize environment", env.Name), nil
+ })
})
return &t
}