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'])
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')
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))
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))