Blame cloudinit/net/renderers.py

Packit Service a04d08
# This file is part of cloud-init. See LICENSE file for license information.
Packit Service a04d08
Packit Service a04d08
from . import eni
Packit Service 751c4a
from . import freebsd
Packit Service 751c4a
from . import netbsd
Packit Service a04d08
from . import netplan
Packit Service a04d08
from . import RendererNotFoundError
Packit Service 751c4a
from . import openbsd
Packit Service a04d08
from . import sysconfig
Packit Service a04d08
Packit Service a04d08
NAME_TO_RENDERER = {
Packit Service a04d08
    "eni": eni,
Packit Service 751c4a
    "freebsd": freebsd,
Packit Service 751c4a
    "netbsd": netbsd,
Packit Service a04d08
    "netplan": netplan,
Packit Service 751c4a
    "openbsd": openbsd,
Packit Service a04d08
    "sysconfig": sysconfig,
Packit Service a04d08
}
Packit Service a04d08
Packit Service 751c4a
DEFAULT_PRIORITY = ["eni", "sysconfig", "netplan", "freebsd",
Packit Service 751c4a
                    "netbsd", "openbsd"]
Packit Service a04d08
Packit Service a04d08
Packit Service a04d08
def search(priority=None, target=None, first=False):
Packit Service a04d08
    if priority is None:
Packit Service a04d08
        priority = DEFAULT_PRIORITY
Packit Service a04d08
Packit Service a04d08
    available = NAME_TO_RENDERER
Packit Service a04d08
Packit Service a04d08
    unknown = [i for i in priority if i not in available]
Packit Service a04d08
    if unknown:
Packit Service a04d08
        raise ValueError(
Packit Service a04d08
            "Unknown renderers provided in priority list: %s" % unknown)
Packit Service a04d08
Packit Service a04d08
    found = []
Packit Service a04d08
    for name in priority:
Packit Service a04d08
        render_mod = available[name]
Packit Service a04d08
        if render_mod.available(target):
Packit Service a04d08
            cur = (name, render_mod.Renderer)
Packit Service a04d08
            if first:
Packit Service a04d08
                return cur
Packit Service a04d08
            found.append(cur)
Packit Service a04d08
Packit Service a04d08
    return found
Packit Service a04d08
Packit Service a04d08
Packit Service a04d08
def select(priority=None, target=None):
Packit Service a04d08
    found = search(priority, target=target, first=True)
Packit Service a04d08
    if not found:
Packit Service a04d08
        if priority is None:
Packit Service a04d08
            priority = DEFAULT_PRIORITY
Packit Service a04d08
        tmsg = ""
Packit Service a04d08
        if target and target != "/":
Packit Service a04d08
            tmsg = " in target=%s" % target
Packit Service a04d08
        raise RendererNotFoundError(
Packit Service a04d08
            "No available network renderers found%s. Searched "
Packit Service a04d08
            "through list: %s" % (tmsg, priority))
Packit Service a04d08
    return found
Packit Service a04d08
Packit Service a04d08
# vi: ts=4 expandtab