# Salt Engines

Added in version 2015.8.0.

Salt Engines are long-running, external system processes that leverage Salt.

- Engines have access to Salt configuration, execution modules, and runners (`__opts__`, `__salt__`, and `__runners__`).

- Engines are executed in a separate process that is monitored by Salt. If a Salt engine stops, it is restarted automatically.

- Engines can run on the Salt master and on Salt minions.

Salt engines enhance and replace the external processes functionality.

## Configuration

Salt engines are configured under an `engines` top-level section in your Salt master or Salt minion configuration. Provide a list of engines and parameters under this section.

    engines:
      - logstash:
          host: log.my_network.com
          port: 5959
          proto: tcp

Added in version 3000.

Multiple copies of a particular Salt engine can be configured by including the `engine_module` parameter in the engine configuration.

    engines:
      - production_logstash:
          host: production_log.my_network.com
          port: 5959
          proto: tcp
          engine_module: logstash
      - develop_logstash:
          host: develop_log.my_network.com
          port: 5959
          proto: tcp
          engine_module: logstash

Salt engines must be in the Salt path, or you can add the `engines_dirs` option in your Salt master configuration with a list of directories under which Salt attempts to find Salt engines. This option should be formatted as a list of directories to search, such as:

    engines_dirs:
      - /home/bob/engines

## Writing an Engine

An example Salt engine, salt/engines/test.py, is available in the Salt source. To develop an engine, the only requirement is that your module implement the `start()` function.