Updated Arch engine and modules
Change-Id: I6f206ad2af8cc2664c1f1fa315833d9502c34851
diff --git a/_engines/architect.py b/_engines/architect.py
index 4096a73..a6d6bed 100644
--- a/_engines/architect.py
+++ b/_engines/architect.py
@@ -1,19 +1,17 @@
# -*- coding: utf-8 -*-
"""
-Salt engine for intercepting state jobs and forwarding to the Architect
-service.
+Salt engine for intercepting state jobs and forwarding to the Architect.
"""
# Import python libs
from __future__ import absolute_import
-import json
import logging
+from architect_client.libarchitect import ArchitectClient
# Import salt libs
import salt.utils.event
-import salt.utils.http
-log = logging.getLogger(__name__)
+logger = logging.getLogger(__name__)
def start(project='default',
@@ -22,14 +20,11 @@
username=None,
password=None):
'''
- Listen to state jobs events and forward Salt states
+ Listen to state jobs events and forward state functions and node info
'''
- url = "{}://{}:{}/salt/{}/event/{}".format('http',
- host,
- port,
- 'v1',
- project)
- target_functions = ['state.sls', 'state.apply', 'state.highstate']
+ state_functions = ['state.sls', 'state.apply', 'state.highstate']
+ model_functions = ['architect.node_info']
+ class_tag = 'architect/minion/classify'
if __opts__['__role'] == 'master':
event_bus = salt.utils.event.get_master_event(__opts__,
@@ -43,20 +38,21 @@
sock_dir=__opts__['sock_dir'],
listen=True)
- log.info('Salt Architect engine initialised')
+ logger.info('Architect Engine initialised')
while True:
event = event_bus.get_event()
- if event and event.get('fun', None) in target_functions:
+ if event and event.get('fun', None) in state_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))
+ output = ArchitectClient().push_event(event)
+ logger.info("Sent Architect state function {}".format(output))
+ if event and event.get('fun', None) in model_functions:
+ output = ArchitectClient().push_node_info({event['id']: event['return']})
+ logger.info("Sent Architect node info function {}".format(output))
+ if event and event.get('tag', None) == class_tag:
+ output = ArchitectClient().classify_node({
+ 'name': event['id'],
+ 'data': event['data']
+ })
+ logger.info("Sent Architect node classification {}".format(output))