Salt runs on top of other systems—for example, the operating system. But even the operating system runs on top of the hardware. These systems contain a great deal of information that Salt can leverage. Salt’s name comes from the fact that there are little bits of information like grains of salt.
Grains are calculated when the minion starts. Therefore, they are considered static pieces of data. This is great for information like the version of the operating system or the number of cores in the CPU. This data doesn’t change often, and when it does, it likely requires a restart of one of the underlying systems, thus a restart of the minion as well.
This data is all generated on the minion itself. It is then presented to the master for various targeting operations. The Salt minion will have a number of grains set up by default. You can add to them by including a static list or by writing some Python code.
Let’s look at some of the default grains already configured.
We can simply list all of these grains on a minion with
[vagrant@master ~]$ sudo salt master.example grains.ls master.example: - SSDs - cpu_flags - cpu_model - cpuarch - domain - fqdn - fqdn_ip4 - fqdn_ip6 - gpus - host - hwaddr_interfaces - id - ip4_interfaces - ip6_interfaces - ip_interfaces - ipv4 - ipv6 - kernel - kernelrelease - locale_info - localhost - lsb_distrib_codename - lsb_distrib_id - lsb_distrib_release ...