Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

POD-1244 | Init network rework #1569

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions cmd/agent/container/container.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,6 @@ func NewContainerCmd(flags *flags.GlobalFlags) *cobra.Command {
containerCmd.AddCommand(NewOpenVSCodeAsyncCmd())
containerCmd.AddCommand(NewCredentialsServerCmd(flags))
containerCmd.AddCommand(NewSetupLoftPlatformAccessCmd(flags))
containerCmd.AddCommand(NewNetworkDaemonCmd(flags))
return containerCmd
}
54 changes: 54 additions & 0 deletions cmd/agent/container/network_daemon.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package container

import (
"context"
"fmt"
"net"

"github.com/loft-sh/devpod/cmd/flags"
"github.com/loft-sh/devpod/pkg/tailscale"
"github.com/spf13/cobra"
)

// NetworkDaemonCmd holds the cmd flags
type NetworkDaemonCmd struct {
*flags.GlobalFlags

AccessKey string
PlatformHost string
NetworkHostname string
}

// NewDaemonCmd creates a new command
func NewNetworkDaemonCmd(flags *flags.GlobalFlags) *cobra.Command {
cmd := &NetworkDaemonCmd{
GlobalFlags: flags,
}
daemonCmd := &cobra.Command{
Use: "network-daemon",
Short: "Starts tailscale network daemon",
Args: cobra.NoArgs,
RunE: cmd.Run,
}
daemonCmd.Flags().StringVar(&cmd.AccessKey, "access-key", "", "")
daemonCmd.Flags().StringVar(&cmd.PlatformHost, "host", "", "")
daemonCmd.Flags().StringVar(&cmd.NetworkHostname, "hostname", "", "")
return daemonCmd
}

// Run runs the command logic
func (cmd *NetworkDaemonCmd) Run(_ *cobra.Command, _ []string) error {
tsNet := tailscale.NewTSNet(&tailscale.TSNetConfig{
AccessKey: cmd.AccessKey,
Host: tailscale.RemoveProtocol(cmd.PlatformHost),
Hostname: cmd.NetworkHostname,
PortHandlers: map[string]func(net.Listener){
"8022": tailscale.ReverseProxyHandler("127.0.0.1:8022"),
},
})
if err := tsNet.Start(context.TODO()); err != nil {
return fmt.Errorf("cannot start tsNet server: %w", err)
}

return nil
}
34 changes: 34 additions & 0 deletions cmd/agent/container/setup.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,9 @@ type SetupContainerCmd struct {
InjectGitCredentials bool
ContainerWorkspaceInfo string
SetupInfo string
AccessKey string
PlatformHost string
NetworkHostname string
}

// NewSetupContainerCmd creates a new command
Expand All @@ -72,6 +75,8 @@ func NewSetupContainerCmd(flags *flags.GlobalFlags) *cobra.Command {
setupContainerCmd.Flags().BoolVar(&cmd.InjectGitCredentials, "inject-git-credentials", false, "If DevPod should inject git credentials during setup")
setupContainerCmd.Flags().StringVar(&cmd.ContainerWorkspaceInfo, "container-workspace-info", "", "The container workspace info")
setupContainerCmd.Flags().StringVar(&cmd.SetupInfo, "setup-info", "", "The container setup info")
setupContainerCmd.Flags().StringVar(&cmd.AccessKey, "access-key", "", "Access Key to use")
setupContainerCmd.Flags().StringVar(&cmd.NetworkHostname, "network-hostname", "", "Network hostname to use")
_ = setupContainerCmd.MarkFlagRequired("setup-info")
return setupContainerCmd
}
Expand Down Expand Up @@ -202,6 +207,35 @@ func (cmd *SetupContainerCmd) Run(ctx context.Context) error {
}
}

// start tailscale networking daemon
if (cmd.AccessKey != "" && cmd.NetworkHostname != "") || true { // FIXME
err = single.Single("network.daemon.pid", func() (*exec.Cmd, error) {
logger.Infof("Start DevPod Networking Daemon")
binaryPath, err := os.Executable()
if err != nil {
return nil, err
}

return exec.Command(binaryPath, "agent", "container", "network-daemon", "--access-key", cmd.AccessKey, "--host", "host.docker.internal:8080", "--hostname", cmd.NetworkHostname), nil
})
if err != nil {
return err
}

err = single.Single("ssh.daemon.pid", func() (*exec.Cmd, error) {
logger.Infof("Start DevPod Networking Daemon")
binaryPath, err := os.Executable()
if err != nil {
return nil, err
}

return exec.Command(binaryPath, "helper", "ssh-server"), nil
})
if err != nil {
return err
}
}

out, err := json.Marshal(setupInfo)
if err != nil {
return fmt.Errorf("marshal setup info: %w", err)
Expand Down
4 changes: 2 additions & 2 deletions cmd/agent/container/setup_loft_platform_access.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,13 +71,13 @@ func (c *SetupLoftPlatformAccessCmd) Run(_ *cobra.Command, args []string) error
err = loftconfig.AuthDevpodCliToPlatform(loftConfig, logger)
if err != nil {
// log error but don't return to allow other CLIs to install as well
logger.Warn("unable to authenticate devpod cli: %v", err)
logger.Warnf("unable to authenticate devpod cli: %w", err)
}

err = loftconfig.AuthVClusterCliToPlatform(loftConfig, logger)
if err != nil {
// log error but don't return to allow other CLIs to install as well
logger.Warn("unable to authenticate vcluster cli: %v", err)
logger.Warnf("unable to authenticate vcluster cli: %w", err)
}

return nil
Expand Down
1 change: 1 addition & 0 deletions cmd/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ func NewBuildCmd(flags *flags.GlobalFlags) *cobra.Command {
cmd.UID,
false,
log.Default,
"",
)
if err != nil {
return err
Expand Down
Loading
Loading