[trigger] Ajout d'un trigger mac_ip pour le parefeu.
This commit is contained in:
parent
31df6dc770
commit
f41ab72706
3 changed files with 62 additions and 16 deletions
|
@ -4,8 +4,7 @@
|
||||||
# Basic trigger host, will be imported from any other
|
# Basic trigger host, will be imported from any other
|
||||||
# Contains a TriggerFactory, which records the host functions
|
# Contains a TriggerFactory, which records the host functions
|
||||||
# decorated with @record.
|
# decorated with @record.
|
||||||
# Contains a trigger function which should be imported as its with
|
# Contains a trigger which calls good functions from factory.
|
||||||
# record, to be used in hosts contained in hosts/ directory.
|
|
||||||
#
|
#
|
||||||
# Author : Pierre-Elliott Bécue <becue@crans.org>
|
# Author : Pierre-Elliott Bécue <becue@crans.org>
|
||||||
# License : GPLv3
|
# License : GPLv3
|
||||||
|
|
|
@ -128,7 +128,7 @@ def event(body=()):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
logger.info("Received message %s…", body)
|
logger.info("Received message %r…", body)
|
||||||
|
|
||||||
diff = diff_o_matic(body)
|
diff = diff_o_matic(body)
|
||||||
|
|
||||||
|
@ -157,14 +157,18 @@ def trigger_mac_ip(body, diff):
|
||||||
fw = {'add': (macs[1], ips[1])}
|
fw = {'add': (macs[1], ips[1])}
|
||||||
elif not macs[1]:
|
elif not macs[1]:
|
||||||
# Destruction d'une machine.
|
# Destruction d'une machine.
|
||||||
to_send = {'delete': (macs[0], ips[0])}
|
dhcp = {'delete': (macs[0], ips[0])}
|
||||||
fw = {'delete': (macs[0], ips[0])}
|
fw = {'delete': (macs[0], ips[0])}
|
||||||
else:
|
else:
|
||||||
# Mise à jour.
|
# Mise à jour.
|
||||||
to_send = {'update': (macs[0], ips[0], macs[1], ips[1], hostnames[1])}
|
dhcp = {'update': (macs[0], ips[0], macs[1], ips[1], hostnames[1])}
|
||||||
fw = {'update': (macs[0], ips[0], macs[1], ips[1])}
|
fw = {'update': (macs[0], ips[0], macs[1], ips[1])}
|
||||||
trigger_send('dhcp', to_send)
|
logger.info("Sending DHCP trigger with body %r", dhcp)
|
||||||
trigger_send('firewall_mac_ip', fw)
|
trigger_send("dhcp", dhcp)
|
||||||
|
logger.info("Sending firewall trigger for mac_ip with body %r", fw)
|
||||||
|
trigger_send("firewall", ("mac_ip", fw))
|
||||||
|
logger.info("trigger_mac_ip done.")
|
||||||
|
|
||||||
def trigger_send(ttype, to_send):
|
def trigger_send(routing_key, body):
|
||||||
print "Sending trigger %s with %s…" % (ttype, to_send)
|
sender = Event("civet")
|
||||||
|
sender.send_message(routing_key, body)
|
||||||
|
|
|
@ -2,20 +2,63 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
#
|
#
|
||||||
# Service in charge of firewall for trigger.
|
# Service in charge of firewall for trigger.
|
||||||
|
# Contains multiple subservices for each special
|
||||||
|
# part of firewall.
|
||||||
#
|
#
|
||||||
# Author : Pierre-Elliott Bécue <becue@crans.org>
|
# Author : Pierre-Elliott Bécue <becue@crans.org>
|
||||||
# Licence : GPLv3
|
# Licence : GPLv3
|
||||||
|
# Date : 15/06/2014
|
||||||
|
|
||||||
import lc_ldap.shortcuts
|
import lc_ldap.shortcuts
|
||||||
from gestion.trigger.host import record
|
from gestion.trigger.host import record
|
||||||
import cranslib.clogger as clogger
|
import cranslib.clogger as clogger
|
||||||
import gestion.config.dhcp as dhcp_config
|
import gestion.config.firewall as firewall_config
|
||||||
import gestion.secrets_new as secrets_new
|
import gestion.trigger.firewall4.firewall4 as firewall4
|
||||||
import socket
|
|
||||||
import gestion.affichage as affichage
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import gestion.iptools as iptools
|
|
||||||
|
|
||||||
logger = clogger.CLogger("trigger.firewall", "debug")
|
logger = clogger.CLogger("trigger.firewall", "debug")
|
||||||
hostname = socket.gethostname().split(".")[0] + ".adm.crans.org"
|
|
||||||
|
class FwFunFactory(object):
|
||||||
|
"""Factory containing which function is part of the trigger set
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
_meths = {}
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def register(cls, key, value):
|
||||||
|
cls._meths[key] = value
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get(cls, key):
|
||||||
|
return cls._meths.get(key, None)
|
||||||
|
|
||||||
|
def fwrecord(function):
|
||||||
|
FwFunFactory.register(function.func_name, function)
|
||||||
|
|
||||||
|
def fwcall(fwfun):
|
||||||
|
return FwFunFactory.get(fwfun)
|
||||||
|
|
||||||
|
@record
|
||||||
|
def firewall(body=()):
|
||||||
|
if len(body) != 2:
|
||||||
|
logger.warning("Received body %r, this format is incorrect, discarding.", body)
|
||||||
|
(service, data) = body
|
||||||
|
logger.info("Calling service %s for data %r", service, data)
|
||||||
|
fwcall(service)(data)
|
||||||
|
|
||||||
|
@fwrecord
|
||||||
|
def mac_ip(body):
|
||||||
|
host_fw = firewall4.firewall()
|
||||||
|
if body and isinstance(body, dict):
|
||||||
|
for (mac, ip) in body.get("add", ()):
|
||||||
|
logger.info("Adding mac_ip %s,%s", mac, ip)
|
||||||
|
host_fw.mac_ip_append(mac, ip)
|
||||||
|
for (mac, ip) in body.get("delete", ()):
|
||||||
|
logger.info("Removing mac_ip %s,%s", mac, ip)
|
||||||
|
host_fw.mac_ip_remove(mac, ip)
|
||||||
|
for (rmac, rip, mac, ip) in body.get("update", ()):
|
||||||
|
logger.info("Updating mac_ip %s,%s with %s,%s", rmac, rip, mac, ip)
|
||||||
|
host_fw.mac_ip_remove(rmac, rip)
|
||||||
|
host_fw.mac_ip_append(mac, ip)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue