Fix deploy page: NoneType sort + version extraite du nom fichier dans dropdown
This commit is contained in:
parent
3d053019e6
commit
6411774004
@ -1,7 +1,7 @@
|
|||||||
"""Service de deploiement Qualys Cloud Agent via SSH"""
|
"""Service de deploiement Qualys Cloud Agent via SSH"""
|
||||||
import os
|
import os
|
||||||
|
import re
|
||||||
import logging
|
import logging
|
||||||
import glob
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
@ -15,18 +15,26 @@ except ImportError:
|
|||||||
PARAMIKO_OK = False
|
PARAMIKO_OK = False
|
||||||
|
|
||||||
|
|
||||||
|
def _extract_version(filename):
|
||||||
|
"""Extrait la version depuis le nom du fichier"""
|
||||||
|
m = re.search(r'(\d+\.\d+\.\d+[\.\-]\d+)', filename)
|
||||||
|
return m.group(1) if m else "inconnue"
|
||||||
|
|
||||||
|
|
||||||
def list_packages():
|
def list_packages():
|
||||||
"""Liste les packages disponibles dans /opt/patchcenter/agents/"""
|
"""Liste les packages disponibles dans /opt/patchcenter/agents/"""
|
||||||
packages = {"deb": [], "rpm": []}
|
packages = {"deb": [], "rpm": []}
|
||||||
if not os.path.isdir(AGENTS_DIR):
|
if not os.path.isdir(AGENTS_DIR):
|
||||||
return packages
|
return packages
|
||||||
for f in sorted(os.listdir(AGENTS_DIR)):
|
for f in sorted(os.listdir(AGENTS_DIR), reverse=True):
|
||||||
path = os.path.join(AGENTS_DIR, f)
|
path = os.path.join(AGENTS_DIR, f)
|
||||||
size_mb = round(os.path.getsize(path) / 1024 / 1024, 1)
|
size_mb = round(os.path.getsize(path) / 1024 / 1024, 1)
|
||||||
|
version = _extract_version(f)
|
||||||
|
entry = {"name": f, "path": path, "size": size_mb, "version": version}
|
||||||
if f.endswith(".deb"):
|
if f.endswith(".deb"):
|
||||||
packages["deb"].append({"name": f, "path": path, "size": size_mb})
|
packages["deb"].append(entry)
|
||||||
elif f.endswith(".rpm"):
|
elif f.endswith(".rpm"):
|
||||||
packages["rpm"].append({"name": f, "path": path, "size": size_mb})
|
packages["rpm"].append(entry)
|
||||||
return packages
|
return packages
|
||||||
|
|
||||||
|
|
||||||
@ -85,9 +93,12 @@ def check_agent(hostname, ssh_user, ssh_key_path, ssh_port=22):
|
|||||||
status = out.strip()
|
status = out.strip()
|
||||||
result["service_status"] = status
|
result["service_status"] = status
|
||||||
|
|
||||||
# Get version
|
# Get version via package manager
|
||||||
code, out, _ = _run_cmd(client, "qualys-cloud-agent --version 2>/dev/null || cat /etc/qualys/cloud-agent/qualys-cloud-agent.conf 2>/dev/null | grep -i version | head -1")
|
code, out, _ = _run_cmd(client, "rpm -q qualys-cloud-agent 2>/dev/null || dpkg -l qualys-cloud-agent 2>/dev/null | grep '^ii' | awk '{print $3}'")
|
||||||
result["version"] = out.strip()[:50]
|
version = out.strip()
|
||||||
|
# Extract just version number
|
||||||
|
m = re.search(r'(\d+\.\d+\.\d+[\.\-]\d+)', version)
|
||||||
|
result["version"] = m.group(1) if m else version[:50]
|
||||||
|
|
||||||
# Get last checkin from log
|
# Get last checkin from log
|
||||||
code, out, _ = _run_cmd(client, "tail -5 /var/log/qualys/qualys-cloud-agent.log 2>/dev/null | grep 'HTTP response code: 200' | tail -1 | awk '{print $1, $2}'")
|
code, out, _ = _run_cmd(client, "tail -5 /var/log/qualys/qualys-cloud-agent.log 2>/dev/null | grep 'HTTP response code: 200' | tail -1 | awk '{print $1, $2}'")
|
||||||
|
|||||||
@ -39,7 +39,7 @@
|
|||||||
<label class="text-xs text-gray-500 block mb-1">Package DEB (Debian/Ubuntu)</label>
|
<label class="text-xs text-gray-500 block mb-1">Package DEB (Debian/Ubuntu)</label>
|
||||||
<select id="package_deb" class="w-full text-xs">
|
<select id="package_deb" class="w-full text-xs">
|
||||||
{% for p in packages.deb %}
|
{% for p in packages.deb %}
|
||||||
<option value="{{ p.path }}">{{ p.name }} ({{ p.size }} Mo)</option>
|
<option value="{{ p.path }}">v{{ p.version }} — {{ p.name }} ({{ p.size }} Mo)</option>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% if not packages.deb %}<option value="">Aucun package .deb</option>{% endif %}
|
{% if not packages.deb %}<option value="">Aucun package .deb</option>{% endif %}
|
||||||
</select>
|
</select>
|
||||||
@ -48,7 +48,7 @@
|
|||||||
<label class="text-xs text-gray-500 block mb-1">Package RPM (RHEL/CentOS)</label>
|
<label class="text-xs text-gray-500 block mb-1">Package RPM (RHEL/CentOS)</label>
|
||||||
<select id="package_rpm" class="w-full text-xs">
|
<select id="package_rpm" class="w-full text-xs">
|
||||||
{% for p in packages.rpm %}
|
{% for p in packages.rpm %}
|
||||||
<option value="{{ p.path }}">{{ p.name }} ({{ p.size }} Mo)</option>
|
<option value="{{ p.path }}">v{{ p.version }} — {{ p.name }} ({{ p.size }} Mo)</option>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% if not packages.rpm %}<option value="">Aucun package .rpm</option>{% endif %}
|
{% if not packages.rpm %}<option value="">Aucun package .rpm</option>{% endif %}
|
||||||
</select>
|
</select>
|
||||||
@ -61,12 +61,12 @@
|
|||||||
<input type="text" x-model="filter" placeholder="Rechercher hostname..." class="text-xs" style="width:200px">
|
<input type="text" x-model="filter" placeholder="Rechercher hostname..." class="text-xs" style="width:200px">
|
||||||
<select x-model="filterDom" class="text-xs" style="width:150px">
|
<select x-model="filterDom" class="text-xs" style="width:150px">
|
||||||
<option value="">Tous domaines</option>
|
<option value="">Tous domaines</option>
|
||||||
{% set doms = servers|map(attribute='domain')|unique|sort %}
|
{% set doms = servers|map(attribute='domain')|select('string')|unique|sort %}
|
||||||
{% for d in doms %}{% if d %}<option>{{ d }}</option>{% endif %}{% endfor %}
|
{% for d in doms %}{% if d %}<option>{{ d }}</option>{% endif %}{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
<select x-model="filterEnv" class="text-xs" style="width:150px">
|
<select x-model="filterEnv" class="text-xs" style="width:150px">
|
||||||
<option value="">Tous envs</option>
|
<option value="">Tous envs</option>
|
||||||
{% set envs = servers|map(attribute='env')|unique|sort %}
|
{% set envs = servers|map(attribute='env')|select('string')|unique|sort %}
|
||||||
{% for e in envs %}{% if e %}<option>{{ e }}</option>{% endif %}{% endfor %}
|
{% for e in envs %}{% if e %}<option>{{ e }}</option>{% endif %}{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
<select x-model="filterOs" class="text-xs" style="width:120px">
|
<select x-model="filterOs" class="text-xs" style="width:120px">
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user