diff --git a/Makefile b/Makefile index 13cf89a..0778eb7 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ install: $(shell mkdir /etc/p2p-rendering && chmod +r /etc/p2p-rendering && touch /etc/p2p-rendering/ip_table.json) build: - go build -o main main.go + go build . run: go run main.go diff --git a/client/container.go b/client/container.go index b4a97dc..0d15d85 100644 --- a/client/container.go +++ b/client/container.go @@ -6,6 +6,7 @@ import ( "git.sr.ht/~akilan1999/p2p-rendering-computation/server/docker" "io/ioutil" "net/http" + "strconv" ) const ( @@ -19,8 +20,9 @@ var client = http.Client{} // Start container using REST api Implementation // From the selected server IP address // TODO: Test cases for this function -func StartContainer(Ip string,Num_ports int) (*docker.DockerVM ,error) { - URL := "http://" + Ip + ":" + serverPort + "/startcontainer?ports=" + fmt.Sprint(Num_ports) +func StartContainer(Ip string,Num_ports int, GPU bool) (*docker.DockerVM ,error) { + // Passes URL with number of TCP ports to allocated and to give GPU access to the docker container + URL := "http://" + Ip + ":" + serverPort + "/startcontainer?ports=" + fmt.Sprint(Num_ports) + "&GPU=" + strconv.FormatBool(GPU) resp, err := http.Get(URL) // Convert response to byte value diff --git a/cmd/action.go b/cmd/action.go index 2c2abeb..50b2aca 100644 --- a/cmd/action.go +++ b/cmd/action.go @@ -37,7 +37,7 @@ var CliAction = func(ctx *cli.Context) error { fmt.Sscanf(Ports, "%d", &PortsInt) } - imageRes, err := client.StartContainer(IpAddress,PortsInt) + imageRes, err := client.StartContainer(IpAddress,PortsInt,GPU) if err != nil { fmt.Print(err) diff --git a/cmd/flags.go b/cmd/flags.go index a9af00a..5c53be3 100644 --- a/cmd/flags.go +++ b/cmd/flags.go @@ -4,12 +4,14 @@ import ( "github.com/urfave/cli/v2" ) +// Variables declared for CLI var ( IpAddress string Ports string Mode string + GPU bool + ListServers bool ) -var ListServers bool var AppConfigFlags = []cli.Flag{ // Deprecated to be implemented using GRPC @@ -38,4 +40,10 @@ var AppConfigFlags = []cli.Flag{ EnvVars: []string{"NUM_PORTS"}, Destination: &Ports, }, + &cli.BoolFlag{ + Name: "GPU", + Usage: "Create Docker Containers to access GPU", + EnvVars: []string{"USE_GPU"}, + Destination: &GPU, + }, } \ No newline at end of file diff --git a/go.mod b/go.mod index 0f15b16..5c2a97b 100644 --- a/go.mod +++ b/go.mod @@ -6,31 +6,21 @@ require ( github.com/Microsoft/hcsshim v0.8.15 // indirect github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d // indirect github.com/containerd/continuity v0.0.0-20210315143101-93e15499afd5 // indirect - github.com/cpuguy83/go-md2man/v2 v2.0.0 // indirect - github.com/davecgh/go-spew v1.1.1 // indirect - github.com/docker/distribution v2.7.1+incompatible // indirect github.com/docker/docker v20.10.0-beta1.0.20201113105859-b6bfff2a628f+incompatible github.com/docker/go-connections v0.4.0 - github.com/docker/go-units v0.4.0 // indirect github.com/gin-gonic/gin v1.6.3 github.com/go-ole/go-ole v1.2.5 // indirect - github.com/gogo/protobuf v1.3.2 // indirect github.com/google/go-cmp v0.5.4 // indirect github.com/google/uuid v1.1.2 github.com/gorilla/mux v1.8.0 // indirect github.com/grandcat/zeroconf v1.0.0 + github.com/lithammer/shortuuid v3.0.0+incompatible github.com/moby/sys/mount v0.2.0 // indirect github.com/moby/term v0.0.0-20201110203204-bea5bbe245bf // indirect - github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect - github.com/modern-go/reflect2 v1.0.1 // indirect github.com/morikuni/aec v1.0.0 // indirect - github.com/mxpv/nvml-go v0.0.0-20180227003457-e07f8c26812d - github.com/opencontainers/go-digest v1.0.0 // indirect - github.com/opencontainers/image-spec v1.0.1 // indirect github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2 github.com/shirou/gopsutil v3.20.12+incompatible github.com/showwin/speedtest-go v1.1.1 - github.com/sirupsen/logrus v1.7.0 // indirect github.com/urfave/cli/v2 v2.3.0 gitlab.com/NebulousLabs/fastrand v0.0.0-20181126182046-603482d69e40 // indirect gitlab.com/NebulousLabs/go-upnp v0.0.0-20181011194642-3a71999ed0d3 diff --git a/go.sum b/go.sum index efd683f..91720cf 100644 --- a/go.sum +++ b/go.sum @@ -117,8 +117,6 @@ github.com/containerd/containerd v1.3.0/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMX github.com/containerd/containerd v1.3.1-0.20191213020239-082f7e3aed57/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= github.com/containerd/containerd v1.4.0-beta.2.0.20200729163537-40b22ef07410/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.3 h1:ijQT13JedHSHrQGWFcGEwzcNKrAGIiZ+jSD5QQG07SY= -github.com/containerd/containerd v1.4.3/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= github.com/containerd/containerd v1.5.0-beta.1 h1:IK6yirB4X7wpKyFSikWiT++nZsyIxGAAgNEv3fEGuls= github.com/containerd/containerd v1.5.0-beta.1/go.mod h1:5HfvG1V2FsKesEGQ17k5/T7V960Tmcumvqn8Mc+pCYQ= github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= @@ -374,13 +372,17 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxv github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/pty v1.1.5 h1:hyz3dwM5QLc1Rfoz4FuWJQG5BN7tc6K1MndAUnGpQr4= github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= +github.com/lithammer/shortuuid v3.0.0+incompatible h1:NcD0xWW/MZYXEHa6ITy6kaXN5nwm/V115vj2YXfhS0w= +github.com/lithammer/shortuuid v3.0.0+incompatible/go.mod h1:FR74pbAuElzOUuenUHTK2Tciko1/vKuIKS9dSkDrA4w= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= @@ -400,7 +402,6 @@ github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A= -github.com/moby/sys v0.0.0-20210311035424-40883be4345c h1:EWILMjCOIbZO3KfT0Nx+5L0+6MRrLkFMtPNAP/+Rg60= github.com/moby/sys/mount v0.2.0 h1:WhCW5B355jtxndN5ovugJlMFJawbUODuW8fSnEH6SSM= github.com/moby/sys/mount v0.2.0/go.mod h1:aAivFE2LB3W4bACsUXChRHQ0qKWsetY4Y9V7sxOougM= github.com/moby/sys/mountinfo v0.4.0 h1:1KInV3Huv18akCu58V7lzNlt+jFmqlu1EaErnEHE/VM= @@ -424,8 +425,6 @@ github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8m github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= -github.com/mxpv/nvml-go v0.0.0-20180227003457-e07f8c26812d h1:lQo1zUtnGr52K2a+Ll3DNDoukmPeuHK11baUNGRDSt0= -github.com/mxpv/nvml-go v0.0.0-20180227003457-e07f8c26812d/go.mod h1:PS1oTOPfvtFjl9T7nduA/RYrIpqtRh2Nvk++rQCZ2q8= github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= @@ -551,6 +550,7 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= @@ -568,7 +568,6 @@ github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijb github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli v1.22.2 h1:gsqYFH8bb9ekPA12kRo0hfjngWQjkJPlN9R0N78BoUo= github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/cli v1.22.5 h1:lNq9sAHXK2qfdI8W+GRItjCEkI+2oR4d+MEHy1CKXoU= github.com/urfave/cli/v2 v2.3.0 h1:qph92Y649prgesehzOrQjdWyxFOp/QVM+6imKHad91M= github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= github.com/vishvananda/netlink v0.0.0-20181108222139-023a6dafdcdf/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk= @@ -890,6 +889,7 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20141024133853-64131543e789/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= @@ -912,7 +912,9 @@ gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= diff --git a/p2p-rendering-computation b/p2p-rendering-computation index 20bc067..498ad9e 100755 Binary files a/p2p-rendering-computation and b/p2p-rendering-computation differ diff --git a/p2p/iptable.go b/p2p/iptable.go index 8ab2f3a..c8f2347 100644 --- a/p2p/iptable.go +++ b/p2p/iptable.go @@ -30,6 +30,7 @@ func ReadIpTable()(*IpAddresses ,error){ return nil,err } + // defer the closing of our jsonFile so that we can parse it later on defer jsonFile.Close() diff --git a/server/docker/docker.go b/server/docker/docker.go index d2df2e2..136a0f0 100644 --- a/server/docker/docker.go +++ b/server/docker/docker.go @@ -2,6 +2,7 @@ package docker import ( "bufio" + "bytes" "context" "encoding/json" "errors" @@ -11,8 +12,10 @@ import ( "github.com/docker/docker/client" "github.com/docker/docker/pkg/archive" "github.com/docker/go-connections/nat" + "github.com/lithammer/shortuuid" "github.com/phayes/freeport" "io" + "os/exec" "time" ) @@ -26,6 +29,7 @@ type DockerVM struct { TagName string `json:"TagName"` ImagePath string `json:"ImagePath"` Ports []int `json:"OpenPorts"` + GPU string `json:"GPU"` } type ErrorLine struct { @@ -39,7 +43,7 @@ type ErrorDetail struct { var dockerRegistryUserID = "" -func BuildRunContainer(NumPorts int) (*DockerVM,error) { +func BuildRunContainer(NumPorts int, GPU string) (*DockerVM,error) { //Docker Struct Variable var RespDocker *DockerVM = new(DockerVM) @@ -57,6 +61,9 @@ func BuildRunContainer(NumPorts int) (*DockerVM,error) { RespDocker.Ports = append(RespDocker.Ports, Ports[i]) } + // Sets if GPU is selected or not + RespDocker.GPU =GPU + // Sets Free port to Struct RespDocker.SSHPort = Ports[0] RespDocker.VNCPort = Ports[1] @@ -126,8 +133,9 @@ func (d *DockerVM)imageBuild(dockerClient *client.Client) error { // Starts container and assigns port numbers // Sample Docker run Command -// docker run -d=true --name=Test123 --restart=always -p 3443:6901 -p 3453:22 -//-p 3434:3434 -p 3245:3245 -v=/opt/data:/data p2p-ubuntu /start > /dev/null +// docker run -d=true --name=Test123 --restart=always --gpus all +//-p 3443:6901 -p 3453:22 -p 3434:3434 -p 3245:3245 -v=/opt/data:/data +//p2p-ubuntu /start > /dev/null func (d *DockerVM)runContainer(dockerClient *client.Client) error{ ctx, _ := context.WithTimeout(context.Background(), time.Second*2000) @@ -173,33 +181,53 @@ func (d *DockerVM)runContainer(dockerClient *client.Client) error{ } } + // The first mode runs using the Docker Api. As the API supports using + // CPU and uses a shell script for GPU call because till this point of + // implementation docker api does not support the flag "--gpu all" + if d.GPU != "true" { + config := &container.Config{ + Image: d.TagName, + Entrypoint: []string{"/dockerstartup/vnc_startup.sh", "/start"}, + Volumes: map[string]struct{}{"/opt/data:/data": {}}, + ExposedPorts: ExposedPort, + } + hostConfig := &container.HostConfig{ + PortBindings: PortForwarding, + } - config := &container.Config{ - Image : d.TagName, - Entrypoint: [] string {"/dockerstartup/vnc_startup.sh","/start"}, - Volumes: map[string]struct{}{"/opt/data:/data":{}}, - ExposedPorts: ExposedPort, + res, err := dockerClient.ContainerCreate(ctx, config, hostConfig, + nil, nil, "") + + // Set response ID + d.ID = res.ID + + if err != nil { + return err + } + + err = dockerClient.ContainerStart(ctx, res.ID, types.ContainerStartOptions{}) + + if err != nil { + return err + } + } else { + // Generate Random ID + id := shortuuid.New() + d.ID = id + + var cmd bytes.Buffer + cmd.WriteString("docker run -d=true --name="+ id +" --restart=always --gpus all -p " + fmt.Sprint(d.VNCPort) + ":" + "6901 " + "-p " + fmt.Sprint(d.SSHPort) + ":" + "22 ") + for i := range d.Ports { + cmd.WriteString("-p " + fmt.Sprint(d.Ports[i]) + ":" + fmt.Sprint(d.Ports[i]) + " ") + } + cmd.WriteString("-v=/opt/data:/data p2p-ubuntu /start > /dev/null") + //"-v=/opt/data:/data p2p-ubuntu /start > /dev/null" + cmdStr := cmd.String() + _, err := exec.Command("/bin/sh", "-c", cmdStr).Output() + if err != nil { + return err + } } - hostConfig := &container.HostConfig{ - PortBindings: PortForwarding, - } - - res, err := dockerClient.ContainerCreate(ctx,config,hostConfig, - nil,nil,"") - - // Set response ID - d.ID = res.ID - - if err != nil { - return err - } - - err = dockerClient.ContainerStart(ctx, res.ID, types.ContainerStartOptions{}) - - if err != nil { - return err - } - return nil } diff --git a/server/rpc.go b/server/rpc.go index 118cc18..eb8efad 100644 --- a/server/rpc.go +++ b/server/rpc.go @@ -20,7 +20,7 @@ type Docker struct { // Starts container using RPC calls func (l *Listener) StartContainer( reply *Docker) error { fmt.Print("here") - vm, err := docker.BuildRunContainer(3) + vm, err := docker.BuildRunContainer(3,"false") if err != nil { return err } diff --git a/server/server.go b/server/server.go index ab001b4..e637567 100644 --- a/server/server.go +++ b/server/server.go @@ -36,9 +36,13 @@ func Server() error{ //Gets Ip Table from server node r.POST("/IpTable", func(c *gin.Context) { - + // Getting IPV4 address of client + var ClientHost p2p.IpAddress + ClientHost.Ipv4 = c.ClientIP() // Variable to store IP table information var IPTable p2p.IpAddresses + //Add Client IP address to IPTable struct + IPTable.IpAddress = append(IPTable.IpAddress, ClientHost) // Receive file from POST request body, err := c.FormFile("json") @@ -77,8 +81,9 @@ func Server() error{ // Starts docker container in server r.GET("/startcontainer", func(c *gin.Context) { - // Get Number of ports to open + // Get Number of ports to open and whether to use GPU or not Ports := c.DefaultQuery("ports","0") + GPU := c.DefaultQuery("GPU","false") var PortsInt int // Convert Get Request value to int @@ -86,7 +91,7 @@ func Server() error{ // Creates container and returns back result to // access container - resp, err := docker.BuildRunContainer(PortsInt) + resp, err := docker.BuildRunContainer(PortsInt,GPU) if err != nil { c.String(http.StatusInternalServerError, fmt.Sprintf("error: %s", err))