59 lines
2.1 KiB
SQL
59 lines
2.1 KiB
SQL
-- Rattache chaque serveur à une des 3 zones SANEF :
|
|
-- - DMZ : déjà attribuée via le script update_zone_dmz.sql (depuis xlsx)
|
|
-- - EMV : serveurs avec 'emv' dans le hostname (zone PCI-DSS)
|
|
-- - LAN : tous les autres (par défaut)
|
|
-- Idempotent. Ne touche pas aux serveurs déjà en DMZ.
|
|
|
|
\echo '═══ AVANT ═══'
|
|
|
|
SELECT COALESCE(z.name, '∅ NULL') AS zone, COUNT(*) AS nb
|
|
FROM public.servers s
|
|
LEFT JOIN public.zones z ON s.zone_id = z.id
|
|
GROUP BY z.name
|
|
ORDER BY z.name NULLS FIRST;
|
|
|
|
\echo '═══ 1) Création zones LAN et EMV si absentes ═══'
|
|
|
|
INSERT INTO public.zones (name, description, is_dmz)
|
|
SELECT 'LAN', 'Zone LAN par défaut (Satellite vpdsiasat2)', false
|
|
WHERE NOT EXISTS (SELECT 1 FROM public.zones WHERE LOWER(name) = 'lan');
|
|
|
|
INSERT INTO public.zones (name, description, is_dmz)
|
|
SELECT 'EMV', 'Zone EMV (PCI-DSS, hostname contient ''emv'')', false
|
|
WHERE NOT EXISTS (SELECT 1 FROM public.zones WHERE LOWER(name) = 'emv');
|
|
|
|
\echo '═══ 2) Affectation EMV (hostname contient ''emv'', sauf DMZ) ═══'
|
|
|
|
UPDATE public.servers s
|
|
SET zone_id = (SELECT id FROM public.zones WHERE LOWER(name) = 'emv' LIMIT 1),
|
|
updated_at = NOW()
|
|
WHERE LOWER(s.hostname::text) LIKE '%emv%'
|
|
AND ( s.zone_id IS NULL
|
|
OR s.zone_id NOT IN (SELECT id FROM public.zones
|
|
WHERE is_dmz = true OR LOWER(name) = 'dmz') );
|
|
|
|
\echo '═══ 3) Affectation LAN par défaut (zone_id NULL restants) ═══'
|
|
|
|
UPDATE public.servers
|
|
SET zone_id = (SELECT id FROM public.zones WHERE LOWER(name) = 'lan' LIMIT 1),
|
|
updated_at = NOW()
|
|
WHERE zone_id IS NULL;
|
|
|
|
\echo '═══ APRÈS ═══'
|
|
|
|
SELECT COALESCE(z.name, '∅ NULL') AS zone, COUNT(*) AS nb
|
|
FROM public.servers s
|
|
LEFT JOIN public.zones z ON s.zone_id = z.id
|
|
GROUP BY z.name
|
|
ORDER BY z.name NULLS FIRST;
|
|
|
|
\echo '═══ Vérification : EMV doit contenir uniquement les hostnames *emv* ═══'
|
|
|
|
SELECT z.name AS zone, COUNT(*) AS nb,
|
|
MIN(s.hostname::text) AS exemple_min,
|
|
MAX(s.hostname::text) AS exemple_max
|
|
FROM public.servers s
|
|
JOIN public.zones z ON s.zone_id = z.id
|
|
WHERE LOWER(z.name) = 'emv'
|
|
GROUP BY z.name;
|