File: //usr/lib/python2.7/site-packages/salt/beacons/salt_proxy.py
# -*- 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'])