コード例 #1
0
    def test_add_remote(self):
        fid = self.write_tempfile(self.repo_cfg)
        rf_cfg = config.KeyFileConfigParser(fid.name)

        remote_name = 'remote "awesomeos-8-container"'
        url = "https://example.com.not.real/repo"
        gpg_verify = "true"

        rf_cfg.add_section(remote_name)
        self.assertTrue(rf_cfg.has_section(remote_name))
        rf_cfg.save()

        new_contents = open(fid.name, 'r').read()
        self.assertTrue('awesomeos-8' in new_contents)

        rf_cfg.set(remote_name, 'url', url)
        rf_cfg.save()

        new_contents = open(fid.name, 'r').read()
        self.assertTrue(url in new_contents)

        rf_cfg.set(remote_name, 'gpg-verify', gpg_verify)
        rf_cfg.save()

        new_contents = open(fid.name, 'r').read()
        self.assertTrue('gpg-verify' in new_contents)
        self.assertTrue(gpg_verify in new_contents)
        self.assertTrue('gpg-verify = true' in new_contents)

        new_rf_cfg = config.KeyFileConfigParser(fid.name)
        self.assertTrue(new_rf_cfg.has_section(remote_name))
        self.assertEquals(new_rf_cfg.get(remote_name, 'url'), url)
コード例 #2
0
    def test_multi_remote_mismatched_ref(self):
        repo_cfg = """
[core]
repo_version=1
mode=bare

[remote "lame-ostree"]
url=http://lame.example.com.not.real/
gpg-verify=false

[remote "awesome-ostree"]
url=http://awesome.example.com.not.real/
gpg-verify=false
"""

        origin_cfg = """
[origin]
refspec=origremote:thisisnoteitherofthose/awesomeos8/x86_64/controller/docker
"""

        self._setup_config(repo_cfg, origin_cfg)
        self.updater.run()
        new_origin = config.KeyFileConfigParser(self.origin_cfg_path.name)
        # Remote should have been left alone
        self._assert_origin(new_origin, 'awesome-ostree')
コード例 #3
0
    def test_multi_remote_matching_ref(self):
        repo_cfg = """
[core]
repo_version=1
mode=bare

[remote "lame-ostree"]
url=https://lame.example.com.not.real/
gpg-verify=false

[remote "awesome-ostree"]
url=https://awesome.example.com.not.real:9999/foo/repo
gpg-verify=false
"""

        origin_cfg = """
[origin]
refspec=origremote:awesome-ostree/awesomeos8/x86_64/controller/docker
"""

        self._setup_config(repo_cfg, origin_cfg)
        self.updater.run()
        # Reload the origin file and make sure it looks right:
        new_origin = config.KeyFileConfigParser(self.origin_cfg_path.name)
        self._assert_origin(new_origin, 'awesome-ostree')
コード例 #4
0
    def test_remove_section(self):
        fid = self.write_tempfile(self.repo_cfg)
        rf_cfg = config.KeyFileConfigParser(fid.name)
        remote_to_remove = 'remote "awesomeos-7-controller"'
        self.assertTrue(rf_cfg.has_section(remote_to_remove))

        rf_cfg.remove_section(remote_to_remove)
        self.assertFalse(rf_cfg.has_section(remote_to_remove))
        rf_cfg.save()
        self.assertFalse(rf_cfg.has_section(remote_to_remove))

        new_contents = open(fid.name, 'r').read()
        self.assertFalse(remote_to_remove in new_contents)
        self.assertFalse('gpg-verify = false' in new_contents)

        new_rf_cfg = config.KeyFileConfigParser(fid.name)
        self.assertFalse(new_rf_cfg.has_section(remote_to_remove))
コード例 #5
0
    def test_no_remotes(self):
        repo_cfg = ""

        origin_cfg = """
[origin]
refspec=origremote:thisisnotthesamewords/awesomeos8/x86_64/controller/docker
"""

        self._setup_config(repo_cfg, origin_cfg)
        self.updater.run()
        new_origin = config.KeyFileConfigParser(self.origin_cfg_path.name)

        # No remotes, we don't change the origin at all
        self._assert_origin(new_origin, 'origremote')
        self._assert_no_unconfigured_option(new_origin)
コード例 #6
0
    def test_no_remotes_unconfigured(self):
        repo_cfg = ""

        origin_cfg = """
[origin]
refspec=origremote:thisisnotthesamewords/awesomeos8/x86_64/controller/docker
unconfigured-state=Use "subscription-manager register" to enable online updates
"""

        self._setup_config(repo_cfg, origin_cfg)
        self.updater.run()
        new_origin = config.KeyFileConfigParser(self.origin_cfg_path.name)

        # No remotes, we don't change the origin at all
        self._assert_origin(new_origin, 'origremote')
        self.assertTrue('unconfigured-state' in new_origin.options('origin'))
コード例 #7
0
    def test_one_remote_mismatched_ref(self):
        repo_cfg = """
[remote "awesomeos-atomic-ostree"]
url=http://awesome.example.com.not.real/
gpg-verify=false

"""

        origin_cfg = """
[origin]
refspec=origremote:thisisnotthesamewords/awesomeos8/x86_64/controller/docker
"""

        self._setup_config(repo_cfg, origin_cfg)
        self.updater.run()
        new_origin = config.KeyFileConfigParser(self.origin_cfg_path.name)
        # FIXME: For now, we pick the first one.
        self._assert_origin(new_origin, 'awesomeos-atomic-ostree')
        self._assert_no_unconfigured_option(new_origin)
コード例 #8
0
    def test_one_remote_matching_ref(self):
        repo_cfg = """
[remote "awesomeos-ostree-next-ostree"]
url = https://awesome.cdn/content/awesomeos/next/10/ostree/repo
gpg-verify = false
tls-client-cert-path = /etc/pki/entitlement/12345.pem
tls-client-key-path = /etc/pki/entitlement/12345-key.pem

"""
        origin_cfg = """
[origin]
refspec=awesomeos-ostree-next-ostree:awesomeos-atomic/10.0-buildmaster/x86_64/standard
"""

        self._setup_config(repo_cfg, origin_cfg)
        self.updater.run()
        # Reload the origin file and make sure it looks right:
        new_origin = config.KeyFileConfigParser(self.origin_cfg_path.name)
        self._assert_origin(new_origin, 'awesomeos-ostree-next-ostree')
        self._assert_no_unconfigured_option(new_origin)
コード例 #9
0
    def test_one_remote_mismatched_ref_remove_unconfigured(self):
        repo_cfg = """
[remote "awesomeos-atomic-ostree"]
url=http://awesome.example.com.not.real/
gpg-verify=false

"""

        # ostree origins will have 'unconfigured-state' if they need setup
        origin_cfg = """
[origin]
refspec=origremote:thisisnotthesamewords/awesomeos8/x86_64/controller/docker
unconfigured-state=Use "subscription-manager register" to enable online updates
"""

        self._setup_config(repo_cfg, origin_cfg)
        self.updater.run()
        new_origin = config.KeyFileConfigParser(self.origin_cfg_path.name)
        # FIXME: For now, we pick the first one.
        self._assert_origin(new_origin, 'awesomeos-atomic-ostree')
        self._assert_no_unconfigured_option(new_origin)
コード例 #10
0
ファイル: model.py プロジェクト: rholy/subscription-manager
    def run(self):
        """
        Locate and update the currently deployed origin file.
        """
        self.originfile = self._get_deployed_origin()
        log.debug("Loading ostree origin file: %s" % self.originfile)

        # No results
        if not self.originfile:
            return

        origin_cfg = config.KeyFileConfigParser(self.originfile)

        try:
            old_refspec = origin_cfg.get('origin', 'refspec')
        except config.NoSectionError:
            log.warn("No 'origin' section found in origin file: %s" %
                     self.originfile)
            return

        if len(self.repo_config.remotes):
            log.warn("Multiple remotes configured in %s." % self.repo_config)

        new_remote = self._get_new_refspec(old_refspec)
        if new_remote is None:
            log.warn("Unable to find matching remote for origin: %s" %
                     old_refspec)
            log.warn("Leaving refspec in %s" % self.originfile)
            return

        new_refspec = config.replace_refspec_remote(old_refspec, new_remote)

        if new_refspec != old_refspec:
            log.info("Updating refspec in: %s" % self.originfile)
            log.info("    old = %s" % old_refspec)
            log.info("    new = %s" % new_refspec)
            origin_cfg.set('origin', 'refspec', new_refspec)
            origin_cfg.save()
        else:
            log.debug("No change to refspec in %s" % self.originfile)
コード例 #11
0
    def test_one_remote_mismatched_ref(self):
        repo_cfg = """
[core]
repo_version=1
mode=bare

[remote "awesome-ostree"]
url=http://awesome.example.com.not.real/
branches=awesome-ostree/awesome7/x86_64/controller/docker;
gpg-verify=false

"""

        origin_cfg = """
[origin]
refspec=origremote:thisisnotthesamewords/awesomeos8/x86_64/controller/docker
"""

        self._setup_config(repo_cfg, origin_cfg)
        self.updater.run()
        new_origin = config.KeyFileConfigParser(
            self.origin_cfg_path.name)
        self._assert_origin(new_origin, 'origremote')
コード例 #12
0
 def test_defaults(self):
     fid = self.write_tempfile(self.repo_cfg)
     kf_cfg = config.KeyFileConfigParser(fid.name)
     # There are no defaults, make sure the rhsm ones are skipped
     self.assertFalse(kf_cfg.has_default('section', 'prop'))
     self.assertEquals(kf_cfg.defaults(), {})
コード例 #13
0
    def run(self):
        """
        Locate and update the currently deployed origin file.
        """
        try:
            self.originfile = self._get_deployed_origin()
        except OstreeGIWrapperError, e:
            log.warning(e)
            return

        # No results
        if not self.originfile:
            return

        origin_cfg = config.KeyFileConfigParser(self.originfile)

        try:
            old_refspec = origin_cfg.get('origin', 'refspec')
        except config.NoSectionError:
            log.warn("No 'origin' section found in origin file: %s" %
                     self.originfile)
            return

        # Remove the unconfigured-state flag from the origin config.
        # Note any changes to origin_cfg here are not saved until later.
        origin_cfg = self._remove_unconfigured_flag(origin_cfg)

        if len(self.repo_config.remotes):
            log.warn("Multiple remotes configured in %s." % self.repo_config)
コード例 #14
0
 def _rf_cfg(self):
     self.fid = self.write_tempfile(self.repo_cfg)
     self._rf_cfg_instance = config.KeyFileConfigParser(self.fid.name)
     return self._rf_cfg_instance
コード例 #15
0
    def run(self):
        """
        Locate and update the currently deployed origin file.
        """
        self.originfile = self._get_deployed_origin()
        log.debug("Loading ostree origin file: %s" % self.originfile)

        # No results
        if not self.originfile:
            return

        origin_cfg = config.KeyFileConfigParser(self.originfile)

        try:
            old_refspec = origin_cfg.get('origin', 'refspec')
        except config.NoSectionError:
            log.warn("No 'origin' section found in origin file: %s" %
                     self.originfile)
            return

        if len(self.repo_config.remotes):
            log.warn("Multiple remotes configured in %s." % self.repo_config)

        log.debug("old_refspec: %s" % old_refspec)
        new_remote = self._get_new_refspec(old_refspec)
        log.debug("new_remote: %s" % new_remote)
        if new_remote is None:
            log.warn("Unable to find matching remote for origin: %s" %
                     old_refspec)
            log.warn("Leaving refspec in %s" % self.originfile)

            # TODO: We don't have all the data and namespaces setup yet to insure
            #       we never get this scenario. A fresh installed system with a
            #       respect of
            #       "atomic-host-install:atomic-host/10.0/x86_64/standard" with
            #       remotes "atomic-host-blah-beta" and
            #       "atomic-host-super-preview". Have to update respec with a name
            #       matching at least one of the remotes, so we pick the first one.
            #       This will need to be replaced with a more precise method.
            #       Note this also applies for the case of no matching remote names
            #       and only one remote, which will be the common case for a fresh
            #       install.
            if len(self.repo_config.remotes):
                new_remote = sorted([x.name
                                     for x in self.repo_config.remotes])[0]
                log.warn(
                    "No remotes that match refspec for deployed origin found, so "
                    "choosing the first remote names sorted: %s" % new_remote)
            else:
                # No remotes,
                log.debug("No ostree remote urls found in content.")
                return

        new_refspec = config.replace_refspec_remote(old_refspec, new_remote)

        log.debug("old_refspec: %s" % old_refspec)
        log.debug("new_refspec: %s" % new_refspec)
        if new_refspec != old_refspec:
            log.info("Updating refspec in: %s" % self.originfile)
            log.info("    old = %s" % old_refspec)
            log.info("    new = %s" % new_refspec)
            origin_cfg.set('origin', 'refspec', new_refspec)
            origin_cfg.save()
        else:
            log.debug("No change to refspec in %s" % self.originfile)
コード例 #16
0
 def test_items(self):
     fid = self.write_tempfile(self.repo_cfg)
     kf_cfg = config.KeyFileConfigParser(fid.name)
     section_one_items = kf_cfg.items('section_one')
     self.assertEquals(len(section_one_items), 2)
コード例 #17
0
 def test_sections(self):
     fid = self.write_tempfile(self.repo_cfg)
     kf_cfg = config.KeyFileConfigParser(fid.name)
     self.assert_items_equals(kf_cfg.sections(),
                              ['section_one', 'section_two'])
     self.assertEquals(len(kf_cfg.sections()), 2)
コード例 #18
0
 def test_items(self):
     fid = self.write_tempfile(self.repo_cfg)
     kf_cfg = config.KeyFileConfigParser(fid.name)
     self.assertEquals(kf_cfg.items('section'), [])