404

[ Avaa Bypassed ]




Upload:

Command:

botdev@3.12.147.104: ~ $
# This file is part of cloud-init. See LICENSE file for license information.

"""Run the dhclient hook to record network info."""

import argparse
import os

from cloudinit import atomic_helper
from cloudinit import log as logging
from cloudinit import stages

LOG = logging.getLogger(__name__)

NAME = "dhclient-hook"
UP = "up"
DOWN = "down"
EVENTS = (UP, DOWN)


def _get_hooks_dir():
    i = stages.Init()
    return os.path.join(i.paths.get_runpath(), "dhclient.hooks")


def _filter_env_vals(info):
    """Given info (os.environ), return a dictionary with
    lower case keys for each entry starting with DHCP4_ or new_."""
    new_info = {}
    for k, v in info.items():
        if k.startswith("DHCP4_") or k.startswith("new_"):
            key = (k.replace("DHCP4_", "").replace("new_", "")).lower()
            new_info[key] = v
    return new_info


def run_hook(interface, event, data_d=None, env=None):
    if event not in EVENTS:
        raise ValueError(
            "Unexpected event '%s'. Expected one of: %s" % (event, EVENTS)
        )
    if data_d is None:
        data_d = _get_hooks_dir()
    if env is None:
        env = os.environ
    hook_file = os.path.join(data_d, interface + ".json")

    if event == UP:
        if not os.path.exists(data_d):
            os.makedirs(data_d)
        atomic_helper.write_json(hook_file, _filter_env_vals(env))
        LOG.debug("Wrote dhclient options in %s", hook_file)
    elif event == DOWN:
        if os.path.exists(hook_file):
            os.remove(hook_file)
            LOG.debug("Removed dhclient options file %s", hook_file)


def get_parser(parser=None):
    if parser is None:
        parser = argparse.ArgumentParser(prog=NAME, description=__doc__)
    parser.add_argument(
        "event", help="event taken on the interface", choices=EVENTS
    )
    parser.add_argument(
        "interface", help="the network interface being acted upon"
    )
    # cloud-init main uses 'action'
    parser.set_defaults(action=(NAME, handle_args))
    return parser


def handle_args(name, args, data_d=None):
    """Handle the Namespace args.
    Takes 'name' as passed by cloud-init main. not used here."""
    return run_hook(interface=args.interface, event=args.event, data_d=data_d)


if __name__ == "__main__":
    import sys

    parser = get_parser()
    args = parser.parse_args(args=sys.argv[1:])
    return_value = handle_args(
        NAME, args, data_d=os.environ.get("_CI_DHCP_HOOK_DATA_D")
    )
    if return_value:
        sys.exit(return_value)


# vi: ts=4 expandtab

Filemanager

Name Type Size Permission Actions
__pycache__ Folder 0755
analyze Folder 0755
cmd Folder 0755
config Folder 0755
distros Folder 0755
filters Folder 0755
handlers Folder 0755
mergers Folder 0755
net Folder 0755
reporting Folder 0755
sources Folder 0755
__init__.py File 0 B 0644
apport.py File 5.74 KB 0644
atomic_helper.py File 1.38 KB 0644
cloud.py File 3.49 KB 0644
dhclient_hook.py File 2.49 KB 0644
dmi.py File 6.82 KB 0644
event.py File 2.05 KB 0644
features.py File 3.07 KB 0644
gpg.py File 4.32 KB 0644
helpers.py File 16.43 KB 0644
importer.py File 1.75 KB 0644
log.py File 4.33 KB 0644
netinfo.py File 22.57 KB 0644
patcher.py File 1.1 KB 0644
persistence.py File 2.54 KB 0644
registry.py File 1.02 KB 0644
safeyaml.py File 7.72 KB 0644
settings.py File 1.99 KB 0644
signal_handler.py File 1.78 KB 0644
simpletable.py File 1.93 KB 0644
ssh_util.py File 20.71 KB 0644
stages.py File 34.48 KB 0644
subp.py File 13.24 KB 0644
temp_utils.py File 3.19 KB 0644
templater.py File 5.83 KB 0644
type_utils.py File 726 B 0644
url_helper.py File 27.96 KB 0644
user_data.py File 14.49 KB 0644
util.py File 90.45 KB 0644
version.py File 591 B 0644
warnings.py File 3.84 KB 0644