Skip to content

Commit 9b4871b

Browse files
committed
Merge remote-tracking branch 'upstream/master'
2 parents 10f906e + 38fdc4c commit 9b4871b

7 files changed

Lines changed: 61 additions & 9 deletions

File tree

deploy/infrabox/templates/metrics/service.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ kind: Service
33
apiVersion: v1
44
metadata:
55
name: infrabox-metrics
6+
namespace: {{ template "system_namespace" . }}
67
labels:
78
app: infrabox-metrics
89
spec:

deploy/infrabox/templates/prometheus/metrics.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ apiVersion: monitoring.coreos.com/v1
33
kind: ServiceMonitor
44
metadata:
55
name: infrabox-metrics
6+
namespace: {{ template "system_namespace" . }}
67
labels:
78
app: infrabox
89
spec:

deploy/infrabox/templates/prometheus/prometheus.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ apiVersion: monitoring.coreos.com/v1
33
kind: Prometheus
44
metadata:
55
name: infrabox
6+
namespace: {{ template "system_namespace" . }}
67
spec:
78
serviceAccountName: infrabox
89
serviceMonitorSelector:

deploy/infrabox/templates/prometheus/service.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ apiVersion: v1
33
kind: Service
44
metadata:
55
name: prometheus
6+
namespace: {{ template "system_namespace" . }}
67
spec:
78
ports:
89
- name: web

src/api/handlers/projects/jobs.py

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
import json
22
import os
33

4+
import requests
5+
46
from flask import g, abort, Response, send_file, request
57
from flask_restplus import Resource
68

79
from pyinfraboxutils import get_logger
810
from pyinfraboxutils.ibflask import auth_required, OK
911
from pyinfraboxutils.storage import storage
1012
from api.namespaces import project as ns
13+
from pyinfraboxutils.token import encode_user_token
1114

1215
logger = get_logger('api')
1316

@@ -299,20 +302,50 @@ class ArchiveDownload(Resource):
299302

300303
@auth_required(['user'], allow_if_public=True)
301304
def get(self, project_id, job_id):
302-
f = request.args.get('filename', None)
305+
filename = request.args.get('filename', None)
303306

304-
if not f:
307+
if not filename:
305308
abort(404)
306309

307-
key = '%s/%s' % (job_id, f)
308-
f = storage.download_archive(key)
310+
result = g.db.execute_one_dict('''
311+
SELECT cluster_name
312+
FROM job
313+
WHERE id = %s
314+
AND project_id = %s
315+
''', [job_id, project_id])
316+
317+
if not result or not result['cluster_name']:
318+
abort(404)
319+
320+
job_cluster = result['cluster_name']
321+
key = '%s/%s' % (job_id, filename)
322+
323+
if os.environ['INFRABOX_CLUSTER_NAME'] == job_cluster:
324+
f = storage.download_archive(key)
325+
else:
326+
c = g.db.execute_one_dict('''
327+
SELECT *
328+
FROM cluster
329+
WHERE name=%s
330+
''', [job_cluster])
331+
url = '%s/api/v1/projects/%s/jobs/%s/archive/download?filename=%s' % (c['root_url'], project_id, job_id, filename)
332+
try:
333+
token = encode_user_token(g.token['user']['id'])
334+
except AttributeError:
335+
#public project has no token here.
336+
token = ""
337+
headers = {'Authorization': 'bearer ' + token}
338+
logger.info('get archive %s from %s', [filename, url])
339+
340+
# TODO(ib-steffen): allow custom ca bundles
341+
r = requests.get(url,headers=headers, timeout=120, verify=False, stream=True)
342+
f = r.raw
309343

310344
if not f:
311345
logger.error(key)
312346
abort(404)
313347

314-
return send_file(f, as_attachment=True, attachment_filename=os.path.basename(f))
315-
348+
return send_file(f, as_attachment=True, attachment_filename=os.path.basename(filename))
316349

317350
@ns.route('/<project_id>/jobs/<job_id>/archive')
318351
class Archive(Resource):

src/job/infrabox_job/job.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@ def _get_file_from_api_server(self, url, path):
193193
if chunk:
194194
f.write(chunk)
195195

196+
return
196197
except Exception as e:
197198
message = str(e)
198199
self.console.collect('Failed to download file (%s), retrying' % message, show=True)

src/job/job.py

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import uuid
1010
import base64
1111
import traceback
12+
import urllib3
1213

1314
from pyinfrabox.infrabox import validate_json
1415
from pyinfrabox.docker_compose import create_from
@@ -21,6 +22,8 @@
2122
from pyinfraboxutils.coverage import Parser as CoverageParser
2223
from pyinfraboxutils import get_env
2324
from pyinfraboxutils import get_logger
25+
26+
urllib3.disable_warnings()
2427
logger = get_logger('scheduler')
2528

2629
def makedirs(path):
@@ -247,6 +250,7 @@ def get_source(self):
247250
raise Exception('Unknown project type')
248251

249252
c.execute(['chmod', '-R', 'a+rwX', self.mount_repo_dir])
253+
c.execute(['ls', '-alh', self.mount_repo_dir], show=True)
250254

251255
def main_create_jobs(self):
252256
c = self.console
@@ -752,6 +756,11 @@ def logout_docker_registry(self):
752756
c = self.console
753757
c.execute(['docker', 'logout', get_registry_name()], show=False)
754758

759+
def run_docker_pull(self, image_name):
760+
c = self.console
761+
cmd = ['docker', 'pull', image_name]
762+
c.execute(cmd, show=True, show_cmd=False)
763+
755764
def run_docker_container(self, image_name):
756765
c = self.console
757766
collector = StatsCollector()
@@ -868,7 +877,7 @@ def build_docker_image(self, image_name, cache_image, target=None):
868877

869878
try:
870879
c.header("Build image", show=True)
871-
self.get_cached_image(cache_image)
880+
cache_from = self.get_cached_image(cache_image)
872881
docker_file = os.path.normpath(os.path.join(self._get_build_context_current_job(),
873882
self.job['dockerfile']))
874883

@@ -889,7 +898,7 @@ def build_docker_image(self, image_name, cache_image, target=None):
889898

890899
if target:
891900
cmd += ['--target', target]
892-
else:
901+
elif cache_from:
893902
cmd += ['--cache-from', cache_image]
894903

895904
cwd = self._get_build_context_current_job()
@@ -907,6 +916,10 @@ def run_job_docker_image(self, c):
907916
self._login_source_registries()
908917
self.run_docker_container(image_name)
909918
self._logout_source_registries()
919+
else:
920+
self._login_source_registries()
921+
self.run_docker_pull(image_name)
922+
self._logout_source_registries()
910923

911924
self.deploy_images(image_name)
912925
c.header("Finalize", show=True)
@@ -985,13 +998,14 @@ def get_cached_image(self, image_name_latest):
985998

986999
if not self.job['definition'].get('cache', {}).get('image', False):
9871000
c.collect("Not pulling cached image, because cache.image has been set to false", show=True)
988-
return
1001+
return False
9891002

9901003
c.collect("Get cached image %s" % image_name_latest, show=True)
9911004

9921005
self.login_docker_registry()
9931006
c.execute(['docker', 'pull', image_name_latest], show=True, ignore_error=True)
9941007
self.logout_docker_registry()
1008+
return True
9951009

9961010
def cache_docker_image(self, image_name_build, image_name_latest):
9971011
c = self.console

0 commit comments

Comments
 (0)