def _get_default_params(): """get_default_params Get the most basic default mrror and release info to be used in tests """ params = {} params['RELEASE'] = util.lsb_release()['codename'] arch = 'amd64' params['MIRROR'] = cc_apt_configure.\ get_default_mirrors(arch)["PRIMARY"] return params
def handle(name, ocfg, cloud, log, _): """process the config for apt_config. This can be called from curthooks if a global apt config was provided or via the "apt" standalone command.""" # keeping code close to curtin codebase via entry handler target = None if log is not None: global LOG LOG = log # feed back converted config, but only work on the subset under 'apt' ocfg = convert_to_v3_apt_format(ocfg) cfg = ocfg.get('apt', {}) if not isinstance(cfg, dict): raise ValueError("Expected dictionary for 'apt' config, found %s", type(cfg)) LOG.debug("handling apt (module %s) with apt config '%s'", name, cfg) release = util.lsb_release(target=target)['codename'] arch = util.get_architecture(target) mirrors = find_apt_mirror_info(cfg, cloud, arch=arch) LOG.debug("Apt Mirror info: %s", mirrors) apply_debconf_selections(cfg, target) if util.is_false(cfg.get('preserve_sources_list', False)): generate_sources_list(cfg, release, mirrors, cloud) rename_apt_lists(mirrors, target) try: apply_apt_config(cfg, APT_PROXY_FN, APT_CONFIG_FN) except (IOError, OSError): LOG.exception("Failed to apply proxy or apt config info:") # Process 'apt_source -> sources {dict}' if 'sources' in cfg: params = mirrors params['RELEASE'] = release params['MIRROR'] = mirrors["MIRROR"] matcher = None matchcfg = cfg.get('add_apt_repo_match', ADD_APT_REPO_MATCH) if matchcfg: matcher = re.compile(matchcfg).search add_apt_sources(cfg['sources'], cloud, target=target, template_params=params, aa_repo_match=matcher)
def apply_apt(cfg, cloud, target): # cfg is the 'apt' top level dictionary already in 'v3' format. if not cfg: should_config, msg = _should_configure_on_empty_apt() if not should_config: LOG.debug("Nothing to do: No apt config and %s", msg) return LOG.debug("handling apt config: %s", cfg) release = util.lsb_release(target=target)["codename"] arch = util.get_dpkg_architecture(target) mirrors = find_apt_mirror_info(cfg, cloud, arch=arch) LOG.debug("Apt Mirror info: %s", mirrors) if util.is_false(cfg.get("preserve_sources_list", False)): add_mirror_keys(cfg, target) generate_sources_list(cfg, release, mirrors, cloud) rename_apt_lists(mirrors, target, arch) try: apply_apt_config(cfg, APT_PROXY_FN, APT_CONFIG_FN) except (IOError, OSError): LOG.exception("Failed to apply proxy or apt config info:") # Process 'apt_source -> sources {dict}' if "sources" in cfg: params = mirrors params["RELEASE"] = release params["MIRROR"] = mirrors["MIRROR"] matcher = None matchcfg = cfg.get("add_apt_repo_match", ADD_APT_REPO_MATCH) if matchcfg: matcher = re.compile(matchcfg).search add_apt_sources( cfg["sources"], cloud, target=target, template_params=params, aa_repo_match=matcher, )
def test_apt_v3_list_rename(self, m_get_architecture): """test_apt_v3_list_rename - Test find mirror and apt list renaming""" pre = "/var/lib/apt/lists" # filenames are archive dependent arch = 's390x' m_get_architecture.return_value = arch component = "ubuntu-ports" archive = "ports.ubuntu.com" cfg = { 'primary': [{ 'arches': ["default"], 'uri': 'http://test.ubuntu.com/%s/' % component }], 'security': [{ 'arches': ["default"], 'uri': 'http://testsec.ubuntu.com/%s/' % component }] } post = ("%s_dists_%s-updates_InRelease" % (component, util.lsb_release()['codename'])) fromfn = ("%s/%s_%s" % (pre, archive, post)) tofn = ("%s/test.ubuntu.com_%s" % (pre, post)) mirrors = cc_apt_configure.find_apt_mirror_info(cfg, None, arch) self.assertEqual(mirrors['MIRROR'], "http://test.ubuntu.com/%s/" % component) self.assertEqual(mirrors['PRIMARY'], "http://test.ubuntu.com/%s/" % component) self.assertEqual(mirrors['SECURITY'], "http://testsec.ubuntu.com/%s/" % component) with mock.patch.object(os, 'rename') as mockren: with mock.patch.object(glob, 'glob', return_value=[fromfn]): cc_apt_configure.rename_apt_lists(mirrors, TARGET) mockren.assert_any_call(fromfn, tofn)
def apply_apt(cfg, cloud, target): # cfg is the 'apt' top level dictionary already in 'v3' format. if not cfg: should_config, msg = _should_configure_on_empty_apt() if not should_config: LOG.debug("Nothing to do: No apt config and %s", msg) return LOG.debug("handling apt config: %s", cfg) release = util.lsb_release(target=target)['codename'] arch = util.get_architecture(target) mirrors = find_apt_mirror_info(cfg, cloud, arch=arch) LOG.debug("Apt Mirror info: %s", mirrors) if util.is_false(cfg.get('preserve_sources_list', False)): generate_sources_list(cfg, release, mirrors, cloud) rename_apt_lists(mirrors, target) try: apply_apt_config(cfg, APT_PROXY_FN, APT_CONFIG_FN) except (IOError, OSError): LOG.exception("Failed to apply proxy or apt config info:") # Process 'apt_source -> sources {dict}' if 'sources' in cfg: params = mirrors params['RELEASE'] = release params['MIRROR'] = mirrors["MIRROR"] matcher = None matchcfg = cfg.get('add_apt_repo_match', ADD_APT_REPO_MATCH) if matchcfg: matcher = re.compile(matchcfg).search add_apt_sources(cfg['sources'], cloud, target=target, template_params=params, aa_repo_match=matcher)
def test_apt_v3_list_rename(self, m_get_architecture): """test_apt_v3_list_rename - Test find mirror and apt list renaming""" pre = "/var/lib/apt/lists" # filenames are archive dependent arch = 's390x' m_get_architecture.return_value = arch component = "ubuntu-ports" archive = "ports.ubuntu.com" cfg = {'primary': [{'arches': ["default"], 'uri': 'http://test.ubuntu.com/%s/' % component}], 'security': [{'arches': ["default"], 'uri': 'http://testsec.ubuntu.com/%s/' % component}]} post = ("%s_dists_%s-updates_InRelease" % (component, util.lsb_release()['codename'])) fromfn = ("%s/%s_%s" % (pre, archive, post)) tofn = ("%s/test.ubuntu.com_%s" % (pre, post)) mirrors = cc_apt_configure.find_apt_mirror_info(cfg, None, arch) self.assertEqual(mirrors['MIRROR'], "http://test.ubuntu.com/%s/" % component) self.assertEqual(mirrors['PRIMARY'], "http://test.ubuntu.com/%s/" % component) self.assertEqual(mirrors['SECURITY'], "http://testsec.ubuntu.com/%s/" % component) with mock.patch.object(os, 'rename') as mockren: with mock.patch.object(glob, 'glob', return_value=[fromfn]): cc_apt_configure.rename_apt_lists(mirrors, TARGET) mockren.assert_any_call(fromfn, tofn)