From e26023875b54cce565e37c65ac6637dacfcee0ad Mon Sep 17 00:00:00 2001
From: Attila Farkas <x394097@fi.muni.cz>
Date: Mon, 7 Oct 2019 14:34:17 +0200
Subject: [PATCH] fix routing to internet

---
 modules/ansible_data_generator.py |  9 +++++++++
 modules/file_generator.py         | 10 ++++++----
 templates/playbook                |  7 +++++--
 3 files changed, 20 insertions(+), 6 deletions(-)

diff --git a/modules/ansible_data_generator.py b/modules/ansible_data_generator.py
index e585ea1..e720a48 100644
--- a/modules/ansible_data_generator.py
+++ b/modules/ansible_data_generator.py
@@ -47,3 +47,12 @@ def create_host_map(net_mappings, router_mappings, host_list):
         host["interface"] = _find_interface(net_mapping["host"], host_list)
         hosts.append(host)
     return hosts
+
+def create_network_ips(networks):
+
+    network_ips = []
+    for network in networks:
+        if network["cidr"] not in network_ips:
+            network_ips.append(network["cidr"])
+
+    return network_ips
diff --git a/modules/file_generator.py b/modules/file_generator.py
index dcf88c7..52fc35d 100644
--- a/modules/file_generator.py
+++ b/modules/file_generator.py
@@ -2,7 +2,7 @@ import jinja2
 import os
 
 from modules.device_creator import create_devices
-from modules.ansible_data_generator import create_network_map, create_host_map
+from modules.ansible_data_generator import create_network_map, create_host_map, create_network_ips
 
 
 def _load_template(template_name):
@@ -60,10 +60,11 @@ def _generate_playbook(definitions):
 
     host_map = create_host_map(definitions["net_mappings"], definitions["router_mappings"], definitions["hosts"])
     network = create_network_map(
-            definitions["net_mappings"], definitions["router_mappings"]) 
+            definitions["net_mappings"], definitions["router_mappings"])
+    network_ips = create_network_ips(definitions["networks"])
     
     template = _load_template("playbook")
-    output = template.render(hosts=host_map, routers=network)
+    output = template.render(hosts=host_map, routers=network, network_ips=network_ips)
 
     try:
         os.mkdir("provisioning")
@@ -79,9 +80,10 @@ def _generate_device_configuration(definitions):
     host_map = create_host_map(definitions["net_mappings"], definitions["router_mappings"], definitions["hosts"])
     network = create_network_map(
             definitions["net_mappings"], definitions["router_mappings"]) 
+    network_ips = create_network_ips(definitions["networks"])
 
     template = _load_template("device_configuration")
-    output = template.render(hosts=host_map, routers=network)
+    output = template.render(hosts=host_map, routers=network, network_ips=network_ips)
 
     try:
         os.mkdir("provisioning")
diff --git a/templates/playbook b/templates/playbook
index 4967233..cfe188a 100644
--- a/templates/playbook
+++ b/templates/playbook
@@ -14,8 +14,11 @@
   hosts: {{ host.host_name }}
   become: yes
   tasks:
-  - name: Change default gateway
-    command: route add default gw {{ host.router_ip }} {{ host.interface }}
+{% for network_ip in network_ips %} 
+  - name: Add gateway for {{ network_ip }}
+    command: route add -net {{ network_ip }} gw {{ host.router_ip }} {{ host.interface }}
+{% endfor %}
+
 
 {% endfor %}
 - name: Configuring all routers
-- 
GitLab