예제 #1
0
    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
예제 #2
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
예제 #3
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)
예제 #4
0
 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
예제 #5
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())
     assert len(events) == 1
예제 #6
0
 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)
예제 #7
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
예제 #8
0
 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)
예제 #9
0
 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)
예제 #10
0
 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
예제 #11
0
 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
예제 #12
0
 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
예제 #13
0
    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
예제 #14
0
    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
예제 #15
0
 def check_build(self, *args, **kwargs):
     build_output = self.client.build(*args, **kwargs)
     stream_output(build_output, open('/dev/null', 'w'))
예제 #16
0
 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'))
예제 #17
0
 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'))
예제 #18
0
파일: util.py 프로젝트: rapid7/autocompose
def print_docker_output(stream):
    progress_stream.stream_output(stream, sys.stdout)
예제 #19
0
파일: testcases.py 프로젝트: docker/compose
 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
예제 #20
0
 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
예제 #21
0
    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)
예제 #22
0
 def check_build(self, *args, **kwargs):
     build_output = self.client.build(*args, **kwargs)
     stream_output(build_output, open('/dev/null', 'w'))