installer: use main config when creating new env
diff --git a/core/installer/cmd/app_manager.go b/core/installer/cmd/app_manager.go
index a19a9fc..769ea5a 100644
--- a/core/installer/cmd/app_manager.go
+++ b/core/installer/cmd/app_manager.go
@@ -63,7 +63,7 @@
if err != nil {
return err
}
- repo, err := soft.CloneRepo(addr, signer)
+ repo, err := soft.CloneRepository(addr, signer)
if err != nil {
return err
}
diff --git a/core/installer/cmd/welcome.go b/core/installer/cmd/welcome.go
index 0a38d13..68f3c36 100644
--- a/core/installer/cmd/welcome.go
+++ b/core/installer/cmd/welcome.go
@@ -56,7 +56,7 @@
if err != nil {
return err
}
- repo, err := soft.CloneRepo(addr, signer)
+ repo, err := soft.CloneRepository(addr, signer)
if err != nil {
return err
}
diff --git a/core/installer/repoio.go b/core/installer/repoio.go
index 41c479f..aae063c 100644
--- a/core/installer/repoio.go
+++ b/core/installer/repoio.go
@@ -77,7 +77,7 @@
}
defer configF.Close()
var cfg Config
- if err := readYaml(configF, &cfg); err != nil {
+ if err := ReadYaml(configF, &cfg); err != nil {
return Config{}, err
} else {
return cfg, nil
@@ -91,7 +91,7 @@
}
defer configF.Close()
var cfg AppConfig
- if err := readYaml(configF, &cfg); err != nil {
+ if err := ReadYaml(configF, &cfg); err != nil {
return AppConfig{}, err
} else {
return cfg, nil
@@ -155,7 +155,7 @@
return nil, err
}
data := make(map[string]any)
- if err := readYaml(inp, &data); err != nil {
+ if err := ReadYaml(inp, &data); err != nil {
return nil, err
}
return data, err
@@ -348,7 +348,7 @@
}
}
-func readYaml[T any](r io.Reader, o *T) error {
+func ReadYaml[T any](r io.Reader, o *T) error {
if contents, err := ioutil.ReadAll(r); err != nil {
return err
} else {
diff --git a/core/installer/soft/client.go b/core/installer/soft/client.go
index 635ee0e..d23a2f7 100644
--- a/core/installer/soft/client.go
+++ b/core/installer/soft/client.go
@@ -94,7 +94,7 @@
}
func (ss *Client) GetRepo(name string) (*Repository, error) {
- return CloneRepo(RepositoryAddress{ss.Addr, name}, ss.Signer)
+ return CloneRepository(RepositoryAddress{ss.Addr, name}, ss.Signer)
}
type RepositoryAddress struct {
@@ -118,7 +118,7 @@
return fmt.Sprintf("ssh://%s/%s", r.Addr, r.Name)
}
-func CloneRepo(addr RepositoryAddress, signer ssh.Signer) (*Repository, error) {
+func CloneRepository(addr RepositoryAddress, signer ssh.Signer) (*Repository, error) {
c, err := git.Clone(memory.NewStorage(), memfs.New(), &git.CloneOptions{
URL: addr.FullAddress(),
Auth: &gitssh.PublicKeys{
diff --git a/core/installer/welcome/env.go b/core/installer/welcome/env.go
index 4eea2c7..e08c073 100644
--- a/core/installer/welcome/env.go
+++ b/core/installer/welcome/env.go
@@ -98,24 +98,29 @@
}
{
repo, err := s.ss.GetRepo(req.Name)
- if repo == nil {
+ if err != nil {
return err
}
- if err := initNewEnv(s.ss, installer.NewRepoIO(repo, s.ss.Signer), s.nsCreator, req); err != nil {
+ var env installer.EnvConfig
+ r, err := s.repo.Reader("config.yaml")
+ if err != nil {
+ return err
+ }
+ defer r.Close()
+ if err := installer.ReadYaml(r, &env); err != nil {
+ return err
+ }
+ if err := initNewEnv(s.ss, installer.NewRepoIO(repo, s.ss.Signer), s.nsCreator, req, env); err != nil {
return err
}
}
{
- repo, err := s.ss.GetRepo("pcloud")
- if err != nil {
- return err
- }
ssPubKey, err := s.ss.GetPublicKey()
if err != nil {
return err
}
if err := addNewEnv(
- installer.NewRepoIO(repo, s.ss.Signer),
+ s.repo,
req,
keys,
ssPubKey,
@@ -126,22 +131,27 @@
return c.String(http.StatusOK, "OK")
}
-func initNewEnv(ss *soft.Client, r installer.RepoIO, nsCreator installer.NamespaceCreator, req createEnvReq) error {
+func initNewEnv(
+ ss *soft.Client,
+ r installer.RepoIO,
+ nsCreator installer.NamespaceCreator,
+ req createEnvReq,
+ env installer.EnvConfig,
+) error {
appManager, err := installer.NewAppManager(r, nsCreator)
if err != nil {
return err
}
appsRepo := installer.NewInMemoryAppRepository(installer.CreateAllApps())
- // TODO(giolekva): env name and ip should come from pcloud repo config.yaml
// TODO(giolekva): private domain can be configurable as well
config := installer.Config{
Values: installer.Values{
- PCloudEnvName: "pcloud",
+ PCloudEnvName: env.Name,
Id: req.Name,
ContactEmail: req.ContactEmail,
Domain: req.Domain,
PrivateDomain: fmt.Sprintf("p.%s", req.Domain),
- PublicIP: "46.49.35.44",
+ PublicIP: env.PublicIP,
NamespacePrefix: fmt.Sprintf("%s-", req.Name),
},
}