From 3ccb789bdd29cdf59b79b5659cc2e25f3eb54944 Mon Sep 17 00:00:00 2001 From: Robert Kaussow Date: Sun, 27 Mar 2022 13:36:26 +0200 Subject: [PATCH] feat: add option to set output file mode (#184) --- docs/content/configuration/cli.md | 6 ++++-- docs/content/configuration/defaults.md | 2 ++ docs/content/configuration/env.md | 2 ++ prometheuspvesd/cli.py | 5 +++++ prometheuspvesd/config.py | 6 ++++++ prometheuspvesd/test/data/config.yml | 1 + prometheuspvesd/test/fixtures/fixtures.py | 7 +++++++ 7 files changed, 27 insertions(+), 2 deletions(-) diff --git a/docs/content/configuration/cli.md b/docs/content/configuration/cli.md index a89dc23..a213a4b 100644 --- a/docs/content/configuration/cli.md +++ b/docs/content/configuration/cli.md @@ -6,16 +6,18 @@ You can get all available CLI options by running `prometheus-pve-sd --help`: ```Shell $ prometheus-pve-sd --help -usage: prometheus-pve-sd [-h] [-c CONFIG_FILE] [-o OUTPUT_FILE] [-d LOOP_DELAY] [--no-service] [-f LOG_FORMAT] [-v] [-q] [--version] +usage: prometheus-pve-sd [-h] [-c CONFIG_FILE] [-o OUTPUT_FILE] [-m OUTPUT_FILE_MODE] [-d LOOP_DELAY] [--no-service] [-f LOG_FORMAT] [-v] [-q] [--version] Prometheus Service Discovery for Proxmox VE -optional arguments: +options: -h, --help show this help message and exit -c CONFIG_FILE, --config CONFIG_FILE location of configuration file -o OUTPUT_FILE, --output OUTPUT_FILE output file + -m OUTPUT_FILE_MODE, --mode OUTPUT_FILE_MODE + output file mode -d LOOP_DELAY, --loop-delay LOOP_DELAY delay between discovery runs --no-service run discovery only once diff --git a/docs/content/configuration/defaults.md b/docs/content/configuration/defaults.md index bfb6d0c..940b0b3 100644 --- a/docs/content/configuration/defaults.md +++ b/docs/content/configuration/defaults.md @@ -16,6 +16,8 @@ metrics: port: 8000 output_file: +output_file_mode: "0640" + loop_delay: 300 # Run pve sd in a loop and discover hosts every n seconds (as defined in loop_delay). # Can be disabled to run disovery only once. diff --git a/docs/content/configuration/env.md b/docs/content/configuration/env.md index e38152d..ce74740 100644 --- a/docs/content/configuration/env.md +++ b/docs/content/configuration/env.md @@ -15,6 +15,8 @@ PROMETHEUS_PVE_SD_METRICS_ADDRESS=127.0.01 PROMETHEUS_PVE_SD_METRICS_PORT=8000 PROMETHEUS_PVE_SD_OUTPUT_FILE= +PROMETHEUS_PVE_SD_OUTPUT_FILE_MODE=0640 + PROMETHEUS_PVE_SD_LOOP_DELAY=300 # Run PVE SD in a loop and discover hosts every n seconds (as defined in PROMETHEUS_PVE_SD_LOOP_DELAY). diff --git a/prometheuspvesd/cli.py b/prometheuspvesd/cli.py index 89f88aa..d2dd899 100644 --- a/prometheuspvesd/cli.py +++ b/prometheuspvesd/cli.py @@ -6,6 +6,7 @@ import json import shutil import signal import tempfile +from os import chmod from time import sleep from prometheus_client import start_http_server @@ -65,6 +66,9 @@ class PrometheusSD: parser.add_argument( "-o", "--output", dest="output_file", action="store", help="output file" ) + parser.add_argument( + "-m", "--mode", dest="output_file_mode", action="store", help="output file mode" + ) parser.add_argument( "-d", "--loop-delay", @@ -170,6 +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"]) def _terminate(self, signal, frame): self.log.sysexit_with_message("Terminating", code=0) diff --git a/prometheuspvesd/config.py b/prometheuspvesd/config.py index fb8a5eb..5f83a76 100644 --- a/prometheuspvesd/config.py +++ b/prometheuspvesd/config.py @@ -70,6 +70,12 @@ class Config(): "file": True, "type": environs.Env().str }, + "output_file_mode": { + "default": "0644", + "env": "OUTPUT_FILE_MODE", + "file": True, + "type": environs.Env().str + }, "loop_delay": { "default": 300, "env": "LOOP_DELAY", diff --git a/prometheuspvesd/test/data/config.yml b/prometheuspvesd/test/data/config.yml index 18d57b3..b295ef2 100644 --- a/prometheuspvesd/test/data/config.yml +++ b/prometheuspvesd/test/data/config.yml @@ -9,6 +9,7 @@ metrics: port: 8000 output_file: dummy +output_file_mode: "0640" loop_delay: 300 service: true diff --git a/prometheuspvesd/test/fixtures/fixtures.py b/prometheuspvesd/test/fixtures/fixtures.py index 8896a2b..2b4418a 100644 --- a/prometheuspvesd/test/fixtures/fixtures.py +++ b/prometheuspvesd/test/fixtures/fixtures.py @@ -45,6 +45,12 @@ def builtins(): "file": True, "type": environs.Env().str }, + "output_file_mode": { + "default": "0640", + "env": "OUTPUT_FILE_MODE", + "file": True, + "type": environs.Env().str + }, "loop_delay": { "default": 300, "env": "LOOP_DELAY", @@ -125,6 +131,7 @@ def defaults(): "port": 8000 }, "output_file": "dummy", + "output_file_mode": "0640", "pve": { "auth_timeout": 5, "password": "",