salt/tests/pytests
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
..
functional Replace lsb_distrib_codename by oscodename 2022-11-30 13:12:14 -07:00
integration Merge pull request #63118 from s0undt3ch/hotfix/golden-images 2022-11-29 15:03:35 -08:00
scenarios Merge branch 'master' into hotfix/fix-62829-mac-tests 2022-10-18 12:09:50 -04:00
unit Fix OS grain inconsistencies if lsb-release is installed or not 2022-11-30 13:12:14 -07:00
__init__.py Pyupgrade and drop six 2021-07-06 09:04:28 -04:00
conftest.py Merge tag 'v3005.1' into merge-forward/3005.1 2022-10-04 20:52:23 -04:00
README.md

New Test Suite

Welcome to the new test suite for Salt!

Any test under this directory shall be written exploring the full capabilities of PyTest. That means, no occurrences of the TestCase class shall be used, neither our customizations to it.

Purpose

While PyTest can happily run unittest tests(withough taking advantage of most of PyTest's strengths), this new path in the tests directory was created to provide a clear separation between the two approaches to writing tests. Some(hopefully all) of the existing unittest tests might get ported to PyTest's style of writing tests, new tests should be added under this directory tree, and, in the long run, this directoy shall become the top level tests directoy.