66 "github.com/zpatrick/go-config"
77 "github.com/codegangsta/cli"
88 "github.com/qnib/doxy/proxy"
9+ "strings"
910)
1011
1112var (
@@ -21,11 +22,37 @@ var (
2122 Usage : "Proxy socket to be created" ,
2223 EnvVar : "DOXY_PROXY_SOCKET" ,
2324 }
25+ proxyPatternKey = cli.StringFlag {
26+ Name : "pattern-key" ,
27+ Value : "default" ,
28+ Usage : "pattern key predefined" ,
29+ EnvVar : "DOXY_PATTERN_KEY" ,
30+ }
31+ gpuEnabled = cli.BoolFlag {
32+ Name : "gpu" ,
33+ Usage : "Map devices, bind-mounts and environment into each container to allow GPU usage" ,
34+ EnvVar : "DOXY_GPU_ENABLED" ,
35+ }
36+ constrainUser = cli.BoolFlag {
37+ Name : "user-pinning" ,
38+ Usage : "Pin user within container to the UID calling the command" ,
39+ EnvVar : "DOXY_USER_PINNING_ENABLED" ,
40+ }
2441 debugFlag = cli.BoolFlag {
2542 Name : "debug" ,
2643 Usage : "Print proxy requests" ,
2744 EnvVar : "DOXY_DEBUG" ,
2845 }
46+ bindAddFlag = cli.StringFlag {
47+ Name : "add-binds" ,
48+ Usage : "Comma separated list of bind-mounts to add" ,
49+ EnvVar : "DOXY_ADDITIONAL_BINDS" ,
50+ }
51+ devMapFlag = cli.StringFlag {
52+ Name : "device-mappings" ,
53+ Usage : "Comma separated list of device mappings" ,
54+ EnvVar : "DOXY_DEVICE_MAPPINGS" ,
55+ }
2956 patternFileFlag = cli.StringFlag {
3057 Name : "pattern-file" ,
3158 Value : proxy .PATTERN_FILE ,
@@ -41,6 +68,10 @@ func EvalOptions(cfg *config.Config) (po []proxy.ProxyOption) {
4168 po = append (po , proxy .WithDockerSocket (dockerSock ))
4269 debug , _ := cfg .Bool ("debug" )
4370 po = append (po , proxy .WithDebugValue (debug ))
71+ devMaps , _ := cfg .String ("device-mappings" )
72+ gpu , _ := cfg .Bool ("gpu" )
73+ po = append (po , proxy .WithGpuValue (gpu ))
74+ po = append (po , proxy .WithDevMappings (strings .Split (devMaps ,"," )))
4475 return
4576}
4677
@@ -50,18 +81,32 @@ func EvalPatternOpts(cfg *config.Config) (proxy.ProxyOption) {
5081 defer reader .Close ()
5182 patterns := []string {}
5283 if err != nil {
53- log .Printf ("Error reading patterns file (%s), using default patterns\n " , err .Error ())
54- return proxy .WithPatterns (proxy .DEFAULT_PATTERNS )
84+ patternsKey , _ := cfg .String ("pattern-key" )
85+ if patterns , ok := proxy .PATTERNS [patternsKey ]; ok {
86+ log .Printf ("Error reading patterns file '%s', using %s patterns\n " , err .Error (), patternsKey )
87+ return proxy .WithPatterns (patterns )
88+ }
89+ log .Printf ("Could not find pattern-key '%s'\n " , patternsKey )
90+ os .Exit (1 )
91+
5592 }
5693 patterns , err = proxy .ReadPatterns (reader )
5794 return proxy .WithPatterns (patterns )
5895}
5996
97+ func EvalBindMountOpts (cfg * config.Config ) (proxy.ProxyOption ) {
98+ bindStr , _ := cfg .String ("add-binds" )
99+ bindMounts := strings .Split (bindStr ,"," )
100+ return proxy .WithBindMounts (bindMounts )
101+ }
102+
103+
60104func RunApp (ctx * cli.Context ) {
61105 log .Printf ("[II] Start Version: %s" , ctx .App .Version )
62106 cfg := config .NewConfig ([]config.Provider {config .NewCLI (ctx , true )})
63107 po := EvalOptions (cfg )
64108 po = append (po , EvalPatternOpts (cfg ))
109+ po = append (po , EvalBindMountOpts (cfg ))
65110 p := proxy .NewProxy (po ... )
66111 p .Run ()
67112}
@@ -70,12 +115,15 @@ func main() {
70115 app := cli .NewApp ()
71116 app .Name = "Proxy Docker unix socket to filter out insecure, harmful requests."
72117 app .Usage = "doxy [options]"
73- app .Version = "0.1.2 "
118+ app .Version = "0.2.0 "
74119 app .Flags = []cli.Flag {
75120 dockerSocketFlag ,
76121 proxySocketFlag ,
77122 debugFlag ,
123+ gpuEnabled ,
78124 patternFileFlag ,
125+ proxyPatternKey ,
126+ bindAddFlag ,
79127 }
80128 app .Action = RunApp
81129 app .Run (os .Args )
0 commit comments