================== Master Tops System ================== In 0.10.4 the `external_nodes` system was upgraded to allow for modular subsystems to be used to generate the top file data for a :ref:`highstate ` run on the master. The old `external_nodes` option has been removed. The master tops system contains a number of subsystems that are loaded via the Salt loader interfaces like modules, states, returners, runners, etc. Using the new `master_tops` option is simple: .. code-block:: yaml master_tops: ext_nodes: cobbler-external-nodes for :doc:`Cobbler <../../ref/tops/all/salt.tops.cobbler>` or: .. code-block:: yaml master_tops: reclass: inventory_base_uri: /etc/reclass classes_uri: roles for :doc:`Reclass <../../ref/tops/all/salt.tops.reclass_adapter>`. It's also possible to create custom master_tops modules. These modules must go in a subdirectory called `tops` in the `extension_modules` directory. The `extension_modules` directory is not defined by default (the default `/srv/salt/_modules` will NOT work as of this release) Custom tops modules are written like any other execution module, see the source for the two modules above for examples of fully functional ones. Below is a degenerate example: /etc/salt/master: .. code-block:: yaml extension_modules: /srv/salt/modules master_tops: customtop: True /srv/salt/modules/tops/customtop.py: .. code-block:: python import logging import sys # Define the module's virtual name __virtualname__ = 'customtop' log = logging.getLogger(__name__) def __virtual__(): return __virtualname__ def top(**kwargs): log.debug('Calling top in customtop') return {'base': ['test']} `salt minion state.show_top` should then display something like: .. code-block:: bash $ salt minion state.show_top minion ---------- base: - test