Skip to content

Commit ec010cb

Browse files
committed
Set virtual grain for docker using systemd and virt-what
1 parent cd62b3a commit ec010cb

File tree

3 files changed

+61
-0
lines changed

3 files changed

+61
-0
lines changed

changelog/67905.fixed.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Set virtual grain for docker using systemd and virt-what

salt/grains/core.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -933,6 +933,10 @@ def _virtual(osdata):
933933
grains["virtual"] = "container"
934934
grains["virtual_subtype"] = "Podman"
935935
break
936+
elif "docker" in output:
937+
grains["virtual"] = "container"
938+
grains["virtual_subtype"] = "Docker"
939+
break
936940
elif "amazon" in output:
937941
grains["virtual"] = "Nitro"
938942
grains["virtual_subtype"] = "Amazon EC2"
@@ -946,6 +950,10 @@ def _virtual(osdata):
946950
grains["virtual"] = "container"
947951
grains["virtual_subtype"] = "LXC"
948952
break
953+
elif "docker" in line:
954+
grains["virtual"] = "container"
955+
grains["virtual_subtype"] = "Docker"
956+
break
949957
elif "vmware" in line:
950958
grains["virtual"] = "VMware"
951959
break

tests/pytests/unit/grains/test_core.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1878,6 +1878,58 @@ def _which_side_effect(path):
18781878
assert ret["virtual_subtype"] == "Podman"
18791879

18801880

1881+
@pytest.mark.skip_on_windows
1882+
def test_docker_virtual_with_systemd_detect_virt():
1883+
"""
1884+
Test if virtual grains are parsed correctly in Docker using systemd-detect-virt.
1885+
"""
1886+
1887+
def _which_side_effect(path):
1888+
if path == "systemd-detect-virt":
1889+
return "/usr/bin/systemd-detect-virt"
1890+
return None
1891+
1892+
with patch.object(
1893+
salt.utils.platform, "is_windows", MagicMock(return_value=False)
1894+
), patch.object(
1895+
salt.utils.path,
1896+
"which",
1897+
MagicMock(return_value=True, side_effect=_which_side_effect),
1898+
), patch.dict(
1899+
core.__salt__,
1900+
{
1901+
"cmd.run_all": MagicMock(
1902+
return_value={"pid": 78, "retcode": 0, "stderr": "", "stdout": "docker"}
1903+
)
1904+
},
1905+
):
1906+
osdata = {"kernel": "test"}
1907+
ret = core._virtual(osdata)
1908+
assert ret["virtual"] == "container"
1909+
assert ret["virtual_subtype"] == "Docker"
1910+
1911+
1912+
@pytest.mark.skip_on_windows
1913+
def test_docker_virtual_with_virt_what():
1914+
"""
1915+
Test if virtual grains are parsed correctly in Docker using virt-what.
1916+
"""
1917+
with patch.object(
1918+
salt.utils.platform, "is_windows", MagicMock(return_value=False)
1919+
), patch.object(salt.utils.path, "which", MagicMock(return_value=True)), patch.dict(
1920+
core.__salt__,
1921+
{
1922+
"cmd.run_all": MagicMock(
1923+
return_value={"pid": 78, "retcode": 0, "stderr": "", "stdout": "docker"}
1924+
)
1925+
},
1926+
):
1927+
osdata = {"kernel": "test"}
1928+
ret = core._virtual(osdata)
1929+
assert ret["virtual"] == "container"
1930+
assert ret["virtual_subtype"] == "Docker"
1931+
1932+
18811933
@pytest.mark.skip_on_windows
18821934
def test_container_inside_virtual_machine():
18831935
"""

0 commit comments

Comments
 (0)