# Remote Execution

Running pre-defined or arbitrary commands on remote hosts, also known as remote execution, is the core function of Salt. The following links explore modules and returners, which are two key elements of remote execution.

Salt Execution Modules

Salt execution modules are called by the remote execution system to perform a wide variety of tasks. These modules provide functionality such as installing packages, restarting a service, running a remote command, transferring files, and so on.

> Full list of execution modules

>   Contains: a list of core modules that ship with Salt.

> Writing execution modules

>   Contains: a guide on how to write Salt modules.

- Remote execution tutorial
  - Order your minions around
    - target
    - function
    - arguments
- Running Commands on Salt Minions
  - Using the Salt Command
    - Defining the Target Minions
    - More Powerful Targets
    - Calling the Function
      - Finding available minion functions
    - Compound Command Execution
  - CLI Completion
- Writing Execution Modules
  - Modules Are Easy to Write!
  - Zip Archives as Modules
    - Creating a Zip Archive Module
  - Cross Calling Execution Modules
  - Calling Execution Modules on the Salt Master
  - Preloaded Execution Module Data
    - Grains Data
    - Module Configuration
    - `__init__` Function
  - Strings and Unicode
  - Outputter Configuration
  - Virtual Modules
  - `__virtual__` Function
    - Returning Error Information from `__virtual__`
    - Examples
    - Overriding Virtual Module Providers
    - Logging Restrictions
  - `__virtualname__`
  - Documentation
    - Adding Documentation to Salt Modules
    - Add Execution Module Metadata
  - Log Output
  - Aliasing Functions
  - Private Functions
    - Objects Loaded Into the Salt Minion
    - Objects NOT Loaded into the Salt Minion
  - Useful Decorators for Modules
    - Depends Decorator
- Executors
  - Writing Salt Executors