def search_for_mirror_dns(configured, mirrortype, cfg, cloud): """ Try to resolve a list of predefines DNS names to pick mirrors """ mirror = None if configured: mydom = "" doms = [] if mirrortype == "primary": mirrordns = "mirror" elif mirrortype == "security": mirrordns = "security-mirror" else: raise ValueError("unknown mirror type") # if we have a fqdn, then search its domain portion first (_, fqdn) = util.get_hostname_fqdn(cfg, cloud) mydom = ".".join(fqdn.split(".")[1:]) if mydom: doms.append(".%s" % mydom) doms.extend((".localdomain", "",)) mirror_list = [] distro = cloud.distro.name mirrorfmt = "http://%s-%s%s/%s" % (distro, mirrordns, "%s", distro) for post in doms: mirror_list.append(mirrorfmt % (post)) mirror = util.search_for_mirror(mirror_list) return mirror
def find_apt_mirror_info(cloud, cfg): """find an apt_mirror given the cloud and cfg provided.""" mirror = None # this is less preferred way of specifying mirror preferred would be to # use the distro's search or package_mirror. mirror = cfg.get("apt_mirror", None) search = cfg.get("apt_mirror_search", None) if not mirror and search: mirror = util.search_for_mirror(search) if (not mirror and util.get_cfg_option_bool(cfg, "apt_mirror_search_dns", False)): mydom = "" doms = [] # if we have a fqdn, then search its domain portion first (_hostname, fqdn) = util.get_hostname_fqdn(cfg, cloud) mydom = ".".join(fqdn.split(".")[1:]) if mydom: doms.append(".%s" % mydom) doms.extend(( ".localdomain", "", )) mirror_list = [] distro = cloud.distro.name mirrorfmt = "http://%s-mirror%s/%s" % (distro, "%s", distro) for post in doms: mirror_list.append(mirrorfmt % (post)) mirror = util.search_for_mirror(mirror_list) mirror_info = cloud.datasource.get_package_mirror_info() # this is a bit strange. # if mirror is set, then one of the legacy options above set it # but they do not cover security. so we need to get that from # get_package_mirror_info if mirror: mirror_info.update({'primary': mirror}) return mirror_info
def find_apt_mirror(cloud, cfg): """ find an apt_mirror given the cloud and cfg provided """ # TODO: distro and defaults should be configurable distro = "ubuntu" defaults = { 'ubuntu': "http://archive.ubuntu.com/ubuntu", 'debian': "http://archive.debian.org/debian", } mirror = None cfg_mirror = cfg.get("apt_mirror", None) if cfg_mirror: mirror = cfg["apt_mirror"] elif "apt_mirror_search" in cfg: mirror = util.search_for_mirror(cfg['apt_mirror_search']) else: if cloud: mirror = cloud.get_mirror() mydom = "" doms = [] if not mirror and cloud: # if we have a fqdn, then search its domain portion first (_hostname, fqdn) = util.get_hostname_fqdn(cfg, cloud) mydom = ".".join(fqdn.split(".")[1:]) if mydom: doms.append(".%s" % mydom) if not mirror: doms.extend((".localdomain", "",)) mirror_list = [] mirrorfmt = "http://%s-mirror%s/%s" % (distro, "%s", distro) for post in doms: mirror_list.append(mirrorfmt % post) mirror = util.search_for_mirror(mirror_list) if not mirror: mirror = defaults[distro] return mirror
def find_apt_mirror_info(cloud, cfg): """find an apt_mirror given the cloud and cfg provided.""" mirror = None # this is less preferred way of specifying mirror preferred would be to # use the distro's search or package_mirror. mirror = cfg.get("apt_mirror", None) search = cfg.get("apt_mirror_search", None) if not mirror and search: mirror = util.search_for_mirror(search) if (not mirror and util.get_cfg_option_bool(cfg, "apt_mirror_search_dns", False)): mydom = "" doms = [] # if we have a fqdn, then search its domain portion first (_hostname, fqdn) = util.get_hostname_fqdn(cfg, cloud) mydom = ".".join(fqdn.split(".")[1:]) if mydom: doms.append(".%s" % mydom) doms.extend((".localdomain", "",)) mirror_list = [] distro = cloud.distro.name mirrorfmt = "http://%s-mirror%s/%s" % (distro, "%s", distro) for post in doms: mirror_list.append(mirrorfmt % (post)) mirror = util.search_for_mirror(mirror_list) mirror_info = cloud.datasource.get_package_mirror_info() # this is a bit strange. # if mirror is set, then one of the legacy options above set it # but they do not cover security. so we need to get that from # get_package_mirror_info if mirror: mirror_info.update({'primary': mirror}) return mirror_info
def get_mirror(cfg, mirrortype, arch, cloud): """pass the three potential stages of mirror specification returns None is neither of them found anything otherwise the first hit is returned""" mcfg = get_arch_mirrorconfig(cfg, mirrortype, arch) if mcfg is None: return None # directly specified mirror = mcfg.get("uri", None) # fallback to search if specified if mirror is None: # list of mirrors to try to resolve mirror = util.search_for_mirror(mcfg.get("search", None)) # fallback to search_dns if specified if mirror is None: # list of mirrors to try to resolve mirror = search_for_mirror_dns(mcfg.get("search_dns", None), mirrortype, cfg, cloud) return mirror