X7ROOT File Manager
Current Path:
/usr/lib/python2.7/site-packages/cloudinit/config
usr
/
lib
/
python2.7
/
site-packages
/
cloudinit
/
config
/
📁
..
📄
__init__.py
(1.4 KB)
📄
__init__.pyc
(1.31 KB)
📄
__init__.pyo
(1.31 KB)
📄
cc_apt_configure.py
(32.8 KB)
📄
cc_apt_configure.pyc
(30.2 KB)
📄
cc_apt_configure.pyo
(30.2 KB)
📄
cc_apt_pipelining.py
(2.44 KB)
📄
cc_apt_pipelining.pyc
(2.48 KB)
📄
cc_apt_pipelining.pyo
(2.48 KB)
📄
cc_bootcmd.py
(3.5 KB)
📄
cc_bootcmd.pyc
(3.02 KB)
📄
cc_bootcmd.pyo
(3.02 KB)
📄
cc_byobu.py
(3.1 KB)
📄
cc_byobu.pyc
(3.09 KB)
📄
cc_byobu.pyo
(3.09 KB)
📄
cc_ca_certs.py
(4.09 KB)
📄
cc_ca_certs.pyc
(4.1 KB)
📄
cc_ca_certs.pyo
(4.1 KB)
📄
cc_chef.py
(13.17 KB)
📄
cc_chef.pyc
(10.79 KB)
📄
cc_chef.pyo
(10.79 KB)
📄
cc_debug.py
(3.08 KB)
📄
cc_debug.pyc
(3.35 KB)
📄
cc_debug.pyo
(3.35 KB)
📄
cc_disable_ec2_metadata.py
(1.56 KB)
📄
cc_disable_ec2_metadata.pyc
(1.57 KB)
📄
cc_disable_ec2_metadata.pyo
(1.57 KB)
📄
cc_disk_setup.py
(32.8 KB)
📄
cc_disk_setup.pyc
(28.91 KB)
📄
cc_disk_setup.pyo
(28.91 KB)
📄
cc_emit_upstart.py
(2 KB)
📄
cc_emit_upstart.pyc
(2.15 KB)
📄
cc_emit_upstart.pyo
(2.15 KB)
📄
cc_fan.py
(2.83 KB)
📄
cc_fan.pyc
(3.09 KB)
📄
cc_fan.pyo
(3.09 KB)
📄
cc_final_message.py
(2.35 KB)
📄
cc_final_message.pyc
(2.39 KB)
📄
cc_final_message.pyo
(2.39 KB)
📄
cc_foo.py
(2.07 KB)
📄
cc_foo.pyc
(702 B)
📄
cc_foo.pyo
(702 B)
📄
cc_growpart.py
(11.51 KB)
📄
cc_growpart.pyc
(11.12 KB)
📄
cc_growpart.pyo
(11.12 KB)
📄
cc_grub_dpkg.py
(2.87 KB)
📄
cc_grub_dpkg.pyc
(2.63 KB)
📄
cc_grub_dpkg.pyo
(2.63 KB)
📄
cc_keys_to_console.py
(2.36 KB)
📄
cc_keys_to_console.pyc
(2.39 KB)
📄
cc_keys_to_console.pyo
(2.39 KB)
📄
cc_landscape.py
(3.93 KB)
📄
cc_landscape.pyc
(4.02 KB)
📄
cc_landscape.pyo
(4.02 KB)
📄
cc_locale.py
(1.16 KB)
📄
cc_locale.pyc
(1.16 KB)
📄
cc_locale.pyo
(1.16 KB)
📄
cc_lxd.py
(10.27 KB)
📄
cc_lxd.pyc
(8.33 KB)
📄
cc_lxd.pyo
(8.33 KB)
📄
cc_mcollective.py
(5.08 KB)
📄
cc_mcollective.pyc
(3.8 KB)
📄
cc_mcollective.pyo
(3.8 KB)
📄
cc_migrator.py
(3.07 KB)
📄
cc_migrator.pyc
(3.18 KB)
📄
cc_migrator.pyo
(3.18 KB)
📄
cc_mounts.py
(17.24 KB)
📄
cc_mounts.pyc
(14.59 KB)
📄
cc_mounts.pyo
(14.59 KB)
📄
cc_ntp.py
(20.19 KB)
📄
cc_ntp.pyc
(15.74 KB)
📄
cc_ntp.pyo
(15.74 KB)
📄
cc_package_update_upgrade_install.py
(4.11 KB)
📄
cc_package_update_upgrade_install.pyc
(4.01 KB)
📄
cc_package_update_upgrade_install.pyo
(4.01 KB)
📄
cc_phone_home.py
(3.92 KB)
📄
cc_phone_home.pyc
(3.28 KB)
📄
cc_phone_home.pyo
(3.28 KB)
📄
cc_power_state_change.py
(7.65 KB)
📄
cc_power_state_change.pyc
(7.8 KB)
📄
cc_power_state_change.pyo
(7.8 KB)
📄
cc_puppet.py
(8.86 KB)
📄
cc_puppet.pyc
(7.06 KB)
📄
cc_puppet.pyo
(7.06 KB)
📄
cc_resizefs.py
(10.79 KB)
📄
cc_resizefs.pyc
(9.15 KB)
📄
cc_resizefs.pyo
(9.15 KB)
📄
cc_resolv_conf.py
(3.43 KB)
📄
cc_resolv_conf.pyc
(3.44 KB)
📄
cc_resolv_conf.pyo
(3.44 KB)
📄
cc_rh_subscription.py
(15.65 KB)
📄
cc_rh_subscription.pyc
(13.5 KB)
📄
cc_rh_subscription.pyo
(13.5 KB)
📄
cc_rightscale_userdata.py
(3.76 KB)
📄
cc_rightscale_userdata.pyc
(2.82 KB)
📄
cc_rightscale_userdata.pyo
(2.82 KB)
📄
cc_rsyslog.py
(14.1 KB)
📄
cc_rsyslog.pyc
(10.56 KB)
📄
cc_rsyslog.pyo
(10.56 KB)
📄
cc_runcmd.py
(3.11 KB)
📄
cc_runcmd.pyc
(2.73 KB)
📄
cc_runcmd.pyo
(2.73 KB)
📄
cc_salt_minion.py
(4.66 KB)
📄
cc_salt_minion.pyc
(3.78 KB)
📄
cc_salt_minion.pyo
(3.78 KB)
📄
cc_scripts_per_boot.py
(1.2 KB)
📄
cc_scripts_per_boot.pyc
(1.2 KB)
📄
cc_scripts_per_boot.pyo
(1.2 KB)
📄
cc_scripts_per_instance.py
(1.38 KB)
📄
cc_scripts_per_instance.pyc
(1.38 KB)
📄
cc_scripts_per_instance.pyo
(1.38 KB)
📄
cc_scripts_per_once.py
(1.31 KB)
📄
cc_scripts_per_once.pyc
(1.31 KB)
📄
cc_scripts_per_once.pyo
(1.31 KB)
📄
cc_scripts_user.py
(1.42 KB)
📄
cc_scripts_user.pyc
(1.38 KB)
📄
cc_scripts_user.pyo
(1.38 KB)
📄
cc_scripts_vendor.py
(1.38 KB)
📄
cc_scripts_vendor.pyc
(1.46 KB)
📄
cc_scripts_vendor.pyo
(1.46 KB)
📄
cc_seed_random.py
(4.39 KB)
📄
cc_seed_random.pyc
(4.53 KB)
📄
cc_seed_random.pyo
(4.53 KB)
📄
cc_set_hostname.py
(2.95 KB)
📄
cc_set_hostname.pyc
(2.72 KB)
📄
cc_set_hostname.pyo
(2.72 KB)
📄
cc_set_passwords.py
(8.45 KB)
📄
cc_set_passwords.pyc
(7.62 KB)
📄
cc_set_passwords.pyo
(7.62 KB)
📄
cc_snap.py
(8.11 KB)
📄
cc_snap.pyc
(7.54 KB)
📄
cc_snap.pyo
(7.54 KB)
📄
cc_snap_config.py
(5.37 KB)
📄
cc_snap_config.pyc
(5.03 KB)
📄
cc_snap_config.pyo
(5.03 KB)
📄
cc_snappy.py
(9.69 KB)
📄
cc_snappy.pyc
(9.27 KB)
📄
cc_snappy.pyo
(9.27 KB)
📄
cc_spacewalk.py
(2.89 KB)
📄
cc_spacewalk.pyc
(2.91 KB)
📄
cc_spacewalk.pyo
(2.91 KB)
📄
cc_ssh.py
(10.59 KB)
📄
cc_ssh.pyc
(9.11 KB)
📄
cc_ssh.pyo
(9.11 KB)
📄
cc_ssh_authkey_fingerprints.py
(3.43 KB)
📄
cc_ssh_authkey_fingerprints.pyc
(3.94 KB)
📄
cc_ssh_authkey_fingerprints.pyo
(3.94 KB)
📄
cc_ssh_import_id.py
(2.88 KB)
📄
cc_ssh_import_id.pyc
(2.72 KB)
📄
cc_ssh_import_id.pyo
(2.72 KB)
📄
cc_timezone.py
(1.15 KB)
📄
cc_timezone.pyc
(1.15 KB)
📄
cc_timezone.pyo
(1.15 KB)
📄
cc_ubuntu_advantage.py
(6.08 KB)
📄
cc_ubuntu_advantage.pyc
(6.12 KB)
📄
cc_ubuntu_advantage.pyo
(6.12 KB)
📄
cc_ubuntu_drivers.py
(5.66 KB)
📄
cc_ubuntu_drivers.pyc
(4.63 KB)
📄
cc_ubuntu_drivers.pyo
(4.63 KB)
📄
cc_update_etc_hosts.py
(3.33 KB)
📄
cc_update_etc_hosts.pyc
(2.99 KB)
📄
cc_update_etc_hosts.pyo
(2.99 KB)
📄
cc_update_hostname.py
(1.58 KB)
📄
cc_update_hostname.pyc
(1.66 KB)
📄
cc_update_hostname.pyo
(1.66 KB)
📄
cc_users_groups.py
(7.06 KB)
📄
cc_users_groups.pyc
(6.76 KB)
📄
cc_users_groups.pyo
(6.76 KB)
📄
cc_write_files.py
(4.95 KB)
📄
cc_write_files.pyc
(5.13 KB)
📄
cc_write_files.pyo
(5.13 KB)
📄
cc_yum_add_repo.py
(4.27 KB)
📄
cc_yum_add_repo.pyc
(3.88 KB)
📄
cc_yum_add_repo.pyo
(3.88 KB)
📄
cc_zypper_add_repo.py
(7.62 KB)
📄
cc_zypper_add_repo.pyc
(7.12 KB)
📄
cc_zypper_add_repo.pyo
(7.12 KB)
📄
schema.py
(14.06 KB)
📄
schema.pyc
(13.83 KB)
📄
schema.pyo
(13.83 KB)
Editing: cc_rsyslog.py
# Copyright (C) 2009-2010 Canonical Ltd. # Copyright (C) 2012 Hewlett-Packard Development Company, L.P. # # Author: Scott Moser <scott.moser@canonical.com> # Author: Juerg Haefliger <juerg.haefliger@hp.com> # # This file is part of cloud-init. See LICENSE file for license information. """ .. _cc_rsyslog: Rsyslog ------- **Summary:** configure system loggig via rsyslog This module configures remote system logging using rsyslog. The rsyslog config file to write to can be specified in ``config_filename``, which defaults to ``20-cloud-config.conf``. The rsyslog config directory to write config files to may be specified in ``config_dir``, which defaults to ``/etc/rsyslog.d``. A list of configurations for rsyslog can be specified under the ``configs`` key in the ``rsyslog`` config. Each entry in ``configs`` is either a string or a dictionary. Each config entry contains a configuration string and a file to write it to. For config entries that are a dictionary, ``filename`` sets the target filename and ``content`` specifies the config string to write. For config entries that are only a string, the string is used as the config string to write. If the filename to write the config to is not specified, the value of the ``config_filename`` key is used. A file with the selected filename will be written inside the directory specified by ``config_dir``. The command to use to reload the rsyslog service after the config has been updated can be specified in ``service_reload_command``. If this is set to ``auto``, then an appropriate command for the distro will be used. This is the default behavior. To manually set the command, use a list of command args (e.g. ``[systemctl, restart, rsyslog]``). Configuration for remote servers can be specified in ``configs``, but for convenience it can be specified as key value pairs in ``remotes``. Each key is the name for an rsyslog remote entry. Each value holds the contents of the remote config for rsyslog. The config consists of the following parts: - filter for log messages (defaults to ``*.*``) - optional leading ``@`` or ``@@``, indicating udp and tcp respectively (defaults to ``@``, for udp) - ipv4 or ipv6 hostname or address. ipv6 addresses must be in ``[::1]`` format, (e.g. ``@[fd00::1]:514``) - optional port number (defaults to ``514``) This module will provide sane defaults for any part of the remote entry that is not specified, so in most cases remote hosts can be specified just using ``<name>: <address>``. For backwards compatibility, this module still supports legacy names for the config entries. Legacy to new mappings are as follows: - ``rsyslog`` -> ``rsyslog/configs`` - ``rsyslog_filename`` -> ``rsyslog/config_filename`` - ``rsyslog_dir`` -> ``rsyslog/config_dir`` .. note:: The legacy config format does not support specifying ``service_reload_command``. **Internal name:** ``cc_rsyslog`` **Module frequency:** per instance **Supported distros:** all **Config keys**:: rsyslog: config_dir: config_dir config_filename: config_filename configs: - "*.* @@192.158.1.1" - content: "*.* @@192.0.2.1:10514" filename: 01-example.conf - content: | *.* @@syslogd.example.com remotes: maas: "192.168.1.1" juju: "10.0.4.1" service_reload_command: [your, syslog, restart, command] **Legacy config keys**:: rsyslog: - "*.* @@192.158.1.1" rsyslog_dir: /etc/rsyslog-config.d/ rsyslog_filename: 99-local.conf """ # Old rsyslog documentation, kept for reference: # # rsyslog module allows configuration of syslog logging via rsyslog # Configuration is done under the cloud-config top level 'rsyslog'. # # Under 'rsyslog' you can define: # - configs: [default=[]] # this is a list. entries in it are a string or a dictionary. # each entry has 2 parts: # * content # * filename # if the entry is a string, then it is assigned to 'content'. # for each entry, content is written to the provided filename. # if filename is not provided, its default is read from 'config_filename' # # Content here can be any valid rsyslog configuration. No format # specific format is enforced. # # For simply logging to an existing remote syslog server, via udp: # configs: ["*.* @192.168.1.1"] # # - remotes: [default={}] # This is a dictionary of name / value pairs. # In comparison to 'config's, it is more focused in that it only supports # remote syslog configuration. It is not rsyslog specific, and could # convert to other syslog implementations. # # Each entry in remotes is a 'name' and a 'value'. # * name: an string identifying the entry. good practice would indicate # using a consistent and identifiable string for the producer. # For example, the MAAS service could use 'maas' as the key. # * value consists of the following parts: # * optional filter for log messages # default if not present: *.* # * optional leading '@' or '@@' (indicates udp or tcp respectively). # default if not present (udp): @ # This is rsyslog format for that. if not present, is '@'. # * ipv4 or ipv6 or hostname # ipv6 addresses must be in [::1] format. (@[fd00::1]:514) # * optional port # port defaults to 514 # # - config_filename: [default=20-cloud-config.conf] # this is the file name to use if none is provided in a config entry. # # - config_dir: [default=/etc/rsyslog.d] # this directory is used for filenames that are not absolute paths. # # - service_reload_command: [default="auto"] # this command is executed if files have been written and thus the syslog # daemon needs to be told. # # Note, since cloud-init 0.5 a legacy version of rsyslog config has been # present and is still supported. See below for the mappings between old # value and new value: # old value -> new value # 'rsyslog' -> rsyslog/configs # 'rsyslog_filename' -> rsyslog/config_filename # 'rsyslog_dir' -> rsyslog/config_dir # # the legacy config does not support 'service_reload_command'. # # Example config: # #cloud-config # rsyslog: # configs: # - "*.* @@192.158.1.1" # - content: "*.* @@192.0.2.1:10514" # filename: 01-example.conf # - content: | # *.* @@syslogd.example.com # remotes: # maas: "192.168.1.1" # juju: "10.0.4.1" # config_dir: config_dir # config_filename: config_filename # service_reload_command: [your, syslog, restart, command] # # Example Legacy config: # #cloud-config # rsyslog: # - "*.* @@192.158.1.1" # rsyslog_dir: /etc/rsyslog-config.d/ # rsyslog_filename: 99-local.conf import os import re import six from cloudinit import log as logging from cloudinit import util DEF_FILENAME = "20-cloud-config.conf" DEF_DIR = "/etc/rsyslog.d" DEF_RELOAD = "auto" DEF_REMOTES = {} KEYNAME_CONFIGS = 'configs' KEYNAME_FILENAME = 'config_filename' KEYNAME_DIR = 'config_dir' KEYNAME_RELOAD = 'service_reload_command' KEYNAME_LEGACY_FILENAME = 'rsyslog_filename' KEYNAME_LEGACY_DIR = 'rsyslog_dir' KEYNAME_REMOTES = 'remotes' LOG = logging.getLogger(__name__) COMMENT_RE = re.compile(r'[ ]*[#]+[ ]*') HOST_PORT_RE = re.compile( r'^(?P<proto>[@]{0,2})' r'(([\[](?P<bracket_addr>[^\]]*)[\]])|(?P<addr>[^:]*))' r'([:](?P<port>[0-9]+))?$') def reload_syslog(command=DEF_RELOAD, systemd=False): service = 'rsyslog' if command == DEF_RELOAD: if systemd: cmd = ['systemctl', 'reload-or-try-restart', service] else: cmd = ['service', service, 'restart'] else: cmd = command util.subp(cmd, capture=True) def load_config(cfg): # return an updated config with entries of the correct type # support converting the old top level format into new format mycfg = cfg.get('rsyslog', {}) if isinstance(cfg.get('rsyslog'), list): mycfg = {KEYNAME_CONFIGS: cfg.get('rsyslog')} if KEYNAME_LEGACY_FILENAME in cfg: mycfg[KEYNAME_FILENAME] = cfg[KEYNAME_LEGACY_FILENAME] if KEYNAME_LEGACY_DIR in cfg: mycfg[KEYNAME_DIR] = cfg[KEYNAME_LEGACY_DIR] fillup = ( (KEYNAME_CONFIGS, [], list), (KEYNAME_DIR, DEF_DIR, six.string_types), (KEYNAME_FILENAME, DEF_FILENAME, six.string_types), (KEYNAME_RELOAD, DEF_RELOAD, six.string_types + (list,)), (KEYNAME_REMOTES, DEF_REMOTES, dict)) for key, default, vtypes in fillup: if key not in mycfg or not isinstance(mycfg[key], vtypes): mycfg[key] = default return mycfg def apply_rsyslog_changes(configs, def_fname, cfg_dir): # apply the changes in 'configs' to the paths in def_fname and cfg_dir # return a list of the files changed files = [] for cur_pos, ent in enumerate(configs): if isinstance(ent, dict): if "content" not in ent: LOG.warning("No 'content' entry in config entry %s", cur_pos + 1) continue content = ent['content'] filename = ent.get("filename", def_fname) else: content = ent filename = def_fname filename = filename.strip() if not filename: LOG.warning("Entry %s has an empty filename", cur_pos + 1) continue filename = os.path.join(cfg_dir, filename) # Truncate filename first time you see it omode = "ab" if filename not in files: omode = "wb" files.append(filename) try: endl = "" if not content.endswith("\n"): endl = "\n" util.write_file(filename, content + endl, omode=omode) except Exception: util.logexc(LOG, "Failed to write to %s", filename) return files def parse_remotes_line(line, name=None): try: data, comment = COMMENT_RE.split(line) comment = comment.strip() except ValueError: data, comment = (line, None) toks = data.strip().split() match = None if len(toks) == 1: host_port = data elif len(toks) == 2: match, host_port = toks else: raise ValueError("line had multiple spaces: %s" % data) toks = HOST_PORT_RE.match(host_port) if not toks: raise ValueError("Invalid host specification '%s'" % host_port) proto = toks.group('proto') addr = toks.group('addr') or toks.group('bracket_addr') port = toks.group('port') if addr.startswith("[") and not addr.endswith("]"): raise ValueError("host spec had invalid brackets: %s" % addr) if comment and not name: name = comment t = SyslogRemotesLine(name=name, match=match, proto=proto, addr=addr, port=port) t.validate() return t class SyslogRemotesLine(object): def __init__(self, name=None, match=None, proto=None, addr=None, port=None): if not match: match = "*.*" self.name = name self.match = match if not proto: proto = "udp" if proto == "@": proto = "udp" elif proto == "@@": proto = "tcp" self.proto = proto self.addr = addr if port: self.port = int(port) else: self.port = None def validate(self): if self.port: try: int(self.port) except ValueError: raise ValueError("port '%s' is not an integer" % self.port) if not self.addr: raise ValueError("address is required") def __repr__(self): return "[name=%s match=%s proto=%s address=%s port=%s]" % ( self.name, self.match, self.proto, self.addr, self.port ) def __str__(self): buf = self.match + " " if self.proto == "udp": buf += "@" elif self.proto == "tcp": buf += "@@" if ":" in self.addr: buf += "[" + self.addr + "]" else: buf += self.addr if self.port: buf += ":%s" % self.port if self.name: buf += " # %s" % self.name return buf def remotes_to_rsyslog_cfg(remotes, header=None, footer=None): if not remotes: return None lines = [] if header is not None: lines.append(header) for name, line in remotes.items(): if not line: continue try: lines.append(str(parse_remotes_line(line, name=name))) except ValueError as e: LOG.warning("failed loading remote %s: %s [%s]", name, line, e) if footer is not None: lines.append(footer) return '\n'.join(lines) + "\n" def handle(name, cfg, cloud, log, _args): if 'rsyslog' not in cfg: log.debug(("Skipping module named %s," " no 'rsyslog' key in configuration"), name) return mycfg = load_config(cfg) configs = mycfg[KEYNAME_CONFIGS] if mycfg[KEYNAME_REMOTES]: configs.append( remotes_to_rsyslog_cfg( mycfg[KEYNAME_REMOTES], header="# begin remotes", footer="# end remotes", )) if not mycfg['configs']: log.debug("Empty config rsyslog['configs'], nothing to do") return changes = apply_rsyslog_changes( configs=mycfg[KEYNAME_CONFIGS], def_fname=mycfg[KEYNAME_FILENAME], cfg_dir=mycfg[KEYNAME_DIR]) if not changes: log.debug("restart of syslog not necessary, no changes made") return try: restarted = reload_syslog( command=mycfg[KEYNAME_RELOAD], systemd=cloud.distro.uses_systemd()), except util.ProcessExecutionError as e: restarted = False log.warning("Failed to reload syslog", e) if restarted: # This only needs to run if we *actually* restarted # syslog above. cloud.cycle_logging() # This should now use rsyslog if # the logging was setup to use it... log.debug("%s configured %s files", name, changes) # vi: ts=4 expandtab syntax=python
Upload File
Create Folder