Skip to content
Snippets Groups Projects
Commit 63bb421b authored by Attila Farkas's avatar Attila Farkas
Browse files

change routes so that only one default route can be defined on a device

parent cad835aa
No related branches found
No related tags found
1 merge request!7Resolve Refactoring
...@@ -69,8 +69,8 @@ def _generate_device_vars(input_definitions, flags): ...@@ -69,8 +69,8 @@ def _generate_device_vars(input_definitions, flags):
variables = dict() variables = dict()
variables["aliases"] = _add_aliases(target_host["name"], variables["aliases"] = _add_aliases(target_host["name"],
input_definitions, flags) input_definitions, flags)
variables["routings"] = add_routings(target_host["name"], "host", variables["routes"] = add_routings(target_host["name"], "host",
input_definitions, flags) input_definitions, flags)
dump_to_yaml(variables, "base_provisioning/roles/" + dump_to_yaml(variables, "base_provisioning/roles/" +
target_host["name"] + "/vars/main.yml") target_host["name"] + "/vars/main.yml")
...@@ -78,8 +78,8 @@ def _generate_device_vars(input_definitions, flags): ...@@ -78,8 +78,8 @@ def _generate_device_vars(input_definitions, flags):
variables = dict() variables = dict()
variables["aliases"] = _add_aliases(target_router["name"], variables["aliases"] = _add_aliases(target_router["name"],
input_definitions, flags) input_definitions, flags)
variables["routings"] = add_routings(target_router["name"], "router", variables["routes"] = add_routings(target_router["name"], "router",
input_definitions, flags) input_definitions, flags)
dump_to_yaml(variables, "base_provisioning/roles/" + dump_to_yaml(variables, "base_provisioning/roles/" +
target_router["name"] + "/vars/main.yml") target_router["name"] + "/vars/main.yml")
...@@ -109,14 +109,6 @@ def _find_ip(device_name, input_definitions): ...@@ -109,14 +109,6 @@ def _find_ip(device_name, input_definitions):
return networks return networks
def _find_default_route(device_name, input_definitions, flags):
"""Return the ip to which the device should be routed defaultly.
None is returned if the change of default routing is not required.
"""
return None
def _generate_config_vars(input_definitions, flags): def _generate_config_vars(input_definitions, flags):
"""Generate vars file for all devices.""" """Generate vars file for all devices."""
# TODO check what vars needs to be in config # TODO check what vars needs to be in config
...@@ -126,8 +118,6 @@ def _generate_config_vars(input_definitions, flags): ...@@ -126,8 +118,6 @@ def _generate_config_vars(input_definitions, flags):
new_host = dict() new_host = dict()
new_host["name"] = host["name"] new_host["name"] = host["name"]
new_host["networks"] = _find_ip(host["name"], input_definitions) new_host["networks"] = _find_ip(host["name"], input_definitions)
new_host["route_to"] = _find_default_route(host["name"],
input_definitions, flags)
hosts.append(new_host) hosts.append(new_host)
routers = [] routers = []
...@@ -135,8 +125,6 @@ def _generate_config_vars(input_definitions, flags): ...@@ -135,8 +125,6 @@ def _generate_config_vars(input_definitions, flags):
new_router = dict() new_router = dict()
new_router["name"] = router["name"] new_router["name"] = router["name"]
new_router["networks"] = _find_ip(router["name"], input_definitions) new_router["networks"] = _find_ip(router["name"], input_definitions)
new_router["route_to"] = _find_default_route(router["name"],
input_definitions, flags)
routers.append(new_router) routers.append(new_router)
generate_file("config", "base_provisioning/config.yml", hosts=hosts, generate_file("config", "base_provisioning/config.yml", hosts=hosts,
......
...@@ -62,23 +62,27 @@ def _find_router_ip_in_br_network(other_network, input_definitions): ...@@ -62,23 +62,27 @@ def _find_router_ip_in_br_network(other_network, input_definitions):
router_mapping["network"] == BORDER_ROUTER_NETWORK_NAME: router_mapping["network"] == BORDER_ROUTER_NETWORK_NAME:
return router_mapping["ip"] return router_mapping["ip"]
def _create_host_routing(target_host_name, input_definitions, flags): def _create_host_routing(target_host_name, input_definitions, flags):
"""Generate routings for the given host.""" """Generate routes for the given host."""
simple_routings = [] simple_routes = []
default_routings = [] default_route = None
mapping = None
for host_mapping in input_definitions["net_mappings"]: for host_mapping in input_definitions["net_mappings"]:
if host_mapping["host"] == target_host_name: if host_mapping["host"] == target_host_name:
mapping = host_mapping mapping = host_mapping
break break
if not mapping:
raise ValueError("Host was not found: " + target_host_name)
if flags["border_router"]: if flags["border_router"]:
routing_to_router = dict() default_route = dict()
routing_to_router["interface_ip"] = mapping["ip"] default_route["interface_ip"] = mapping["ip"]
gateway = _find_router_in_network(mapping["network"], gateway = _find_router_in_network(mapping["network"],
input_definitions) input_definitions)
routing_to_router["gateway"] = gateway default_route["gateway"] = gateway
default_routings.append(routing_to_router)
else: else:
for network in input_definitions["networks"]: for network in input_definitions["networks"]:
if network["name"] == mapping["network"]: if network["name"] == mapping["network"]:
...@@ -91,32 +95,31 @@ def _create_host_routing(target_host_name, input_definitions, flags): ...@@ -91,32 +95,31 @@ def _create_host_routing(target_host_name, input_definitions, flags):
net_ip, mask = network["cidr"].split('/') net_ip, mask = network["cidr"].split('/')
routing_to_other_hosts["network"] = net_ip routing_to_other_hosts["network"] = net_ip
routing_to_other_hosts["netmask"] = mask routing_to_other_hosts["netmask"] = mask
simple_routings.append(routing_to_other_hosts) simple_routes.append(routing_to_other_hosts)
return simple_routings, default_routings return simple_routes, default_route
def _create_router_routing(router_name, input_definitions, flags): def _create_router_routing(router_name, input_definitions, flags):
"""Generate routings for the given router.""" """Generate routes for the given router."""
simple_routings = [] simple_routes = []
default_routings = [] default_route = None
if flags["border_router"]: if flags["border_router"]:
routing_to_br = dict() default_route = dict()
interface_ip = _find_iface_ip_in_network(router_name, interface_ip = _find_iface_ip_in_network(router_name,
BORDER_ROUTER_NETWORK_NAME, BORDER_ROUTER_NETWORK_NAME,
input_definitions) input_definitions)
routing_to_br["interface_ip"] = interface_ip default_route["interface_ip"] = interface_ip
routing_to_br["gateway"] = BORDER_ROUTER_IP default_route["gateway"] = BORDER_ROUTER_IP
default_routings.append(routing_to_br)
return simple_routings, default_routings return simple_routes, default_route
def _create_border_router_routing(input_definitions, flags): def _create_border_router_routing(input_definitions):
"""Generate routings for the border router.""" """Generate routes for the border router."""
simple_routings = [] simple_routes = []
default_routings = [] default_route = None
for network in input_definitions["networks"]: for network in input_definitions["networks"]:
if network["name"] == BORDER_ROUTER_NETWORK_NAME: if network["name"] == BORDER_ROUTER_NETWORK_NAME:
...@@ -129,13 +132,13 @@ def _create_border_router_routing(input_definitions, flags): ...@@ -129,13 +132,13 @@ def _create_border_router_routing(input_definitions, flags):
gateway = _find_router_ip_in_br_network(network["name"], gateway = _find_router_ip_in_br_network(network["name"],
input_definitions) input_definitions)
routing_to_hosts["gateway"] = gateway routing_to_hosts["gateway"] = gateway
simple_routings.append(routing_to_hosts) simple_routes.append(routing_to_hosts)
return simple_routings, default_routings return simple_routes, default_route
def add_routings(device_name, device_type, input_definitions, flags): def add_routings(device_name, device_type, input_definitions, flags):
"""Generate simple and default routings for the given device. """Generate simple and default routes for the given device.
Returns a list of dicts with the syntax: Returns a list of dicts with the syntax:
- gateway: ip of the target device - gateway: ip of the target device
...@@ -146,22 +149,22 @@ def add_routings(device_name, device_type, input_definitions, flags): ...@@ -146,22 +149,22 @@ def add_routings(device_name, device_type, input_definitions, flags):
if not input_definitions["routers"]: if not input_definitions["routers"]:
return dict() return dict()
routings = {"simple": [], "default": []} routes = {"simple": [], "default": dict()}
if device_type == "host": if device_type == "host":
simple, default = _create_host_routing(device_name, input_definitions, simple, default = _create_host_routing(device_name, input_definitions,
flags) flags)
routings["simple"].extend(simple)
routings["default"].extend(default)
elif device_type == "router": elif device_type == "router":
if device_name != BORDER_ROUTER_NAME: if device_name != BORDER_ROUTER_NAME:
simple, default = _create_router_routing(device_name, simple, default = _create_router_routing(device_name,
input_definitions, flags) input_definitions, flags)
routings["simple"].extend(simple)
routings["default"].extend(default)
else: else:
simple, default = _create_border_router_routing(input_definitions, simple, default = _create_border_router_routing(input_definitions)
flags) else:
routings["simple"].extend(simple) raise KeyError("Unsupported device type: " + str(device_type))
routings["default"].extend(default)
return routings routes["simple"] = simple
if default:
routes["default"] = default
return routes
...@@ -16,19 +16,17 @@ ...@@ -16,19 +16,17 @@
- gateway: "{{ route.gateway }}" - gateway: "{{ route.gateway }}"
network: "{{ route.network }}" network: "{{ route.network }}"
mask: "{{ route.netmask }}" mask: "{{ route.netmask }}"
loop: "{{ routings.simple }}" loop: "{{ routes.simple }}"
loop_control: loop_control:
loop_var: route loop_var: route
- name: Set up default route - name: Configuring default routes
include_role: include_role:
name: interface name: interface
vars: vars:
interface_ip: "{{ route.interface_ip }}" interface_ip: "{{ routes.default.interface_ip }}"
interface_default_gateway: "{{ route.gateway }}" interface_default_gateway: "{{ routes.default.gateway }}"
loop: "{{ routings.default }}" when: routes.default
loop_control:
loop_var: route
- name: Set up postrouting - name: Set up postrouting
iptables: iptables:
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
- gateway: "{{ route.gateway }}" - gateway: "{{ route.gateway }}"
network: "{{ route.network }}" network: "{{ route.network }}"
mask: "{{ route.netmask }}" mask: "{{ route.netmask }}"
loop: "{{ routings.simple }}" loop: "{{ routes.simple }}"
loop_control: loop_control:
loop_var: route loop_var: route
...@@ -21,8 +21,6 @@ ...@@ -21,8 +21,6 @@
include_role: include_role:
name: interface name: interface
vars: vars:
interface_ip: "{{ route.interface_ip }}" interface_ip: "{{ routes.default.interface_ip }}"
interface_default_gateway: "{{ route.gateway }}" interface_default_gateway: "{{ routes.default.gateway }}"
loop: "{{ routings.default }}" when: routes.default
loop_control: \ No newline at end of file
loop_var: route
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment