installer: orginize bootstrapper, improve service IP handling
diff --git a/core/installer/cmd/welcome.go b/core/installer/cmd/welcome.go
index 6d2d7e0..0a38d13 100644
--- a/core/installer/cmd/welcome.go
+++ b/core/installer/cmd/welcome.go
@@ -1,18 +1,13 @@
package main
import (
- "fmt"
"golang.org/x/crypto/ssh"
- "net"
"os"
- "github.com/go-git/go-billy/v5/memfs"
- "github.com/go-git/go-git/v5"
- gitssh "github.com/go-git/go-git/v5/plumbing/transport/ssh"
- "github.com/go-git/go-git/v5/storage/memory"
"github.com/spf13/cobra"
"github.com/giolekva/pcloud/core/installer"
+ "github.com/giolekva/pcloud/core/installer/soft"
"github.com/giolekva/pcloud/core/installer/welcome"
)
@@ -53,38 +48,27 @@
if err != nil {
return err
}
- auth := authSSH(sshKey)
- repo, err := git.Clone(memory.NewStorage(), memfs.New(), &git.CloneOptions{
- URL: welcomeFlags.repo,
- Auth: auth,
- RemoteName: "origin",
- ReferenceName: "refs/heads/master",
- Depth: 1,
- InsecureSkipTLS: true,
- Progress: os.Stdout,
- })
+ signer, err := ssh.ParsePrivateKey(sshKey)
+ if err != nil {
+ return err
+ }
+ addr, err := soft.ParseRepositoryAddress(welcomeFlags.repo)
+ if err != nil {
+ return err
+ }
+ repo, err := soft.CloneRepo(addr, signer)
+ if err != nil {
+ return err
+ }
nsCreator, err := newNSCreator()
if err != nil {
return err
}
s := welcome.NewServer(
welcomeFlags.port,
- installer.NewRepoIO(repo, auth.Signer),
+ installer.NewRepoIO(repo, signer),
nsCreator,
)
s.Start()
return nil
}
-
-func authSSH(pemBytes []byte) *gitssh.PublicKeys {
- a, err := gitssh.NewPublicKeys("git", pemBytes, "")
- if err != nil {
- panic(err)
- }
- a.HostKeyCallback = func(hostname string, remote net.Addr, key ssh.PublicKey) error {
- // TODO(giolekva): verify server public key
- fmt.Printf("--- %+v\n", ssh.MarshalAuthorizedKey(key))
- return nil
- }
- return a
-}