Server IP : 104.21.38.3 / Your IP : 172.71.82.92 Web Server : Apache System : Linux krdc-ubuntu-s-2vcpu-4gb-amd-blr1-01.localdomain 5.15.0-142-generic #152-Ubuntu SMP Mon May 19 10:54:31 UTC 2025 x86_64 User : www ( 1000) PHP Version : 7.4.33 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /snap/core20/current/usr/lib/python3/dist-packages/cloudinit/config/ |
Upload File : |
# Copyright (C) 2011 Canonical Ltd. # Copyright (C) 2012 Hewlett-Packard Development Company, L.P. # # Author: Scott Moser <[email protected]> # Author: Juerg Haefliger <[email protected]> # # This file is part of cloud-init. See LICENSE file for license information. """install and configure landscape client""" import logging from itertools import chain from configobj import ConfigObj from cloudinit import subp, type_utils, util from cloudinit.cloud import Cloud from cloudinit.config import Config from cloudinit.config.schema import MetaSchema from cloudinit.settings import PER_INSTANCE LSC_CLIENT_CFG_FILE = "/etc/landscape/client.conf" # defaults taken from stock client.conf in landscape-client 11.07.1.1-0ubuntu2 LSC_BUILTIN_CFG = { "client": { "log_level": "info", "url": "https://landscape.canonical.com/message-system", "ping_url": "http://landscape.canonical.com/ping", "data_path": "/var/lib/landscape/client", } } meta: MetaSchema = { "id": "cc_landscape", "distros": ["ubuntu"], "frequency": PER_INSTANCE, "activate_by_schema_keys": ["landscape"], } LOG = logging.getLogger(__name__) def handle(name: str, cfg: Config, cloud: Cloud, args: list) -> None: """ Basically turn a top level 'landscape' entry with a 'client' dict and render it to ConfigObj format under '[client]' section in /etc/landscape/client.conf """ ls_cloudcfg = cfg.get("landscape", {}) if not isinstance(ls_cloudcfg, (dict)): raise RuntimeError( "'landscape' key existed in config, but not a dictionary type," " is a {_type} instead".format( _type=type_utils.obj_name(ls_cloudcfg) ) ) if not ls_cloudcfg: return cloud.distro.install_packages(["landscape-client"]) # Later order config values override earlier values merge_data = [ LSC_BUILTIN_CFG, LSC_CLIENT_CFG_FILE, ls_cloudcfg, ] # Flatten dict k,v pairs to [--KEY1, VAL1, --KEY2, VAL2, ...] cmd_params = list( chain( *[ [f"--{k.replace('_', '-')}", v] for k, v in sorted( merge_together(merge_data)["client"].items() ) ] ) ) try: subp.subp(["landscape-config", "--silent", "--is-registered"], rcs=[5]) subp.subp(["landscape-config", "--silent"] + cmd_params) except subp.ProcessExecutionError as e: if e.exit_code == 0: LOG.warning("Client already registered to Landscape") else: msg = f"Failure registering client:\n{e}" util.logexc(LOG, msg) raise RuntimeError(msg) from e def merge_together(objs): """ merge together ConfigObj objects or things that ConfigObj() will take in later entries override earlier """ cfg = ConfigObj({}) for obj in objs: if not obj: continue if isinstance(obj, ConfigObj): cfg.merge(obj) else: cfg.merge(ConfigObj(obj)) return cfg