Commit d1c96cd4 authored by ibuler's avatar ibuler

Merge branch 'cmdb' of code.simcu.com:jumpserver/jumpserver into cmdb

parents 154783a9 fa07f4ee
...@@ -22,7 +22,8 @@ class IDCSerializer(serializers.ModelSerializer): ...@@ -22,7 +22,8 @@ class IDCSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = IDC model = IDC
#fields = ('id', 'title', 'code', 'linenos', 'language', 'style') #fields = ('id', 'title', 'code', 'linenos', 'language', 'style')
class AssetGroupViewSet(viewsets.ModelViewSet): class AssetGroupViewSet(viewsets.ModelViewSet):
""" """
API endpoint that allows AssetGroup to be viewed or edited. API endpoint that allows AssetGroup to be viewed or edited.
...@@ -30,6 +31,7 @@ class AssetGroupViewSet(viewsets.ModelViewSet): ...@@ -30,6 +31,7 @@ class AssetGroupViewSet(viewsets.ModelViewSet):
queryset = AssetGroup.objects.all() queryset = AssetGroup.objects.all()
serializer_class = AssetGroupSerializer serializer_class = AssetGroupSerializer
class AssetViewSet(viewsets.ModelViewSet): class AssetViewSet(viewsets.ModelViewSet):
""" """
API endpoint that allows Asset to be viewed or edited. API endpoint that allows Asset to be viewed or edited.
...@@ -37,6 +39,7 @@ class AssetViewSet(viewsets.ModelViewSet): ...@@ -37,6 +39,7 @@ class AssetViewSet(viewsets.ModelViewSet):
queryset = Asset.objects.all() queryset = Asset.objects.all()
serializer_class = AssetSerializer serializer_class = AssetSerializer
class IDCViewSet(viewsets.ModelViewSet): class IDCViewSet(viewsets.ModelViewSet):
""" """
API endpoint that allows IDC to be viewed or edited. API endpoint that allows IDC to be viewed or edited.
......
...@@ -10,8 +10,8 @@ class AssetForm(forms.ModelForm): ...@@ -10,8 +10,8 @@ class AssetForm(forms.ModelForm):
model = Asset model = Asset
fields = [ fields = [
"ip", "other_ip", "hostname", "port", "group", "username", "password", "idc", "mac_addr", "ip", "other_ip", "remote_card_ip", "hostname", "port", "groups", "username", "password",
"remote_card_ip", "brand", "cpu", "memory", "disk", "os", "cabinet_no", "cabinet_pos", "idc", "mac_addr", "brand", "cpu", "memory", "disk", "os", "cabinet_no", "cabinet_pos",
"number", "status", "type", "env", "sn", "is_active", "comment" "number", "status", "type", "env", "sn", "is_active", "comment"
] ]
......
...@@ -6,9 +6,9 @@ from django.utils.translation import ugettext_lazy as _ ...@@ -6,9 +6,9 @@ from django.utils.translation import ugettext_lazy as _
class AssetGroup(models.Model): class AssetGroup(models.Model):
name = models.CharField(max_length=64, unique=True, verbose_name=_('Name')) name = models.CharField(max_length=64, unique=True, null=True, blank=True, verbose_name=_('Name'))
created_by = models.CharField(max_length=32, blank=True, verbose_name=_('Created by')) created_by = models.CharField(max_length=32, null=True, blank=True, verbose_name=_('Created by'))
comment = models.CharField(max_length=128, blank=True, verbose_name=_('Comment')) comment = models.CharField(max_length=128, null=True, blank=True, verbose_name=_('Comment'))
def __unicode__(self): def __unicode__(self):
return self.name return self.name
...@@ -34,44 +34,97 @@ class IDC(models.Model): ...@@ -34,44 +34,97 @@ class IDC(models.Model):
class Meta: class Meta:
db_table = 'idc' db_table = 'idc'
verbose_name = _('IDC')
verbose_name_plural = verbose_name
class AssetExtend(models.Model): class AssetExtend(models.Model):
pass key = models.CharField(max_length=64, null=True, blank=True, verbose_name=u'key')
value = models.CharField(max_length=64, null=True, blank=True, verbose_name=u'value')
created_by = models.CharField(max_length=32, blank=True, verbose_name=u"Created by")
date_added = models.DateTimeField(auto_now=True, null=True, blank=True)
comment = models.CharField(max_length=128, blank=True, verbose_name=u"Comment")
def __unicode__(self):
return self.name
class Meta:
db_table = 'assetextend'
class AdminUser(models.Model):
name = models.CharField(max_length=128, unique=True, null=True, blank=True, verbose_name=u"用户名称")
username = models.CharField(max_length=16, null=True, blank=True, verbose_name=u"用户名")
password = models.CharField(max_length=256, null=True, blank=True, verbose_name=u"密码")
private_key = models.CharField(max_length=4096, null=True, blank=True, verbose_name=u"私钥")
is_default = models.BooleanField(default=True, verbose_name=u"是否默认")
auto_update = models.BooleanField(default=True, verbose_name=u"自动更新")
date_added = models.DateTimeField(auto_now=True, null=True, blank=True)
create_by = models.CharField(max_length=32, null=True, blank=True, verbose_name=u"创建者")
comment = models.CharField(max_length=128, blank=True, verbose_name=u"备注")
def __unicode__(self):
return self.name
class Meta:
db_table = 'adminuser'
class SysUser(models.Model):
name = models.CharField(max_length=128, unique=True, null=True, blank=True, verbose_name=u"用户名称")
username = models.CharField(max_length=16, null=True, blank=True, verbose_name=u"用户名")
password = models.CharField(max_length=256, null=True, blank=True, verbose_name=u"密码")
protocol = models.CharField(max_length=16, null=True, blank=True, verbose_name=u"协议")
private_key = models.CharField(max_length=4096, null=True, blank=True, verbose_name=u"私钥")
public_key = models.CharField(max_length=4096, null=True, blank=True, verbose_name=u"公钥")
is_default = models.BooleanField(default=True, verbose_name=u"是否显示")
auto_push = models.BooleanField(default=True, verbose_name=u"自动推送")
auto_update = models.BooleanField(default=True, verbose_name=u"自动更新")
sudo = models.CharField(max_length=4096, null=True, blank=True, verbose_name=u"私钥")
shell = models.CharField(max_length=64, null=True, blank=True, verbose_name=u"shell环境")
home = models.CharField(max_length=64, null=True, blank=True, verbose_name=u"home目录")
uid = models.IntegerField(null=True, blank=True, verbose_name=u"uid")
date_added = models.DateTimeField(auto_now=True, null=True, blank=True)
create_by = models.CharField(max_length=32, null=True, blank=True, verbose_name=u"创建者")
comment = models.CharField(max_length=128, blank=True, verbose_name=u"备注")
def __unicode__(self):
return self.name
class Meta:
db_table = 'sysuser'
class Asset(models.Model): class Asset(models.Model):
ip = models.CharField(max_length=32, blank=True, verbose_name=_('IP')) ip = models.CharField(max_length=32, null=True, blank=True, verbose_name=_('IP'))
other_ip = models.CharField(max_length=255, blank=True, verbose_name=_('Other IP')) other_ip = models.CharField(max_length=255, null=True, blank=True, verbose_name=_('Other IP'))
remote_card_ip = models.CharField(max_length=16, blank=True, verbose_name=_('Remote card IP')) remote_card_ip = models.CharField(max_length=16, null=True, blank=True, verbose_name=_('Remote card IP'))
hostname = models.CharField(max_length=128, unique=True, blank=True, verbose_name=_('Hostname')) hostname = models.CharField(max_length=128, unique=True, null=True, blank=True, verbose_name=_('Hostname'))
port = models.IntegerField(blank=True, verbose_name=_('Port')) port = models.IntegerField(null=True, blank=True, verbose_name=_('Port'))
groups = models.ManyToManyField(AssetGroup, blank=True, verbose_name=_('Asset groups')) groups = models.ManyToManyField(AssetGroup, null=True, blank=True, verbose_name=_('Asset groups'))
username = models.CharField(max_length=16, blank=True, verbose_name=_('Admin user')) username = models.CharField(max_length=16, null=True, blank=True, verbose_name=_('Admin user'))
password = models.CharField(max_length=256, blank=True, verbose_name=_("Admin password")) password = models.CharField(max_length=256, null=True, blank=True, verbose_name=_("Admin password"))
idc = models.ForeignKey(IDC, blank=True, null=True, on_delete=models.SET_NULL, verbose_name=_('IDC')) admin_user = models.ForeignKey(AdminUser, null=True, blank=True, on_delete=models.SET_NULL, verbose_name=_("Admin User"))
mac_addr = models.CharField(max_length=20, blank=True, verbose_name=_("Mac address")) sys_user = models.ManyToManyField(SysUser, null=True, blank=True, verbose_name=_("Sys User"))
brand = models.CharField(max_length=64, blank=True, verbose_name=_('Brand')) idc = models.ForeignKey(IDC, null=True, blank=True, on_delete=models.SET_NULL, verbose_name=_('IDC'))
cpu = models.CharField(max_length=64, blank=True, verbose_name=_('CPU')) mac_addr = models.CharField(max_length=20, null=True, blank=True, verbose_name=_("Mac address"))
memory = models.CharField(max_length=128, blank=True, verbose_name=_('Memory')) brand = models.CharField(max_length=64, null=True, blank=True, verbose_name=_('Brand'))
disk = models.CharField(max_length=1024, blank=True, verbose_name=_('Disk')) cpu = models.CharField(max_length=64, null=True, blank=True, verbose_name=_('CPU'))
os = models.CharField(max_length=128, blank=True, verbose_name=_('OS')) memory = models.CharField(max_length=128, null=True, blank=True, verbose_name=_('Memory'))
cabinet_no = models.CharField(max_length=32, blank=True, verbose_name=_('Cabinet number')) disk = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('Disk'))
os = models.CharField(max_length=128, null=True, blank=True, verbose_name=_('OS'))
cabinet_no = models.CharField(max_length=32, null=True, blank=True, verbose_name=_('Cabinet number'))
cabinet_pos = models.IntegerField(null=True, blank=True, verbose_name=_('Cabinet position')) cabinet_pos = models.IntegerField(null=True, blank=True, verbose_name=_('Cabinet position'))
number = models.CharField(max_length=32, blank=True, unique=True, verbose_name=_('Asset number')) number = models.CharField(max_length=32, null=True, blank=True, unique=True, verbose_name=_('Asset number'))
status = models.ManyToManyField(AssetExtend, blank=True, status = models.ManyToManyField(AssetExtend, null=True, blank=True,
related_name="asset_status_extend", verbose_name=_('Asset status')) related_name="asset_status_extend", verbose_name=_('Asset status'))
type = models.ManyToManyField(AssetExtend, blank=True, type = models.ManyToManyField(AssetExtend, null=True, blank=True,
related_name="asset_type_extend", verbose_name=_('Asset type')) related_name="asset_type_extend", verbose_name=_('Asset type'))
env = models.ManyToManyField(AssetExtend, blank=True, env = models.ManyToManyField(AssetExtend, null=True, blank=True,
related_name="asset_env_extend", verbose_name=_('Asset environment')) related_name="asset_env_extend", verbose_name=_('Asset environment'))
sn = models.CharField(max_length=128, blank=True, unique=True, verbose_name=_('Serial number')) sn = models.CharField(max_length=128, null=True, blank=True, unique=True, verbose_name=_('Serial number'))
created_by = models.CharField(max_length=32, blank=True, verbose_name=_('Created by')) created_by = models.CharField(max_length=32, null=True, blank=True, verbose_name=_('Created by'))
is_active = models.BooleanField(default=True, verbose_name=_('Is active')) is_active = models.BooleanField(default=True, verbose_name=_('Is active'))
date_added = models.DateTimeField(auto_now=True, null=True, verbose_name=_('Date added')) date_added = models.DateTimeField(auto_now=True, null=True, blank=True, verbose_name=_('Date added'))
comment = models.CharField(max_length=128, blank=True, verbose_name=_('Comment')) comment = models.CharField(max_length=128, null=True, blank=True, verbose_name=_('Comment'))
def __unicode__(self): def __unicode__(self):
return self.ip return self.ip
...@@ -79,3 +132,19 @@ class Asset(models.Model): ...@@ -79,3 +132,19 @@ class Asset(models.Model):
class Meta: class Meta:
db_table = 'asset' db_table = 'asset'
class Label(models.Model):
key = models.CharField(max_length=64, null=True, blank=True, verbose_name=u'key')
value = models.CharField(max_length=64, null=True, blank=True, verbose_name=u'value')
asset = models.ForeignKey(Asset, null=True, blank=True, on_delete=models.SET_NULL, verbose_name=u'label')
created_by = models.CharField(max_length=32, blank=True, verbose_name=_("Created by"))
date_added = models.DateTimeField(auto_now=True, null=True, blank=True)
comment = models.CharField(max_length=128, blank=True, verbose_name=_('Comment'))
def __unicode__(self):
return self.name
class Meta:
db_table = 'label'
This diff is collapsed.
# coding:utf-8 # coding:utf-8
from django.conf.urls import url, include
from .views import *
# from .api import (
# AssetGroupViewSet, AssetViewSet, IDCViewSet
# )
from django.conf.urls import url,include from django.conf.urls import url,include
import views import views
# from rest_framework import routers # from rest_framework import routers
...@@ -9,6 +14,9 @@ import views ...@@ -9,6 +14,9 @@ import views
app_name = 'assets' app_name = 'assets'
urlpatterns = [ urlpatterns = [
url(r'^$', AssetListView.as_view(), name='asset-list'),
url(r'^(?P<pk>[0-9]+)/delete/$', AssetDeleteView.as_view(), name='asset-delete'),
url(r'^(?P<pk>[0-9]+)/detail/$', AssetDetailView.as_view(), name='asset-detail'),
url(r'^asset', views.AssetListView.as_view(), name='asset-list'), url(r'^asset', views.AssetListView.as_view(), name='asset-list'),
url(r'^asset/add$', views.AssetAddView.as_view(), name='asset-add'), url(r'^asset/add$', views.AssetAddView.as_view(), name='asset-add'),
url(r'^asset/(?P<pk>[0-9]+)$', views.AssetDetailView.as_view(), name='asset-detail'), url(r'^asset/(?P<pk>[0-9]+)$', views.AssetDetailView.as_view(), name='asset-detail'),
......
# ~*~ coding: utf-8 ~*~ # ~*~ coding: utf-8 ~*~
# #
from django.contrib.auth.mixins import UserPassesTestMixin
from django.urls import reverse_lazy
from common.tasks import send_mail_async
from common.utils import reverse
from users.models import User
try:
import cStringIO as StringIO
except ImportError:
import StringIO
class AdminUserRequiredMixin(UserPassesTestMixin):
login_url = reverse_lazy('users:login')
def test_func(self):
return self.request.user.is_staff
# coding:utf-8
from __future__ import absolute_import, unicode_literals from __future__ import absolute_import, unicode_literals
from django.views.generic import TemplateView, ListView
from django.urls import reverse_lazy
from django.views.generic.edit import CreateView, DeleteView, FormView, UpdateView
from django.views.generic import TemplateView, ListView from django.views.generic import TemplateView, ListView
from django.views.generic.edit import CreateView, DeleteView, FormView, UpdateView from django.views.generic.edit import CreateView, DeleteView, FormView, UpdateView
from django.urls import reverse_lazy from django.urls import reverse_lazy
...@@ -7,6 +12,8 @@ from django.views.generic.detail import DetailView ...@@ -7,6 +12,8 @@ from django.views.generic.detail import DetailView
from .models import Asset, AssetGroup, IDC, AssetExtend from .models import Asset, AssetGroup, IDC, AssetExtend
from .forms import AssetForm from .forms import AssetForm
from .utils import AdminUserRequiredMixin
class AssetAddView(CreateView): class AssetAddView(CreateView):
model = Asset model = Asset
...@@ -14,6 +21,10 @@ class AssetAddView(CreateView): ...@@ -14,6 +21,10 @@ class AssetAddView(CreateView):
template_name = 'assets/asset_add.html' template_name = 'assets/asset_add.html'
success_url = reverse_lazy('assets:asset-list') success_url = reverse_lazy('assets:asset-list')
def form_invalid(self, form):
print(form.errors)
return super(AssetAddView, self).form_invalid(form)
class AssetEditView(UpdateView): class AssetEditView(UpdateView):
pass pass
......
...@@ -132,7 +132,7 @@ else: ...@@ -132,7 +132,7 @@ else:
# Password validation # Password validation
# https://docs.djangoproject.com/en/1.10/ref/settings/#auth-password-validators # https://docs.djangoproject.com/en/1.10/ref/settings/#auth-password-validators
#
AUTH_PASSWORD_VALIDATORS = [ AUTH_PASSWORD_VALIDATORS = [
{ {
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
......
# -*- coding: utf-8 -*-
# Generated by Django 1.10 on 2016-08-21 09:54
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('users', '0003_auto_20160814_1758'),
]
operations = [
migrations.AlterField(
model_name='user',
name='email',
field=models.EmailField(max_length=30, unique=True, verbose_name='\u90ae\u4ef6'),
),
migrations.AlterField(
model_name='user',
name='groups',
field=models.ManyToManyField(to='users.UserGroup', verbose_name='\u7528\u6237\u7ec4'),
),
migrations.AlterField(
model_name='user',
name='name',
field=models.CharField(max_length=20, verbose_name='\u59d3\u540d'),
),
migrations.AlterField(
model_name='user',
name='username',
field=models.CharField(max_length=20, unique=True, verbose_name='\u7528\u6237\u540d'),
),
]
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment