diff --git a/prometheuspvesd/cli.py b/prometheuspvesd/cli.py index d2dd899..b555041 100644 --- a/prometheuspvesd/cli.py +++ b/prometheuspvesd/cli.py @@ -174,7 +174,7 @@ class PrometheusSD: json.dump(output, tf, indent=4) shutil.move(temp_file.name, self.config.config["output_file"]) - chmod(self.config.config["output_file"], self.config.config["output_file_mode"]) + chmod(self.config.config["output_file"], int(self.config.config["output_file_mode"], 8)) def _terminate(self, signal, frame): self.log.sysexit_with_message("Terminating", code=0) diff --git a/prometheuspvesd/config.py b/prometheuspvesd/config.py index 5f83a76..973c0cd 100644 --- a/prometheuspvesd/config.py +++ b/prometheuspvesd/config.py @@ -71,7 +71,7 @@ class Config(): "type": environs.Env().str }, "output_file_mode": { - "default": "0644", + "default": "0640", "env": "OUTPUT_FILE_MODE", "file": True, "type": environs.Env().str diff --git a/prometheuspvesd/test/fixtures/fixtures.py b/prometheuspvesd/test/fixtures/fixtures.py index 2b4418a..4591b71 100644 --- a/prometheuspvesd/test/fixtures/fixtures.py +++ b/prometheuspvesd/test/fixtures/fixtures.py @@ -3,6 +3,9 @@ import environs import pytest +from prometheuspvesd.model import Host +from prometheuspvesd.model import HostList + @pytest.fixture def builtins(): @@ -293,3 +296,35 @@ def networks(): } }, ] + + +@pytest.fixture +def inventory(): + hostlist = HostList() + hostlist.add_host(Host("101", "host1", "129.168.0.1", False, "qemu")) + hostlist.add_host(Host("202", "host2", "129.168.0.2", False, "qemu")) + + return hostlist + + +@pytest.fixture +def labels(): + return [{ + "targets": ["host1"], + "labels": { + "__meta_pve_ipv4": "129.168.0.1", + "__meta_pve_ipv6": "False", + "__meta_pve_name": "host1", + "__meta_pve_type": "qemu", + "__meta_pve_vmid": "101" + } + }, { + "targets": ["host2"], + "labels": { + "__meta_pve_ipv4": "129.168.0.2", + "__meta_pve_ipv6": "False", + "__meta_pve_name": "host2", + "__meta_pve_type": "qemu", + "__meta_pve_vmid": "202" + } + }] diff --git a/prometheuspvesd/test/unit/test_cli.py b/prometheuspvesd/test/unit/test_cli.py index 6e267d2..b65775c 100644 --- a/prometheuspvesd/test/unit/test_cli.py +++ b/prometheuspvesd/test/unit/test_cli.py @@ -1,4 +1,6 @@ """Test CLI class.""" +import json + import pytest from proxmoxer import ProxmoxAPI @@ -66,3 +68,19 @@ def test_cli_api_error(mocker, builtins, capsys): stdout, stderr = capsys.readouterr() assert "Proxmoxer API error: Dummy API Exception" in stderr assert e.value.code == 1 + + +def test_cli_write(mocker, tmp_path, builtins, inventory, labels): + temp = tmp_path / "temp.txt" + out = tmp_path / "out.txt" + + builtins["output_file"]["default"] = out.as_posix() + + mocker.patch.dict(Config.SETTINGS, builtins) + mocker.patch.object(Discovery, "_auth", return_value=mocker.create_autospec(ProxmoxAPI)) + mocker.patch.object(Discovery, "propagate", return_value=inventory) + mocker.patch("tempfile.NamedTemporaryFile", return_value=temp.open("w")) + + psd = PrometheusSD() + assert json.loads(out.read_text()) == labels + assert oct(out.stat().st_mode & 0o777) == oct(int(psd.config.config["output_file_mode"], 8))