Page MenuHomeDevCentral

D3669.diff
No OneTemporary

D3669.diff

diff --git a/_modules/python.py b/_modules/python.py
new file mode 100644
--- /dev/null
+++ b/_modules/python.py
@@ -0,0 +1,43 @@
+# -------------------------------------------------------------
+# Salt — Python execution module
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# Project: Nasqueron
+# Description: As grains can now describe the Python interpreter
+# installed by SaltStack, this module allows querying
+# information about the global Python.
+# License: BSD-2-Clause
+# -------------------------------------------------------------
+
+
+import os
+import subprocess
+
+
+def get_interpreter() -> str:
+ if __grains__["os"] == "FreeBSD":
+ return "/usr/local/bin/python3"
+ else:
+ return "/usr/bin/python3"
+
+
+def get_version() -> str:
+ result = subprocess.run([get_interpreter(), "--version"], capture_output=True)
+ full_version = result.stdout.decode().strip()
+
+ # "Python 3.13.7" -> "3.13"
+ return ".".join(full_version.split()[1].split(".")[0:2])
+
+
+def get_site_packages_directory() -> str:
+ python_version = get_version()
+
+ if __grains__["os"] == "FreeBSD":
+ return f"/usr/local/lib/python{python_version}/site-packages"
+ else:
+ return f"/usr/lib/python{python_version}/site-packages"
+
+
+def is_package_installed(package_name: str) -> bool:
+ package_directory = os.path.join(get_site_packages_directory(), package_name)
+
+ return os.path.exists(package_directory)
diff --git a/roles/reports/init.sls b/roles/reports/init.sls
new file mode 100644
--- /dev/null
+++ b/roles/reports/init.sls
@@ -0,0 +1,9 @@
+# -------------------------------------------------------------
+# Salt — Nasqueron Reports
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# Project: Nasqueron
+# License: Trivial work, not eligible to copyright
+# -------------------------------------------------------------
+
+include:
+ - .reports
diff --git a/roles/reports/reports/files/build.sh b/roles/reports/reports/files/build.sh
new file mode 100755
--- /dev/null
+++ b/roles/reports/reports/files/build.sh
@@ -0,0 +1,56 @@
+#!/bin/sh
+
+# -------------------------------------------------------------
+# Build and promote nasqueron-reports Python package
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# Project: Nasqueron
+# License: BSD-2-Clause
+# Source file: roles/reports/reports/files/build.sh
+# -------------------------------------------------------------
+#
+# <auto-generated>
+# This file is managed by our rOPS SaltStack repository.
+#
+# Changes to this file may cause incorrect behavior
+# and will be lost if the state is redeployed.
+# </auto-generated>
+
+set -e
+
+# -------------------------------------------------------------
+# Virtual environment
+#
+# :: Initialize
+# :: Build
+# :: Clean up
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+tmp_venv=$(mktemp -d -t reports-build)
+python3 -m venv "$tmp_venv"
+# shellcheck source=/dev/null
+. "$tmp_venv/bin/activate"
+pip install --upgrade pip
+
+cd /opt/nasqueron-reports/tools/nasqueron-reports
+pip install -r requirements.txt
+pip install setuptools build
+python3 -m build
+
+deactivate
+rm -rf "$tmp_venv"
+
+# -------------------------------------------------------------
+# Promote build
+#
+# :: Search .whl
+# :: Copy to /dist
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+latest_package=$(find dist -name '*.whl' | sort | tail -n1)
+if [ -z "$latest_package" ]; then
+ echo "No build artifact found in dist/" >&2
+ exit 1
+fi
+
+mkdir -p /opt/nasqueron-reports/dist
+cp "$latest_package" /opt/nasqueron-reports/dist/nasqueron_reports-0.0.0.dev0-py3-none-any.whl
diff --git a/roles/reports/reports/init.sls b/roles/reports/reports/init.sls
new file mode 100644
--- /dev/null
+++ b/roles/reports/reports/init.sls
@@ -0,0 +1,9 @@
+# -------------------------------------------------------------
+# Salt — Nasqueron Reports
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# Project: Nasqueron
+# License: Trivial work, not eligible to copyright
+# -------------------------------------------------------------
+
+include:
+ - .software
diff --git a/roles/reports/reports/software.sls b/roles/reports/reports/software.sls
new file mode 100644
--- /dev/null
+++ b/roles/reports/reports/software.sls
@@ -0,0 +1,80 @@
+# -------------------------------------------------------------
+# Salt — Nasqueron Reports
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# Project: Nasqueron
+# License: Trivial work, not eligible to copyright
+# -------------------------------------------------------------
+
+{% from "map.jinja" import dirs, packages_prefixes with context %}
+
+# -------------------------------------------------------------
+# Repository local copy
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+/opt/nasqueron-reports:
+ file.directory:
+ - user: builder
+ - group: deployment
+ - mode: 775
+
+nasqueron_reports_repository:
+ git.latest:
+ - name: https://devcentral.nasqueron.org/source/reports.git
+ - target: /opt/nasqueron-reports
+ - user: builder
+ - force_clone: True
+
+# -------------------------------------------------------------
+# Python package
+#
+# :: dependencies
+# :: build
+# :: installation
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+{% set site_packages = salt["python.get_site_packages_directory"]() %}
+{% set package_wheel_filename = "nasqueron_reports-0.0.0.dev0-py3-none-any.whl" %}
+
+nasqueron_reports_dependencies:
+ pkg.installed:
+ - pkgs:
+ - {{ packages_prefixes.python3 }}hvac
+ - {{ packages_prefixes.python3 }}mysql-connector-python
+ - {{ packages_prefixes.python3 }}pyyaml
+ - {{ packages_prefixes.python3 }}sqlparse
+
+nasqueron_reports_build:
+ cmd.script:
+ - name: salt://roles/reports/reports/files/build.sh
+ - runas: builder
+ - creates: /opt/nasqueron-reports/dist/{{ package_wheel_filename }}
+
+nasqueron_reports_install:
+ cmd.run:
+ - name: |
+ pip install /opt/nasqueron-reports/dist/{{ package_wheel_filename }}
+ - creates: {{ site_packages }}/nasqueron_reports
+
+# -------------------------------------------------------------
+# Symlinks for resources at expected locations
+#
+# :: config in /etc or /usr/local/etc
+# :: content in /usr/local/share/nasqueron-reports
+# :: utilities in /usr/local/bin
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+{{ dirs.etc }}/reports.yaml:
+ file.symlink:
+ - target: /opt/nasqueron-reports/tools/nasqueron-reports/conf/reports.yaml
+
+/usr/local/share/nasqueron-reports:
+ file.directory:
+ - user: root
+ - group: deployment
+ - mode: 775
+
+/usr/local/share/nasqueron-reports/sql:
+ file.symlink:
+ - target: /opt/nasqueron-reports/sql
+ - require:
+ - file: /usr/local/share/nasqueron-reports
diff --git a/top.sls b/top.sls
--- a/top.sls
+++ b/top.sls
@@ -31,6 +31,7 @@
- roles/netbox
- roles/prometheus
- roles/redis
+ - roles/reports # depends of builder
- roles/saas-nextcloud
- roles/webserver-alkane
- roles/webserver-core

File Metadata

Mime Type
text/plain
Expires
Mon, Sep 29, 17:14 (8 h, 25 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3028968
Default Alt Text
D3669.diff (7 KB)

Event Timeline