From 1a2f3786bf0ca42ff17a9f8b8af6a5ea52c483fc Mon Sep 17 00:00:00 2001
From: Benjamin Bertrand <benjamin.bertrand@esss.se>
Date: Mon, 23 Apr 2018 09:52:42 +0200
Subject: [PATCH] Add extra default device types

- rename "Virtual" to "Virtual Machine"
- add "Virtual IOC"
- add several physical devices (Switch, Industrial PC IOC, MicroTCA,
  VME, PLC)
---
 app/defaults.py                               |  9 +++++++
 app/network/views.py                          |  2 +-
 app/static/js/hosts.js                        |  6 ++---
 ...8f135d5efde2_rename_virtual_device_type.py | 26 +++++++++++++++++++
 4 files changed, 39 insertions(+), 4 deletions(-)
 create mode 100644 migrations/versions/8f135d5efde2_rename_virtual_device_type.py

diff --git a/app/defaults.py b/app/defaults.py
index e70db5b..2f7f20c 100644
--- a/app/defaults.py
+++ b/app/defaults.py
@@ -21,5 +21,14 @@ defaults = [
     models.Action(name='Set as parent'),
     models.Action(name='Update'),
 
+    models.DeviceType(name='Physical'),
+    models.DeviceType(name='Virtual Machine'),
+    models.DeviceType(name='Switch'),
+    models.DeviceType(name='Virtual IOC'),
+    models.DeviceType(name='Industrial PC IOC'),
+    models.DeviceType(name='MicroTCA IOC'),
+    models.DeviceType(name='VME IOC'),
+    models.DeviceType(name='PLC'),
+
     models.Tag(name='gateway', admin_only=True),
 ]
diff --git a/app/network/views.py b/app/network/views.py
index be5780e..747d9f0 100644
--- a/app/network/views.py
+++ b/app/network/views.py
@@ -111,7 +111,7 @@ def edit_host(name):
 @login_groups_accepted('admin', 'create')
 def create_interface(hostname):
     host = models.Host.query.filter_by(name=hostname).first_or_404()
-    random_mac = host.device_type.name == 'Virtual'
+    random_mac = host.device_type.name.startsWith('Virtual')
     form = InterfaceForm(request.form, host_id=host.id, interface_name=host.name,
                          random_mac=random_mac)
     if form.validate_on_submit():
diff --git a/app/static/js/hosts.js b/app/static/js/hosts.js
index 9ec72da..01e17b5 100644
--- a/app/static/js/hosts.js
+++ b/app/static/js/hosts.js
@@ -15,10 +15,10 @@ $(document).ready(function() {
   // And check / uncheck random_mac checkbox
   function update_device_type_attributes() {
     var device_type = $("#device_type_id option:selected").text();
-    if( device_type.startsWith("Physical") ) {
-      $("#random_mac").prop("checked", false).change();
-    } else {
+    if( device_type.startsWith("Virtual") ) {
       $("#random_mac").prop("checked", true).change();
+    } else {
+      $("#random_mac").prop("checked", false).change();
     }
   }
 
diff --git a/migrations/versions/8f135d5efde2_rename_virtual_device_type.py b/migrations/versions/8f135d5efde2_rename_virtual_device_type.py
new file mode 100644
index 0000000..8d18bd5
--- /dev/null
+++ b/migrations/versions/8f135d5efde2_rename_virtual_device_type.py
@@ -0,0 +1,26 @@
+"""Rename Virtual device type
+
+Revision ID: 8f135d5efde2
+Revises: 573560351033
+Create Date: 2018-04-23 07:43:43.195703
+
+"""
+from alembic import op
+import sqlalchemy as sa
+
+
+# revision identifiers, used by Alembic.
+revision = '8f135d5efde2'
+down_revision = '573560351033'
+branch_labels = None
+depends_on = None
+
+
+def upgrade():
+    device_type = sa.sql.table('device_type', sa.sql.column('id'), sa.sql.column('name'))
+    op.execute(device_type.update().where(device_type.c.name == 'Virtual').values(name='Virtual Machine'))
+
+
+def downgrade():
+    device_type = sa.sql.table('device_type', sa.sql.column('id'), sa.sql.column('name'))
+    op.execute(device_type.update().where(device_type.c.name == 'Virtual Machine').values(name='Virtual'))
-- 
GitLab