Mini Shell
"""
Watch for pkgs that have upgrades, then fire an event.
.. versionadded:: 2016.3.0
"""
import logging
__virtualname__ = "pkg"
log = logging.getLogger(__name__)
def __virtual__():
"""
Only load if strace is installed
"""
if "pkg.upgrade_available" in __salt__:
return __virtualname__
else:
err_msg = "pkg.upgrade_available is missing."
log.error("Unable to load %s beacon: %s", __virtualname__, err_msg)
return False, err_msg
def validate(config):
"""
Validate the beacon configuration
"""
# Configuration for pkg beacon should be a list
if not isinstance(config, list):
return False, "Configuration for pkg beacon must be a list."
# Configuration for pkg beacon should contain pkgs
pkgs_found = False
pkgs_not_list = False
for config_item in config:
if "pkgs" in config_item:
pkgs_found = True
if isinstance(config_item["pkgs"], list):
pkgs_not_list = True
if not pkgs_found or not pkgs_not_list:
return False, "Configuration for pkg beacon requires list of pkgs."
return True, "Valid beacon configuration"
def beacon(config):
"""
Check if installed packages are the latest versions
and fire an event for those that have upgrades.
.. code-block:: yaml
beacons:
pkg:
- pkgs:
- zsh
- apache2
- refresh: True
"""
if "beacon.pkg" not in __context__:
__context__["beacon.pkg"] = {}
ret = []
_refresh = False
pkgs = []
for config_item in config:
if "pkgs" in config_item:
pkgs += config_item["pkgs"]
if "refresh" in config and config["refresh"]:
_refresh = True
for pkg in pkgs:
if pkg not in __context__["beacon.pkg"]:
__context__["beacon.pkg"][pkg] = None
status = __context__["beacon.pkg"][pkg]
# Status is None, so skip the first pass
_installed = __salt__["pkg.version"](pkg, use_context=False)
if _installed:
version = _installed
__context__["beacon.pkg"][pkg] = "installed"
_latest = __salt__["pkg.latest_version"](pkg, refresh=_refresh)
if _latest:
version = _latest
__context__["beacon.pkg"][pkg] = "upgrade"
else:
__context__["beacon.pkg"][pkg] = "not-installed"
version = None
if status:
if __context__["beacon.pkg"][pkg] != status:
_pkg = {
"pkg": pkg,
"version": version,
"status": __context__["beacon.pkg"][pkg],
}
ret.append(_pkg)
return ret
Zerion Mini Shell 1.0