QEMU HARDDISK #ˆl–Ðz¾”ji?u4 \¸î*bÑ¿Ê ƒ ÂoÉ¿Ç!# This file is part of cloud-init. See LICENSE file for license information. from typing import List, Tuple, Type from cloudinit.net import ( RendererNotFoundError, eni, freebsd, netbsd, netplan, network_manager, networkd, openbsd, renderer, sysconfig, ) NAME_TO_RENDERER = { "eni": eni, "freebsd": freebsd, "netbsd": netbsd, "netplan": netplan, "network-manager": network_manager, "networkd": networkd, "openbsd": openbsd, "sysconfig": sysconfig, } DEFAULT_PRIORITY = [ "eni", "sysconfig", "netplan", "network-manager", "freebsd", "netbsd", "openbsd", "networkd", ] def search( priority=None, target=None, first=False ) -> List[Tuple[str, Type[renderer.Renderer]]]: if priority is None: priority = DEFAULT_PRIORITY available = NAME_TO_RENDERER unknown = [i for i in priority if i not in available] if unknown: raise ValueError( "Unknown renderers provided in priority list: %s" % unknown ) found = [] for name in priority: render_mod = available[name] if render_mod.available(target): cur = (name, render_mod.Renderer) if first: return [cur] found.append(cur) return found def select(priority=None, target=None) -> Tuple[str, Type[renderer.Renderer]]: found = search(priority, target=target, first=True) if not found: if priority is None: priority = DEFAULT_PRIORITY tmsg = "" if target and target != "/": tmsg = " in target=%s" % target raise RendererNotFoundError( "No available network renderers found%s. Searched through list: %s" % (tmsg, priority) ) return found[0] #ˆl–Ým_J*n-jm@†ãN\ ŠbÑ¿Ë ƒe·ÊÀÈ ïimport glob import os import subprocess import sys import tempfile from distutils import log from distutils.errors import DistutilsError import pkg_resources from setuptools.wheel import Wheel def _fixup_find_links(find_links): """Ensure find-links option end-up being a list of strings.""" if isinstance(find_links, str): return find_links.split() assert isinstance(find_links, (tuple, list)) return find_links def fetch_build_egg(dist, req): # noqa: C901 # is too complex (16) # FIXME """Fetch an egg needed for building. Use pip/wheel to fetch/build a wheel.""" # Warn if wheel is not available try: pkg_resources.get_distribution('wheel') except pkg_resources.DistributionNotFound: dist.announce('WARNING: The wheel package is not available.', log.WARN) # Ignore environment markers; if supplied, it is required. req = strip_marker(req) # Take easy_install options into account, but do not override relevant # pip environment variables (like PIP_INDEX_URL or PIP_QUIET); they'll # take precedence. opts = dist.get_option_dict('easy_install') if 'allow_hosts' in opts: raise DistutilsError('the `allow-hosts` option is not supported ' 'when using pip to install requirements.') quiet = 'PIP_QUIET' not in os.environ and 'PIP_VERBOSE' not in os.environ if 'PIP_INDEX_URL' in os.environ: index_url = None elif 'index_url' in opts: index_url = opts['index_url'][1] else: index_url = None find_links = ( _fixup_find_links(opts['find_links'][1])[:] if 'find_links' in opts else [] ) if dist.dependency_links: find_links.extend(dist.dependency_links) eggs_dir = os.path.realpath(dist.get_egg_cache_dir()) environment = pkg_resources.Environment() for egg_dist in pkg_resources.find_distributions(eggs_dir): if egg_dist in req and environment.can_add(egg_dist): return egg_dist with tempfile.TemporaryDirectory() as tmpdir: cmd = [ sys.executable, '-m', 'pip', '--disable-pi