salt/doc/topics/master_tops/index.rst
Pedro Algarvio 5e72e192f9 Blacken docs
2020-06-09 03:37:02 -07:00

2.5 KiB

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 highstate <running-highstate> run on the master.

The old external_nodes option has been removed. The master tops system provides a pluggable and extendable replacement for it, allowing for multiple different subsystems to provide top file data.

Using the new master_tops option is simple:

master_tops:
  ext_nodes: cobbler-external-nodes

for Cobbler <salt.tops.cobbler> or:

master_tops:
  reclass:
    inventory_base_uri: /etc/reclass
    classes_uri: roles

for Reclass <salt.tops.reclass_adapter>.

master_tops:
  varstack: /path/to/the/config/file/varstack.yaml

for Varstack <salt.tops.varstack>.

It's also possible to create custom master_tops modules. Simply place them into salt://_tops in the Salt fileserver and use the saltutil.sync_tops <salt.runners.saltutil.sync_tops> runner to sync them. If this runner function is not available, they can manually be placed into extmods/tops, relative to the master cachedir (in most cases the full path will be /var/cache/salt/master/extmods/tops).

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 bare-bones example:

/etc/salt/master:

master_tops:
  customtop: True

customtop.py: (custom master_tops module)

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:

$ salt minion state.show_top

minion
    ----------
    base:
      - test

Note

If a master_tops module returns top file <states-top> data for a given minion, it will be added to the states configured in the top file. It will not replace it altogether. The 2018.3.0 release adds additional functionality allowing a minion to treat master_tops as the single source of truth, irrespective of the top file.