diff --git a/apps/assets/forms.py b/apps/assets/forms.py index 6fc50849e..1338a7449 100644 --- a/apps/assets/forms.py +++ b/apps/assets/forms.py @@ -22,9 +22,11 @@ class AssetForm(forms.ModelForm): class AssetGroupForm(forms.ModelForm): assets = forms.ModelMultipleChoiceField(queryset=Asset.objects.all(), - widget=forms.SelectMultiple(attrs={ - 'class': 'select2', - 'data-placeholder': _('Select assets')})) + label=_('Asset'), + required=False, + widget=forms.SelectMultiple( + attrs={'class': 'select2', 'data-placeholder': _('Select assets')}) + ) def __init__(self, *args, **kwargs): if kwargs.get('instance'): diff --git a/apps/assets/migrations/0001_initial.py b/apps/assets/migrations/0001_initial.py index dc20ec9f1..e2ae4c8a1 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-03 14:30 +# Generated by Django 1.10 on 2016-09-05 12:50 from __future__ import unicode_literals from django.db import migrations, models @@ -14,31 +14,50 @@ class Migration(migrations.Migration): ] operations = [ + migrations.CreateModel( + 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_added', models.DateTimeField(auto_now=True, null=True)), + ('create_by', models.CharField(blank=True, max_length=32, null=True, verbose_name='Created by')), + ('comment', models.TextField(blank=True, verbose_name='Comment')), + ], + options={ + 'db_table': 'adminuser', + }, + ), migrations.CreateModel( name='Asset', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('ip', models.CharField(blank=True, max_length=32, verbose_name='\u8d44\u4ea7IP')), - ('other_ip', models.CharField(blank=True, max_length=255, verbose_name='\u5176\u4ed6IP')), - ('remote_card_ip', models.CharField(blank=True, max_length=16, verbose_name='\u8fdc\u63a7\u5361IP')), - ('hostname', models.CharField(blank=True, max_length=128, unique=True, verbose_name='\u4e3b\u673a\u540d')), - ('port', models.IntegerField(blank=True, verbose_name='\u7aef\u53e3')), - ('username', models.CharField(blank=True, max_length=16, verbose_name='\u7ba1\u7406\u7528\u6237\u540d')), - ('password', models.CharField(blank=True, max_length=256, verbose_name='\u5bc6\u7801')), - ('mac_addr', models.CharField(blank=True, max_length=20, unique=True, verbose_name='MAC\u5730\u5740')), - ('brand', models.CharField(blank=True, max_length=64, verbose_name='\u786c\u4ef6\u5382\u5546\u578b\u53f7')), - ('cpu', models.CharField(blank=True, max_length=64, verbose_name='CPU')), - ('memory', models.CharField(blank=True, max_length=128, verbose_name='\u5185\u5b58')), - ('disk', models.CharField(blank=True, max_length=1024, verbose_name='\u786c\u76d8')), - ('os', models.CharField(blank=True, max_length=128, verbose_name='\u7cfb\u7edf\u4fe1\u606f')), - ('cabinet_no', models.CharField(blank=True, max_length=32, verbose_name='\u673a\u67dc\u53f7')), - ('cabinet_pos', models.IntegerField(blank=True, null=True, verbose_name='\u8d44\u4ea7\u4f4d\u7f6e')), - ('number', models.CharField(blank=True, max_length=32, unique=True, verbose_name='\u8d44\u4ea7\u7f16\u53f7')), - ('sn', models.CharField(blank=True, max_length=128, unique=True, verbose_name='SN\u7f16\u53f7')), - ('created_by', models.CharField(blank=True, max_length=32, verbose_name='\u521b\u5efa\u8005')), - ('is_active', models.BooleanField(default=True, verbose_name='\u662f\u5426\u6fc0\u6d3b')), - ('date_added', models.DateTimeField(auto_now=True, null=True)), - ('comment', models.CharField(blank=True, max_length=128, verbose_name='\u5907\u6ce8')), + ('ip', models.CharField(blank=True, max_length=32, null=True, verbose_name='IP')), + ('other_ip', models.CharField(blank=True, max_length=255, null=True, verbose_name='Other IP')), + ('remote_card_ip', models.CharField(blank=True, max_length=16, null=True, verbose_name='Remote card IP')), + ('hostname', models.CharField(blank=True, max_length=128, null=True, unique=True, verbose_name='Hostname')), + ('port', models.IntegerField(blank=True, null=True, verbose_name='Port')), + ('username', models.CharField(blank=True, max_length=16, null=True, verbose_name='Admin user')), + ('password', models.CharField(blank=True, max_length=256, null=True, verbose_name='Admin password')), + ('mac_addr', models.CharField(blank=True, max_length=20, null=True, verbose_name='Mac address')), + ('brand', models.CharField(blank=True, max_length=64, null=True, verbose_name='Brand')), + ('cpu', models.CharField(blank=True, max_length=64, null=True, verbose_name='CPU')), + ('memory', models.CharField(blank=True, max_length=128, null=True, verbose_name='Memory')), + ('disk', models.CharField(blank=True, max_length=1024, null=True, verbose_name='Disk')), + ('os', models.CharField(blank=True, max_length=128, null=True, verbose_name='OS')), + ('cabinet_no', models.CharField(blank=True, max_length=32, null=True, verbose_name='Cabinet number')), + ('cabinet_pos', models.IntegerField(blank=True, null=True, verbose_name='Cabinet position')), + ('number', models.CharField(blank=True, max_length=32, null=True, unique=True, verbose_name='Asset number')), + ('sn', models.CharField(blank=True, max_length=128, null=True, unique=True, verbose_name='Serial number')), + ('created_by', models.CharField(blank=True, max_length=32, null=True, verbose_name='Created by')), + ('is_active', models.BooleanField(default=True, verbose_name='Is active')), + ('date_added', models.DateTimeField(auto_now=True, null=True, verbose_name='Date added')), + ('comment', models.CharField(blank=True, max_length=128, null=True, verbose_name='Comment')), + ('admin_user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='assets.AdminUser', verbose_name='Admin user')), ], options={ 'db_table': 'asset', @@ -48,15 +67,23 @@ class Migration(migrations.Migration): name='AssetExtend', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('key', models.CharField(blank=True, max_length=64, null=True, verbose_name='KEY')), + ('value', models.CharField(blank=True, max_length=64, null=True, verbose_name='VALUE')), + ('created_by', models.CharField(blank=True, max_length=32, verbose_name='Created by')), + ('date_added', models.DateTimeField(auto_now=True, null=True)), + ('comment', models.TextField(blank=True, verbose_name='Comment')), ], + options={ + 'db_table': 'assetextend', + }, ), migrations.CreateModel( name='AssetGroup', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=64, unique=True)), - ('created_by', models.CharField(blank=True, max_length=32, verbose_name='\u521b\u5efa\u8005')), - ('comment', models.CharField(blank=True, max_length=128, null=True)), + ('name', models.CharField(blank=True, max_length=64, null=True, unique=True, verbose_name='Name')), + ('created_by', models.CharField(blank=True, max_length=32, null=True, verbose_name='Created by')), + ('comment', models.TextField(blank=True, verbose_name='Comment')), ], options={ 'db_table': 'assetgroup', @@ -66,46 +93,93 @@ class Migration(migrations.Migration): name='IDC', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=32, verbose_name='\u673a\u623f\u540d\u79f0')), - ('bandwidth', models.CharField(blank=True, max_length=32, verbose_name='\u673a\u623f\u5e26\u5bbd')), - ('contact', models.CharField(blank=True, max_length=16, verbose_name='\u8054\u7cfb\u4eba')), - ('phone', models.CharField(blank=True, max_length=32, verbose_name='\u8054\u7cfb\u7535\u8bdd')), - ('address', models.CharField(blank=True, max_length=128, verbose_name='\u673a\u623f\u5730\u5740')), - ('network', models.TextField(blank=True, verbose_name='IP\u5730\u5740\u6bb5')), - ('date_added', models.DateField(auto_now=True, null=True)), - ('operator', models.CharField(blank=True, max_length=32, verbose_name='\u8fd0\u8425\u5546')), - ('created_by', models.CharField(blank=True, max_length=32, verbose_name='\u521b\u5efa\u8005')), - ('comment', models.CharField(blank=True, max_length=128, verbose_name='\u5907\u6ce8')), + ('name', models.CharField(max_length=32, verbose_name='Name')), + ('bandwidth', models.CharField(blank=True, max_length=32, verbose_name='Bandwidth')), + ('contact', models.CharField(blank=True, max_length=16, verbose_name='Contact')), + ('phone', models.CharField(blank=True, max_length=32, verbose_name='Phone')), + ('address', models.CharField(blank=True, max_length=128, verbose_name='Address')), + ('network', models.TextField(blank=True, verbose_name='Network')), + ('date_added', models.DateField(auto_now=True, null=True, verbose_name='Date added')), + ('operator', models.CharField(blank=True, max_length=32, verbose_name='Operator')), + ('created_by', models.CharField(blank=True, max_length=32, verbose_name='Created by')), + ('comment', models.TextField(blank=True, verbose_name='Comment')), ], options={ 'db_table': 'idc', - 'verbose_name': 'IDC\u673a\u623f', - 'verbose_name_plural': 'IDC\u673a\u623f', + }, + ), + migrations.CreateModel( + name='Label', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('key', models.CharField(blank=True, max_length=64, null=True, verbose_name='KEY')), + ('value', models.CharField(blank=True, max_length=64, null=True, verbose_name='VALUE')), + ('created_by', models.CharField(blank=True, max_length=32, verbose_name='Created by')), + ('date_added', models.DateTimeField(auto_now=True, null=True)), + ('comment', models.CharField(blank=True, max_length=128, verbose_name='Comment')), + ('asset', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='assets.Asset', verbose_name='Asset')), + ], + options={ + 'db_table': 'label', + }, + ), + migrations.CreateModel( + name='SysUser', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=128, unique=True, verbose_name='Name')), + ('username', models.CharField(blank=True, max_length=16, verbose_name='Username')), + ('password', models.CharField(blank=True, max_length=256, verbose_name='Password')), + ('protocol', models.CharField(default='ssh', max_length=16, verbose_name='Protocol')), + ('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')), + ('is_default', models.BooleanField(default=True, verbose_name='As default')), + ('auto_push', models.BooleanField(default=True, verbose_name='Auto push')), + ('auto_update', models.BooleanField(default=True, verbose_name='Auto update pass/key')), + ('sudo', models.TextField(blank=True, max_length=4096, verbose_name='Sudo')), + ('shell', models.CharField(blank=True, max_length=64, verbose_name='Shell')), + ('home', models.CharField(blank=True, max_length=64, verbose_name='Home')), + ('uid', models.IntegerField(blank=True, verbose_name='Uid')), + ('date_added', models.DateTimeField(auto_now=True, null=True)), + ('create_by', models.CharField(blank=True, max_length=32, verbose_name='Created by')), + ('comment', models.CharField(blank=True, max_length=128, verbose_name='Comment')), + ], + options={ + 'db_table': 'sysuser', }, ), migrations.AddField( model_name='asset', name='env', - field=models.ManyToManyField(blank=True, related_name='asset_env_extend', to='assets.AssetExtend', verbose_name='\u6240\u5c5e\u4e3b\u673a\u7ec4\u73af\u5883'), + field=models.ManyToManyField(related_name='asset_env_extend', to='assets.AssetExtend', verbose_name='Asset environment'), ), migrations.AddField( model_name='asset', - name='group', - field=models.ManyToManyField(blank=True, to='assets.AssetGroup', verbose_name='\u6240\u5c5e\u4e3b\u673a\u7ec4'), + name='groups', + field=models.ManyToManyField(blank=True, null=True, to='assets.AssetGroup', verbose_name='Asset groups'), ), migrations.AddField( model_name='asset', name='idc', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='assets.IDC', verbose_name='\u673a\u623f'), + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='assets.IDC', verbose_name='IDC'), ), migrations.AddField( model_name='asset', name='status', - field=models.ManyToManyField(blank=True, related_name='asset_status_extend', to='assets.AssetExtend', verbose_name='\u8d44\u4ea7\u72b6\u6001'), + field=models.ManyToManyField(related_name='asset_status_extend', to='assets.AssetExtend', verbose_name='Asset status'), + ), + migrations.AddField( + model_name='asset', + name='sys_user', + field=models.ManyToManyField(blank=True, null=True, to='assets.SysUser', verbose_name='System User'), ), migrations.AddField( model_name='asset', name='type', - field=models.ManyToManyField(blank=True, related_name='asset_type_extend', to='assets.AssetExtend', verbose_name='\u8d44\u4ea7\u7c7b\u578b'), + field=models.ManyToManyField(related_name='asset_type_extend', to='assets.AssetExtend', verbose_name='Asset type'), + ), + migrations.AlterIndexTogether( + name='asset', + index_together=set([('ip', 'port')]), ), ] diff --git a/apps/assets/migrations/0002_auto_20160821_1757.py b/apps/assets/migrations/0002_auto_20160821_1757.py deleted file mode 100644 index e22966fd8..000000000 --- a/apps/assets/migrations/0002_auto_20160821_1757.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10 on 2016-08-21 09:57 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('assets', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='asset', - name='cabinet_pos', - field=models.IntegerField(blank=True, max_length=4, verbose_name='\u673a\u5668\u4f4d\u7f6e'), - ), - ] diff --git a/apps/assets/migrations/0003_auto_20160821_1759.py b/apps/assets/migrations/0003_auto_20160821_1759.py deleted file mode 100644 index e5c49bcd5..000000000 --- a/apps/assets/migrations/0003_auto_20160821_1759.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10 on 2016-08-21 09:59 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('assets', '0002_auto_20160821_1757'), - ] - - operations = [ - migrations.AlterField( - model_name='asset', - name='cabinet_pos', - field=models.IntegerField(blank=True, max_length=4, null=True, verbose_name='\u673a\u5668\u4f4d\u7f6e'), - ), - ] diff --git a/apps/assets/models.py b/apps/assets/models.py index f29c2a5f2..7f4a4c579 100644 --- a/apps/assets/models.py +++ b/apps/assets/models.py @@ -14,7 +14,7 @@ class AssetGroup(models.Model): return self.name class Meta: - db_table = 'assetgroup' + db_table = 'asset_group' class IDC(models.Model): diff --git a/apps/assets/templates/assets/asset_add.html b/apps/assets/templates/assets/asset_create.html similarity index 100% rename from apps/assets/templates/assets/asset_add.html rename to apps/assets/templates/assets/asset_create.html diff --git a/apps/assets/templates/assets/assetgroup_add.html b/apps/assets/templates/assets/asset_group_create.html similarity index 100% rename from apps/assets/templates/assets/assetgroup_add.html rename to apps/assets/templates/assets/asset_group_create.html diff --git a/apps/assets/templates/assets/assetgroup_list.html b/apps/assets/templates/assets/asset_group_list.html similarity index 60% rename from apps/assets/templates/assets/assetgroup_list.html rename to apps/assets/templates/assets/asset_group_list.html index bc21bc8d5..484c131f4 100644 --- a/apps/assets/templates/assets/assetgroup_list.html +++ b/apps/assets/templates/assets/asset_group_list.html @@ -2,35 +2,35 @@ {% load i18n %} {% load common_tags %} {% block content_left_head %} - {% trans "Create asset group" %} + {% trans "Create asset group" %} {% endblock %} {% block table_head %}