Skip to content

Commit d799fbb

Browse files
committed
Add proxy support for model pulling behind firewall
- Pass proxy environment variables (HTTP_PROXY, HTTPS_PROXY, NO_PROXY) to docker-model-runner container - Configure HTTP transport to use ProxyFromEnvironment for model pulling - Add tests for proxy configuration in both container creation and transport Signed-off-by: Eric Curtin <[email protected]>
1 parent 1f7eb6d commit d799fbb

File tree

3 files changed

+85
-1
lines changed

3 files changed

+85
-1
lines changed

cmd/cli/pkg/standalone/containers.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,14 @@ func CreateControllerContainer(ctx context.Context, dockerClient *client.Client,
230230
if doNotTrack {
231231
env = append(env, "DO_NOT_TRACK=1")
232232
}
233+
234+
// Pass proxy environment variables to the container if they are set
235+
proxyEnvVars := []string{"HTTP_PROXY", "HTTPS_PROXY", "NO_PROXY", "http_proxy", "https_proxy", "no_proxy"}
236+
for _, proxyVar := range proxyEnvVars {
237+
if value, ok := os.LookupEnv(proxyVar); ok {
238+
env = append(env, proxyVar+"="+value)
239+
}
240+
}
233241
config := &container.Config{
234242
Image: imageName,
235243
Env: env,

main.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,12 +70,16 @@ func main() {
7070

7171
memEstimator := memory.NewEstimator(sysMemInfo)
7272

73+
// Create a proxy-aware HTTP transport
74+
// http.DefaultTransport already uses ProxyFromEnvironment by default
75+
baseTransport := http.DefaultTransport.(*http.Transport).Clone()
76+
7377
modelManager := models.NewManager(
7478
log,
7579
models.ClientConfig{
7680
StoreRootPath: modelPath,
7781
Logger: log.WithFields(logrus.Fields{"component": "model-manager"}),
78-
Transport: resumable.New(http.DefaultTransport),
82+
Transport: resumable.New(baseTransport),
7983
},
8084
nil,
8185
memEstimator,

main_test.go

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package main
22

33
import (
4+
"net/http"
45
"os"
56
"testing"
67

@@ -106,3 +107,74 @@ func TestCreateLlamaCppConfigFromEnv(t *testing.T) {
106107
})
107108
}
108109
}
110+
111+
// TestProxyTransportConfiguration verifies that the HTTP transport
112+
// is configured to use proxy settings from environment variables.
113+
func TestProxyTransportConfiguration(t *testing.T) {
114+
tests := []struct {
115+
name string
116+
envVars map[string]string
117+
}{
118+
{
119+
name: "HTTP_PROXY set",
120+
envVars: map[string]string{
121+
"HTTP_PROXY": "http://proxy.example.com:8080",
122+
},
123+
},
124+
{
125+
name: "HTTPS_PROXY set",
126+
envVars: map[string]string{
127+
"HTTPS_PROXY": "http://proxy.example.com:8080",
128+
},
129+
},
130+
{
131+
name: "Both HTTP_PROXY and HTTPS_PROXY set",
132+
envVars: map[string]string{
133+
"HTTP_PROXY": "http://proxy.example.com:8080",
134+
"HTTPS_PROXY": "https://proxy.example.com:8080",
135+
},
136+
},
137+
{
138+
name: "No proxy variables set",
139+
envVars: map[string]string{},
140+
},
141+
}
142+
143+
for _, tt := range tests {
144+
t.Run(tt.name, func(t *testing.T) {
145+
// Save original environment
146+
originalEnv := make(map[string]string)
147+
proxyEnvVars := []string{"HTTP_PROXY", "HTTPS_PROXY", "NO_PROXY", "http_proxy", "https_proxy", "no_proxy"}
148+
for _, key := range proxyEnvVars {
149+
if val, exists := os.LookupEnv(key); exists {
150+
originalEnv[key] = val
151+
}
152+
os.Unsetenv(key)
153+
}
154+
defer func() {
155+
// Restore original environment
156+
for _, key := range proxyEnvVars {
157+
os.Unsetenv(key)
158+
}
159+
for key, val := range originalEnv {
160+
os.Setenv(key, val)
161+
}
162+
}()
163+
164+
// Set test environment variables
165+
for key, val := range tt.envVars {
166+
os.Setenv(key, val)
167+
}
168+
169+
// Test that we can create a proxy-aware transport
170+
// This simulates what we do in main()
171+
baseTransport := http.DefaultTransport.(*http.Transport).Clone()
172+
baseTransport.Proxy = http.ProxyFromEnvironment
173+
174+
// Verify the transport has a Proxy function set
175+
if baseTransport.Proxy == nil {
176+
t.Error("Expected Proxy function to be set on transport")
177+
}
178+
})
179+
}
180+
}

0 commit comments

Comments
 (0)