text: # -*- coding: utf-8 -*-
  """
      Beacon to manage and report the status of
      one or more salt proxy processes
  
      .. versionadded:: 2015.8.3
  """
  
  # Import python libs
  from __future__ import absolute_import, unicode_literals
  
  import logging
  
  from salt.ext.six.moves import map
  
  log = logging.getLogger(__name__)
  
  
  def _run_proxy_processes(proxies):
      """
      Iterate over a list of proxy
      names and restart any that
      aren't running
      """
      ret = []
      for proxy in proxies:
          result = {}
          if not __salt__["salt_proxy.is_running"](proxy)["result"]:
              __salt__["salt_proxy.configure_proxy"](proxy, start=True)
              result[proxy] = "Proxy {0} was started".format(proxy)
          else:
              msg = "Proxy {0} is already running".format(proxy)
              result[proxy] = msg
              log.debug(msg)
          ret.append(result)
      return ret
  
  
  def validate(config):
      """
      Validate the beacon configuration
      """
      # Configuration for adb beacon should be a dictionary with states array
      if not isinstance(config, list):
          log.info("Configuration for salt_proxy beacon must be a list.")
          return False, ("Configuration for salt_proxy beacon must be a list.")
  
      else:
          _config = {}
          list(map(_config.update, config))
  
          if "proxies" not in _config:
              return False, ("Configuration for salt_proxy beacon requires proxies.")
          else:
              if not isinstance(_config["proxies"], dict):
                  return False, ("Proxies for salt_proxy beacon must be a dictionary.")
      return True, "Valid beacon configuration"
  
  
  def beacon(config):
      """
      Handle configured proxies
  
      .. code-block:: yaml
  
          beacons:
            salt_proxy:
              - proxies:
                  p8000: {}
                  p8001: {}
      """
      log.trace("salt proxy beacon called")
  
      _config = {}
      list(map(_config.update, config))
  
      return _run_proxy_processes(_config["proxies"])
  