refactor: rename directories to kebab-case and clean up project structure
Rename CMDB -> cmdb (submodule), GENERATEUR_CERTIFICATES -> cert-generator, GENERATEUR_SWITCH -> switch-config Remove deleted CMDB files, switch config examples, proxy.sh, and pycache artifacts Update all internal path references across HTML, JS, and Python files
This commit is contained in:
parent
bfc88f4afc
commit
2fb3621053
22 changed files with 27 additions and 9135 deletions
10
.gitignore
vendored
10
.gitignore
vendored
|
|
@ -1,13 +1,13 @@
|
||||||
# === Données réelles — gardées en local, jamais publiées ===
|
# === Données réelles — gardées en local, jamais publiées ===
|
||||||
# Base CMDB (inventaire + mot de passe bind LDAP)
|
# Base CMDB (inventaire + mot de passe bind LDAP)
|
||||||
CMDB/cmdb.db
|
cmdb/cmdb.db
|
||||||
CMDB/cmdb.db.ver
|
cmdb/cmdb.db.ver
|
||||||
CMDB/cmdb.db.tmp
|
cmdb/cmdb.db.tmp
|
||||||
# Snapshots horodatés de la base (copies des données réelles)
|
# Snapshots horodatés de la base (copies des données réelles)
|
||||||
CMDB/snapshots/
|
cmdb/snapshots/
|
||||||
|
|
||||||
# Certificats générés (contiennent des clés privées)
|
# Certificats générés (contiennent des clés privées)
|
||||||
GENERATEUR_CERTIFICATES/LISTS_ALL_CERT/
|
cert-generator/LISTS_ALL_CERT/
|
||||||
|
|
||||||
# === Environnement / build ===
|
# === Environnement / build ===
|
||||||
.venv/
|
.venv/
|
||||||
|
|
|
||||||
4
.gitmodules
vendored
Normal file
4
.gitmodules
vendored
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
[submodule "cmdb"]
|
||||||
|
path = cmdb
|
||||||
|
url = ssh://git@git.thehackdes.com/TheHackdes/Noctame.git
|
||||||
|
branch = dev
|
||||||
Binary file not shown.
Binary file not shown.
4055
CMDB/cmdb.html
4055
CMDB/cmdb.html
File diff suppressed because it is too large
Load diff
|
|
@ -1,482 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
"""Serveur CMDB : sert cmdb.html, la base partagée et la recherche AD.
|
|
||||||
|
|
||||||
Remplace `python -m http.server` ET le connecteur séparé :
|
|
||||||
pip install ldap3
|
|
||||||
python3 cmdb_server.py # http://0.0.0.0:8000
|
|
||||||
python3 cmdb_server.py 8080 # port custom
|
|
||||||
|
|
||||||
Endpoints :
|
|
||||||
GET /db → base SQLite (bytes) + entête X-DB-Version
|
|
||||||
GET /db/version → {"version": n} (poll léger)
|
|
||||||
POST /db → écrit la base ; entête X-Base-Version pour la
|
|
||||||
concurrence optimiste (409 si obsolète)
|
|
||||||
POST /ldap/search → recherche annuaire (config envoyée par la page)
|
|
||||||
|
|
||||||
La base est un vrai fichier `cmdb.db` partagé : plusieurs personnes
|
|
||||||
peuvent l'utiliser en même temps, avec détection de conflit.
|
|
||||||
"""
|
|
||||||
import json
|
|
||||||
import os
|
|
||||||
import re
|
|
||||||
import ssl
|
|
||||||
import sys
|
|
||||||
import threading
|
|
||||||
import time
|
|
||||||
from http.server import SimpleHTTPRequestHandler, ThreadingHTTPServer
|
|
||||||
from urllib.parse import urlparse, parse_qs
|
|
||||||
|
|
||||||
PORT = int(sys.argv[1]) if len(sys.argv) > 1 else 8000
|
|
||||||
|
|
||||||
HERE = os.path.dirname(os.path.abspath(__file__))
|
|
||||||
DB_PATH = os.path.join(HERE, 'cmdb.db')
|
|
||||||
VER_PATH = DB_PATH + '.ver'
|
|
||||||
DB_LOCK = threading.Lock()
|
|
||||||
|
|
||||||
|
|
||||||
def db_version():
|
|
||||||
try:
|
|
||||||
with open(VER_PATH) as f:
|
|
||||||
return int(f.read().strip() or 0)
|
|
||||||
except (OSError, ValueError):
|
|
||||||
return 1 if os.path.exists(DB_PATH) else 0
|
|
||||||
|
|
||||||
|
|
||||||
def db_bytes():
|
|
||||||
try:
|
|
||||||
with open(DB_PATH, 'rb') as f:
|
|
||||||
return f.read()
|
|
||||||
except OSError:
|
|
||||||
return b''
|
|
||||||
|
|
||||||
|
|
||||||
def db_write(data):
|
|
||||||
"""Écrit la base atomiquement et incrémente la version. Renvoie la version."""
|
|
||||||
with DB_LOCK:
|
|
||||||
ver = db_version() + 1
|
|
||||||
tmp = DB_PATH + '.tmp'
|
|
||||||
with open(tmp, 'wb') as f:
|
|
||||||
f.write(data)
|
|
||||||
os.replace(tmp, DB_PATH)
|
|
||||||
with open(VER_PATH, 'w') as f:
|
|
||||||
f.write(str(ver))
|
|
||||||
return ver
|
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
|
||||||
# Snapshots : copies horodatées de la base dans snapshots/.
|
|
||||||
# - « auto » : créées après une écriture, au plus 1/heure, rétention 72.
|
|
||||||
# - « manuel » : créées à la demande (bouton), rétention 100, label libre.
|
|
||||||
# Restaurer un snapshot crée d'abord un snapshot de sécurité de l'état courant.
|
|
||||||
# ---------------------------------------------------------------------------
|
|
||||||
SNAP_DIR = os.path.join(HERE, 'snapshots')
|
|
||||||
# nom : cmdb-<AAAAMMJJ>-<HHMMSS>-v<version>[-<label>].db (pas de '/' possible → pas de traversal)
|
|
||||||
SNAP_RE = re.compile(r'^cmdb-(\d{8})-(\d{6})-v(\d+)(?:-([A-Za-z0-9_.-]+))?\.db$')
|
|
||||||
AUTO_MIN_INTERVAL = 3600 # s : au plus un snapshot auto par heure
|
|
||||||
AUTO_KEEP = 72 # rétention snapshots auto (~3 jours horaires)
|
|
||||||
MANUAL_KEEP = 100 # rétention snapshots manuels
|
|
||||||
|
|
||||||
|
|
||||||
def _sanitize_label(label):
|
|
||||||
label = re.sub(r'[^A-Za-z0-9_.-]+', '-', (label or '').strip()).strip('-')
|
|
||||||
return label[:40]
|
|
||||||
|
|
||||||
|
|
||||||
def _parse_snap(name):
|
|
||||||
"""Valide un nom de snapshot et renvoie sa méta, ou None si invalide."""
|
|
||||||
name = os.path.basename(name or '')
|
|
||||||
m = SNAP_RE.match(name)
|
|
||||||
if not m:
|
|
||||||
return None
|
|
||||||
return {'name': name, 'date': m.group(1), 'time': m.group(2),
|
|
||||||
'version': int(m.group(3)), 'label': m.group(4) or '',
|
|
||||||
'auto': m.group(4) == 'auto'}
|
|
||||||
|
|
||||||
|
|
||||||
def list_snapshots():
|
|
||||||
"""Liste les snapshots existants, plus récents d'abord."""
|
|
||||||
out = []
|
|
||||||
try:
|
|
||||||
entries = os.listdir(SNAP_DIR)
|
|
||||||
except OSError:
|
|
||||||
return out
|
|
||||||
for n in entries:
|
|
||||||
meta = _parse_snap(n)
|
|
||||||
if not meta:
|
|
||||||
continue
|
|
||||||
try:
|
|
||||||
st = os.stat(os.path.join(SNAP_DIR, n))
|
|
||||||
except OSError:
|
|
||||||
continue
|
|
||||||
meta['size'] = st.st_size
|
|
||||||
meta['mtime'] = int(st.st_mtime * 1000)
|
|
||||||
out.append(meta)
|
|
||||||
out.sort(key=lambda s: s['mtime'], reverse=True)
|
|
||||||
return out
|
|
||||||
|
|
||||||
|
|
||||||
def _prune(auto, keep):
|
|
||||||
for s in [s for s in list_snapshots() if s['auto'] == auto][keep:]:
|
|
||||||
try:
|
|
||||||
os.remove(os.path.join(SNAP_DIR, s['name']))
|
|
||||||
except OSError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
def create_snapshot(label='manual', auto=False):
|
|
||||||
"""Copie la base courante dans snapshots/. Renvoie la méta, ou None si base vide."""
|
|
||||||
with DB_LOCK:
|
|
||||||
data = db_bytes()
|
|
||||||
if not data:
|
|
||||||
return None
|
|
||||||
ver = db_version()
|
|
||||||
os.makedirs(SNAP_DIR, exist_ok=True)
|
|
||||||
lbl = 'auto' if auto else (_sanitize_label(label) or 'manual')
|
|
||||||
name = 'cmdb-%s-v%d-%s.db' % (time.strftime('%Y%m%d-%H%M%S'), ver, lbl)
|
|
||||||
path = os.path.join(SNAP_DIR, name)
|
|
||||||
tmp = path + '.tmp'
|
|
||||||
with open(tmp, 'wb') as f:
|
|
||||||
f.write(data)
|
|
||||||
os.replace(tmp, path)
|
|
||||||
_prune(auto, AUTO_KEEP if auto else MANUAL_KEEP)
|
|
||||||
return _parse_snap(name)
|
|
||||||
|
|
||||||
|
|
||||||
def _maybe_auto_snapshot():
|
|
||||||
"""Snapshot auto si le dernier date de plus d'AUTO_MIN_INTERVAL. Jamais dans DB_LOCK."""
|
|
||||||
autos = [s for s in list_snapshots() if s['auto']]
|
|
||||||
if autos and (time.time() - autos[0]['mtime'] / 1000) < AUTO_MIN_INTERVAL:
|
|
||||||
return
|
|
||||||
try:
|
|
||||||
create_snapshot(auto=True)
|
|
||||||
except OSError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
def db_write_and_snapshot(data):
|
|
||||||
"""Écrit la base puis déclenche un snapshot auto (throttlé). Renvoie la version."""
|
|
||||||
ver = db_write(data)
|
|
||||||
_maybe_auto_snapshot()
|
|
||||||
return ver
|
|
||||||
|
|
||||||
|
|
||||||
def snapshot_bytes(name):
|
|
||||||
"""Contenu d'un snapshot. Lève si nom invalide ou fichier absent."""
|
|
||||||
meta = _parse_snap(name)
|
|
||||||
if not meta:
|
|
||||||
raise ValueError('nom de snapshot invalide')
|
|
||||||
with open(os.path.join(SNAP_DIR, meta['name']), 'rb') as f:
|
|
||||||
return f.read()
|
|
||||||
|
|
||||||
|
|
||||||
def delete_snapshot(name):
|
|
||||||
meta = _parse_snap(name)
|
|
||||||
if not meta:
|
|
||||||
raise ValueError('nom de snapshot invalide')
|
|
||||||
path = os.path.join(SNAP_DIR, meta['name'])
|
|
||||||
if os.path.isfile(path):
|
|
||||||
os.remove(path)
|
|
||||||
|
|
||||||
|
|
||||||
def restore_snapshot(name):
|
|
||||||
"""Remplace la base courante par le snapshot `name`.
|
|
||||||
|
|
||||||
Crée d'abord un snapshot de sécurité de l'état courant. Renvoie la nouvelle version.
|
|
||||||
"""
|
|
||||||
meta = _parse_snap(name)
|
|
||||||
if not meta:
|
|
||||||
raise ValueError('nom de snapshot invalide')
|
|
||||||
path = os.path.join(SNAP_DIR, meta['name'])
|
|
||||||
if not os.path.isfile(path):
|
|
||||||
raise FileNotFoundError('snapshot introuvable')
|
|
||||||
with open(path, 'rb') as f:
|
|
||||||
data = f.read()
|
|
||||||
create_snapshot(label='pre-restore') # filet de sécurité avant écrasement
|
|
||||||
return db_write(data)
|
|
||||||
|
|
||||||
try:
|
|
||||||
from ldap3 import Server, Connection, Tls, SUBTREE, ALL_ATTRIBUTES
|
|
||||||
from ldap3.utils.conv import escape_filter_chars
|
|
||||||
HAS_LDAP = True
|
|
||||||
except ImportError:
|
|
||||||
HAS_LDAP = False
|
|
||||||
|
|
||||||
|
|
||||||
def _cn_of(dn):
|
|
||||||
if not dn:
|
|
||||||
return ''
|
|
||||||
head = dn.split(',')[0]
|
|
||||||
return head.split('=', 1)[1] if '=' in head else head
|
|
||||||
|
|
||||||
|
|
||||||
def ldap_connect(cfg):
|
|
||||||
"""Ouvre et bind une connexion LDAP selon la config de la page."""
|
|
||||||
use_ssl = cfg.get('method') == 'ssl'
|
|
||||||
tls = Tls(validate=ssl.CERT_REQUIRED if cfg.get('verify_certificates') else ssl.CERT_NONE)
|
|
||||||
srv = Server(cfg['host'], port=int(cfg.get('port') or (636 if use_ssl else 389)),
|
|
||||||
use_ssl=use_ssl, tls=tls, get_info=None, connect_timeout=8)
|
|
||||||
conn = Connection(srv, user=cfg.get('bind_dn') or None,
|
|
||||||
password=cfg.get('bind_password') or None,
|
|
||||||
auto_referrals=False, receive_timeout=15)
|
|
||||||
if cfg.get('method') == 'start_tls':
|
|
||||||
conn.open()
|
|
||||||
conn.start_tls()
|
|
||||||
if not conn.bind():
|
|
||||||
raise RuntimeError('Bind LDAP refusé : %s' % conn.result)
|
|
||||||
return conn
|
|
||||||
|
|
||||||
|
|
||||||
def ldap_computer(cfg, query):
|
|
||||||
"""Cherche un poste (objectClass=computer) par nom/dNSHostName."""
|
|
||||||
conn = ldap_connect(cfg)
|
|
||||||
q = escape_filter_chars((query or '').strip().rstrip('$'))
|
|
||||||
flt = ('(&(objectClass=computer)(|(cn=*%s*)(name=*%s*)(dNSHostName=*%s*)'
|
|
||||||
'(sAMAccountName=*%s*)))' % (q, q, q, q))
|
|
||||||
base = cfg.get('base') or ''
|
|
||||||
ok = conn.search(base, flt, SUBTREE, attributes=ALL_ATTRIBUTES, size_limit=5)
|
|
||||||
res = conn.result or {}
|
|
||||||
if not ok and res.get('result') not in (0, 4):
|
|
||||||
raise RuntimeError('Recherche LDAP échouée : %s' % (res.get('description') or res))
|
|
||||||
out = []
|
|
||||||
for e in conn.entries:
|
|
||||||
d = e.entry_attributes_as_dict
|
|
||||||
|
|
||||||
def val(k):
|
|
||||||
for kk in d:
|
|
||||||
if kk.lower() == k.lower():
|
|
||||||
v = d[kk]
|
|
||||||
if isinstance(v, list):
|
|
||||||
v = v[0] if v else ''
|
|
||||||
return str(v) if v else ''
|
|
||||||
return ''
|
|
||||||
|
|
||||||
def vals(k):
|
|
||||||
for kk in d:
|
|
||||||
if kk.lower() == k.lower():
|
|
||||||
v = d[kk]
|
|
||||||
return [str(x) for x in (v if isinstance(v, list) else [v]) if x]
|
|
||||||
return []
|
|
||||||
|
|
||||||
uac = val('userAccountControl')
|
|
||||||
enabled = (not (int(uac) & 2)) if uac.isdigit() else None
|
|
||||||
out.append({
|
|
||||||
'name': val('cn') or val('name'),
|
|
||||||
'dns': val('dNSHostName'),
|
|
||||||
'os': val('operatingSystem'),
|
|
||||||
'os_version': val('operatingSystemVersion'),
|
|
||||||
'description': val('description'),
|
|
||||||
'location': val('location'),
|
|
||||||
'managed_by': _cn_of(val('managedBy')),
|
|
||||||
'when_created': val('whenCreated')[:8],
|
|
||||||
'enabled': enabled,
|
|
||||||
'groups': [_cn_of(x) for x in vals('memberOf')][:20],
|
|
||||||
})
|
|
||||||
return out
|
|
||||||
|
|
||||||
|
|
||||||
def ldap_search(cfg, query, limit=25):
|
|
||||||
"""Recherche d'utilisateurs dans l'AD selon la config de la page.
|
|
||||||
|
|
||||||
Cherche par username, nom, prénom, nom affiché ou mail.
|
|
||||||
Lève une exception explicite si le bind ou la recherche échoue
|
|
||||||
(sinon un problème de config renverrait « aucun résultat » en silence).
|
|
||||||
"""
|
|
||||||
conn = ldap_connect(cfg)
|
|
||||||
|
|
||||||
uid = cfg.get('uid') or 'userPrincipalName'
|
|
||||||
raw = cfg.get('filter') or ''
|
|
||||||
if raw:
|
|
||||||
flt = raw.replace('{query}', escape_filter_chars(query))
|
|
||||||
else:
|
|
||||||
# recherche prioritairement sur displayName, multi-mots (ET) → "jean dupont"
|
|
||||||
# et "dupont jean" fonctionnent tous les deux, quel que soit l'ordre.
|
|
||||||
search_attrs = ['displayName', 'cn', 'sAMAccountName', 'givenName', 'sn',
|
|
||||||
'userPrincipalName', 'mail']
|
|
||||||
tokens = [escape_filter_chars(t) for t in query.split() if t] or ['']
|
|
||||||
parts = []
|
|
||||||
for t in tokens:
|
|
||||||
ors = ''.join('(%s=*%s*)' % (a, t) for a in search_attrs)
|
|
||||||
parts.append('(|%s)' % ors)
|
|
||||||
flt = '(&%s)' % ''.join(parts) if len(parts) > 1 else parts[0]
|
|
||||||
# personnes uniquement, compatible AD + OpenLDAP
|
|
||||||
person = ('(|(objectClass=user)(objectClass=inetOrgPerson)'
|
|
||||||
'(objectClass=organizationalPerson)(objectClass=person))')
|
|
||||||
base = cfg.get('base') or ''
|
|
||||||
|
|
||||||
ok = conn.search(base, '(&%s%s)' % (person, flt), SUBTREE,
|
|
||||||
attributes=ALL_ATTRIBUTES, size_limit=limit)
|
|
||||||
res = conn.result or {}
|
|
||||||
# 0 = success, 4 = sizeLimitExceeded (résultats partiels OK)
|
|
||||||
if not ok and res.get('result') not in (0, 4):
|
|
||||||
raise RuntimeError('Recherche LDAP échouée : %s (base=%s)'
|
|
||||||
% (res.get('description') or res, base or '∅'))
|
|
||||||
|
|
||||||
def val(d, k):
|
|
||||||
# accès insensible à la casse, première valeur
|
|
||||||
for kk in d:
|
|
||||||
if kk.lower() == k.lower():
|
|
||||||
v = d[kk]
|
|
||||||
if isinstance(v, list):
|
|
||||||
v = v[0] if v else ''
|
|
||||||
return str(v) if v else ''
|
|
||||||
return ''
|
|
||||||
|
|
||||||
def vals(d, k):
|
|
||||||
for kk in d:
|
|
||||||
if kk.lower() == k.lower():
|
|
||||||
v = d[kk]
|
|
||||||
return [str(x) for x in (v if isinstance(v, list) else [v]) if x]
|
|
||||||
return []
|
|
||||||
|
|
||||||
def cn_of(dn):
|
|
||||||
# "CN=Jean Dupont,OU=..." -> "Jean Dupont"
|
|
||||||
if not dn:
|
|
||||||
return ''
|
|
||||||
head = dn.split(',')[0]
|
|
||||||
return head.split('=', 1)[1] if '=' in head else head
|
|
||||||
|
|
||||||
out, seen = [], set()
|
|
||||||
for e in conn.entries:
|
|
||||||
d = e.entry_attributes_as_dict
|
|
||||||
name = val(d, 'displayName') or val(d, 'cn') \
|
|
||||||
or (val(d, 'givenName') + ' ' + val(d, 'sn')).strip()
|
|
||||||
username = val(d, 'sAMAccountName') or val(d, uid) or val(d, 'userPrincipalName')
|
|
||||||
key = (name, username)
|
|
||||||
if not (name or username) or key in seen:
|
|
||||||
continue
|
|
||||||
seen.add(key)
|
|
||||||
uac = val(d, 'userAccountControl')
|
|
||||||
enabled = (not (int(uac) & 2)) if uac.isdigit() else None
|
|
||||||
out.append({
|
|
||||||
'displayName': name or username,
|
|
||||||
'username': username,
|
|
||||||
'mail': val(d, 'mail'),
|
|
||||||
'title': val(d, 'title'),
|
|
||||||
'department': val(d, 'department'),
|
|
||||||
'company': val(d, 'company'),
|
|
||||||
'office': val(d, 'physicalDeliveryOfficeName'),
|
|
||||||
'phone': val(d, 'telephoneNumber'),
|
|
||||||
'mobile': val(d, 'mobile') or val(d, 'ipPhone'),
|
|
||||||
'manager': cn_of(val(d, 'manager')),
|
|
||||||
'description': val(d, 'description'),
|
|
||||||
'employee_id': val(d, 'employeeID') or val(d, 'employeeNumber'),
|
|
||||||
'division': val(d, 'division'),
|
|
||||||
'city': val(d, 'l'),
|
|
||||||
'country': val(d, 'co') or val(d, 'c'),
|
|
||||||
'enabled': enabled,
|
|
||||||
'groups': [cn_of(x) for x in vals(d, 'memberOf')][:15],
|
|
||||||
})
|
|
||||||
out.sort(key=lambda u: u['displayName'].lower())
|
|
||||||
return out
|
|
||||||
|
|
||||||
|
|
||||||
class Handler(SimpleHTTPRequestHandler):
|
|
||||||
def log_message(self, *args):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def _json(self, code, payload):
|
|
||||||
body = json.dumps(payload).encode()
|
|
||||||
self.send_response(code)
|
|
||||||
self.send_header('Content-Type', 'application/json')
|
|
||||||
self.send_header('Content-Length', str(len(body)))
|
|
||||||
self.end_headers()
|
|
||||||
self.wfile.write(body)
|
|
||||||
|
|
||||||
def _send_db(self, code, data, version):
|
|
||||||
self.send_response(code)
|
|
||||||
self.send_header('Content-Type', 'application/octet-stream')
|
|
||||||
self.send_header('X-DB-Version', str(version))
|
|
||||||
self.send_header('Cache-Control', 'no-store')
|
|
||||||
self.send_header('Content-Length', str(len(data)))
|
|
||||||
self.end_headers()
|
|
||||||
if data:
|
|
||||||
self.wfile.write(data)
|
|
||||||
|
|
||||||
def _send_download(self, data, filename):
|
|
||||||
self.send_response(200)
|
|
||||||
self.send_header('Content-Type', 'application/octet-stream')
|
|
||||||
self.send_header('Content-Disposition', 'attachment; filename="%s"' % filename)
|
|
||||||
self.send_header('Cache-Control', 'no-store')
|
|
||||||
self.send_header('Content-Length', str(len(data)))
|
|
||||||
self.end_headers()
|
|
||||||
self.wfile.write(data)
|
|
||||||
|
|
||||||
def do_GET(self):
|
|
||||||
if self.path == '/db':
|
|
||||||
with DB_LOCK:
|
|
||||||
return self._send_db(200, db_bytes(), db_version())
|
|
||||||
if self.path == '/db/version':
|
|
||||||
return self._json(200, {'version': db_version()})
|
|
||||||
if self.path == '/db/snapshots':
|
|
||||||
return self._json(200, {'snapshots': list_snapshots()})
|
|
||||||
if self.path.startswith('/db/snapshot?'):
|
|
||||||
name = (parse_qs(urlparse(self.path).query).get('name') or [''])[0]
|
|
||||||
try:
|
|
||||||
data = snapshot_bytes(name)
|
|
||||||
except (ValueError, OSError):
|
|
||||||
return self._json(404, {'error': 'snapshot introuvable'})
|
|
||||||
return self._send_download(data, os.path.basename(name))
|
|
||||||
if self.path in ('/', '/index.html'):
|
|
||||||
self.path = '/cmdb.html'
|
|
||||||
return super().do_GET()
|
|
||||||
|
|
||||||
def do_POST(self):
|
|
||||||
if self.path == '/db':
|
|
||||||
data = self.rfile.read(int(self.headers.get('Content-Length', 0)))
|
|
||||||
base = int(self.headers.get('X-Base-Version', '0') or 0)
|
|
||||||
cur = db_version()
|
|
||||||
if base != cur: # quelqu'un a écrit entre-temps
|
|
||||||
return self._send_db(409, db_bytes(), cur)
|
|
||||||
ver = db_write_and_snapshot(data)
|
|
||||||
return self._send_db(200, b'', ver)
|
|
||||||
if self.path in ('/db/snapshot', '/db/snapshot/delete', '/db/restore'):
|
|
||||||
try:
|
|
||||||
body = json.loads(self.rfile.read(int(self.headers.get('Content-Length', 0)) or 0) or b'{}')
|
|
||||||
except ValueError:
|
|
||||||
body = {}
|
|
||||||
if self.path == '/db/snapshot':
|
|
||||||
meta = create_snapshot(label=body.get('label') or 'manual')
|
|
||||||
if not meta:
|
|
||||||
return self._json(400, {'error': 'base vide — rien à sauvegarder'})
|
|
||||||
return self._json(200, meta)
|
|
||||||
if self.path == '/db/snapshot/delete':
|
|
||||||
try:
|
|
||||||
delete_snapshot(body.get('name') or '')
|
|
||||||
except (ValueError, OSError):
|
|
||||||
return self._json(400, {'error': 'nom de snapshot invalide'})
|
|
||||||
return self._json(200, {'ok': True})
|
|
||||||
# /db/restore
|
|
||||||
try:
|
|
||||||
restore_snapshot(body.get('name') or '')
|
|
||||||
except (ValueError, FileNotFoundError):
|
|
||||||
return self._json(404, {'error': 'snapshot introuvable'})
|
|
||||||
with DB_LOCK:
|
|
||||||
return self._send_db(200, db_bytes(), db_version())
|
|
||||||
if self.path == '/ldap/computer':
|
|
||||||
if not HAS_LDAP:
|
|
||||||
return self._json(500, {'error': "module ldap3 manquant — pip install ldap3"})
|
|
||||||
try:
|
|
||||||
body = json.loads(self.rfile.read(int(self.headers.get('Content-Length', 0))))
|
|
||||||
result = ldap_computer(body.get('config') or {}, (body.get('query') or '').strip())
|
|
||||||
return self._json(200, result)
|
|
||||||
except Exception as ex:
|
|
||||||
return self._json(500, {'error': str(ex)})
|
|
||||||
if self.path != '/ldap/search':
|
|
||||||
return self._json(404, {'error': 'not found'})
|
|
||||||
if not HAS_LDAP:
|
|
||||||
return self._json(500, {'error': "module ldap3 manquant — pip install ldap3"})
|
|
||||||
try:
|
|
||||||
body = json.loads(self.rfile.read(int(self.headers.get('Content-Length', 0))))
|
|
||||||
limit = int(body.get('limit') or 25)
|
|
||||||
result = ldap_search(body.get('config') or {}, (body.get('query') or '').strip(), limit)
|
|
||||||
self._json(200, result)
|
|
||||||
except Exception as ex: # renvoyé tel quel à la page
|
|
||||||
self._json(500, {'error': str(ex)})
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
os.chdir(os.path.dirname(os.path.abspath(__file__)))
|
|
||||||
if not HAS_LDAP:
|
|
||||||
print("⚠ ldap3 absent : la recherche AD renverra une erreur (pip install ldap3)")
|
|
||||||
print('CMDB : http://127.0.0.1:%d (Ctrl+C pour arrêter)' % PORT)
|
|
||||||
ThreadingHTTPServer(('0.0.0.0', PORT), Handler).serve_forever()
|
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -1,9 +0,0 @@
|
||||||
[project]
|
|
||||||
name = "cmdb"
|
|
||||||
version = "0.1.0"
|
|
||||||
description = "Add your description here"
|
|
||||||
readme = "README.md"
|
|
||||||
requires-python = ">=3.13"
|
|
||||||
dependencies = [
|
|
||||||
"ldap3>=2.9.1",
|
|
||||||
]
|
|
||||||
Binary file not shown.
|
|
@ -3,11 +3,11 @@
|
||||||
Serveur du Générateur de Certificats SSL.
|
Serveur du Générateur de Certificats SSL.
|
||||||
|
|
||||||
Remplace `python -m http.server` : sert les pages ET écrit les certificats
|
Remplace `python -m http.server` : sert les pages ET écrit les certificats
|
||||||
sur le disque dans GENERATEUR_CERTIFICATES/LISTS_ALL_CERT/ (créé au besoin),
|
sur le disque dans cert-generator/LISTS_ALL_CERT/ (créé au besoin),
|
||||||
sans aucune sélection de dossier côté navigateur.
|
sans aucune sélection de dossier côté navigateur.
|
||||||
|
|
||||||
Usage :
|
Usage :
|
||||||
python3 cert_server.py # http://127.0.0.1:8000/GENERATEUR_CERTIFICATES/dashboard.html
|
python3 cert_server.py # http://127.0.0.1:8000/cert-generator/dashboard.html
|
||||||
python3 cert_server.py 8080 # port custom
|
python3 cert_server.py 8080 # port custom
|
||||||
|
|
||||||
Sert la RACINE du projet (parent), donc les 3 apps + le switcher fonctionnent.
|
Sert la RACINE du projet (parent), donc les 3 apps + le switcher fonctionnent.
|
||||||
|
|
@ -17,7 +17,7 @@ from http.server import SimpleHTTPRequestHandler, ThreadingHTTPServer
|
||||||
|
|
||||||
PORT = int(sys.argv[1]) if len(sys.argv) > 1 else 8000
|
PORT = int(sys.argv[1]) if len(sys.argv) > 1 else 8000
|
||||||
|
|
||||||
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) # .../GENERATEUR_CERTIFICATES
|
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) # .../cert-generator
|
||||||
ROOT = os.path.dirname(SCRIPT_DIR) # racine projet
|
ROOT = os.path.dirname(SCRIPT_DIR) # racine projet
|
||||||
WORK = os.path.join(SCRIPT_DIR, 'LISTS_ALL_CERT') # dossier de travail (disque)
|
WORK = os.path.join(SCRIPT_DIR, 'LISTS_ALL_CERT') # dossier de travail (disque)
|
||||||
ARCH = os.path.join(WORK, 'archives')
|
ARCH = os.path.join(WORK, 'archives')
|
||||||
|
|
@ -167,7 +167,7 @@ class Handler(SimpleHTTPRequestHandler):
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
ensure_work()
|
ensure_work()
|
||||||
os.chdir(ROOT)
|
os.chdir(ROOT)
|
||||||
url = 'http://127.0.0.1:%d/GENERATEUR_CERTIFICATES/dashboard.html' % PORT
|
url = 'http://127.0.0.1:%d/cert-generator/dashboard.html' % PORT
|
||||||
print('Générateur Certificats : %s' % url)
|
print('Générateur Certificats : %s' % url)
|
||||||
print('Dossier disque : %s (créé automatiquement)' % WORK)
|
print('Dossier disque : %s (créé automatiquement)' % WORK)
|
||||||
print('Ctrl+C pour arrêter.')
|
print('Ctrl+C pour arrêter.')
|
||||||
|
|
@ -181,12 +181,12 @@
|
||||||
<div class="brand"><div class="brand-mark">◧</div><div><b>Outils Infra</b><small>portail</small></div></div>
|
<div class="brand"><div class="brand-mark">◧</div><div><b>Outils Infra</b><small>portail</small></div></div>
|
||||||
<div class="psw">
|
<div class="psw">
|
||||||
<div class="psw-title">Projets</div>
|
<div class="psw-title">Projets</div>
|
||||||
<a href="../CMDB/cmdb.html"><div class="psw-ico">◧</div><div class="psw-txt"><b>CMDB</b><small>Machines, réseaux, salles</small></div></a>
|
<a href="../cmdb/cmdb.html"><div class="psw-ico">◧</div><div class="psw-txt"><b>CMDB</b><small>Machines, réseaux, salles</small></div></a>
|
||||||
<a class="active" href="dashboard.html"><div class="psw-ico">🔐</div><div class="psw-txt"><b>Générateur certificats</b><small>Clés RSA, CSR, SSL</small></div></a>
|
<a class="active" href="dashboard.html"><div class="psw-ico">🔐</div><div class="psw-txt"><b>Générateur certificats</b><small>Clés RSA, CSR, SSL</small></div></a>
|
||||||
<a href="../GENERATEUR_SWITCH/switch_vlan_mapper.html"><div class="psw-ico">🔌</div><div class="psw-txt"><b>Configuration switch</b><small>VLANs, export config</small></div></a>
|
<a href="../switch-config/switch_vlan_mapper.html"><div class="psw-ico">🔌</div><div class="psw-txt"><b>Configuration switch</b><small>VLANs, export config</small></div></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="psw" style="margin-top:auto;padding-top:14px;border-top:1px solid var(--line)">
|
<div class="psw" style="margin-top:auto;padding-top:14px;border-top:1px solid var(--line)">
|
||||||
<a href="../CMDB/preferences.html"><div class="psw-ico">⚙</div><div class="psw-txt"><b>Préférences</b><small>Types, tickets, réglages</small></div></a>
|
<a href="../cmdb/preferences.html"><div class="psw-ico">⚙</div><div class="psw-txt"><b>Préférences</b><small>Types, tickets, réglages</small></div></a>
|
||||||
<div id="dbStatus" style="font-size:11px;color:var(--muted);padding:4px 8px;word-break:break-word;line-height:1.5;margin-top:6px">● Base CMDB</div>
|
<div id="dbStatus" style="font-size:11px;color:var(--muted);padding:4px 8px;word-break:break-word;line-height:1.5;margin-top:6px">● Base CMDB</div>
|
||||||
</div>
|
</div>
|
||||||
</aside>
|
</aside>
|
||||||
1
cmdb
Submodule
1
cmdb
Submodule
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit b06252daad728064a212411a684e2e95a1a5006e
|
||||||
|
|
@ -1,335 +0,0 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**********************************************************
|
|
||||||
|
|
||||||
Use is restricted to authorized users
|
|
||||||
who must comply with the Electronic Communications Policy.
|
|
||||||
Usage is monitored; unauthorized use will be prosecuted.
|
|
||||||
|
|
||||||
**********************************************************
|
|
||||||
|
|
||||||
**********************************************************
|
|
||||||
|
|
||||||
Connected to 5130-INV-1714 GEMALTO on MEYREUIL (FRANCE)
|
|
||||||
|
|
||||||
Use is restricted to authorized users
|
|
||||||
who must comply with the Electronic Communications Policy.
|
|
||||||
Usage is monitored; unauthorized use will be prosecuted.
|
|
||||||
|
|
||||||
**********************************************************
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
******************************************************************************
|
|
||||||
* Copyright (c) 2010-2019 Hewlett Packard Enterprise Development LP *
|
|
||||||
* Without the owner's prior written consent, *
|
|
||||||
* no decompiling or reverse-engineering shall be allowed. *
|
|
||||||
******************************************************************************
|
|
||||||
|
|
||||||
<5130-INV-1714>display current-configuration interface
|
|
||||||
#
|
|
||||||
interface NULL0
|
|
||||||
#
|
|
||||||
interface Vlan-interface17
|
|
||||||
description SW_MGMT
|
|
||||||
ip address 10.0.0.2 255.255.255.0
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/1
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/2
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/3
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/4
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/5
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/6
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/7
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/8
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/9
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/10
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/11
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/12
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/13
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/14
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/15
|
|
||||||
port access vlan 16
|
|
||||||
duplex full
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/16
|
|
||||||
port access vlan 16
|
|
||||||
duplex full
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/17
|
|
||||||
port access vlan 16
|
|
||||||
duplex full
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/18
|
|
||||||
port access vlan 16
|
|
||||||
speed 1000
|
|
||||||
duplex full
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/19
|
|
||||||
port access vlan 16
|
|
||||||
duplex full
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/20
|
|
||||||
port access vlan 16
|
|
||||||
duplex full
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/21
|
|
||||||
port access vlan 16
|
|
||||||
duplex full
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/22
|
|
||||||
port access vlan 16
|
|
||||||
duplex full
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/23
|
|
||||||
port access vlan 18
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/24
|
|
||||||
port access vlan 18
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/25
|
|
||||||
port access vlan 18
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/26
|
|
||||||
port access vlan 18
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/27
|
|
||||||
port access vlan 18
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/28
|
|
||||||
port access vlan 18
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/29
|
|
||||||
port access vlan 18
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/30
|
|
||||||
port access vlan 18
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/31
|
|
||||||
port access vlan 18
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/32
|
|
||||||
port access vlan 18
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/33
|
|
||||||
port access vlan 18
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/34
|
|
||||||
port access vlan 18
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/35
|
|
||||||
port access vlan 18
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/36
|
|
||||||
port access vlan 18
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/37
|
|
||||||
description ** ULAB **
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/38
|
|
||||||
description ** ULAB **
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/39
|
|
||||||
description ** ULAB **
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/40
|
|
||||||
description ** ULAB **
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/41
|
|
||||||
description ** ULAB **
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/42
|
|
||||||
description ** ULAB **
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/43
|
|
||||||
description ** ULAB **
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/44
|
|
||||||
description ** ULAB **
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/45
|
|
||||||
description ** ULAB **
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/46
|
|
||||||
description ** ULAB **
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/47
|
|
||||||
description ** ULAB **
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/48
|
|
||||||
description ** ULAB **
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface Ten-GigabitEthernet1/0/49
|
|
||||||
description *** Uplink TRUNK_TO_CORE ***
|
|
||||||
port link-type trunk
|
|
||||||
port trunk permit vlan all
|
|
||||||
#
|
|
||||||
interface Ten-GigabitEthernet1/0/50
|
|
||||||
description ###TRUNK_TO_COREXXXX###
|
|
||||||
port link-type trunk
|
|
||||||
port trunk permit vlan all
|
|
||||||
stp instance 0 cost 120
|
|
||||||
#
|
|
||||||
interface Ten-GigabitEthernet1/0/51
|
|
||||||
#
|
|
||||||
interface Ten-GigabitEthernet1/0/52
|
|
||||||
#
|
|
||||||
return
|
|
||||||
<5130-INV-1714>
|
|
||||||
|
|
@ -1,686 +0,0 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**********************************************************
|
|
||||||
|
|
||||||
Use is restricted to authorized users
|
|
||||||
who must comply with the Electronic Communications Policy.
|
|
||||||
Usage is monitored; unauthorized use will be prosecuted.
|
|
||||||
|
|
||||||
**********************************************************
|
|
||||||
|
|
||||||
**********************************************************
|
|
||||||
|
|
||||||
Connected to 5130-INV-1714 GEMALTO on MEYREUIL (FRANCE)
|
|
||||||
|
|
||||||
Use is restricted to authorized users
|
|
||||||
who must comply with the Electronic Communications Policy.
|
|
||||||
Usage is monitored; unauthorized use will be prosecuted.
|
|
||||||
|
|
||||||
**********************************************************
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
******************************************************************************
|
|
||||||
* Copyright (c) 2010-2019 Hewlett Packard Enterprise Development LP *
|
|
||||||
* Without the owner's prior written consent, *
|
|
||||||
* no decompiling or reverse-engineering shall be allowed. *
|
|
||||||
******************************************************************************
|
|
||||||
|
|
||||||
<5130-INV-1714>display current-configuration interface
|
|
||||||
#
|
|
||||||
interface NULL0
|
|
||||||
#
|
|
||||||
interface Vlan-interface17
|
|
||||||
description SW_MGMT
|
|
||||||
ip address 10.0.0.2 255.255.255.0
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/1
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/2
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/3
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/4
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/5
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/6
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/7
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/8
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/9
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/10
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/11
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/12
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/13
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/14
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/15
|
|
||||||
port access vlan 16
|
|
||||||
duplex full
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/16
|
|
||||||
port access vlan 16
|
|
||||||
duplex full
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/17
|
|
||||||
port access vlan 16
|
|
||||||
duplex full
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/18
|
|
||||||
port access vlan 16
|
|
||||||
speed 1000
|
|
||||||
duplex full
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/19
|
|
||||||
port access vlan 16
|
|
||||||
duplex full
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/20
|
|
||||||
port access vlan 16
|
|
||||||
duplex full
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/21
|
|
||||||
port access vlan 16
|
|
||||||
duplex full
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/22
|
|
||||||
port access vlan 16
|
|
||||||
duplex full
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/23
|
|
||||||
port access vlan 18
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/24
|
|
||||||
port access vlan 18
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/25
|
|
||||||
port access vlan 18
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/26
|
|
||||||
port access vlan 18
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/27
|
|
||||||
port access vlan 18
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/28
|
|
||||||
port access vlan 18
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/29
|
|
||||||
port access vlan 18
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/30
|
|
||||||
port access vlan 18
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/31
|
|
||||||
port access vlan 18
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/32
|
|
||||||
port access vlan 18
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/33
|
|
||||||
port access vlan 18
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/34
|
|
||||||
port access vlan 18
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/35
|
|
||||||
port access vlan 18
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/36
|
|
||||||
port access vlan 18
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/37
|
|
||||||
description ** ULAB **
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/38
|
|
||||||
description ** ULAB **
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/39
|
|
||||||
description ** ULAB **
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/40
|
|
||||||
description ** ULAB **
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/41
|
|
||||||
description ** ULAB **
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/42
|
|
||||||
description ** ULAB **
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/43
|
|
||||||
description ** ULAB **
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/44
|
|
||||||
description ** ULAB **
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/45
|
|
||||||
description ** ULAB **
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/46
|
|
||||||
description ** ULAB **
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/47
|
|
||||||
description ** ULAB **
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet1/0/48
|
|
||||||
description ** ULAB **
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface Ten-GigabitEthernet1/0/49
|
|
||||||
description *** Uplink TRUNK_TO_CORE ***
|
|
||||||
port link-type trunk
|
|
||||||
port trunk permit vlan all
|
|
||||||
#
|
|
||||||
interface Ten-GigabitEthernet1/0/50
|
|
||||||
description ###TRUNK_TO_COREXXXX###
|
|
||||||
port link-type trunk
|
|
||||||
port trunk permit vlan all
|
|
||||||
stp instance 0 cost 120
|
|
||||||
#
|
|
||||||
interface Ten-GigabitEthernet1/0/51
|
|
||||||
#
|
|
||||||
interface Ten-GigabitEthernet1/0/52
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/1
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/2
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/3
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/4
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/5
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/6
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/7
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/8
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/9
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/10
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/11
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/12
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/13
|
|
||||||
port access vlan 16
|
|
||||||
duplex full
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/14
|
|
||||||
port access vlan 16
|
|
||||||
duplex full
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/15
|
|
||||||
port access vlan 16
|
|
||||||
duplex full
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/16
|
|
||||||
port access vlan 16
|
|
||||||
duplex full
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/17
|
|
||||||
port access vlan 16
|
|
||||||
duplex full
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/18
|
|
||||||
port access vlan 16
|
|
||||||
duplex full
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/19
|
|
||||||
port access vlan 16
|
|
||||||
duplex full
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/20
|
|
||||||
port access vlan 16
|
|
||||||
duplex full
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/21
|
|
||||||
port access vlan 16
|
|
||||||
duplex full
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/22
|
|
||||||
port access vlan 16
|
|
||||||
duplex full
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/23
|
|
||||||
port access vlan 16
|
|
||||||
duplex full
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/24
|
|
||||||
port access vlan 16
|
|
||||||
duplex full
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/25
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/26
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/27
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/28
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/29
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/30
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/31
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/32
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/33
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/34
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/35
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/36
|
|
||||||
stp edged-port
|
|
||||||
undo lldp enable
|
|
||||||
undo dot1x handshake
|
|
||||||
dot1x mandatory-domain example_radius
|
|
||||||
undo dot1x multicast-trigger
|
|
||||||
dot1x re-authenticate
|
|
||||||
port-security port-mode userlogin-secure
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/37
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/38
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/39
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/40
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/41
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/42
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/43
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/44
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/45
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/46
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/47
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface GigabitEthernet2/0/48
|
|
||||||
port access vlan 18
|
|
||||||
undo lldp enable
|
|
||||||
#
|
|
||||||
interface Ten-GigabitEthernet2/0/49
|
|
||||||
description *** Uplink TRUNK_TO_CORE ***
|
|
||||||
port link-type trunk
|
|
||||||
port trunk permit vlan all
|
|
||||||
#
|
|
||||||
interface Ten-GigabitEthernet2/0/50
|
|
||||||
description ###TRUNK_TO_COREXXXX###
|
|
||||||
port link-type trunk
|
|
||||||
port trunk permit vlan all
|
|
||||||
stp instance 0 cost 120
|
|
||||||
#
|
|
||||||
interface Ten-GigabitEthernet2/0/51
|
|
||||||
#
|
|
||||||
interface Ten-GigabitEthernet2/0/52
|
|
||||||
#
|
|
||||||
return
|
|
||||||
<5130-INV-STACK>
|
|
||||||
|
|
@ -2,10 +2,10 @@
|
||||||
<html lang="fr">
|
<html lang="fr">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta http-equiv="refresh" content="0; url=CMDB/cmdb.html">
|
<meta http-equiv="refresh" content="0; url=cmdb/cmdb.html">
|
||||||
<title>CMDB</title>
|
<title>CMDB</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<a href="CMDB/cmdb.html">Redirection vers la CMDB…</a>
|
<a href="cmdb/cmdb.html">Redirection vers la CMDB…</a>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
11
proxy.sh
11
proxy.sh
|
|
@ -1,11 +0,0 @@
|
||||||
# Renseignez l'URL de votre proxy d'entreprise (host:port).
|
|
||||||
PROXY_URL="http://PROXY_HOST:PROXY_PORT/"
|
|
||||||
|
|
||||||
export http_proxy="$PROXY_URL"
|
|
||||||
export https_proxy="$PROXY_URL"
|
|
||||||
export ftp_proxy="$PROXY_URL"
|
|
||||||
|
|
||||||
# For curl
|
|
||||||
export HTTP_PROXY="$PROXY_URL"
|
|
||||||
export HTTPS_PROXY="$PROXY_URL"
|
|
||||||
export FTP_PROXY="$PROXY_URL"
|
|
||||||
10
server.py
10
server.py
|
|
@ -10,7 +10,7 @@ Un seul serveur, lancé à la racine du projet :
|
||||||
- http://127.0.0.1:8000/ → redirige vers la CMDB
|
- http://127.0.0.1:8000/ → redirige vers la CMDB
|
||||||
- CMDB : base partagée cmdb.db sourcée automatiquement (/db, versionnée)
|
- CMDB : base partagée cmdb.db sourcée automatiquement (/db, versionnée)
|
||||||
- Générateur de certificats : écrit sur le disque dans
|
- Générateur de certificats : écrit sur le disque dans
|
||||||
GENERATEUR_CERTIFICATES/LISTS_ALL_CERT/ (créé au besoin), aucun prompt
|
cert-generator/LISTS_ALL_CERT/ (créé au besoin), aucun prompt
|
||||||
- Sert les 3 applications + le switcher (liens relatifs OK)
|
- Sert les 3 applications + le switcher (liens relatifs OK)
|
||||||
- Recherche AD/LDAP de la CMDB conservée (nécessite `pip install ldap3`)
|
- Recherche AD/LDAP de la CMDB conservée (nécessite `pip install ldap3`)
|
||||||
"""
|
"""
|
||||||
|
|
@ -21,8 +21,8 @@ from urllib.parse import urlparse, parse_qs
|
||||||
PORT = int(sys.argv[1]) if len(sys.argv) > 1 else 8000
|
PORT = int(sys.argv[1]) if len(sys.argv) > 1 else 8000
|
||||||
|
|
||||||
HERE = os.path.dirname(os.path.abspath(__file__)) # racine projet
|
HERE = os.path.dirname(os.path.abspath(__file__)) # racine projet
|
||||||
CMDB_DIR = os.path.join(HERE, 'CMDB')
|
CMDB_DIR = os.path.join(HERE, 'cmdb')
|
||||||
CERT_DIR = os.path.join(HERE, 'GENERATEUR_CERTIFICATES')
|
CERT_DIR = os.path.join(HERE, 'cert-generator')
|
||||||
WORK = os.path.join(CERT_DIR, 'LISTS_ALL_CERT') # dossier de travail certs (disque)
|
WORK = os.path.join(CERT_DIR, 'LISTS_ALL_CERT') # dossier de travail certs (disque)
|
||||||
ARCH = os.path.join(WORK, 'archives')
|
ARCH = os.path.join(WORK, 'archives')
|
||||||
|
|
||||||
|
|
@ -84,7 +84,7 @@ class Handler(SimpleHTTPRequestHandler):
|
||||||
|
|
||||||
def _cert_api(self):
|
def _cert_api(self):
|
||||||
p = self.path.split('?', 1)[0]
|
p = self.path.split('?', 1)[0]
|
||||||
if '/GENERATEUR_CERTIFICATES/api/' in p:
|
if '/cert-generator/api/' in p:
|
||||||
return p.split('/api/', 1)[1]
|
return p.split('/api/', 1)[1]
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
@ -93,7 +93,7 @@ class Handler(SimpleHTTPRequestHandler):
|
||||||
# racine → CMDB
|
# racine → CMDB
|
||||||
if self.path in ('/', '/index.html'):
|
if self.path in ('/', '/index.html'):
|
||||||
self.send_response(302)
|
self.send_response(302)
|
||||||
self.send_header('Location', '/CMDB/cmdb.html')
|
self.send_header('Location', '/cmdb/cmdb.html')
|
||||||
self.end_headers()
|
self.end_headers()
|
||||||
return
|
return
|
||||||
# base CMDB partagée
|
# base CMDB partagée
|
||||||
|
|
|
||||||
|
|
@ -605,12 +605,12 @@ button:active { transform: scale(0.98); }
|
||||||
<div class="brand"><div class="brand-mark">◧</div><div><b>Outils Infra</b><small>portail</small></div></div>
|
<div class="brand"><div class="brand-mark">◧</div><div><b>Outils Infra</b><small>portail</small></div></div>
|
||||||
<div class="psw">
|
<div class="psw">
|
||||||
<div class="psw-title">Projets</div>
|
<div class="psw-title">Projets</div>
|
||||||
<a href="../CMDB/cmdb.html"><div class="psw-ico">◧</div><div class="psw-txt"><b>CMDB</b><small>Machines, réseaux, salles</small></div></a>
|
<a href="../cmdb/cmdb.html"><div class="psw-ico">◧</div><div class="psw-txt"><b>CMDB</b><small>Machines, réseaux, salles</small></div></a>
|
||||||
<a href="../GENERATEUR_CERTIFICATES/dashboard.html"><div class="psw-ico">🔐</div><div class="psw-txt"><b>Générateur certificats</b><small>Clés RSA, CSR, SSL</small></div></a>
|
<a href="../cert-generator/dashboard.html"><div class="psw-ico">🔐</div><div class="psw-txt"><b>Générateur certificats</b><small>Clés RSA, CSR, SSL</small></div></a>
|
||||||
<a class="active" href="switch_vlan_mapper.html"><div class="psw-ico">🔌</div><div class="psw-txt"><b>Configuration switch</b><small>VLANs, export config</small></div></a>
|
<a class="active" href="switch_vlan_mapper.html"><div class="psw-ico">🔌</div><div class="psw-txt"><b>Configuration switch</b><small>VLANs, export config</small></div></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="psw" style="margin-top:auto;padding-top:14px;border-top:1px solid var(--border)">
|
<div class="psw" style="margin-top:auto;padding-top:14px;border-top:1px solid var(--border)">
|
||||||
<a href="../CMDB/preferences.html"><div class="psw-ico">⚙</div><div class="psw-txt"><b>Préférences</b><small>Types, tickets, réglages</small></div></a>
|
<a href="../cmdb/preferences.html"><div class="psw-ico">⚙</div><div class="psw-txt"><b>Préférences</b><small>Types, tickets, réglages</small></div></a>
|
||||||
<div id="dbStatus" style="font-size:11px;color:var(--muted);padding:4px 8px;word-break:break-word;line-height:1.5;margin-top:6px">● Base CMDB</div>
|
<div id="dbStatus" style="font-size:11px;color:var(--muted);padding:4px 8px;word-break:break-word;line-height:1.5;margin-top:6px">● Base CMDB</div>
|
||||||
</div>
|
</div>
|
||||||
</aside>
|
</aside>
|
||||||
Loading…
Add table
Add a link
Reference in a new issue