# This file is part of cloud-init. See LICENSE file for license information. import logging import os import time from cloudinit import helpers, util LOG = logging.getLogger(__name__) WARNINGS = { "non_ec2_md": """ This system is using the EC2 Metadata Service, but does not appear to be running on Amazon EC2 or one of cloud-init's known platforms that provide a EC2 Metadata service. In the future, cloud-init may stop reading metadata from the EC2 Metadata Service unless the platform can be identified. If you are seeing this message, please file a bug against cloud-init at https://github.com/canonical/cloud-init/issues Make sure to include the cloud provider your instance is running on. For more information see https://github.com/canonical/cloud-init/issues/2795 After you have filed a bug, you can disable this warning by launching your instance with the cloud-config below, or putting that content into /etc/cloud/cloud.cfg.d/99-ec2-datasource.cfg #cloud-config datasource: Ec2: strict_id: false""", "dsid_missing_source": """ A new feature in cloud-init identified possible datasources for this system as: {dslist} However, the datasource used was: {source} In the future, cloud-init will only attempt to use datasources that are identified or specifically configured. For more information see https://bugs.launchpad.net/bugs/1669675 If you are seeing this message, please file a bug against cloud-init at https://github.com/canonical/cloud-init/issues Make sure to include the cloud provider your instance is running on. After you have filed a bug, you can disable this warning by launching your instance with the cloud-config below, or putting that content into /etc/cloud/cloud.cfg.d/99-warnings.cfg #cloud-config warnings: dsid_missing_source: off""", } def _get_warn_dir(cfg): paths = helpers.Paths( path_cfgs=cfg.get("system_info", {}).get("paths", {}) ) return paths.get_ipath_cur("warnings") def _load_warn_cfg(cfg, name, mode=True, sleep=None): # parse cfg['warnings']['name'] returning boolean, sleep # expected value is form of: # (on|off|true|false|sleep)[,sleeptime] # boolean True == on, False == off default = (mode, sleep) if not cfg or not isinstance(cfg, dict): return default ncfg = util.get_cfg_by_path(cfg, ("warnings", name)) if ncfg is None: return default if ncfg in ("on", "true", True): return True, None if ncfg in ("off", "false", False): return False, None mode, _, csleep = ncfg.partition(",") if mode != "sleep": return default if csleep: try: sleep = int(csleep) except ValueError: return default return True, sleep def show_warning(name, cfg=None, sleep=None, mode=True, **kwargs): # kwargs are used for .format of the message. # sleep and mode are default values used if # cfg['warnings']['name'] is not present. if cfg is None: cfg = {} mode, sleep = _load_warn_cfg(cfg, name, mode=mode, sleep=sleep) if not mode: return msg = WARNINGS[name].format(**kwargs) msgwidth = 70 linewidth = msgwidth + 4 fmt = "# %%-%ds #" % msgwidth topline = "*" * linewidth + "\n" fmtlines = [] for line in msg.strip("\n").splitlines(): fmtlines.append(fmt % line) closeline = topline if sleep: sleepmsg = " [sleeping for %d seconds] " % sleep closeline = sleepmsg.center(linewidth, "*") + "\n" util.write_file( os.path.join(_get_warn_dir(cfg), name), topline + "\n".join(fmtlines) + "\n" + topline, ) LOG.warning("%s%s\n%s", topline, "\n".join(fmtlines), closeline) if sleep: LOG.debug("sleeping %d seconds for warning '%s'", sleep, name) time.sleep(sleep)
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 | 7.05 KB | 0644 |
|
atomic_helper.py | File | 2.45 KB | 0644 |
|
cloud.py | File | 3.22 KB | 0644 |
|
dmi.py | File | 6.77 KB | 0644 |
|
event.py | File | 2 KB | 0644 |
|
features.py | File | 3.38 KB | 0644 |
|
gpg.py | File | 4.28 KB | 0644 |
|
helpers.py | File | 16.41 KB | 0644 |
|
importer.py | File | 2.43 KB | 0644 |
|
log.py | File | 5.47 KB | 0644 |
|
netinfo.py | File | 22.97 KB | 0644 |
|
persistence.py | File | 2.52 KB | 0644 |
|
registry.py | File | 1022 B | 0644 |
|
safeyaml.py | File | 10.28 KB | 0644 |
|
settings.py | File | 2.02 KB | 0644 |
|
signal_handler.py | File | 1.74 KB | 0644 |
|
simpletable.py | File | 1.93 KB | 0644 |
|
ssh_util.py | File | 22.28 KB | 0644 |
|
stages.py | File | 38.88 KB | 0644 |
|
subp.py | File | 13.23 KB | 0644 |
|
temp_utils.py | File | 3.15 KB | 0644 |
|
templater.py | File | 5.95 KB | 0644 |
|
type_utils.py | File | 703 B | 0644 |
|
url_helper.py | File | 27.32 KB | 0644 |
|
user_data.py | File | 14.43 KB | 0644 |
|
util.py | File | 96.43 KB | 0644 |
|
version.py | File | 565 B | 0644 |
|
warnings.py | File | 3.76 KB | 0644 |
|