diff --git a/apps/assets/forms.py b/apps/assets/forms.py
index dec1b0876..8b5262714 100644
--- a/apps/assets/forms.py
+++ b/apps/assets/forms.py
@@ -1,7 +1,7 @@
# coding:utf-8
from django import forms
-from .models import IDC, Asset, AssetGroup
+from .models import IDC, Asset, AssetGroup, AdminUser, SystemUser
from django.utils.translation import gettext_lazy as _
@@ -11,7 +11,7 @@ class AssetForm(forms.ModelForm):
fields = [
"ip", "other_ip", "remote_card_ip", "hostname", "port", "groups", "username", "password",
- "idc", "mac_addr", "brand", "cpu", "memory", "disk", "os", "cabinet_no", "cabinet_pos",
+ "idc", "mac_address", "brand", "cpu", "memory", "disk", "os", "cabinet_no", "cabinet_pos",
"number", "status", "type", "env", "sn", "is_active", "comment"
]
@@ -78,3 +78,54 @@ class IDCForm(forms.ModelForm):
'network': forms.Textarea(
attrs={'placeholder': '192.168.1.0/24\n192.168.2.0/24'})
}
+
+
+class AdminUserForm(forms.ModelForm):
+ assets = forms.ModelMultipleChoiceField(queryset=Asset.objects.all(),
+ label=_('Asset'),
+ required=False,
+ widget=forms.SelectMultiple(
+ attrs={'class': 'select2', 'data-placeholder': _('Select assets')})
+ )
+ password = forms.CharField(widget=forms.PasswordInput, max_length=100, min_length=8, strip=True,
+ help_text=_('If also set private key, use that first'), required=False)
+ private_key_file = forms.FileField(required=False)
+
+ def __init__(self, *args, **kwargs):
+ if kwargs.get('instance'):
+ initial = kwargs.get('initial', {})
+ initial['assets'] = kwargs['instance'].assets.all()
+ super(AdminUserForm, self).__init__(*args, **kwargs)
+
+ def _save_m2m(self):
+ super(AdminUserForm, self)._save_m2m()
+ assets = self.cleaned_data['assets']
+ self.instance.assets.clear()
+ self.instance.assets.add(*tuple(assets))
+
+ def save(self, commit=True):
+ admin_user = super(AdminUserForm, self).save(commit=commit)
+ password = self.cleaned_data['password']
+ private_key_file = self.cleaned_data['private_key_file']
+
+ if password:
+ admin_user.password = password
+ print(password)
+ if private_key_file:
+ print(private_key_file)
+ admin_user.private_key = private_key_file.read()
+ admin_user.save()
+ return self.instance
+
+ class Meta:
+ model = AdminUser
+ fields = ['name', 'username', 'password', 'private_key_file', 'as_default', 'comment']
+ widgets = {
+ 'name': forms.TextInput(attrs={'placeholder': _('Name')}),
+ 'username': forms.TextInput(attrs={'placeholder': _('Username')}),
+ }
+ help_texts = {
+ 'name': '* required',
+ 'username': '* required',
+ }
+
diff --git a/apps/assets/migrations/0001_initial.py b/apps/assets/migrations/0001_initial.py
index 94a2908dd..a63d3d984 100644
--- a/apps/assets/migrations/0001_initial.py
+++ b/apps/assets/migrations/0001_initial.py
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
-# Generated by Django 1.10 on 2016-09-07 15:11
+# Generated by Django 1.10 on 2016-09-08 03:02
from __future__ import unicode_literals
from django.db import migrations, models
@@ -18,15 +18,15 @@ class Migration(migrations.Migration):
name='AdminUser',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('name', models.CharField(blank=True, max_length=128, null=True, unique=True, verbose_name='Name')),
- ('username', models.CharField(blank=True, max_length=16, null=True, verbose_name='Username')),
- ('password', models.CharField(blank=True, max_length=256, null=True, verbose_name='Password')),
- ('private_key', models.CharField(blank=True, max_length=4096, null=True, verbose_name='SSH private key')),
- ('is_default', models.BooleanField(default=True, verbose_name='As default')),
- ('auto_update', models.BooleanField(default=True, verbose_name='Auto update pass/key')),
- ('date_created', models.DateTimeField(auto_now=True, null=True)),
- ('create_by', models.CharField(blank=True, max_length=32, null=True, verbose_name='Created by')),
+ ('name', models.CharField(max_length=128, unique=True, verbose_name='Name')),
+ ('username', models.CharField(max_length=16, verbose_name='Username')),
+ ('_password', models.CharField(blank=True, max_length=256, verbose_name='Password')),
+ ('_private_key', models.CharField(blank=True, max_length=4096, verbose_name='SSH private key')),
+ ('_public_key', models.CharField(blank=True, max_length=4096, verbose_name='SSH public key')),
+ ('as_default', models.BooleanField(default=False, verbose_name='As default')),
('comment', models.TextField(blank=True, verbose_name='Comment')),
+ ('date_created', models.DateTimeField(auto_now=True, null=True)),
+ ('created_by', models.CharField(max_length=32, null=True, verbose_name='Created by')),
],
options={
'db_table': 'admin_user',
@@ -142,7 +142,7 @@ class Migration(migrations.Migration):
('home', models.CharField(blank=True, max_length=64, verbose_name='Home')),
('uid', models.IntegerField(blank=True, verbose_name='Uid')),
('date_created', models.DateTimeField(auto_now=True, null=True)),
- ('create_by', models.CharField(blank=True, max_length=32, verbose_name='Created by')),
+ ('created_by', models.CharField(blank=True, max_length=32, verbose_name='Created by')),
('comment', models.CharField(blank=True, max_length=128, verbose_name='Comment')),
],
options={
diff --git a/apps/assets/models.py b/apps/assets/models.py
index f968f05b0..213a49822 100644
--- a/apps/assets/models.py
+++ b/apps/assets/models.py
@@ -68,15 +68,15 @@ class AssetExtend(models.Model):
class AdminUser(models.Model):
- name = models.CharField(max_length=128, unique=True, null=True, blank=True, verbose_name=_('Name'))
- username = models.CharField(max_length=16, null=True, blank=True, verbose_name=_('Username'))
- _password = models.CharField(max_length=256, null=True, blank=True, verbose_name=_('Password'))
- _private_key = models.CharField(max_length=4096, null=True, blank=True, verbose_name=_('SSH private key'))
- _public_key = models.CharField(max_length=4096, null=True, blank=True, verbose_name=_('SSH public key'))
- as_default = models.BooleanField(default=True, verbose_name=_('As default'))
+ name = models.CharField(max_length=128, unique=True, verbose_name=_('Name'))
+ username = models.CharField(max_length=16, verbose_name=_('Username'))
+ _password = models.CharField(max_length=256, blank=True, verbose_name=_('Password'))
+ _private_key = models.CharField(max_length=4096, blank=True, verbose_name=_('SSH private key'))
+ _public_key = models.CharField(max_length=4096, blank=True, verbose_name=_('SSH public key'))
+ as_default = models.BooleanField(default=False, verbose_name=_('As default'))
comment = models.TextField(blank=True, verbose_name=_('Comment'))
- date_created = models.DateTimeField(auto_now=True, null=True, blank=True)
- created_by = models.CharField(max_length=32, null=True, blank=True, verbose_name=_('Created by'))
+ date_created = models.DateTimeField(auto_now=True, null=True)
+ created_by = models.CharField(max_length=32, null=True, verbose_name=_('Created by'))
def __unicode__(self):
return self.name
@@ -110,7 +110,7 @@ class AdminUser(models.Model):
@classmethod
def generate_fake(cls, count=100):
- from random import seed, choice
+ from random import seed
import forgery_py
from django.db import IntegrityError
@@ -204,10 +204,11 @@ class Asset(models.Model):
groups = models.ManyToManyField(AssetGroup, related_name='assets', verbose_name=_('Asset groups'))
username = models.CharField(max_length=16, null=True, blank=True, verbose_name=_('Admin user'))
password = models.CharField(max_length=256, null=True, blank=True, verbose_name=_("Admin password"))
- admin_user = models.ForeignKey(AdminUser, null=True, on_delete=models.SET_NULL, verbose_name=_("Admin user"))
+ admin_user = models.ForeignKey(AdminUser, null=True, related_name='assets',
+ on_delete=models.SET_NULL, verbose_name=_("Admin user"))
system_user = models.ManyToManyField(SystemUser, blank=True, verbose_name=_("System User"))
idc = models.ForeignKey(IDC, null=True, related_name='assets', on_delete=models.SET_NULL, verbose_name=_('IDC'))
- mac_addr = models.CharField(max_length=20, null=True, blank=True, verbose_name=_("Mac address"))
+ mac_address = models.CharField(max_length=20, null=True, blank=True, verbose_name=_("Mac address"))
brand = models.CharField(max_length=64, null=True, blank=True, verbose_name=_('Brand'))
cpu = models.CharField(max_length=64, null=True, blank=True, verbose_name=_('CPU'))
memory = models.CharField(max_length=128, null=True, blank=True, verbose_name=_('Memory'))
diff --git a/apps/assets/templates/assets/admin_user_create_update.html b/apps/assets/templates/assets/admin_user_create_update.html
new file mode 100644
index 000000000..b340b7c3a
--- /dev/null
+++ b/apps/assets/templates/assets/admin_user_create_update.html
@@ -0,0 +1,64 @@
+{% extends 'base.html' %}
+{% load i18n %}
+{% load static %}
+{% load bootstrap %}
+{% block custom_head_css_js %}
+
+
+{% endblock %}
+
+{% block content %}
+
+
+
+
+
+
{% trans 'Create asset group' %}
+
+
+
+
+
+
+
+{% endblock %}
+{% block custom_foot_js %}
+
+{% endblock %}
\ No newline at end of file
diff --git a/apps/assets/templates/assets/admin_user_detail.html b/apps/assets/templates/assets/admin_user_detail.html
new file mode 100644
index 000000000..12a108f6c
--- /dev/null
+++ b/apps/assets/templates/assets/admin_user_detail.html
@@ -0,0 +1,220 @@
+{% extends 'base.html' %}
+{% load common_tags %}
+{% load users_tags %}
+{% load static %}
+{% load i18n %}
+
+{% block custom_head_css_js %}
+
+
+{% endblock %}
+{% block content %}
+
+
+
+
+
+
+
+
+
+
{{ admin_user.name }}
+
+
+
+
+
+
+ {% trans 'Name' %}: |
+ {{ admin_user.name }} |
+
+
+ {% trans 'Username' %}: |
+ {{ admin_user.username }} |
+
+
+ {% trans 'Date created' %}: |
+ {{ admin_user.date_created }} |
+
+
+ {% trans 'Created by' %}: |
+ {{ asset_group.created_by }} |
+
+
+ {% trans 'Comment' %}: |
+ {{ admin_user.comment }} |
+
+
+
+
+
+
+
+
+
{% trans 'Asset list of ' %} {{ admin_user.name }}
+
+
+
+
+
+
+ {% trans 'Hostname' %} |
+ {% trans 'IP' %} |
+ {% trans 'Port' %} |
+ {% trans 'Alive' %} |
+
+
+
+ {% for asset in page_obj %}
+
+ {{ asset.hostname }} |
+ {{ asset.ip }} |
+ {{ asset.port }} |
+ Alive |
+
+ {% endfor %}
+
+
+
+ {% include '_pagination.html' %}
+
+
+
+
+
+
+
+ {% trans 'Quick update' %}
+
+
+
+
+
+ {% trans 'Get install script' %}: |
+
+
+
+
+ |
+
+
+
+ {% trans 'Retest asset connectivity' %}: |
+
+
+
+
+ |
+
+
+
+ {% trans 'Reset private key' %}: |
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ {% trans 'Replace asset admin user with this' %}
+
+
+
+
+
+
+
+
+
+
+
+{% endblock %}
+{% block custom_foot_js %}
+
+{% endblock %}
\ No newline at end of file
diff --git a/apps/assets/templates/assets/admin_user_list.html b/apps/assets/templates/assets/admin_user_list.html
index d7aae75aa..eeb4587bd 100644
--- a/apps/assets/templates/assets/admin_user_list.html
+++ b/apps/assets/templates/assets/admin_user_list.html
@@ -20,7 +20,7 @@
{{ admin_user.id }} |
-
+
{{ admin_user.name }}
|
diff --git a/apps/assets/templates/assets/asset_group_detail.html b/apps/assets/templates/assets/asset_group_detail.html
index 08272a04f..4c48867b9 100644
--- a/apps/assets/templates/assets/asset_group_detail.html
+++ b/apps/assets/templates/assets/asset_group_detail.html
@@ -69,7 +69,7 @@
-
{% trans 'Asset list of ' %} {{ asset_group.name }}
+
{% trans 'Asset list of ' %}
{{ asset_group.name }}