Esempio n. 1
0
def consume_stream(stream):
    prev_status_id = None
    for item in stream:
        item = json.loads(item)
        if 'stream' in item:
            for line in item['stream'].strip().splitlines():
                term.print_line(line)
        elif 'status' in item:
            status = item.pop('status')
            status_id = item.pop('id', None)
            msg = status
            if status_id:
                msg += ' ({})'.format(status_id)
            if prev_status_id == status_id:
                call = term.replace_line
            else:
                call = term.print_line
            if 'progress' in item:
                msg += ': ' + item['progress']
            else:
                msg += ' ' + ' '.join(
                    '{}: {}'.format(k, v)
                    for k, v in item.iteritems()
                    if v)
            call(msg)
            prev_status_id = status_id

        elif 'error' in item:
            raise RuntimeError(item['error'])
Esempio n. 2
0
 def _display_logs(self, attached, log_queue, term):
     current_container = None, None
     while attached:
         container, line = log_queue.get(timeout=60 * 60)
         if line is END_OF_STREAM:
             attached.remove(container)
             term.print_warning('{}: detached'.format(container))
         else:
             if container != current_container:
                 current_container = container
                 term.print_step(container)
             term.print_line(line.strip())
     term.print_warning('All containers detached')
Esempio n. 3
0
 def create(self, group=None):
     if self.created:
         term.print_step('{!r} is already created ({})'.format(
             self.name, self.id))
     else:
         term.print_step('creating container {!r}...'.format(self.name))
         environment = self._get_group_modified_dict_attribute(
             group, 'environment')
         environment = self._update_env_from_local_env(environment)
         self._docker_container_info = self._docker_client.create_container(
             self.image.name,
             name=self.name,
             environment=environment,
             ports=list(self.port_bindings.keys()))
         term.print_line('({})'.format(self.id))
Esempio n. 4
0
 def status(self):
     if self.created:
         status = self._docker_container_info['Status']
         status_string = '{!r} ({}): {}'.format(
             self.name, self.id, status)
         if status.startswith('Up'):
             term.print_step(status_string)
         else:
             term.print_warning(status_string)
         for port in self._docker_container_info['Ports']:
             if 'IP' in port:
                 term.print_line('{} {} [{}=>{}]'.format(
                     port['Type'],
                     port['IP'],
                     port['PrivatePort'],
                     port['PublicPort']))
             else:
                 term.print_line('{} [{}]'.format(
                     port['Type'],
                     port['PrivatePort']))
     else:
         term.print_step("container {!r} isn't created".format(self.name))