def docker_cp(src, dest, logger=None, followlink=False): args = ['docker', 'cp'] if followlink is True: args.append('-L') args.append(src) args.append(dest) return call_process2(args, logger=logger)
def create(self, hostname, env): env = { k: yaml.scalarstring.DoubleQuotedScalarString(v) for k, v in env.iteritems() if v is not None } if self.app.docker_ucr_style_env: env.update({shell_safe(k).upper(): v for k, v in env.iteritems()}) else: env = {shell_safe(k).upper(): v for k, v in env.iteritems()} self._setup_env(env=env) self._setup_yml(recreate=True, env=env) ret, out_up = call_process2([ 'docker-compose', '-p', self.app.id, 'up', '-d', '--no-build', '--no-recreate' ], cwd=self.app.get_compose_dir()) if ret != 0: raise DockerCouldNotStartContainer(out_up) self.container = self._get_main_service_container_id() if self.container is None: try: out_ps = ps(only_running=True) except Exception as e: out_ps = str(e) raise DockerCouldNotStartContainer( 'could not find container for service %s! docker-ps: %s docker-compose: %s)' % (self.app.docker_main_service, out_ps, out_up)) else: ucr_save({self.app.ucr_container_key: self.container}) return self.container
def pull(self): self.logger.info('Downloading app image %s' % self.image) try: hub, image_name = self.image.split('/', 1) except ValueError: pass else: cfg = {} dockercfg_file = os.path.expanduser('~/.dockercfg') if os.path.exists(dockercfg_file): with open(dockercfg_file) as dockercfg: cfg = loads(dockercfg.read()) if hub not in cfg: retcode = call([ 'docker', 'login', '-e', 'invalid', '-u', DOCKER_READ_USER_CRED['username'], '-p', DOCKER_READ_USER_CRED['password'], hub ]) if retcode != 0: _logger.warn( 'Could not login to %s. You may not be able to pull the image from the repository!' % hub) ret, out = call_process2(['docker', 'pull', self.image], logger=_logger) if ret != 0: raise DockerImagePullFailed(self.image, out)
def pull(self): self._setup_yml(recreate=True) self.logger.info('Downloading app images') ret, out = call_process2(['docker-compose', '-p', self.app.id, 'pull'], cwd=self.app.get_compose_dir(), logger=_logger) if ret != 0: raise DockerImagePullFailed(self.image, out)
def pull(self): self.setup_docker_files() self.logger.info('Downloading app images') ret, out = call_process2(['docker-compose', '-p', self.app.id, 'pull'], cwd=self.app.get_compose_dir(), logger=_logger) if ret != 0: raise DockerImagePullFailed(image=self.image, out=out, code=ret)
def pull(self): mkdir(self.app.get_compose_dir()) yml_file = self.app.get_compose_file('docker-compose.yml') shutil.copy2(self.app.get_cache_file('compose'), yml_file) os.chmod(yml_file, 0600) self.logger.info('Downloading app images') ret, out = call_process2(['docker-compose', '-p', self.app.id, 'pull'], cwd=self.app.get_compose_dir(), logger=_logger) if ret != 0: raise DockerImagePullFailed(self.image, out)
def get_status(cls, app): if app.uses_docker_compose(): return '' else: try: ret, out = call_process2([cls.get_init(app), 'status']) # dirty, but we have a limit for sending status information out = out[500:] except Exception as e: out = str(e)
def pull(self): self.logger.info('Downloading app image %s' % self.image) try: hub, image_name = self.image.split('/', 1) except ValueError: pass else: if '.' in hub: retcode = login(hub, with_license=self.app.install_permissions) if retcode != 0: _logger.warn('Could not login to %s. You may not be able to pull the image from the repository!' % hub) ret, out = call_process2(['docker', 'pull', self.image], logger=_logger) if ret != 0: raise DockerImagePullFailed(self.image, out)
def _run_parts(self, directory): """ in order to call hooks we use run-parts, so that administrators can better comprehend what is done behind the scenes and test their script folders manually using that tool. """ if os.path.isdir(directory): (retval, output) = call_process2(["run-parts", directory]) # self.log(output) is unnecessary, because call_process2 logs its # output, but if you are replacing call_process2 with something # different, please remember to to inform the user about the output # of the scripts! else: self.log('Potential script hook folder is unused: {folder}'.format( folder=directory))
def create(self, hostname, env): env = { k: yaml.scalarstring.DoubleQuotedScalarString(v) for k, v in env.iteritems() } if self.app.docker_ucr_style_env: env.update({shell_safe(k).upper(): v for k, v in env.iteritems()}) else: env = {shell_safe(k).upper(): v for k, v in env.iteritems()} self._setup_yml(recreate=True, env=env) ret, out_up = call_process2([ 'docker-compose', '-p', self.app.id, 'up', '-d', '--no-build', '--no-recreate' ], cwd=self.app.get_compose_dir()) if ret != 0: raise DockerCouldNotStartContainer(out_up) try: out_ps = ps(only_running=True) except CalledProcessError: out_ps = str() else: yml_file = self.app.get_compose_file('docker-compose.yml') content = yaml.load(open(yml_file), yaml.RoundTripLoader, preserve_quotes=True) docker_image = content['services'][ self.app.docker_main_service]['image'] for line in out_ps.splitlines(): try: container, image = line.split()[:2] except ValueError: pass else: if image == docker_image: ucr_save({self.app.ucr_container_key: container}) self.container = container return container if self.container is None: raise DockerCouldNotStartContainer( 'could not find container for %s (image: %s) in docker-ps %s (docker-compose: %s)' % (self.app.docker_main_service, docker_image, out_ps, out_up))
def create(image, command, hostname=None, ports=None, volumes=None, env_file=None, args=None): _args = [] if hostname: _args.extend(['--hostname', hostname]) if env_file: _args.extend(['--env-file', env_file]) if ports: for port in ports: _args.extend(['-p', port]) for volume in volumes: _args.extend(['-v', volume]) if args: _args.extend(args) _args.append(image) if command: _args.extend(command) args = ['docker', 'create'] + _args return call_process2(args)
def dockerd_logs(logger=None): args = ['journalctl', '-n', '20', '-o', 'short', '/usr/bin/dockerd'] ret, out = call_process2(args, logger=logger) return out
def docker_logs(container, logger=None): args = ['docker', 'logs', container] ret, out = call_process2(args, logger=logger) return out