mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
Fix the forwardingrule databag
This commit is contained in:
parent
7fc3365459
commit
8c5dba31d0
@ -5,29 +5,56 @@ def merge(dbag, rules):
|
||||
source_ip = rule["source_ip_address"]
|
||||
destination_ip = rule["destination_ip_address"]
|
||||
revoke = rule["revoke"]
|
||||
|
||||
newrule = dict()
|
||||
newrule["public_ip"] = source_ip
|
||||
newrule["internal_ip"] = destination_ip
|
||||
|
||||
if rules["type"] == "staticnatrules":
|
||||
newrule["type"] = "staticnat"
|
||||
elif rules["type"] == "forwardrules":
|
||||
newrule["type"] = "forward"
|
||||
newrule["public_ports"] = rule["source_port_range"]
|
||||
newrule["internal_ports"] = rule["destination_port_range"]
|
||||
newrule["protocol"] = rule["protocol"]
|
||||
|
||||
if not revoke:
|
||||
if rules["type"] == "staticnatrules":
|
||||
snatrule = dict()
|
||||
snatrule["type"] = "staticnat"
|
||||
snatrule["public_ip"] = source_ip
|
||||
snatrule["internal_ip"] = destination_ip
|
||||
dbag[source_ip] = ( snatrule )
|
||||
dbag[source_ip] = [ newrule ]
|
||||
elif rules["type"] == "forwardrules":
|
||||
pfrule = dict()
|
||||
pfrule["type"] = "forward"
|
||||
pfrule["public_ip"] = source_ip
|
||||
pfrule["public_ports"] = rule["source_port_range"]
|
||||
pfrule["internal_ip"] = destination_ip
|
||||
pfrule["interal_ports"] = rule["destination_port_range"]
|
||||
pfrule["prootocol"] = rule["protocol"]
|
||||
index = -1
|
||||
if source_ip in dbag.keys():
|
||||
for forward in dbag[source_ip]:
|
||||
print "find duplicate here"
|
||||
if ruleCompare(forward, newrule):
|
||||
index = dbag[source_ip].index(forward)
|
||||
if not index == -1:
|
||||
dbag[source_ip][index] = newrule
|
||||
else:
|
||||
dbag[source_ip].append(newrule)
|
||||
else:
|
||||
dbag[source_ip] = ( pfrule )
|
||||
elif revoke:
|
||||
dbag[source_ip] = [ newrule ]
|
||||
else:
|
||||
if rules["type"] == "staticnatrules":
|
||||
if source_ip in dbag.keys():
|
||||
del dbag[source_ip]
|
||||
|
||||
elif rules["type"] == "forwardrules":
|
||||
if source_ip in dbag.keys():
|
||||
index = -1
|
||||
for forward in dbag[source_ip]:
|
||||
if ruleCompare(forward, newrule):
|
||||
index = dbag[source_ip].index(forward)
|
||||
print "removing index %s" % str(index)
|
||||
if not index == -1:
|
||||
del dbag[source_ip][index]
|
||||
|
||||
|
||||
return dbag
|
||||
|
||||
# Compare function checks only the public side, those must be equal the internal details could change
|
||||
def ruleCompare(ruleA, ruleB):
|
||||
if not ruleA["type"] == ruleB["type"]:
|
||||
return False
|
||||
if ruleA["type"] == "staticnat":
|
||||
return ruleA["public_ip"] == ruleB["public_ip"]
|
||||
elif ruleA["type"] == "forward":
|
||||
return ruleA["public_ip"] == ruleB["public_ip"] and ruleA["public_ports"] == ruleB["public_ports"] and ruleA["protocol"] == ruleB["protocol"]
|
||||
@ -65,7 +65,10 @@ class updateDataBag:
|
||||
|
||||
def process(self):
|
||||
self.db = dataBag()
|
||||
self.db.setKey( self.qFile.type )
|
||||
if ( self.qFile.type == "staticnatrules" or self.qFile.type == "forwardrules"):
|
||||
self.db.setKey("forwardingrules")
|
||||
else:
|
||||
self.db.setKey( self.qFile.type )
|
||||
dbag = self.db.load( )
|
||||
logging.info("Command of type %s received", self.qFile.type)
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user