8488: crunchrunner brings certificates with it to ensure that it can
authorPeter Amstutz <peter.amstutz@curoverse.com>
Tue, 23 Feb 2016 16:20:47 +0000 (11:20 -0500)
committerPeter Amstutz <peter.amstutz@curoverse.com>
Tue, 23 Feb 2016 16:20:47 +0000 (11:20 -0500)
communicate with API server from inside the container.

sdk/cwl/arvados_cwl/__init__.py
sdk/go/crunchrunner/crunchrunner.go

index e33cc645b927d28ecb102e328a7d0ab1dd0430ed..9a792cb8d4b64a4918456c8c27faf04e43ce366e 100644 (file)
@@ -23,8 +23,9 @@ from cwltool.process import get_feature
 logger = logging.getLogger('arvados.cwl-runner')
 logger.setLevel(logging.INFO)
 
-crunchrunner_pdh = "e9b79ec72c692982d59f3a438fb49df2+66"
+crunchrunner_pdh = "721abe848fd8e6e6d1c99b920e6b7a2c+140"
 crunchrunner_download = "https://cloud.curoverse.com/collections/download/qr1hi-4zz18-n3m1yxd0vx78jic/1i1u2qtq66k1atziv4ocfgsg5nu5tj11n4r6e0bhvjg03rix4m/crunchrunner"
+certs_download = "https://cloud.curoverse.com/collections/download/qr1hi-4zz18-n3m1yxd0vx78jic/1i1u2qtq66k1atziv4ocfgsg5nu5tj11n4r6e0bhvjg03rix4m/ca-certificates.crt"
 
 def arv_docker_get_image(api_client, dockerRequirement, pull_image):
     if "dockerImageId" not in dockerRequirement and "dockerPull" in dockerRequirement:
@@ -311,12 +312,16 @@ class ArvCwlRunner(object):
             self.api.collections().get(uuid=crunchrunner_pdh).execute()
         except arvados.errors.ApiError as e:
             import httplib2
-            h = httplib2.Http('ca_certs': arvados.util.ca_certs_path())
+            h = httplib2.Http(ca_certs=arvados.util.ca_certs_path())
             resp, content = h.request(crunchrunner_download, "GET")
+            resp2, content2 = h.request(certs_download, "GET")
             with arvados.collection.Collection() as col:
                 with col.open("crunchrunner", "w") as f:
                     f.write(content)
-                col.save_new("crunchrunner binary")
+                with col.open("ca-certificates.crt", "w") as f:
+                    f.write(content2)
+
+                col.save_new("crunchrunner binary", ensure_unique_name=True)
 
         self.pipeline = self.api.pipeline_instances().create(body={"name": shortname(tool.tool["id"]),
                                                                    "components": {},
index 8e24e18fda845866909aff7f6bba1bd02234d53c..081ba50d500babc96fda1af522d9b678c255acb6 100644 (file)
@@ -1,13 +1,17 @@
 package main
 
 import (
+       "crypto/x509"
        "fmt"
        "git.curoverse.com/arvados.git/sdk/go/arvadosclient"
        "git.curoverse.com/arvados.git/sdk/go/keepclient"
+       "io/ioutil"
        "log"
+       "net/http"
        "os"
        "os/exec"
        "os/signal"
+       "path"
        "strings"
        "syscall"
 )
@@ -317,6 +321,15 @@ func main() {
                log.Fatal(err)
        }
 
+       certpath := path.Join(path.Dir(os.Args[0]), "ca-certificates.crt")
+       certdata, err := ioutil.ReadFile(certpath)
+       if err == nil {
+               log.Printf("Using TLS certificates at %v", certpath)
+               certs := x509.NewCertPool()
+               certs.AppendCertsFromPEM(certdata)
+               api.Client.Transport.(*http.Transport).TLSClientConfig.RootCAs = certs
+       }
+
        jobUuid := os.Getenv("JOB_UUID")
        taskUuid := os.Getenv("TASK_UUID")
        tmpdir := os.Getenv("TASK_WORK")