Fix several bugs
This commit is contained in:
parent
de8c79755b
commit
66078223a4
|
@ -126,7 +126,8 @@ def getNetworkACLs(zk_conn, vni, _direction):
|
||||||
ordered_acls[order] = acl
|
ordered_acls[order] = acl
|
||||||
|
|
||||||
for order in sorted(ordered_acls.keys()):
|
for order in sorted(ordered_acls.keys()):
|
||||||
full_acl_list.append({'direction': direction, 'description': ordered_acls[order]})
|
rule = zkhandler.readdata(zk_conn, '/networks/{}/firewall_rules/{}/{}/rule'.format(vni, direction, acl))
|
||||||
|
full_acl_list.append({'direction': direction, 'order': int(order), 'description': ordered_acls[order], 'rule': rule})
|
||||||
|
|
||||||
return full_acl_list
|
return full_acl_list
|
||||||
|
|
||||||
|
@ -146,7 +147,7 @@ def getNetworkInformation(zk_conn, vni):
|
||||||
|
|
||||||
# Construct a data structure to represent the data
|
# Construct a data structure to represent the data
|
||||||
network_information = {
|
network_information = {
|
||||||
'vni': vni,
|
'vni': int(vni),
|
||||||
'description': description,
|
'description': description,
|
||||||
'type': nettype,
|
'type': nettype,
|
||||||
'domain': domain,
|
'domain': domain,
|
||||||
|
@ -191,7 +192,8 @@ def getACLInformation(zk_conn, vni, direction, description):
|
||||||
acl_information = {
|
acl_information = {
|
||||||
'order': order,
|
'order': order,
|
||||||
'description': description,
|
'description': description,
|
||||||
'rule': rule
|
'rule': rule,
|
||||||
|
'direction': direction
|
||||||
}
|
}
|
||||||
return acl_information
|
return acl_information
|
||||||
|
|
||||||
|
@ -391,7 +393,7 @@ def add_acl(zk_conn, network, direction, description, rule, order):
|
||||||
|
|
||||||
# Change direction to something more usable
|
# Change direction to something more usable
|
||||||
if direction:
|
if direction:
|
||||||
if not 'in' in direction and not 'out' in direction:
|
if isinstance(direction, bool):
|
||||||
direction = "in"
|
direction = "in"
|
||||||
else:
|
else:
|
||||||
# Preserve the existing value, which is a text of 'in' or 'out'
|
# Preserve the existing value, which is a text of 'in' or 'out'
|
||||||
|
@ -413,7 +415,7 @@ def add_acl(zk_conn, network, direction, description, rule, order):
|
||||||
order = int(order)
|
order = int(order)
|
||||||
|
|
||||||
# Insert into the array at order-1
|
# Insert into the array at order-1
|
||||||
full_acl_list.insert(order, {'direction': direction, 'description': description})
|
full_acl_list.insert(order, {'direction': direction, 'description': description, 'rule': rule})
|
||||||
|
|
||||||
# Update the existing ordering
|
# Update the existing ordering
|
||||||
updated_orders = dict()
|
updated_orders = dict()
|
||||||
|
@ -443,36 +445,27 @@ def add_acl(zk_conn, network, direction, description, rule, order):
|
||||||
|
|
||||||
return True, 'Firewall rule "{}" added successfully!'.format(description)
|
return True, 'Firewall rule "{}" added successfully!'.format(description)
|
||||||
|
|
||||||
def remove_acl(zk_conn, network, description, direction):
|
def remove_acl(zk_conn, network, description):
|
||||||
# Validate and obtain standard passed value
|
# Validate and obtain standard passed value
|
||||||
net_vni = getNetworkVNI(zk_conn, network)
|
net_vni = getNetworkVNI(zk_conn, network)
|
||||||
if not net_vni:
|
if not net_vni:
|
||||||
return False, 'ERROR: Could not find network "{}" in the cluster!'.format(network)
|
return False, 'ERROR: Could not find network "{}" in the cluster!'.format(network)
|
||||||
|
|
||||||
# Change direction to something more usable
|
|
||||||
if direction:
|
|
||||||
if not 'in' in direction and not 'out' in direction:
|
|
||||||
direction = "in"
|
|
||||||
else:
|
|
||||||
# Preserve the existing value, which is a text of 'in' or 'out'
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
direction = "out"
|
|
||||||
|
|
||||||
match_description = ''
|
match_description = ''
|
||||||
|
|
||||||
# Check if the ACL matches a description currently in the database
|
# Check if the ACL matches a description currently in the database
|
||||||
acl_list = getNetworkACLs(zk_conn, net_vni, direction)
|
acl_list = getNetworkACLs(zk_conn, net_vni, None)
|
||||||
for acl in acl_list:
|
for acl in acl_list:
|
||||||
if acl['description'] == description:
|
if acl['description'] == description:
|
||||||
match_description = acl['description']
|
match_description = acl['description']
|
||||||
|
match_direction = acl['direction']
|
||||||
|
|
||||||
if not match_description:
|
if not match_description:
|
||||||
return False, 'ERROR: No firewall rule exists matching description "{}"!'.format(description)
|
return False, 'ERROR: No firewall rule exists matching description "{}"!'.format(description)
|
||||||
|
|
||||||
# Remove the entry from zookeeper
|
# Remove the entry from zookeeper
|
||||||
try:
|
try:
|
||||||
zkhandler.deletekey(zk_conn, '/networks/{}/firewall_rules/{}/{}'.format(net_vni, direction, match_description))
|
zkhandler.deletekey(zk_conn, '/networks/{}/firewall_rules/{}/{}'.format(net_vni, match_direction, match_description))
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return False, 'ERROR: Failed to write to Zookeeper! Exception: "{}".'.format(e)
|
return False, 'ERROR: Failed to write to Zookeeper! Exception: "{}".'.format(e)
|
||||||
|
|
||||||
|
@ -512,12 +505,8 @@ def get_list(zk_conn, limit, is_fuzzy=True):
|
||||||
description = zkhandler.readdata(zk_conn, '/networks/{}'.format(net))
|
description = zkhandler.readdata(zk_conn, '/networks/{}'.format(net))
|
||||||
if limit:
|
if limit:
|
||||||
try:
|
try:
|
||||||
if is_fuzzy:
|
if not is_fuzzy:
|
||||||
# Implcitly assume fuzzy limits
|
limit = '^' + limit + '$'
|
||||||
if not re.match('\^.*', limit):
|
|
||||||
limit = '.*' + limit
|
|
||||||
if not re.match('.*\$', limit):
|
|
||||||
limit = limit + '.*'
|
|
||||||
|
|
||||||
if re.match(limit, net):
|
if re.match(limit, net):
|
||||||
net_list.append(getNetworkInformation(zk_conn, net))
|
net_list.append(getNetworkInformation(zk_conn, net))
|
||||||
|
@ -546,8 +535,11 @@ def get_list_dhcp(zk_conn, network, limit, only_static=False, is_fuzzy=True):
|
||||||
full_dhcp_list = getNetworkDHCPLeases(zk_conn, net_vni)
|
full_dhcp_list = getNetworkDHCPLeases(zk_conn, net_vni)
|
||||||
reservations = False
|
reservations = False
|
||||||
|
|
||||||
if limit and is_fuzzy:
|
if limit:
|
||||||
try:
|
try:
|
||||||
|
if not is_fuzzy:
|
||||||
|
limit = '^' + limit + '$'
|
||||||
|
|
||||||
# Implcitly assume fuzzy limits
|
# Implcitly assume fuzzy limits
|
||||||
if not re.match('\^.*', limit):
|
if not re.match('\^.*', limit):
|
||||||
limit = '.*' + limit
|
limit = '.*' + limit
|
||||||
|
@ -590,8 +582,11 @@ def get_list_acl(zk_conn, network, limit, direction, is_fuzzy=True):
|
||||||
acl_list = []
|
acl_list = []
|
||||||
full_acl_list = getNetworkACLs(zk_conn, net_vni, direction)
|
full_acl_list = getNetworkACLs(zk_conn, net_vni, direction)
|
||||||
|
|
||||||
if limit and is_fuzzy:
|
if limit:
|
||||||
try:
|
try:
|
||||||
|
if not is_fuzzy:
|
||||||
|
limit = '^' + limit + '$'
|
||||||
|
|
||||||
# Implcitly assume fuzzy limits
|
# Implcitly assume fuzzy limits
|
||||||
if not re.match('\^.*', limit):
|
if not re.match('\^.*', limit):
|
||||||
limit = '.*' + limit
|
limit = '.*' + limit
|
||||||
|
@ -637,6 +632,10 @@ def getOutputColours(network_information):
|
||||||
return v6_flag_colour, v4_flag_colour, dhcp6_flag_colour, dhcp4_flag_colour
|
return v6_flag_colour, v4_flag_colour, dhcp6_flag_colour, dhcp4_flag_colour
|
||||||
|
|
||||||
def format_info(network_information, long_output):
|
def format_info(network_information, long_output):
|
||||||
|
if not network_information:
|
||||||
|
click.echo("No network found")
|
||||||
|
return
|
||||||
|
|
||||||
v6_flag_colour, v4_flag_colour, dhcp6_flag_colour, dhcp4_flag_colour = getOutputColours(network_information)
|
v6_flag_colour, v4_flag_colour, dhcp6_flag_colour, dhcp4_flag_colour = getOutputColours(network_information)
|
||||||
|
|
||||||
# Format a nice output: do this line-by-line then concat the elements at the end
|
# Format a nice output: do this line-by-line then concat the elements at the end
|
||||||
|
@ -685,6 +684,10 @@ def format_info(network_information, long_output):
|
||||||
click.echo('\n'.join(ainformation))
|
click.echo('\n'.join(ainformation))
|
||||||
|
|
||||||
def format_list(network_list):
|
def format_list(network_list):
|
||||||
|
if not network_list:
|
||||||
|
click.echo("No network found")
|
||||||
|
return
|
||||||
|
|
||||||
network_list_output = []
|
network_list_output = []
|
||||||
|
|
||||||
# Determine optimal column widths
|
# Determine optimal column widths
|
||||||
|
@ -698,7 +701,7 @@ def format_list(network_list):
|
||||||
net_dhcp4_flag_length = 7
|
net_dhcp4_flag_length = 7
|
||||||
for network_information in network_list:
|
for network_information in network_list:
|
||||||
# vni column
|
# vni column
|
||||||
_net_vni_length = len(network_information['vni']) + 1
|
_net_vni_length = len(str(network_information['vni'])) + 1
|
||||||
if _net_vni_length > net_vni_length:
|
if _net_vni_length > net_vni_length:
|
||||||
net_vni_length = _net_vni_length
|
net_vni_length = _net_vni_length
|
||||||
# description column
|
# description column
|
||||||
|
@ -872,7 +875,7 @@ def format_list_acl(acl_list):
|
||||||
acl_rule_length = 5
|
acl_rule_length = 5
|
||||||
for acl_information in acl_list:
|
for acl_information in acl_list:
|
||||||
# order column
|
# order column
|
||||||
_acl_order_length = len(acl_information['order']) + 1
|
_acl_order_length = len(str(acl_information['order'])) + 1
|
||||||
if _acl_order_length > acl_order_length:
|
if _acl_order_length > acl_order_length:
|
||||||
acl_order_length = _acl_order_length
|
acl_order_length = _acl_order_length
|
||||||
# description column
|
# description column
|
||||||
|
|
Loading…
Reference in New Issue