Skip to content

Commit

Permalink
feat: direct server access for local projects (#29)
Browse files Browse the repository at this point in the history
Signed-off-by: Toma Puljak <[email protected]>
  • Loading branch information
Tpuljak authored Jun 14, 2024
1 parent 74ca595 commit b66701f
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 20 deletions.
3 changes: 2 additions & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ module github.com/daytonaio/daytona-provider-docker
go 1.22.2

require (
github.com/daytonaio/daytona v0.13.0
github.com/daytonaio/daytona v0.19.0
github.com/docker/docker v26.1.0+incompatible
github.com/hashicorp/go-hclog v1.5.0
github.com/hashicorp/go-plugin v1.6.0
Expand Down Expand Up @@ -43,6 +43,7 @@ require (
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/moby/docker-image-spec v1.3.1 // indirect
github.com/moby/term v0.5.0 // indirect
github.com/morikuni/aec v1.0.0 // indirect
github.com/oklog/run v1.0.0 // indirect
github.com/opencontainers/go-digest v1.0.0 // indirect
github.com/opencontainers/image-spec v1.1.0-rc5 // indirect
Expand Down
6 changes: 4 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -648,14 +648,16 @@ github.com/cncf/xds/go v0.0.0-20230310173818-32f1caf87195/go.mod h1:eXthEFrGJvWH
github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/creack/pty v1.1.21 h1:1/QdRyBaHHJP61QkWMXlOIBfsgdDeeKfK8SYVUWJKf0=
github.com/creack/pty v1.1.21/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davidmz/go-pageant v1.0.2 h1:bPblRCh5jGU+Uptpz6LgMZGD5hJoOt7otgT454WvHn0=
github.com/davidmz/go-pageant v1.0.2/go.mod h1:P2EDDnMqIwG5Rrp05dTRITj9z2zpGcD9efWSkTNKLIE=
github.com/daytonaio/daytona v0.13.0 h1:qrTYkK40YvLTNtoNCzlDvZpTCAz8ulYpo3mSA4KxIho=
github.com/daytonaio/daytona v0.13.0/go.mod h1:PankzsAQ3cyfW5pCj/oxDGZOnbzyrVkjRdQKQRztEDc=
github.com/daytonaio/daytona v0.19.0 h1:jzCIGykCE3lMrAv2nfyHbj7iEAIuGvspPwzB5hL3XGg=
github.com/daytonaio/daytona v0.19.0/go.mod h1:sJ4XQY8omQIW9wn37rtY+gyzxVmE1CupsG4QBD085u0=
github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk=
github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
github.com/docker/docker v26.1.0+incompatible h1:W1G9MPNbskA6VZWL7b3ZljTh0pXI68FpINx0GKaOdaM=
Expand Down
54 changes: 42 additions & 12 deletions pkg/provider/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@ package provider

import (
"errors"
"fmt"
"io"
"net/url"
"os"
"path"
"runtime"
Expand All @@ -20,13 +22,15 @@ import (
)

type DockerProvider struct {
BasePath *string
ServerDownloadUrl *string
ServerVersion *string
ServerUrl *string
ServerApiUrl *string
LogsDir *string
RemoteSockDir string
BasePath *string
DaytonaDownloadUrl *string
DaytonaVersion *string
ServerUrl *string
ApiUrl *string
LogsDir *string
ApiPort *uint32
ServerPort *uint32
RemoteSockDir string
}

func (p *DockerProvider) Initialize(req provider.InitializeProviderRequest) (*provider_util.Empty, error) {
Expand All @@ -51,11 +55,13 @@ func (p *DockerProvider) Initialize(req provider.InitializeProviderRequest) (*pr
}

p.BasePath = &req.BasePath
p.ServerDownloadUrl = &req.ServerDownloadUrl
p.ServerVersion = &req.ServerVersion
p.DaytonaDownloadUrl = &req.DaytonaDownloadUrl
p.DaytonaVersion = &req.DaytonaVersion
p.ServerUrl = &req.ServerUrl
p.ServerApiUrl = &req.ServerApiUrl
p.ApiUrl = &req.ApiUrl
p.LogsDir = &req.LogsDir
p.ApiPort = &req.ApiPort
p.ServerPort = &req.ServerPort

return new(provider_util.Empty), nil
}
Expand Down Expand Up @@ -131,7 +137,7 @@ func (p DockerProvider) GetWorkspaceInfo(workspaceReq *provider.WorkspaceRequest
}

func (p DockerProvider) CreateProject(projectReq *provider.ProjectRequest) (*provider_util.Empty, error) {
if p.ServerDownloadUrl == nil {
if p.DaytonaDownloadUrl == nil {
return new(provider_util.Empty), errors.New("ServerDownloadUrl not set. Did you forget to call Initialize?")
}

Expand All @@ -148,7 +154,19 @@ func (p DockerProvider) CreateProject(projectReq *provider.ProjectRequest) (*pro
return new(provider_util.Empty), err
}

err = dockerClient.CreateProject(projectReq.Project, *p.ServerDownloadUrl, projectReq.ContainerRegistry, logWriter)
downloadUrl := *p.DaytonaDownloadUrl
if projectReq.Project.Target == "local" {
p.setLocalEnvOverride(projectReq.Project)
parsed, err := url.Parse(downloadUrl)
if err != nil {
return new(provider_util.Empty), err
}
parsed.Host = fmt.Sprintf("host.docker.internal:%d", *p.ApiPort)
parsed.Scheme = "http"
downloadUrl = parsed.String()
}

err = dockerClient.CreateProject(projectReq.Project, downloadUrl, projectReq.ContainerRegistry, logWriter)
if err != nil {
return new(provider_util.Empty), err
}
Expand Down Expand Up @@ -219,3 +237,15 @@ func (p DockerProvider) getClient(targetOptionsJson string) (docker.IDockerClien
ApiClient: client,
}), nil
}

// If the project is running locally, we override the env vars to use the host.docker.internal address
func (p DockerProvider) setLocalEnvOverride(project *workspace.Project) {
envOverride := workspace.GetProjectEnvVars(project, fmt.Sprintf("http://host.docker.internal:%d", *p.ApiPort), fmt.Sprintf("http://host.docker.internal:%d", *p.ServerPort))

for k := range project.EnvVars {
override, ok := envOverride[k]
if ok {
project.EnvVars[k] = override
}
}
}
12 changes: 7 additions & 5 deletions pkg/provider/provider_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -160,11 +160,13 @@ func getDockerClient() *docker_client.Client {

func init() {
_, err := dockerProvider.Initialize(provider.InitializeProviderRequest{
BasePath: "/tmp/workspaces",
ServerDownloadUrl: "https://download.daytona.io/daytona/get-server.sh",
ServerVersion: "latest",
ServerUrl: "",
ServerApiUrl: "",
BasePath: "/tmp/workspaces",
DaytonaDownloadUrl: "https://download.daytona.io/daytona/get-server.sh",
DaytonaVersion: "latest",
ServerUrl: "",
ApiUrl: "",
ServerPort: 0,
ApiPort: 0,
})
if err != nil {
panic(err)
Expand Down

0 comments on commit b66701f

Please sign in to comment.