From c7efd3d02de664a2f24a6dc572e9d0303e145de4 Mon Sep 17 00:00:00 2001
From: Benjamin Bertrand <benjamin.bertrand@esss.se>
Date: Tue, 17 Sep 2019 10:51:02 +0200
Subject: [PATCH] Add broadcast address to network view

JIRA INFRA-1291 #action In Progress
---
 app/models.py                           |  5 ++
 app/templates/network/view_network.html | 72 +++++++++++++------------
 tests/functional/test_api.py            |  2 +
 3 files changed, 44 insertions(+), 35 deletions(-)

diff --git a/app/models.py b/app/models.py
index e904ad4..ecdb0e8 100644
--- a/app/models.py
+++ b/app/models.py
@@ -868,6 +868,10 @@ class Network(CreatedMixin, db.Model):
     def netmask(self):
         return self.network_ip.netmask
 
+    @property
+    def broadcast(self):
+        return self.network_ip.broadcast_address
+
     @property
     def first(self):
         return ipaddress.ip_address(self.first_ip)
@@ -961,6 +965,7 @@ class Network(CreatedMixin, db.Model):
                 "vlan_id": self.vlan_id,
                 "address": self.address,
                 "netmask": str(self.netmask),
+                "broadcast": str(self.broadcast),
                 "first_ip": self.first_ip,
                 "last_ip": self.last_ip,
                 "gateway": self.gateway,
diff --git a/app/templates/network/view_network.html b/app/templates/network/view_network.html
index 8527eb9..2170093 100644
--- a/app/templates/network/view_network.html
+++ b/app/templates/network/view_network.html
@@ -4,42 +4,44 @@
 {% block title %}View Ansible network - CSEntry{% endblock %}
 
 {% block networks_nav %}
-    <li class="nav-item">
-      <a class="nav-link active" href="{{ url_for('network.view_network', vlan_name=network.vlan_name) }}">View network</a>
-    </li>
+<li class="nav-item">
+  <a class="nav-link active" href="{{ url_for('network.view_network', vlan_name=network.vlan_name) }}">View network</a>
+</li>
 {% endblock %}
 
 {% block networks_main %}
-  <div class="row">
-    <div class="col-sm-9">
-      <dl class="row">
-        <dt class="col-sm-3">Vlan name</dt>
-        <dd class="col-sm-9">{{ network.vlan_name }}</dd>
-        <dt class="col-sm-3">Vlan id</dt>
-        <dd class="col-sm-9">{{ network.vlan_id }}</dd>
-        <dt class="col-sm-3">Description</dt>
-        <dd class="col-sm-9">{{ network.description | safe }}</dd>
-        <dt class="col-sm-3">Address</dt>
-        <dd class="col-sm-9">{{ network.address }}</dd>
-        <dt class="col-sm-3">First IP</dt>
-        <dd class="col-sm-9">{{ network.first_ip }}</dd>
-        <dt class="col-sm-3">Last IP</dt>
-        <dd class="col-sm-9">{{ network.last_ip }}</dd>
-        <dt class="col-sm-3">Gateway</dt>
-        <dd class="col-sm-9">{{ network.gateway }}</dd>
-        <dt class="col-sm-3">Network Scope</dt>
-        <dd class="col-sm-9">{{ network.scope }}</dd>
-        <dt class="col-sm-3">Domain</dt>
-        <dd class="col-sm-9">{{ network.domain }}</dd>
-        <dt class="col-sm-3">Admin only</dt>
-        <dd class="col-sm-9">{{ network.admin_only }}</dd>
-        <dt class="col-sm-3">Hosts</dt>
-        <dd class="col-sm-9">{{ link_to_interfaces_host(network.interfaces) }}</dd>
-        <dt class="col-sm-3">Created by</dt>
-        <dd class="col-sm-9">{{ network.user }}</dd>
-        <dt class="col-sm-3">Created at</dt>
-        <dd class="col-sm-9">{{ network.created_at }}</dd>
-      </dl>
-    </div>
+<div class="row">
+  <div class="col-sm-9">
+    <dl class="row">
+      <dt class="col-sm-3">Vlan name</dt>
+      <dd class="col-sm-9">{{ network.vlan_name }}</dd>
+      <dt class="col-sm-3">Vlan id</dt>
+      <dd class="col-sm-9">{{ network.vlan_id }}</dd>
+      <dt class="col-sm-3">Description</dt>
+      <dd class="col-sm-9">{{ network.description | safe }}</dd>
+      <dt class="col-sm-3">Address</dt>
+      <dd class="col-sm-9">{{ network.address }}</dd>
+      <dt class="col-sm-3">First IP</dt>
+      <dd class="col-sm-9">{{ network.first_ip }}</dd>
+      <dt class="col-sm-3">Last IP</dt>
+      <dd class="col-sm-9">{{ network.last_ip }}</dd>
+      <dt class="col-sm-3">Gateway</dt>
+      <dd class="col-sm-9">{{ network.gateway }}</dd>
+      <dt class="col-sm-3">Broadcast</dt>
+      <dd class="col-sm-9">{{ network.broadcast }}</dd>
+      <dt class="col-sm-3">Network Scope</dt>
+      <dd class="col-sm-9">{{ network.scope }}</dd>
+      <dt class="col-sm-3">Domain</dt>
+      <dd class="col-sm-9">{{ network.domain }}</dd>
+      <dt class="col-sm-3">Admin only</dt>
+      <dd class="col-sm-9">{{ network.admin_only }}</dd>
+      <dt class="col-sm-3">Hosts</dt>
+      <dd class="col-sm-9">{{ link_to_interfaces_host(network.interfaces) }}</dd>
+      <dt class="col-sm-3">Created by</dt>
+      <dd class="col-sm-9">{{ network.user }}</dd>
+      <dt class="col-sm-3">Created at</dt>
+      <dd class="col-sm-9">{{ network.created_at }}</dd>
+    </dl>
   </div>
-{%- endblock %}
+</div>
+{%- endblock %}
\ No newline at end of file
diff --git a/tests/functional/test_api.py b/tests/functional/test_api.py
index 5ca9c1a..41cc3b0 100644
--- a/tests/functional/test_api.py
+++ b/tests/functional/test_api.py
@@ -723,6 +723,7 @@ def test_create_network(client, admin_token, network_scope_factory):
         "vlan_id",
         "address",
         "netmask",
+        "broadcast",
         "first_ip",
         "last_ip",
         "gateway",
@@ -742,6 +743,7 @@ def test_create_network(client, admin_token, network_scope_factory):
     assert response.get_json()["last_ip"] == "172.16.1.250"
     assert response.get_json()["gateway"] == "172.16.1.254"
     assert response.get_json()["netmask"] == "255.255.255.0"
+    assert response.get_json()["broadcast"] == "172.16.1.255"
 
     # Check that address and name shall be unique
     response = post(client, f"{API_URL}/network/networks", data=data, token=admin_token)
-- 
GitLab