diff --git a/ct/prometheus-pve-exporter.sh b/ct/prometheus-pve-exporter.sh index 34c1b2611..1513b34fc 100644 --- a/ct/prometheus-pve-exporter.sh +++ b/ct/prometheus-pve-exporter.sh @@ -20,26 +20,69 @@ color catch_errors function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -f /etc/systemd/system/prometheus-pve-exporter.service ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - msg_info "Stopping ${APP}" - systemctl stop prometheus-pve-exporter - msg_ok "Stopped ${APP}" + header_info + check_container_storage + check_container_resources + if [[ ! -f /etc/systemd/system/prometheus-pve-exporter.service ]]; then + msg_error "No ${APP} Installation Found!" + exit 1 + fi - msg_info "Updating ${APP}" - $STD pip install prometheus-pve-exporter --default-timeout=300 --upgrade --root-user-action=ignore - msg_ok "Updated ${APP}" + msg_info "Stopping ${APP}" + systemctl stop prometheus-pve-exporter + msg_ok "Stopped ${APP}" - msg_info "Starting ${APP}" - systemctl start prometheus-pve-exporter - msg_ok "Started ${APP}" - msg_ok "Updated Successfully" - exit + export PVE_VENV_PATH="/opt/prometheus-pve-exporter/.venv" + export PVE_EXPORTER_BIN="${PVE_VENV_PATH}/bin/pve_exporter" + + if [[ ! -d "$PVE_VENV_PATH" || ! -x "$PVE_EXPORTER_BIN" ]]; then + PYTHON_VERSION="3.12" setup_uv + msg_info "Migrating to uv/venv" + rm -rf "$PVE_VENV_PATH" + mkdir -p /opt/prometheus-pve-exporter + cd /opt/prometheus-pve-exporter + $STD uv venv "$PVE_VENV_PATH" + $STD "$PVE_VENV_PATH/bin/python" -m ensurepip --upgrade + $STD "$PVE_VENV_PATH/bin/python" -m pip install --upgrade pip + $STD "$PVE_VENV_PATH/bin/python" -m pip install prometheus-pve-exporter + msg_ok "Migrated to uv/venv" + else + msg_info "Updating Prometheus Proxmox VE Exporter" + PYTHON_VERSION="3.12" setup_uv + $STD "$PVE_VENV_PATH/bin/python" -m pip install --upgrade prometheus-pve-exporter + msg_ok "Updated Prometheus Proxmox VE Exporter" + fi + local service_file="/etc/systemd/system/prometheus-pve-exporter.service" + if ! grep -q "${PVE_VENV_PATH}/bin/pve_exporter" "$service_file"; then + msg_info "Updating systemd service" + cat <"$service_file" +[Unit] +Description=Prometheus Proxmox VE Exporter +Documentation=https://github.com/znerol/prometheus-pve-exporter +After=syslog.target network.target + +[Service] +User=root +Restart=always +Type=simple +ExecStart=${PVE_VENV_PATH}/bin/pve_exporter \\ + --config.file=/opt/prometheus-pve-exporter/pve.yml \\ + --web.listen-address=0.0.0.0:9221 +ExecReload=/bin/kill -HUP \$MAINPID + +[Install] +WantedBy=multi-user.target +EOF + $STD systemctl daemon-reload + msg_ok "Updated systemd service" + fi + + msg_info "Starting ${APP}" + systemctl start prometheus-pve-exporter + msg_ok "Started ${APP}" + + msg_ok "Updated Successfully" + exit 0 } start @@ -49,4 +92,4 @@ description msg_ok "Completed Successfully!\n" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${INFO}${YW} Access it using the following URL:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9221${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9221${CL}" diff --git a/install/prometheus-pve-exporter-install.sh b/install/prometheus-pve-exporter-install.sh index b2ccef80d..513611e5b 100644 --- a/install/prometheus-pve-exporter-install.sh +++ b/install/prometheus-pve-exporter-install.sh @@ -13,16 +13,16 @@ setting_up_container network_check update_os -msg_info "Setup Python3" -$STD apt-get install -y \ - python3 \ - python3-pip -rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED -msg_ok "Setup Python3" +PYTHON_VERSION="3.12" setup_uv msg_info "Installing Prometheus Proxmox VE Exporter" -python3 -m pip install --default-timeout=300 --quiet --root-user-action=ignore prometheus-pve-exporter mkdir -p /opt/prometheus-pve-exporter +cd /opt/prometheus-pve-exporter + +$STD uv venv /opt/prometheus-pve-exporter/.venv +$STD /opt/prometheus-pve-exporter/.venv/bin/python -m ensurepip --upgrade +$STD /opt/prometheus-pve-exporter/.venv/bin/python -m pip install --upgrade pip +$STD /opt/prometheus-pve-exporter/.venv/bin/python -m pip install prometheus-pve-exporter cat </opt/prometheus-pve-exporter/pve.yml default: user: prometheus@pve @@ -42,7 +42,7 @@ After=syslog.target network.target User=root Restart=always Type=simple -ExecStart=pve_exporter \ +ExecStart=/opt/prometheus-pve-exporter/.venv/bin/pve_exporter \ --config.file=/opt/prometheus-pve-exporter/pve.yml \ --web.listen-address=0.0.0.0:9221 ExecReload=/bin/kill -HUP \$MAINPID