def test_stream_output_no_progress_event_no_tty(self): events = [ b'{"status": "Pulling from library/xy", "id": "latest"}' ] output = StringIO() events = progress_stream.stream_output(events, output) assert len(output.getvalue()) > 0
def test_stream_output_progress_event_no_tty(self): events = [ b'{"status": "Already exists", "progressDetail": {}, "id": "8d05e3af52b0"}' ] output = StringIO() events = progress_stream.stream_output(events, output) assert len(output.getvalue()) == 0
def test_stream_output_div_zero(self): output = [ b'{"status": "Downloading", "progressDetail": {"current": ' b'0, "start": 1413653874, "total": 0}, ' b'"progress": "..."}', ] events = progress_stream.stream_output(output, StringIO()) self.assertEqual(len(events), 1)
def test_stream_output(self): output = [ b'{"status": "Downloading", "progressDetail": {"current": ' b'31019763, "start": 1413653874, "total": 62763875}, ' b'"progress": "..."}', ] events = list(progress_stream.stream_output(output, StringIO())) assert len(events) == 1
def test_stream_output_div_zero(self): output = [ b'{"status": "Downloading", "progressDetail": {"current": ' b'0, "start": 1413653874, "total": 0}, ' b'"progress": "..."}', ] events = progress_stream.stream_output(output, StringIO()) assert len(events) == 1
def test_stream_output(self): output = [ '{"status": "Downloading", "progressDetail": {"current": ' '31019763, "start": 1413653874, "total": 62763875}, ' '"progress": "..."}', ] events = progress_stream.stream_output(output, StringIO()) self.assertEqual(len(events), 1)
def test_stream_output_null_total(self): output = [ b'{"status": "Downloading", "progressDetail": {"current": ' b'0, "start": 1413653874, "total": null}, ' b'"progress": "..."}', ] events = progress_stream.stream_output(output, StringIO()) self.assertEqual(len(events), 1)
def test_stream_output_null_total(self): output = [ b'{"status": "Downloading", "progressDetail": {"current": ' b'0, "start": 1413653874, "total": null}, ' b'"progress": "..."}', ] events = progress_stream.stream_output(output, StringIO()) assert len(events) == 1
def pull_from_remote_repository(self, service, repo, kwargs): log.info('Pulling %s (%s) (%s)...' % (service.name, repo, kwargs)) try: output = service.client.pull(repo, **kwargs) return progress_stream.get_digest_from_pull( stream_output(output, sys.stdout)) except (StreamOutputError, NotFound) as e: log.error(six.text_type(e)) raise
def test_stream_output_progress_event_tty(self): events = [ b'{"status": "Already exists", "progressDetail": {}, "id": "8d05e3af52b0"}' ] class TTYStringIO(StringIO): def isatty(self): return True output = TTYStringIO() events = progress_stream.stream_output(events, output) assert len(output.getvalue()) > 0
def check_build(self, *args, **kwargs): build_output = self.client.build(*args, **kwargs) stream_output(build_output, open('/dev/null', 'w'))
def check_build(self, *args, **kwargs): kwargs.setdefault('rm', True) build_output = self.client.build(*args, **kwargs) stream_output(build_output, open('/dev/null', 'w'))
def print_docker_output(stream): progress_stream.stream_output(stream, sys.stdout)
def check_build(self, *args, **kwargs): kwargs.setdefault('rm', True) build_output = self.client.build(*args, **kwargs) with open(os.devnull, 'w') as devnull: for event in stream_output(build_output, devnull): pass
def building(self, service, no_cache, pull, force_rm): context = service.options.get('build', {}).get('context', None) source = service.options.get('build', {}).get('source', '.') onbuild = service.options.get('build', {}).get('onbuild', None) if not onbuild and context and not is_subdir(context, self.env['DORK_SOURCE']): dockerfile = service.options.get('build', {}).get('dockerfile', None) onbuild = "%s/%s:autobuild" % ( os.path.basename(self.env.get('DORK_LIBRARY', self.project)), service.name ) build_output = service.client.build( path=context, tag=onbuild, pull=pull, forcerm=force_rm, nocache=no_cache, dockerfile=dockerfile, ) try: stream_output(build_output, sys.stdout) except StreamOutputError as e: raise BuildError(self, six.text_type(e)) if onbuild: self.clean_paths.append(source) dockerfile = '%s/Dockerfile' % source dockerignore = '%s/.dockerignore' % source if os.path.isfile(dockerfile): os.rename(dockerfile, '%s/.dork.Dockerfile' % source) if os.path.isfile(dockerignore): shutil.copyfile(dockerignore, '%s/.dork.dockerignore' % source) else: open('%s/.dockerignore' % source, 'a').close() with open(dockerfile, 'w') as f: # TODO: don't rely on virtualport # proxy plugin should not modify config so we can use real ports virtual_port = service.options.get('environment', {}).get('VIRTUAL_PORT', None) if virtual_port: f.write('FROM %s \nLABEL dork.source="%s"\nEXPOSE %s' % (onbuild, source, virtual_port)) else: f.write('FROM %s \nLABEL dork.source="%s"' % (onbuild, source)) try: image = service.client.inspect_image(onbuild) except NotFound: service.client.pull(onbuild) image = service.client.inspect_image(onbuild) ignore = (filter(lambda x: x, image.get('Config', {}) .get('Labels', {}) .get('dork.hotcode', '') .split(';'))) if isinstance(service.options.get('labels'), dict) and 'dork.hotcode' in service.options['labels']: ignore = [path for path in service.options.get('labels').get('dork.hotcode', '').split(';') if path != ''] ignore.append('.git') ignore.append('.env') ignore.append('.dork.env') ignore.append('.dockerignore') ignore.append('Dockerfile') ignore.append('.dork.dockerignore') ignore.append('.dork.Dockerfile') with open(dockerignore, 'a') as f: f.write('\n' + '\n'.join(ignore)) service.options['build']['context'] = os.path.abspath(source)