Ejemplo n.º 1
0
 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)
Ejemplo n.º 3
0
 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)
Ejemplo n.º 4
0
	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)
Ejemplo n.º 5
0
	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 _start_docker_image(self, app, hostdn, password, args):
        docker = self._get_docker(app)
        if not docker:
            return

        self.log('Verifying Docker registry manifest for app image %s' %
                 docker.image)
        docker.verify()

        if args.pull_image:
            self.log('Downloading app image %s' % docker.image)
            if not docker.pull():
                raise DockerImagePullFailed(docker.image)

        self.log('Initializing app image')
        hostname = explode_dn(hostdn, 1)[0]
        set_vars = (args.set_vars or {}).copy()
        after_image_configuration = {}
        for setting in app.get_settings():
            if setting.should_go_into_image_configuration(app):
                if setting.name not in set_vars:
                    set_vars[setting.name] = setting.get_initial_value()
            else:
                try:
                    after_image_configuration[setting.name] = set_vars.pop(
                        setting.name)
                except KeyError:
                    pass
        set_vars['docker/host/name'] = '%s.%s' % (ucr_get('hostname'),
                                                  ucr_get('domainname'))
        set_vars['ldap/hostdn'] = hostdn
        if app.docker_env_ldap_user:
            set_vars[app.docker_env_ldap_user] = hostdn
        set_vars['server/role'] = app.docker_server_role
        set_vars['update/warning/releasenotes'] = 'no'
        ucr_keys_list = list(ucr_keys())
        for var in [
                'nameserver.*', 'repository/online/server',
                'repository/app_center/server', 'update/secure_apt',
                'appcenter/index/verify', 'ldap/master.*', 'locale.*',
                'domainname'
        ]:
            for key in ucr_keys_list:
                if re.match(var, key):
                    set_vars[key] = ucr_get(key)
        if ucr_is_true('appcenter/docker/container/proxy/settings',
                       default=True):
            if ucr_get('proxy/http'):
                set_vars['proxy/http'] = ucr_get('proxy/http')
                set_vars['http_proxy'] = ucr_get('proxy/http')
            if ucr_get('proxy/https'):
                set_vars['proxy/https'] = ucr_get('proxy/https')
                set_vars['https_proxy'] = ucr_get('proxy/https')
            if ucr_get('proxy/no_proxy'):
                set_vars['proxy/no_proxy'] = ucr_get('proxy/no_proxy')
                set_vars['no_proxy'] = ucr_get('proxy/no_proxy')
        set_vars['updater/identify'] = 'Docker App'
        database_connector = DatabaseConnector.get_connector(app)
        database_password_file = None
        if database_connector:
            try:
                database_password = database_connector.get_db_password()
                database_password_file = database_connector.get_db_password_file(
                )
                if database_password:
                    set_vars[
                        app.
                        docker_env_database_host] = database_connector.get_db_host(
                        )
                    db_port = database_connector.get_db_port()
                    if db_port:
                        set_vars[app.docker_env_database_port] = db_port
                    set_vars[
                        app.
                        docker_env_database_name] = database_connector.get_db_name(
                        )
                    set_vars[
                        app.
                        docker_env_database_user] = database_connector.get_db_user(
                        )
                    if app.docker_env_database_password_file:
                        set_vars[
                            app.
                            docker_env_database_password_file] = database_password_file
                    else:
                        set_vars[
                            app.
                            docker_env_database_password] = database_password
                autostart_variable = database_connector.get_autostart_variable(
                )
                if autostart_variable:
                    set_vars[autostart_variable] = 'no'
            except DatabaseError as exc:
                raise DatabaseConnectorError(str(exc))

        container = docker.create(hostname, set_vars)
        self.log('Preconfiguring container %s' % container)
        autostart = 'yes'
        if not Start.call(app=app):
            raise DockerCouldNotStartContainer()
        time.sleep(3)
        if not docker.is_running():
            dlogs = docker.dockerd_logs()
            clogs = docker.logs()
            inspect = docker.inspect_container()
            msg = """
The container for {app} could not be started!

docker logs {container}:
{clogs}

dockerd logs:
{dlogs}

docker inspect:
{state}
{graphdriver}""".format(app=app,
                        container=docker.container,
                        clogs='\n'.join(clogs),
                        dlogs='\n'.join(dlogs),
                        state=inspect.get('State'),
                        graphdriver=inspect.get('GraphDriver'))
            raise AppCenterErrorContainerStart(msg)
        if password:
            with open(docker.path('/etc/machine.secret'), 'w+b') as f:
                f.write(password)
        docker.cp_to_container('/etc/timezone', '/etc/timezone')
        docker.cp_to_container('/etc/localtime', '/etc/localtime')
        if database_password_file:
            docker.cp_to_container(database_password_file,
                                   database_password_file)
        after_image_configuration.update(set_vars)
        configure = get_action('configure')
        configure.call(app=app,
                       autostart=autostart,
                       run_script='no',
                       set_vars=after_image_configuration)