Blame cloudinit/warnings.py

Packit bc9a3a
# This file is part of cloud-init. See LICENSE file for license information.
Packit bc9a3a
Packit bc9a3a
from cloudinit import helpers
Packit bc9a3a
from cloudinit import log as logging
Packit bc9a3a
from cloudinit import util
Packit bc9a3a
Packit bc9a3a
import os
Packit bc9a3a
import time
Packit bc9a3a
Packit bc9a3a
LOG = logging.getLogger()
Packit bc9a3a
Packit bc9a3a
WARNINGS = {
Packit bc9a3a
    'non_ec2_md': """
Packit bc9a3a
This system is using the EC2 Metadata Service, but does not appear to
Packit bc9a3a
be running on Amazon EC2 or one of cloud-init's known platforms that
Packit bc9a3a
provide a EC2 Metadata service. In the future, cloud-init may stop
Packit bc9a3a
reading metadata from the EC2 Metadata Service unless the platform can
Packit bc9a3a
be identified.
Packit bc9a3a
Packit bc9a3a
If you are seeing this message, please file a bug against
Packit bc9a3a
cloud-init at
Packit bc9a3a
   https://bugs.launchpad.net/cloud-init/+filebug?field.tags=dsid
Packit bc9a3a
Make sure to include the cloud provider your instance is
Packit bc9a3a
running on.
Packit bc9a3a
Packit bc9a3a
For more information see
Packit bc9a3a
  https://bugs.launchpad.net/bugs/1660385
Packit bc9a3a
Packit bc9a3a
After you have filed a bug, you can disable this warning by
Packit bc9a3a
launching your instance with the cloud-config below, or
Packit bc9a3a
putting that content into
Packit bc9a3a
   /etc/cloud/cloud.cfg.d/99-ec2-datasource.cfg
Packit bc9a3a
Packit bc9a3a
#cloud-config
Packit bc9a3a
datasource:
Packit bc9a3a
 Ec2:
Packit bc9a3a
  strict_id: false""",
Packit bc9a3a
    'dsid_missing_source': """
Packit bc9a3a
A new feature in cloud-init identified possible datasources for
Packit bc9a3a
this system as:
Packit bc9a3a
  {dslist}
Packit bc9a3a
However, the datasource used was: {source}
Packit bc9a3a
Packit bc9a3a
In the future, cloud-init will only attempt to use datasources that
Packit bc9a3a
are identified or specifically configured.
Packit bc9a3a
For more information see
Packit bc9a3a
  https://bugs.launchpad.net/bugs/1669675
Packit bc9a3a
Packit bc9a3a
If you are seeing this message, please file a bug against
Packit bc9a3a
cloud-init at
Packit bc9a3a
   https://bugs.launchpad.net/cloud-init/+filebug?field.tags=dsid
Packit bc9a3a
Make sure to include the cloud provider your instance is
Packit bc9a3a
running on.
Packit bc9a3a
Packit bc9a3a
After you have filed a bug, you can disable this warning by launching
Packit bc9a3a
your instance with the cloud-config below, or putting that content
Packit bc9a3a
into /etc/cloud/cloud.cfg.d/99-warnings.cfg
Packit bc9a3a
Packit bc9a3a
#cloud-config
Packit bc9a3a
warnings:
Packit bc9a3a
  dsid_missing_source: off""",
Packit bc9a3a
}
Packit bc9a3a
Packit bc9a3a
Packit bc9a3a
def _get_warn_dir(cfg):
Packit bc9a3a
    paths = helpers.Paths(
Packit bc9a3a
        path_cfgs=cfg.get('system_info', {}).get('paths', {}))
Packit bc9a3a
    return paths.get_ipath_cur('warnings')
Packit bc9a3a
Packit bc9a3a
Packit bc9a3a
def _load_warn_cfg(cfg, name, mode=True, sleep=None):
Packit bc9a3a
    # parse cfg['warnings']['name'] returning boolean, sleep
Packit bc9a3a
    # expected value is form of:
Packit bc9a3a
    #   (on|off|true|false|sleep)[,sleeptime]
Packit bc9a3a
    # boolean True == on, False == off
Packit bc9a3a
    default = (mode, sleep)
Packit bc9a3a
    if not cfg or not isinstance(cfg, dict):
Packit bc9a3a
        return default
Packit bc9a3a
Packit bc9a3a
    ncfg = util.get_cfg_by_path(cfg, ('warnings', name))
Packit bc9a3a
    if ncfg is None:
Packit bc9a3a
        return default
Packit bc9a3a
Packit bc9a3a
    if ncfg in ("on", "true", True):
Packit bc9a3a
        return True, None
Packit bc9a3a
Packit bc9a3a
    if ncfg in ("off", "false", False):
Packit bc9a3a
        return False, None
Packit bc9a3a
Packit bc9a3a
    mode, _, csleep = ncfg.partition(",")
Packit bc9a3a
    if mode != "sleep":
Packit bc9a3a
        return default
Packit bc9a3a
Packit bc9a3a
    if csleep:
Packit bc9a3a
        try:
Packit bc9a3a
            sleep = int(csleep)
Packit bc9a3a
        except ValueError:
Packit bc9a3a
            return default
Packit bc9a3a
Packit bc9a3a
    return True, sleep
Packit bc9a3a
Packit bc9a3a
Packit bc9a3a
def show_warning(name, cfg=None, sleep=None, mode=True, **kwargs):
Packit bc9a3a
    # kwargs are used for .format of the message.
Packit bc9a3a
    # sleep and mode are default values used if
Packit bc9a3a
    #   cfg['warnings']['name'] is not present.
Packit bc9a3a
    if cfg is None:
Packit bc9a3a
        cfg = {}
Packit bc9a3a
Packit bc9a3a
    mode, sleep = _load_warn_cfg(cfg, name, mode=mode, sleep=sleep)
Packit bc9a3a
    if not mode:
Packit bc9a3a
        return
Packit bc9a3a
Packit bc9a3a
    msg = WARNINGS[name].format(**kwargs)
Packit bc9a3a
    msgwidth = 70
Packit bc9a3a
    linewidth = msgwidth + 4
Packit bc9a3a
Packit bc9a3a
    fmt = "# %%-%ds #" % msgwidth
Packit bc9a3a
    topline = "*" * linewidth + "\n"
Packit bc9a3a
    fmtlines = []
Packit bc9a3a
    for line in msg.strip("\n").splitlines():
Packit bc9a3a
        fmtlines.append(fmt % line)
Packit bc9a3a
Packit bc9a3a
    closeline = topline
Packit bc9a3a
    if sleep:
Packit bc9a3a
        sleepmsg = "  [sleeping for %d seconds]  " % sleep
Packit bc9a3a
        closeline = sleepmsg.center(linewidth, "*") + "\n"
Packit bc9a3a
Packit bc9a3a
    util.write_file(
Packit bc9a3a
        os.path.join(_get_warn_dir(cfg), name),
Packit bc9a3a
        topline + "\n".join(fmtlines) + "\n" + topline)
Packit bc9a3a
Packit bc9a3a
    LOG.warning("%s%s\n%s", topline, "\n".join(fmtlines), closeline)
Packit bc9a3a
Packit bc9a3a
    if sleep:
Packit bc9a3a
        LOG.debug("sleeping %d seconds for warning '%s'", sleep, name)
Packit bc9a3a
        time.sleep(sleep)
Packit bc9a3a
Packit bc9a3a
# vi: ts=4 expandtab