| # -*- coding: utf-8 -*- |
| ''' |
| Salt modules to work with the Architect service. |
| ''' |
| |
| # Import python libs |
| from __future__ import absolute_import |
| import yaml |
| import logging |
| from architect_client.libarchitect import ArchitectClient |
| |
| __virtualname__ = 'architect' |
| |
| logger = logging.getLogger(__name__) |
| |
| |
| def __virtual__(): |
| return __virtualname__ |
| |
| |
| def _client(): |
| return ArchitectClient() |
| |
| |
| def inventory(): |
| ''' |
| Get the Architect metadata inventory |
| |
| CLI Examples: |
| |
| .. code-block:: bash |
| |
| salt-call architect.inventory |
| ''' |
| data = yaml.load(_client().get_data()) |
| |
| return data |
| |
| |
| def node_pillar(name): |
| ''' |
| Get the Architect node pillar for given Salt master. |
| |
| CLI Examples: |
| |
| .. code-block:: bash |
| |
| salt-call architect.node_pillar node.domain |
| ''' |
| |
| data = yaml.load(_client().get_data(name)) |
| |
| return { |
| name: data |
| } |
| |
| |
| def node_classify(name, data={}): |
| ''' |
| CLassify node by given dictionary of parameters |
| |
| CLI Examples: |
| |
| .. code-block:: bash |
| |
| salt-call architect.node_classify minion.net {'param1': 'value2'} |
| ''' |
| output = _client().classify_node({ |
| 'name': name, |
| 'data': data |
| }) |
| return output |
| |
| |
| def node_info(): |
| ''' |
| Get Salt minion metadata and forward it to the Architect master. |
| |
| CLI Examples: |
| |
| .. code-block:: bash |
| |
| salt-call architect.minion_info |
| ''' |
| data = { |
| 'pillar': __salt__['pillar.data'](), |
| 'grain': __salt__['grains.items'](), |
| 'lowstate': __salt__['state.show_lowstate'](), |
| } |
| return data |