salt/tests/pytests/unit/grains
Benjamin Drung ca20bb320d Fix OS grain inconsistencies if lsb-release is installed or not
Most Linux distributions ship an os-release file by default. Some do not
ship lsb-release information, but they can be installed afterwards.
Installing/Removing lsb-release can lead to different OS grain values.

| OS               | grain      | without lsb-release              | with lsb-release |
|------------------|------------|----------------------------------|------------------|
| AlmaLinux 8      | oscodename | AlmaLinux 8.5 (Arctic Sphynx)    | ArcticSphynx     |
| Astra CE         | os         | Astra (Orel)                     | AstraLinuxCE     |
| Astra CE         | os_family  | Astra (Orel)                     | Debian           |
| Astra CE         | osfullname | Astra Linux (Orel)               | AstraLinuxCE     |
| Astra CE 2.12.40 | osfinger   | Astra Linux (Orel)-2             | AstraLinuxCE-2   |
| Debian           | osfullname | Debian GNU/Linux                 | Debian           |
| Mendel           | osfullname | Mendel GNU/Linux                 | Mendel           |
| Mendel 10        | osfinger   | Mendel GNU/Linux-10              | Mendel-10        |
| Mint             | osfullname | Linux Mint                       | Linuxmint        |
| Mint 20.3        | osfinger   | Linuxmint-20                     | Linux Mint-20    |
| Pop              | osfullname | Pop!_OS                          | Pop              |
| Pop 20.04        | osfinger   | Pop!_OS-20                       | Pop-20           |
| Rocky            | osfullname | Rocky Linux                      | Rocky            |
| Rocky 8          | osfinger   | Rocky Linux-8                    | Rocky-8          |
| Rocky 8          | oscodename | Rocky Linux 8.5 (Green Obsidian) | GreenObsidian    |

The current code that determines the OS grains on Linux is a mess: First
lsb-release is queried. If that fails, fall back to read os-release and
parse some `/etc/*-release` files. Then query `_linux_distribution` and
use a mixtures of those for the OS grains. `_linux_distribution` queries
the Python `distro` library. `distro` queries the os-release file,
lsb-release, and then `/etc/*-release`.

Rewrite the code that determines the OS grains on Linux. Solely rely on
the data provided by the os-release file. To not cause regressions, only
switch the distribution that has been tested. All other distributions
will use the legacy code (which was moved to
`_legacy_linux_distribution_data`).

The new code derives the `os_family` grain from the `ID_LIKE` field from
os-release (see https://github.com/saltstack/salt/issues/59061 for this
feature request). To enable this feature, the new code needs to be used
by default (and not just for selected distributions).

This commit introduces a few changes to the OS grains:

* AlmaLinux and Rocky Linux extract the codename from the `VERSION` field
  now instead of using the full `PRETTY_NAME`.
* Mendel uses now `Mendel GNU/Linux` as `osfullname` and correctly
  extracts the `osrelease` from `PRETTY_NAME`.
* Pop!_OS changes the `osfullname` from `Pop` to `Pop!_OS`.
* Astra Linux changes the `osfullname` from `AstraLinuxCE` to
  `Astra Linux (Orel)` and `AstraLinuxSE` to `Astra Linux (Smolensk)`
  respectively.

Fixes https://github.com/saltstack/salt/issues/61618
Signed-off-by: Benjamin Drung <benjamin.drung@ionos.com>
2022-11-30 13:12:14 -07:00
..
os-releases grains: Use platform.freedesktop_os_release 2022-09-30 12:52:40 -06:00
solaris Migrated test_core.py to pytest 2021-07-20 19:51:11 -07:00
__init__.py Migrated test_core.py to pytest 2021-07-20 19:51:11 -07:00
test_core.py Fix OS grain inconsistencies if lsb-release is installed or not 2022-11-30 13:12:14 -07:00
test_disks.py move grains unit tests to pytest 2022-09-22 09:19:23 -06:00
test_esxi.py move grains unit tests to pytest 2022-09-22 09:19:23 -06:00
test_fibre_channel.py move grains unit tests to pytest 2022-09-22 09:19:23 -06:00
test_iscsi.py move grains unit tests to pytest 2022-09-22 09:19:23 -06:00
test_lvm.py move grains unit tests to pytest 2022-09-22 09:19:23 -06:00
test_mdata.py move grains unit tests to pytest 2022-09-22 09:19:23 -06:00
test_metadata_gce.py Merge branch 'master' into fix/simplify_gce_grains 2022-10-05 12:06:51 -07:00
test_napalm.py fix patcher being left on 2022-09-22 09:19:23 -06:00
test_nvme.py move grains unit tests to pytest 2022-09-22 09:19:23 -06:00
test_pending_reboot.py move grains unit tests to pytest 2022-09-22 09:19:23 -06:00
test_smartos.py move grains unit tests to pytest 2022-09-22 09:19:23 -06:00