Example #1
0
 def test_translate_obsrepositories_outside_buildservice(
     self, mock_buildservice
 ):
     mock_buildservice.return_value = False
     uri = Uri('obsrepositories:/')
     with raises(KiwiUriStyleUnknown):
         uri.translate()
Example #2
0
 def test_translate_obs_project(self, mock_request_get):
     uri = Uri('obs://openSUSE:Leap:42.2/standard', 'yast2')
     uri.runtime_config = self.runtime_config
     uri.translate()
     mock_request_get.assert_called_once_with(
         'obs_server/openSUSE:/Leap:/42.2/standard'
     )
Example #3
0
 def test_translate_obs_project(self, mock_request_get):
     uri = Uri('obs://openSUSE:Leap:42.2/standard', 'yast2')
     uri.runtime_config = self.runtime_config
     uri.translate()
     mock_request_get.assert_called_once_with(
         'obs_server/openSUSE:/Leap:/42.2/standard'
     )
Example #4
0
 def test_translate_obs_project(self, mock_is_buildservice_worker,
                                mock_request_get):
     mock_is_buildservice_worker.return_value = False
     uri = Uri('obs://openSUSE:Leap:42.2/standard', 'yast2')
     uri.runtime_config = self.runtime_config
     uri.translate()
     mock_request_get.assert_called_once_with(
         'obs_server/openSUSE:/Leap:/42.2/standard')
Example #5
0
 def test_destructor(self, mock_wipe, mock_mkdtemp, mock_manager):
     mock_mkdtemp.return_value = 'tmpdir'
     manager = mock.Mock()
     manager.mountpoint = mock_mkdtemp.return_value
     manager.is_mounted = mock.Mock(return_value=True)
     mock_manager.return_value = manager
     uri = Uri('iso:///image/CDs/openSUSE-13.2-DVD-x86_64.iso', 'yast2')
     uri.translate()
     uri.__del__()
     manager.umount.assert_called_once_with()
     mock_wipe.assert_called_once_with(manager.mountpoint)
Example #6
0
 def test_translate_obs_uri_not_found(mock_buildservice, mock_request_get,
                                      self):
     mock_buildservice.return_value = False
     mock_request_get.side_effect = Exception('error')
     uri = Uri('obs://openSUSE:Leap:42.2/standard', 'yast2')
     self.runtime_config.get_obs_download_server_url = mock.Mock(
         return_value='http://obs_server')
     uri.runtime_config = self.runtime_config
     with raises(KiwiUriOpenError) as exception_info:
         uri.translate(check_build_environment=False)
     assert f'{exception_info.value}' == \
         'http://obs_server/openSUSE:/Leap:/42.2/standard: error'
Example #7
0
 def test_destructor(self, mock_wipe, mock_mkdtemp, mock_manager):
     mock_mkdtemp.return_value = 'tmpdir'
     manager = mock.Mock()
     manager.mountpoint = mock_mkdtemp.return_value
     manager.is_mounted = mock.Mock(
         return_value=True
     )
     mock_manager.return_value = manager
     uri = Uri('iso:///image/CDs/openSUSE-13.2-DVD-x86_64.iso', 'yast2')
     uri.translate()
     uri.__del__()
     manager.umount.assert_called_once_with()
     mock_wipe.assert_called_once_with(manager.mountpoint)
Example #8
0
 def test_translate_obs_uri_inside_buildservice(self, mock_buildservice):
     mock_buildservice.return_value = True
     uri = Uri('obs://openSUSE:Leap:42.2/standard', 'rpm-md')
     uri.runtime_config = self.runtime_config
     with self._caplog.at_level(logging.WARNING):
         assert uri.translate(False) == \
             'obs_server/openSUSE:/Leap:/42.2/standard'
Example #9
0
    def setup_repositories(self, clear_cache=False, signing_keys=None):
        """
        Set up repositories for software installation and return a
        package manager for performing software installation tasks

        :return: Instance of PackageManager
        :rtype: PackageManager
        """
        repository_options = []
        repository_sections = \
            self.xml_state.get_repository_sections_used_for_build()
        package_manager = self.xml_state.get_package_manager()
        if self.xml_state.get_rpm_check_signatures():
            repository_options.append('check_signatures')
        if self.xml_state.get_rpm_excludedocs():
            repository_options.append('exclude_docs')
        repo = Repository(self.root_bind, package_manager, repository_options)
        if signing_keys:
            repo.import_trusted_keys(signing_keys)
        for xml_repo in repository_sections:
            repo_type = xml_repo.get_type()
            repo_source = xml_repo.get_source().get_path()
            repo_user = xml_repo.get_username()
            repo_secret = xml_repo.get_password()
            repo_alias = xml_repo.get_alias()
            repo_priority = xml_repo.get_priority()
            repo_dist = xml_repo.get_distribution()
            repo_components = xml_repo.get_components()
            repo_repository_gpgcheck = xml_repo.get_repository_gpgcheck()
            repo_package_gpgcheck = xml_repo.get_package_gpgcheck()
            log.info('Setting up repository %s', repo_source)
            log.info('--> Type: %s', repo_type)
            if repo_priority:
                log.info('--> Priority: %s', repo_priority)

            uri = Uri(repo_source, repo_type)
            repo_source_translated = uri.translate()
            log.info('--> Translated: %s', repo_source_translated)
            if not repo_alias:
                repo_alias = uri.alias()
            log.info('--> Alias: %s', repo_alias)

            if not uri.is_remote() and not os.path.exists(
                    repo_source_translated):
                log.warning('repository %s does not exist and will be skipped',
                            repo_source)
                continue

            if not uri.is_remote():
                self.root_bind.mount_shared_directory(repo_source_translated)

            repo.add_repo(repo_alias, repo_source_translated, repo_type,
                          repo_priority, repo_dist, repo_components, repo_user,
                          repo_secret, uri.credentials_file_name(),
                          repo_repository_gpgcheck, repo_package_gpgcheck)
            if clear_cache:
                repo.delete_repo_cache(repo_alias)
            self.uri_list.append(uri)
        repo.cleanup_unused_repos()
        return PackageManager(repo, package_manager)
Example #10
0
 def import_repositories_marked_as_imageinclude(self):
     """
     Those <repository> sections which are marked with the
     imageinclude attribute should be permanently added to
     the image repository configuration
     """
     repository_sections = \
         self.xml_state.get_repository_sections_used_in_image()
     root = RootInit(root_dir=self.root_dir, allow_existing=True)
     repo = Repository(RootBind(root), self.xml_state.get_package_manager())
     repo.use_default_location()
     for xml_repo in repository_sections:
         repo_type = xml_repo.get_type()
         repo_source = xml_repo.get_source().get_path()
         repo_user = xml_repo.get_username()
         repo_secret = xml_repo.get_password()
         repo_alias = xml_repo.get_alias()
         repo_priority = xml_repo.get_priority()
         repo_dist = xml_repo.get_distribution()
         repo_components = xml_repo.get_components()
         repo_repository_gpgcheck = xml_repo.get_repository_gpgcheck()
         repo_package_gpgcheck = xml_repo.get_package_gpgcheck()
         uri = Uri(repo_source, repo_type)
         repo_source_translated = uri.translate(
             check_build_environment=False)
         if not repo_alias:
             repo_alias = uri.alias()
         log.info('Setting up image repository %s', repo_source)
         log.info('--> Type: %s', repo_type)
         log.info('--> Translated: %s', repo_source_translated)
         log.info('--> Alias: %s', repo_alias)
         repo.add_repo(repo_alias, repo_source_translated, repo_type,
                       repo_priority, repo_dist, repo_components, repo_user,
                       repo_secret, uri.credentials_file_name(),
                       repo_repository_gpgcheck, repo_package_gpgcheck)
Example #11
0
 def test_translate_obs_uri_inside_buildservice(self, mock_buildservice,
                                                mock_warn):
     mock_buildservice.return_value = True
     uri = Uri('obs://openSUSE:Leap:42.2/standard', 'rpm-md')
     uri.runtime_config = self.runtime_config
     assert uri.translate(False) == \
         'obs_server/openSUSE:/Leap:/42.2/standard'
     assert mock_warn.called
Example #12
0
 def test_translate_buildservice_obsrepositories_container_path(
         self, mock_buildservice):
     mock_buildservice.return_value = True
     uri = Uri('obsrepositories:/container#latest', 'container')
     assert uri.translate() == ''.join([
         '/usr/src/packages/SOURCES/containers/',
         '_obsrepositories/container#latest'
     ])
Example #13
0
 def test_translate_obs_uri_inside_buildservice(
         self, mock_buildservice, mock_warn
 ):
     mock_buildservice.return_value = True
     uri = Uri('obs://openSUSE:Leap:42.2/standard', 'rpm-md')
     uri.runtime_config = self.runtime_config
     assert uri.translate(False) == \
         'obs_server/openSUSE:/Leap:/42.2/standard'
     assert mock_warn.called
Example #14
0
    def test_translate_metalink_uri(self, mock_Request, mock_urlopen):
        with open('../data/metalink') as metalink:
            mock_urlopen.return_value = metalink
            uri = Uri('https://metalink.com/foo', source_type='metalink')
            assert uri.translate() == \
                'https://ftp.plusline.net/fedora/linux/releases/34/Everything/' \
                'x86_64/os/'

        mock_urlopen.side_effect = Exception
        with raises(KiwiUriOpenError):
            uri = Uri('https://metalink.com/foo', source_type='metalink')
Example #15
0
 def test_translate_buildservice_obsrepositories_container_path(
     self, mock_buildservice
 ):
     mock_buildservice.return_value = True
     uri = Uri('obsrepositories:/container#latest', 'container')
     assert uri.translate() == ''.join(
         [
             '/usr/src/packages/SOURCES/containers/',
             '_obsrepositories/container#latest'
         ]
     )
Example #16
0
 def test_translate_iso_path(self, mock_mkdtemp, mock_manager):
     mock_mkdtemp.return_value = 'tmpdir'
     manager = mock.Mock()
     manager.mountpoint = mock_mkdtemp.return_value
     mock_manager.return_value = manager
     uri = Uri('iso:///image/CDs/openSUSE-13.2-DVD-x86_64.iso', 'yast2')
     result = uri.translate()
     mock_manager.assert_called_once_with(
         device='/image/CDs/openSUSE-13.2-DVD-x86_64.iso',
         mountpoint='tmpdir')
     manager.mount.assert_called_once_with()
     assert result == 'tmpdir'
     uri.mount_stack = []
Example #17
0
 def test_translate_iso_path(self, mock_mkdtemp, mock_manager):
     mock_mkdtemp.return_value = 'tmpdir'
     manager = mock.Mock()
     manager.mountpoint = mock_mkdtemp.return_value
     mock_manager.return_value = manager
     uri = Uri('iso:///image/CDs/openSUSE-13.2-DVD-x86_64.iso', 'yast2')
     result = uri.translate()
     mock_manager.assert_called_once_with(
         device='/image/CDs/openSUSE-13.2-DVD-x86_64.iso',
         mountpoint='tmpdir'
     )
     manager.mount.assert_called_once_with()
     assert result == 'tmpdir'
     uri.mount_stack = []
Example #18
0
 def import_repositories_marked_as_imageinclude(self):
     """
     Those <repository> sections which are marked with the
     imageinclude attribute should be permanently added to
     the image repository configuration
     """
     repository_sections = \
         self.xml_state.get_repository_sections_used_in_image()
     root = RootInit(
         root_dir=self.root_dir, allow_existing=True
     )
     repo = Repository(
         RootBind(root), self.xml_state.get_package_manager()
     )
     repo.use_default_location()
     for xml_repo in repository_sections:
         repo_type = xml_repo.get_type()
         repo_source = xml_repo.get_source().get_path()
         repo_user = xml_repo.get_username()
         repo_secret = xml_repo.get_password()
         repo_alias = xml_repo.get_alias()
         repo_priority = xml_repo.get_priority()
         repo_dist = xml_repo.get_distribution()
         repo_components = xml_repo.get_components()
         repo_repository_gpgcheck = xml_repo.get_repository_gpgcheck()
         repo_package_gpgcheck = xml_repo.get_package_gpgcheck()
         uri = Uri(repo_source, repo_type)
         repo_source_translated = uri.translate(
             check_build_environment=False
         )
         if not repo_alias:
             repo_alias = uri.alias()
         log.info('Setting up image repository %s', repo_source)
         log.info('--> Type: %s', repo_type)
         log.info('--> Translated: %s', repo_source_translated)
         log.info('--> Alias: %s', repo_alias)
         repo.add_repo(
             repo_alias, repo_source_translated,
             repo_type, repo_priority, repo_dist, repo_components,
             repo_user, repo_secret, uri.credentials_file_name(),
             repo_repository_gpgcheck, repo_package_gpgcheck
         )
Example #19
0
 def test_translate_unknown_style(self):
     uri = Uri('xxx', 'rpm-md')
     with raises(KiwiUriStyleUnknown):
         uri.translate()
Example #20
0
 def test_translate_buildservice_container_path(self, mock_buildservice):
     mock_buildservice.return_value = True
     uri = Uri('obs://project/repo/container#latest', 'container')
     assert uri.translate() == \
         '/usr/src/packages/SOURCES/containers/project/repo/container#latest'
Example #21
0
 def test_translate_buildservice_obsrepositories(self, mock_buildservice):
     mock_buildservice.return_value = True
     uri = Uri('obsrepositories:/')
     assert uri.translate() == '/usr/src/packages/SOURCES/repos'
Example #22
0
 def test_translate_ftp_path(self):
     uri = Uri('ftp://example.com/foo', 'rpm-md')
     assert uri.translate() == 'ftp://example.com/foo'
Example #23
0
 def test_translate_buildservice_path(self, mock_buildservice):
     mock_buildservice.return_value = True
     uri = Uri('obs://openSUSE:13.2/standard', 'yast2')
     assert uri.translate() == \
         '/usr/src/packages/SOURCES/repos/openSUSE:13.2/standard'
Example #24
0
 def test_translate_http_path_with_token(self):
     uri = Uri('http://foo.bar/baz?asdf', 'rpm-md')
     assert uri.translate() == 'http://foo.bar/baz?asdf'
Example #25
0
 def test_translate_dir_path(self):
     uri = Uri('dir:///some/path', 'rpm-md')
     assert uri.translate() == '/some/path'
Example #26
0
 def test_translate_unknown_style(self):
     uri = Uri('xxx', 'rpm-md')
     uri.translate()
Example #27
0
 def test_translate_http_path_with_credentials(self):
     uri = Uri(
         'http://example.com/foo?credentials=kiwiRepoCredentials',
         'rpm-md'
     )
     assert uri.translate() == 'http://example.com/foo'
Example #28
0
 def test_translate_suse_buildservice_path(self):
     uri = Uri('suse://openSUSE:13.2/standard', 'yast2')
     assert uri.translate() == \
         '/usr/src/packages/SOURCES/repos/openSUSE:13.2/standard'
Example #29
0
 def test_translate_unsupported_style(self):
     uri = Uri('ms://foo', 'rpm-md')
     uri.translate()
Example #30
0
 def test_translate_ibs_project(self):
     uri = Uri('ibs://Devel:PubCloud/SLE_12_GA', 'rpm-md')
     assert uri.translate() == \
         'http://download.suse.de/ibs/Devel:/PubCloud/SLE_12_GA'
Example #31
0
 def test_translate_http_path(self):
     uri = Uri('http://example.com/foo', 'rpm-md')
     assert uri.translate() == 'http://example.com/foo'
Example #32
0
 def test_translate_dir_path(self):
     uri = Uri('dir:///some/path', 'rpm-md')
     assert uri.translate() == '/some/path'
Example #33
0
 def test_translate_obs_uri_not_found(mock_request_get, self):
     mock_request_get.side_effect = Exception
     uri = Uri('obs://openSUSE:Leap:42.2/standard', 'yast2')
     uri.runtime_config = self.runtime_config
     with raises(KiwiUriOpenError):
         uri.translate()
Example #34
0
 def test_translate_obs_project(self):
     uri = Uri('obs://Virt:Appliances/SLE_12', 'rpm-md')
     assert uri.translate() == \
         'http://download.opensuse.org/repositories/Virt:Appliances/SLE_12'
Example #35
0
 def test_translate_obs_project(self):
     uri = Uri('obs://Virt:Appliances/SLE_12', 'rpm-md')
     assert uri.translate() == \
         'http://download.opensuse.org/repositories/Virt:Appliances/SLE_12'
Example #36
0
 def test_translate_suse_buildservice_path(self):
     uri = Uri('suse://openSUSE:13.2/standard', 'yast2')
     assert uri.translate() == \
         '/usr/src/packages/SOURCES/repos/openSUSE:13.2/standard'
Example #37
0
 def test_translate_http_path_with_credentials(self):
     uri = Uri('http://example.com/foo?credentials=kiwiRepoCredentials',
               'rpm-md')
     assert uri.translate() == 'http://example.com/foo'
Example #38
0
    def setup_repositories(self, clear_cache=False, signing_keys=None):
        """
        Set up repositories for software installation and return a
        package manager for performing software installation tasks

        :param bool clear_cache: flag the clear cache before configure
            anything
        :param list signing_keys: keys imported to the package manager

        :return: instance of :class:`PackageManager`

        :rtype: PackageManager
        """
        repository_options = []
        repository_sections = \
            self.xml_state.get_repository_sections_used_for_build()
        package_manager = self.xml_state.get_package_manager()
        rpm_locale_list = self.xml_state.get_rpm_locale()
        if self.xml_state.get_rpm_check_signatures():
            repository_options.append('check_signatures')
        if self.xml_state.get_rpm_excludedocs():
            repository_options.append('exclude_docs')
        if rpm_locale_list:
            repository_options.append(
                '_install_langs%{0}'.format(':'.join(rpm_locale_list))
            )
        repo = Repository.new(
            self.root_bind, package_manager, repository_options
        )
        repo.setup_package_database_configuration()
        if signing_keys:
            repo.import_trusted_keys(signing_keys)
        for xml_repo in repository_sections:
            repo_type = xml_repo.get_type()
            repo_source = xml_repo.get_source().get_path()
            repo_user = xml_repo.get_username()
            repo_secret = xml_repo.get_password()
            repo_alias = xml_repo.get_alias()
            repo_priority = xml_repo.get_priority()
            repo_dist = xml_repo.get_distribution()
            repo_components = xml_repo.get_components()
            repo_repository_gpgcheck = xml_repo.get_repository_gpgcheck()
            repo_package_gpgcheck = xml_repo.get_package_gpgcheck()
            repo_sourcetype = xml_repo.get_sourcetype()
            repo_use_for_bootstrap = \
                True if xml_repo.get_use_for_bootstrap() else False
            log.info('Setting up repository %s', repo_source)
            log.info('--> Type: {0}'.format(repo_type))
            if repo_sourcetype:
                log.info('--> SourceType: {0}'.format(repo_sourcetype))
            if repo_priority:
                log.info('--> Priority: {0}'.format(repo_priority))

            uri = Uri(repo_source, repo_type)
            repo_source_translated = uri.translate()
            log.info('--> Translated: {0}'.format(repo_source_translated))
            if not repo_alias:
                repo_alias = uri.alias()
            log.info('--> Alias: {0}'.format(repo_alias))

            if not uri.is_remote() and not os.path.exists(
                repo_source_translated
            ):
                log.warning(
                    'repository %s does not exist and will be skipped',
                    repo_source
                )
                continue

            if not uri.is_remote():
                self.root_bind.mount_shared_directory(repo_source_translated)

            repo.add_repo(
                repo_alias, repo_source_translated,
                repo_type, repo_priority, repo_dist, repo_components,
                repo_user, repo_secret, uri.credentials_file_name(),
                repo_repository_gpgcheck, repo_package_gpgcheck,
                repo_sourcetype, repo_use_for_bootstrap
            )
            if clear_cache:
                repo.delete_repo_cache(repo_alias)
            self.uri_list.append(uri)
        repo.cleanup_unused_repos()
        return PackageManager.new(
            repo, package_manager
        )
Example #39
0
 def test_translate_https_path(self):
     uri = Uri('https://example.com/foo', 'rpm-md')
     assert uri.translate() == 'https://example.com/foo'
Example #40
0
 def test_translate_dir_relative_path(self, mock_abspath):
     mock_abspath.side_effect = lambda path: os.sep.join(
         ['/current/dir', path])
     uri = Uri('dir:some/path', 'rpm-md')
     assert uri.translate() == '/current/dir/some/path'
Example #41
0
 def test_translate_buildservice_container_path(self, mock_buildservice):
     mock_buildservice.return_value = True
     uri = Uri('obs://project/repo/container#latest', 'container')
     assert uri.translate() == \
         '/usr/src/packages/SOURCES/containers/project/repo/container#latest'
Example #42
0
    def setup_repositories(self, clear_cache=False, signing_keys=None):
        """
        Set up repositories for software installation and return a
        package manager for performing software installation tasks

        :param bool clear_cache: flag the clear cache before configure
            anything
        :param list signing_keys: keys imported to the package manager

        :return: instance of :class:`PackageManager`

        :rtype: PackageManager
        """
        repository_options = []
        repository_sections = \
            self.xml_state.get_repository_sections_used_for_build()
        package_manager = self.xml_state.get_package_manager()
        if self.xml_state.get_rpm_check_signatures():
            repository_options.append('check_signatures')
        if self.xml_state.get_rpm_excludedocs():
            repository_options.append('exclude_docs')
        repo = Repository(
            self.root_bind, package_manager, repository_options
        )
        if signing_keys:
            repo.import_trusted_keys(signing_keys)
        for xml_repo in repository_sections:
            repo_type = xml_repo.get_type()
            repo_source = xml_repo.get_source().get_path()
            repo_user = xml_repo.get_username()
            repo_secret = xml_repo.get_password()
            repo_alias = xml_repo.get_alias()
            repo_priority = xml_repo.get_priority()
            repo_dist = xml_repo.get_distribution()
            repo_components = xml_repo.get_components()
            repo_repository_gpgcheck = xml_repo.get_repository_gpgcheck()
            repo_package_gpgcheck = xml_repo.get_package_gpgcheck()
            log.info('Setting up repository %s', repo_source)
            log.info('--> Type: %s', repo_type)
            if repo_priority:
                log.info('--> Priority: %s', repo_priority)

            uri = Uri(repo_source, repo_type)
            repo_source_translated = uri.translate()
            log.info('--> Translated: %s', repo_source_translated)
            if not repo_alias:
                repo_alias = uri.alias()
            log.info('--> Alias: %s', repo_alias)

            if not uri.is_remote() and not os.path.exists(
                repo_source_translated
            ):
                log.warning(
                    'repository %s does not exist and will be skipped',
                    repo_source
                )
                continue

            if not uri.is_remote():
                self.root_bind.mount_shared_directory(repo_source_translated)

            repo.add_repo(
                repo_alias, repo_source_translated,
                repo_type, repo_priority, repo_dist, repo_components,
                repo_user, repo_secret, uri.credentials_file_name(),
                repo_repository_gpgcheck, repo_package_gpgcheck
            )
            if clear_cache:
                repo.delete_repo_cache(repo_alias)
            self.uri_list.append(uri)
        repo.cleanup_unused_repos()
        return PackageManager(
            repo, package_manager
        )
Example #43
0
 def test_translate_buildservice_project(self, mock_buildservice):
     mock_buildservice.return_value = True
     uri = Uri('obs://Virtualization:/Appliances/CentOS_7', 'rpm-md')
     assert uri.translate() == \
         '/usr/src/packages/SOURCES/repos/Virtualization:Appliances/CentOS_7'
Example #44
0
 def test_translate_obs_uri_not_found(mock_request_get, self):
     mock_request_get.side_effect = Exception
     uri = Uri('obs://openSUSE:Leap:42.2/standard', 'yast2')
     uri.runtime_config = self.runtime_config
     assert uri.translate()
Example #45
0
 def test_translate_buildservice_project(self, mock_buildservice):
     mock_buildservice.return_value = True
     uri = Uri('obs://Virtualization:/Appliances/CentOS_7', 'rpm-md')
     assert uri.translate() == \
         '/usr/src/packages/SOURCES/repos/Virtualization:Appliances/CentOS_7'
Example #46
0
 def test_translate_obsrepositories_outside_buildservice(
     self, mock_buildservice
 ):
     mock_buildservice.return_value = False
     uri = Uri('obsrepositories:/')
     uri.translate()
Example #47
0
 def test_translate_buildservice_path(self, mock_buildservice):
     mock_buildservice.return_value = True
     uri = Uri('obs://openSUSE:13.2/standard', 'yast2')
     assert uri.translate() == \
         '/usr/src/packages/SOURCES/repos/openSUSE:13.2/standard'
Example #48
0
 def test_translate_buildservice_obsrepositories(self, mock_buildservice):
     mock_buildservice.return_value = True
     uri = Uri('obsrepositories:/')
     assert uri.translate() == '/usr/src/packages/SOURCES/repos'
Example #49
0
 def test_translate_unsupported_style(self):
     uri = Uri('ms://foo', 'rpm-md')
     with raises(KiwiUriStyleUnknown):
         uri.translate()
Example #50
0
    def add_obs_repositories(
            self,
            xml_state: XMLState,
            profile: Optional[str] = None,
            arch: str = 'x86_64',
            repo: str = 'images') -> Dict[str, obs_repo_status_type]:
        """
        Add repositories from the obs project to the provided XMLState

        :param XMLState xml_state: XMLState object reference
        :param str arch: OBS architecture, defaults to: 'x86_64'
        :param str repo:
            OBS image package build repository name, defaults to: 'images'
        """
        repository_status_report: Dict[str, obs_repo_status_type] = {}
        if not OBS._delete_obsrepositories_placeholder_repo(xml_state):
            # The repo list does not contain the obsrepositories flag
            # Therefore it's not needed to look for repos in the OBS
            # project configuration
            return repository_status_report

        package_name = self.package if not profile \
            else f'{self.package}:{profile}'
        log.info(f'Using OBS repositories from {self.project}/{package_name}')
        buildinfo_link = os.sep.join([
            self.api_server, 'build', self.project, repo, arch, package_name,
            '_buildinfo'
        ])
        request = self._create_request(buildinfo_link)
        buildinfo_xml_tree = OBS._import_xml_request(request)
        repo_paths = buildinfo_xml_tree.getroot().xpath('/buildinfo/path')
        if not repo_paths:
            raise KiwiOBSPluginBuildInfoError(
                f'OBS buildinfo for {package_name} has no repo paths')
        repo_prio_ascending = 0
        repo_prio_descending = 501
        repo_alias = None
        for repo_path in repo_paths:
            repo_url = repo_path.get('url')
            if not repo_url:
                repo_url = 'obs://{0}/{1}'.format(repo_path.get('project'),
                                                  repo_path.get('repository'))
            if repo_url:
                try:
                    repo_uri = Uri(repo_url)
                    repo_url = repo_uri.translate(
                        check_build_environment=False)
                    request = requests.get(repo_url)
                    request.raise_for_status()
                except Exception as issue:
                    repository_status_report[repo_url] = obs_repo_status_type(
                        flag='unreachable', message=f'ignored:{issue}')
                    continue

                repo_check = SolverRepositoryBase(repo_uri)
                repo_type = repo_check.get_repo_type()
                if not repo_type:
                    repository_status_report[repo_url] = obs_repo_status_type(
                        flag='repo_type_unknown',
                        message='ignored:Unknown repository type')
                    continue

                if repo_type == 'rpm-md':
                    repo_prio_ascending += 1
                    repo_prio = repo_prio_ascending
                else:
                    repo_prio_descending -= 1
                    repo_prio = repo_prio_descending

                repository_status_report[repo_url] = obs_repo_status_type(
                    flag='ok', message='imported')
                xml_state.add_repository(repo_url, repo_type, repo_alias,
                                         f'{repo_prio}')
        return repository_status_report
Example #51
0
 def test_translate_obs_distro(self):
     uri = Uri('obs://13.2/repo/oss', 'yast2')
     assert uri.translate() == \
         'http://download.opensuse.org/distribution/13.2/repo/oss'
Example #52
0
 def test_translate_obs_distro(self):
     uri = Uri('obs://13.2/repo/oss', 'yast2')
     assert uri.translate() == \
         'http://download.opensuse.org/distribution/13.2/repo/oss'