| # Copyright (c) 2024 VEXXHOST, Inc. |
| # SPDX-License-Identifier: Apache-2.0 |
| |
| import json |
| import os |
| import shutil |
| import tempfile |
| |
| import rjsonnet |
| import yaml |
| |
| |
| def import_callback(base, rel): |
| """ |
| :param base: The directory containing the code that did the import. |
| :param rel: The path imported by the code. |
| """ |
| path = os.path.join(base, rel) |
| with open(path, "r") as f: |
| return path, f.read() |
| |
| |
| def main(): |
| compiled_string = rjsonnet.evaluate_file( |
| "roles/kube_prometheus_stack/files/jsonnet/rules.jsonnet", |
| import_callback=import_callback, |
| ) |
| compiled = json.loads(compiled_string) |
| |
| tempdir = tempfile.mkdtemp() |
| rule_files = [] |
| |
| try: |
| for rule_file, data in compiled.items(): |
| file_name = rule_file + ".yml" |
| path = os.path.join(tempdir, file_name) |
| |
| if os.path.exists(path): |
| raise Exception(f"File {path} already exists") |
| with open(path, "w") as f: |
| yaml.dump(data, f) |
| |
| rule_files.append(path) |
| |
| with open("roles/kube_prometheus_stack/files/jsonnet/tests.yml") as f: |
| tests = yaml.safe_load(f) |
| |
| tests["rule_files"] = rule_files |
| |
| tests_file = os.path.join(tempdir, "tests.yml") |
| with open(tests_file, "w") as f: |
| yaml.dump(tests, f) |
| |
| # TODO(mnaser): Enable JUnit output |
| os.system(f"promtool test rules {tests_file}") |
| finally: |
| shutil.rmtree(tempdir) |
| |
| |
| if __name__ == "__main__": |
| main() |