|
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- # -*- coding: utf-8 -*-
- """
- Salt engine for intercepting state jobs and forwarding to the Architect
- service.
- """
-
- # Import python libs
- from __future__ import absolute_import
- import json
- import logging
-
- # Import salt libs
- import salt.utils.event
- import salt.utils.http
-
- log = logging.getLogger(__name__)
-
-
- def start(project='default',
- host='127.0.0.1',
- port=8181,
- username=None,
- password=None):
- '''
- Listen to state jobs events and forward Salt states
- '''
- url = "{}://{}:{}/salt/{}/event/{}".format('http',
- host,
- port,
- 'v1',
- project)
- target_functions = ['state.sls', 'state.apply', 'state.highstate']
-
- if __opts__['__role'] == 'master':
- event_bus = salt.utils.event.get_master_event(__opts__,
- __opts__['sock_dir'],
- listen=True)
- else:
- event_bus = salt.utils.event.get_event(
- 'minion',
- transport=__opts__['transport'],
- opts=__opts__,
- sock_dir=__opts__['sock_dir'],
- listen=True)
-
- log.info('Salt Architect engine initialised')
-
- while True:
- event = event_bus.get_event()
- if event and event.get('fun', None) in target_functions:
- is_test_run = 'test=true' in [arg.lower() for arg in event.get('fun_args', [])]
- if not is_test_run:
- data = salt.utils.http.query(url=url,
- method='POST',
- decode=False,
- data=json.dumps(event))
- if 'OK' in data.get('body', ''):
- log.info("Architect Engine request to '{}'"
- " was successful".format(url))
- else:
- log.warning("Problem with Architect Engine"
- " request to '{}' ({})".format(url, data))
|