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):
variables = dict()
variables["aliases"] = _add_aliases(target_host["name"],
input_definitions, flags)
variables["routings"] = add_routings(target_host["name"], "host",
input_definitions, flags)
variables["routes"] = add_routings(target_host["name"], "host",
input_definitions, flags)
dump_to_yaml(variables, "base_provisioning/roles/" +
target_host["name"] + "/vars/main.yml")
......@@ -78,8 +78,8 @@ def _generate_device_vars(input_definitions, flags):
variables = dict()
variables["aliases"] = _add_aliases(target_router["name"],
input_definitions, flags)
variables["routings"] = add_routings(target_router["name"], "router",
input_definitions, flags)
variables["routes"] = add_routings(target_router["name"], "router",
input_definitions, flags)
dump_to_yaml(variables, "base_provisioning/roles/" +
target_router["name"] + "/vars/main.yml")
......@@ -109,14 +109,6 @@ def _find_ip(device_name, input_definitions):
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):
"""Generate vars file for all devices."""
# TODO check what vars needs to be in config
......@@ -126,8 +118,6 @@ def _generate_config_vars(input_definitions, flags):
new_host = dict()
new_host["name"] = host["name"]
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)
routers = []
......@@ -135,8 +125,6 @@ def _generate_config_vars(input_definitions, flags):
new_router = dict()
new_router["name"] = router["name"]
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)
generate_file("config", "base_provisioning/config.yml", hosts=hosts,
......
......@@ -62,23 +62,27 @@ def _find_router_ip_in_br_network(other_network, input_definitions):
router_mapping["network"] == BORDER_ROUTER_NETWORK_NAME:
return router_mapping["ip"]
def _create_host_routing(target_host_name, input_definitions, flags):
"""Generate routings for the given host."""
simple_routings = []
default_routings = []
"""Generate routes for the given host."""
simple_routes = []
default_route = None
mapping = None
for host_mapping in input_definitions["net_mappings"]:
if host_mapping["host"] == target_host_name:
mapping = host_mapping
break
if not mapping:
raise ValueError("Host was not found: " + target_host_name)
if flags["border_router"]:
routing_to_router = dict()
routing_to_router["interface_ip"] = mapping["ip"]
default_route = dict()
default_route["interface_ip"] = mapping["ip"]
gateway = _find_router_in_network(mapping["network"],
input_definitions)
routing_to_router["gateway"] = gateway
default_routings.append(routing_to_router)
default_route["gateway"] = gateway
else:
for network in input_definitions["networks"]:
if network["name"] == mapping["network"]:
......@@ -91,32 +95,31 @@ def _create_host_routing(target_host_name, input_definitions, flags):
net_ip, mask = network["cidr"].split('/')
routing_to_other_hosts["network"] = net_ip
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):
"""Generate routings for the given router."""
simple_routings = []
default_routings = []
"""Generate routes for the given router."""
simple_routes = []
default_route = None
if flags["border_router"]:
routing_to_br = dict()
default_route = dict()
interface_ip = _find_iface_ip_in_network(router_name,
BORDER_ROUTER_NETWORK_NAME,
input_definitions)
routing_to_br["interface_ip"] = interface_ip
routing_to_br["gateway"] = BORDER_ROUTER_IP
default_routings.append(routing_to_br)
default_route["interface_ip"] = interface_ip
default_route["gateway"] = BORDER_ROUTER_IP
return simple_routings, default_routings
return simple_routes, default_route
def _create_border_router_routing(input_definitions, flags):
"""Generate routings for the border router."""
simple_routings = []
default_routings = []
def _create_border_router_routing(input_definitions):
"""Generate routes for the border router."""
simple_routes = []
default_route = None
for network in input_definitions["networks"]:
if network["name"] == BORDER_ROUTER_NETWORK_NAME:
......@@ -129,13 +132,13 @@ def _create_border_router_routing(input_definitions, flags):
gateway = _find_router_ip_in_br_network(network["name"],
input_definitions)
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):
"""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:
- gateway: ip of the target device
......@@ -146,22 +149,22 @@ def add_routings(device_name, device_type, input_definitions, flags):
if not input_definitions["routers"]:
return dict()
routings = {"simple": [], "default": []}
routes = {"simple": [], "default": dict()}
if device_type == "host":
simple, default = _create_host_routing(device_name, input_definitions,
flags)
routings["simple"].extend(simple)
routings["default"].extend(default)
elif device_type == "router":
if device_name != BORDER_ROUTER_NAME:
simple, default = _create_router_routing(device_name,
input_definitions, flags)
routings["simple"].extend(simple)
routings["default"].extend(default)
simple, default = _create_router_routing(device_name,
input_definitions, flags)
else:
simple, default = _create_border_router_routing(input_definitions,
flags)
routings["simple"].extend(simple)
routings["default"].extend(default)
return routings
simple, default = _create_border_router_routing(input_definitions)
else:
raise KeyError("Unsupported device type: " + str(device_type))
routes["simple"] = simple
if default:
routes["default"] = default
return routes
......@@ -16,19 +16,17 @@
- gateway: "{{ route.gateway }}"
network: "{{ route.network }}"
mask: "{{ route.netmask }}"
loop: "{{ routings.simple }}"
loop: "{{ routes.simple }}"
loop_control:
loop_var: route
- name: Set up default route
- name: Configuring default routes
include_role:
name: interface
vars:
interface_ip: "{{ route.interface_ip }}"
interface_default_gateway: "{{ route.gateway }}"
loop: "{{ routings.default }}"
loop_control:
loop_var: route
interface_ip: "{{ routes.default.interface_ip }}"
interface_default_gateway: "{{ routes.default.gateway }}"
when: routes.default
- name: Set up postrouting
iptables:
......
......@@ -13,7 +13,7 @@
- gateway: "{{ route.gateway }}"
network: "{{ route.network }}"
mask: "{{ route.netmask }}"
loop: "{{ routings.simple }}"
loop: "{{ routes.simple }}"
loop_control:
loop_var: route
......@@ -21,8 +21,6 @@
include_role:
name: interface
vars:
interface_ip: "{{ route.interface_ip }}"
interface_default_gateway: "{{ route.gateway }}"
loop: "{{ routings.default }}"
loop_control:
loop_var: route
interface_ip: "{{ routes.default.interface_ip }}"
interface_default_gateway: "{{ routes.default.gateway }}"
when: routes.default
\ No newline at end of file
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