How to use the command 'salt' (with examples)
Salt is a command-line tool that allows users to execute commands and assert state on remote salt minions. It provides a convenient way to manage and control multiple systems remotely. This article will illustrate some use cases of the ‘salt’ command, along with their respective code, motivation, explanation of arguments, and example output.
Use case 1: List connected minions
Code:
salt '*' test.ping
Motivation: This use case is useful to quickly check the connectivity status of all connected minions. By executing the ’test.ping’ command on all minions, we can determine which minions are online and reachable.
Explanation:
- ‘*’ is the target argument, which denotes that the command should be executed on all minions.
- ’test.ping’ is the state function to be executed, which checks the connectivity status of the minions.
Example output:
minion1.example.com:
True
minion2.example.com:
True
minion3.example.com:
True
...
Use case 2: Execute a highstate on all connected minions
Code:
salt '*' state.highstate
Motivation: The highstate execution is a powerful feature provided by Salt. It allows users to enforce a desired state on minions, applying all the necessary configurations specified in the Salt formulas. This use case executes a highstate on all connected minions to ensure their configurations are up to date.
Explanation:
- ‘*’ is the target argument, indicating that the highstate should be executed on all minions.
- ‘state.highstate’ is the state function that triggers the highstate execution.
Example output:
minion1.example.com:
----------
ID: install_dependencies
Function: pkg.installed
Name: apache2
Result: True
Comment: Package apache2 is already installed
Started: 14:23:01.824780
Duration: 1623.089 ms
Changes:
----------
ID: enable_service
Function: service.enabled
Name: apache2
Result: True
Comment: Service apache2 is enabled
Started: 14:23:03.448282
Duration: 162.338 ms
Changes:
...
## Use case 3: Upgrade packages using the OS package manager on a subset of minions
Code:
```shell
salt '*.example.com' pkg.upgrade
Motivation: When managing a large number of minions, it is often necessary to upgrade packages on selective minions. This use case demonstrates how to upgrade packages using the OS package manager (e.g., apt, yum, brew) by targeting minions based on a pattern in their hostname.
Explanation:
- ‘*.example.com’ is the target argument, which uses a glob pattern to match all minions with hostnames ending in ‘.example.com’.
- ‘pkg.upgrade’ is the state function that triggers the package upgrade process.
Example output:
minion1.example.com:
----------
ID: upgrade_packages
Function: pkg.uptodate
Result: False
Comment: The following packages are set to be upgraded: package1, package2, package3
Please run 'pkg.upgrade' to perform the upgrade.
Started: 14:45:01.824780
Duration: 10.317 ms
Changes:
----------
Summary for minion1.example.com
------------
Succeeded: 0
Failed: 1
...
## Use case 4: Execute an arbitrary command on a particular minion
Code:
```shell
salt 'minion_id' cmd.run "ls"
Motivation: Sometimes, it is necessary to execute custom commands on a specific minion to perform tasks or gather information. This use case demonstrates how to run an arbitrary command on a particular minion identified by its minion ID.
Explanation:
- ‘minion_id’ is the target argument, which specifies the minion ID where the command should be executed.
- ‘cmd.run’ is the state function that allows the execution of arbitrary commands.
- “ls” is the command to be executed on the specified minion.
Example output:
minion_id:
folder1
folder2
file1.txt
file2.txt
...
Conclusion:
The ‘salt’ command is a versatile tool for managing and controlling remote salt minions. The use cases illustrated in this article demonstrate the flexibility and power offered by Salt. Whether it is checking minion connectivity, enforcing desired states, performing package upgrades, or executing arbitrary commands, Salt provides a convenient and efficient way to handle various tasks in a distributed computing environment.