Esempio n. 1
0
    def process_main(self):
        """
        Publish the JSON file for Crane.
        """
        registry = configuration.get_repo_registry_id(self.get_repo(),
                                                      self.get_config())
        redirect_url = configuration.get_redirect_url(self.get_config(),
                                                      self.get_repo(), 'v2')
        schema2_data = self.redirect_data[2]
        manifest_list_data = self.redirect_data['list']
        manifest_list_amd64 = self.redirect_data['amd64']

        redirect_data = {
            'type': 'pulp-docker-redirect',
            'version': 4,
            'repository': self.get_repo().id,
            'repo-registry-id': registry,
            'url': redirect_url,
            'protected': self.get_config().get('protected', False),
            'schema2_data': list(schema2_data),
            'manifest_list_data': list(manifest_list_data),
            'manifest_list_amd64_tags': manifest_list_amd64
        }

        misc.mkdir(os.path.dirname(self.app_publish_location))
        with open(self.app_publish_location, 'w') as app_file:
            app_file.write(json.dumps(redirect_data))
Esempio n. 2
0
    def __init__(self, working_dir, conduit, config, repo):
        """
        :param working_dir: working directory to create the filelists.xml.gz in
        :type  working_dir: str
        :param conduit: The conduit to get api calls
        :type conduit: pulp.plugins.conduits.repo_publish.RepoPublishConduit
        :param config: Pulp configuration for the distributor
        :type  config: pulp.plugins.config.PluginCallConfiguration
        :param repo: Pulp managed repository
        :type  repo: pulp.plugins.model.Repository
        """

        self.repo_id = repo.id
        metadata_file_path = os.path.join(working_dir,
                                          configuration.get_redirect_file_name(repo))
        super(RedirectFileContext, self).__init__(metadata_file_path)
        scratchpad = conduit.get_repo_scratchpad()

        tag_list = scratchpad.get(u'tags', [])
        self.tags = self.convert_tag_list_to_dict(tag_list)

        self.registry = configuration.get_repo_registry_id(repo, config)

        self.redirect_url = configuration.get_redirect_url(config, repo, 'v1')
        if config.get('protected', False):
            self.protected = "true"
        else:
            self.protected = "false"
Esempio n. 3
0
    def process_main(self):
        """
        Publish the JSON file for Crane.
        """
        registry = configuration.get_repo_registry_id(self.get_repo(), self.get_config())
        redirect_url = configuration.get_redirect_url(self.get_config(), self.get_repo(), 'v2')

        redirect_data = {
            'type': 'pulp-docker-redirect', 'version': 2, 'repository': self.get_repo().id,
            'repo-registry-id': registry, 'url': redirect_url,
            'protected': self.get_config().get('protected', False)}

        misc.mkdir(os.path.dirname(self.app_publish_location))
        with open(self.app_publish_location, 'w') as app_file:
            app_file.write(json.dumps(redirect_data))
Esempio n. 4
0
    def process_main(self):
        """
        Publish the JSON file for Crane.
        """
        repo = self.get_repo()
        config = self.get_config()
        registry_prefix = configuration.get_repo_registry_id(repo, config)
        global_app_publish_dir = os.path.join(
            configuration.get_app_publish_dir(config,
                                              self.parent.docker_api_version),
            registry_prefix)
        self.parent.atomic_publish_step.publish_locations.append(
            ("app", global_app_publish_dir))
        # Compute image references: tags and manifest IDs
        img_refs = dict(
            (img_name, set(tags))
            for img_name, tags in self.parent.imgname_to_tags.items())
        for img_name, refs in self.parent.imgname_to_mfid.items():
            img_refs.setdefault(img_name, set()).update(refs)

        redirect_url = configuration.get_redirect_url(
            config, repo, self.parent.docker_api_version)

        # Defaults
        redirect_tmpl = {
            'type': 'pulp-docker-redirect',
            'version': 4,
            'repository': self.get_repo().id,
            'protected': config.get('protected', False),
            'manifest_list_data': [],
            'manifest_list_amd64_tags': {}
        }
        working_dir = self.get_working_dir()

        for img_name, refs in img_refs.items():
            app_publish_path = os.path.join("app", "%s.json" % img_name)
            app_publish_location = os.path.join(working_dir, app_publish_path)
            misc.mkdir(os.path.dirname(app_publish_location))
            redirect_data = dict(redirect_tmpl)
            redirect_data['repo-registry-id'] = os.path.join(
                registry_prefix, img_name)
            redirect_data['url'] = os.path.join(redirect_url, img_name)
            redirect_data['schema2_data'] = sorted(refs)
            with open(app_publish_location, 'w') as app_file:
                app_file.write(json.dumps(redirect_data))
Esempio n. 5
0
    def process_main(self):
        """
        Publish the JSON file for Crane.
        """
        registry = configuration.get_repo_registry_id(self.get_repo(),
                                                      self.get_config())
        redirect_url = configuration.get_redirect_url(self.get_config(),
                                                      self.get_repo(), 'v2')

        redirect_data = {
            'type': 'pulp-docker-redirect',
            'version': 2,
            'repository': self.get_repo().id,
            'repo-registry-id': registry,
            'url': redirect_url,
            'protected': self.get_config().get('protected', False)
        }

        misc.mkdir(os.path.dirname(self.app_publish_location))
        with open(self.app_publish_location, 'w') as app_file:
            app_file.write(json.dumps(redirect_data))
Esempio n. 6
0
 def test_get_redirect_url_generated(self, mock_server_config):
     mock_server_config.get.return_value = 'www.foo.bar'
     computed_result = 'https://www.foo.bar/pulp/docker/baz/'
     self.assertEquals(computed_result,
                       configuration.get_redirect_url({}, Mock(id='baz')))
Esempio n. 7
0
 def test_get_redirect_url_from_config_trailing_slash(self):
     sample_url = 'http://www.pulpproject.org'
     conduit = Mock(repo_id=sample_url)
     url = configuration.get_redirect_url(
         {constants.CONFIG_KEY_REDIRECT_URL: sample_url}, conduit)
     self.assertEquals(sample_url + '/', url)
 def test_get_redirect_url_generated(self, mock_server_config):
     mock_server_config.get.return_value = 'www.foo.bar'
     computed_result = 'https://www.foo.bar/pulp/docker/v1/baz/'
     self.assertEquals(computed_result, configuration.get_redirect_url({},
                                                                       Mock(id='baz'), 'v1'))
 def test_get_redirect_url_from_config_trailing_slash(self):
     sample_url = 'http://www.pulpproject.org'
     conduit = Mock(repo_id=sample_url)
     url = configuration.get_redirect_url({constants.CONFIG_KEY_REDIRECT_URL: sample_url},
                                          conduit, 'v1')
     self.assertEquals(sample_url + '/', url)