pull/6/head
guanghongwei 2015-03-14 17:57:26 +08:00
commit 56df1f6963
11 changed files with 121 additions and 36 deletions

View File

@ -12,12 +12,31 @@ django.setup()
from juser.views import db_add_user, md5_crypt, CRYPTOR, db_add_group
from jasset.models import Asset, IDC, BisGroup
from juser.models import UserGroup, DEPT
from juser.models import UserGroup, DEPT, User
from jasset.views import jasset_group_add
from jperm.models import CmdGroup
from jlog.models import Log
def install():
IDC.objects.create(name='ALL', comment='ALL')
IDC.objects.create(name='默认', comment='默认')
DEPT.objects.create(name="默认", comment="默认部门")
DEPT.objects.create(name="超管部", comment="超级管理员部门")
dept = DEPT.objects.get(name='超管部')
dept2 = DEPT.objects.get(name='默认')
UserGroup.objects.create(name='ALL', dept=dept, comment='ALL')
UserGroup.objects.create(name='默认', dept=dept, comment='默认')
BisGroup.objects.create(name='ALL', dept=dept, comment='ALL')
BisGroup.objects.create(name='默认', dept=dept, comment='默认')
User(id=5000, username="admin", password=md5_crypt('admin'),
name='admin', email='admin@jumpserver.org', role='SU', is_active=True, dept=dept).save()
User(id=5001, username="group_admin", password=md5_crypt('group_admin'),
name='group_admin', email='group_admin@jumpserver.org', role='DA', is_active=True, dept=dept2).save()
def test_add_idc():
for i in range(1, 20):
name = 'IDC' + str(i)
@ -67,11 +86,10 @@ def test_add_user():
def test_add_asset_group():
BisGroup.objects.create(name='ALL', type='A', comment='ALL')
user_all = Asset.objects.all()
dept = DEPT.objects.get(name='默认')
for i in range(1, 20):
name = 'AssetGroup' + str(i)
group = BisGroup(name=name, type='A', comment=name)
group = BisGroup(name=name, dept=dept, comment=name)
group.save()
print 'Add: %s' % name
@ -80,11 +98,13 @@ def test_add_asset():
idc_all = IDC.objects.all()
test_idc = random.choice(idc_all)
bis_group_all = BisGroup.objects.all()
dept_all = DEPT.objects.all()
for i in range(1, 500):
ip = '192.168.1.' + str(i)
asset = Asset(ip=ip, port=22, login_type='L', idc=test_idc, is_active=True, comment='test')
asset.save()
asset.bis_group = [random.choice(bis_group_all) for i in range(2)]
asset.dept = [random.choice(dept_all) for i in range(2)]
print "Add: %s" % ip
@ -108,6 +128,7 @@ def test_add_log():
if __name__ == '__main__':
install()
test_add_dept()
test_add_group()
test_add_user()

View File

@ -17,6 +17,7 @@ class BisGroup(models.Model):
('A', 'ASSET'),
)
name = models.CharField(max_length=80, unique=True)
dept = models.ForeignKey(DEPT)
comment = models.CharField(max_length=160, blank=True, null=True)
type = models.CharField(max_length=1, choices=GROUP_TYPE, default='P')
@ -27,8 +28,6 @@ class BisGroup(models.Model):
class Asset(models.Model):
LOGIN_TYPE_CHOICES = (
('L', 'LDAP'),
('S', 'SSH_KEY'),
('P', 'PASSWORD'),
('M', 'MAP'),
)
ip = models.IPAddressField(unique=True)

View File

@ -6,7 +6,7 @@ from django.template import RequestContext
from django.shortcuts import render_to_response
from models import IDC, Asset, BisGroup
from juser.models import UserGroup
from juser.models import UserGroup, DEPT
from connect import PyCrypt, KEY
from jlog.models import Log
from jumpserver.views import jasset_group_add, jasset_host_edit, pages
@ -19,8 +19,8 @@ def index(request):
return render_to_response('jasset/jasset.html', )
def f_add_host(ip, port, idc, jtype, group, active, comment, username='', password=''):
groups = []
def f_add_host(ip, port, idc, jtype, group, dept, active, comment, username='', password=''):
groups, depts = [], []
idc = IDC.objects.get(name=idc)
if jtype == 'M':
print username, password
@ -45,7 +45,14 @@ def f_add_host(ip, port, idc, jtype, group, active, comment, username='', passwo
groups.append(c)
groups.extend([all_group, private_group])
print dept
for d in dept:
print d
p = DEPT.objects.get(name=d)
depts.append(p)
a.bis_group = groups
a.dept = depts
a.save()
@ -53,6 +60,7 @@ def add_host(request):
login_types = {'L': 'LDAP', 'S': 'SSH_KEY', 'P': 'PASSWORD', 'M': 'MAP'}
header_title, path1, path2 = u'添加主机', u'资产管理', u'添加主机'
eidc = IDC.objects.all()
edept = DEPT.objects.all()
egroup = BisGroup.objects.filter(type='A')
eusergroup = UserGroup.objects.all()
@ -64,6 +72,7 @@ def add_host(request):
j_group = request.POST.getlist('j_group')
j_active = request.POST.get('j_active')
j_comment = request.POST.get('j_comment')
j_dept = request.POST.getlist('j_dept')
if Asset.objects.filter(ip=str(j_ip)):
emg = u'该IP %s 已存在!' % j_ip
@ -72,9 +81,9 @@ def add_host(request):
if j_type == 'M':
j_user = request.POST.get('j_user')
j_password = cryptor.encrypt(request.POST.get('j_password'))
f_add_host(j_ip, j_port, j_idc, j_type, j_group, j_active, j_comment, j_user, j_password)
f_add_host(j_ip, j_port, j_idc, j_type, j_group, j_dept, j_active, j_comment, j_user, j_password)
else:
f_add_host(j_ip, j_port, j_idc, j_type, j_group, j_active, j_comment)
f_add_host(j_ip, j_port, j_idc, j_type, j_group, j_dept, j_active, j_comment)
smg = u'主机 %s 添加成功' % j_ip
return render_to_response('jasset/host_add.html', locals(), context_instance=RequestContext(request))
@ -184,28 +193,37 @@ def host_del(request, offset):
def host_edit(request):
actives = {1: u'激活', 0: u'禁用'}
login_types = {'L': 'LDAP', 'S': 'SSH_KEY', 'P': 'PASSWORD', 'M': 'MAP'}
login_types = {'L': 'LDAP', 'M': 'MAP'}
header_title, path1, path2 = u'修改主机', u'资产管理', u'修改主机'
groups, e_group = [], []
groups, e_group, e_dept, depts = [], [], [], []
eidc = IDC.objects.all()
egroup = BisGroup.objects.filter(type='A')
edept = DEPT.objects.all()
offset = request.GET.get('id')
for g in Asset.objects.get(id=int(offset)).bis_group.all():
e_group.append(g)
for d in Asset.objects.get(id=int(offset)).dept.all():
e_dept.append(d)
post = Asset.objects.get(id=int(offset))
if request.method == 'POST':
j_ip = request.POST.get('j_ip')
j_idc = request.POST.get('j_idc')
j_port = request.POST.get('j_port')
j_type = request.POST.get('j_type')
j_dept = request.POST.getlist('j_dept')
j_group = request.POST.getlist('j_group')
j_active = request.POST.get('j_active')
j_comment = request.POST.get('j_comment')
j_idc = IDC.objects.get(name=j_idc)
for group in j_group:
print group
c = BisGroup.objects.get(name=group)
groups.append(c)
for dept in j_dept:
d = DEPT.objects.get(name=dept)
depts.append(d)
a = Asset.objects.get(id=int(offset))
if j_type == 'M':
if post.password == request.POST.get('j_password'):
@ -231,6 +249,7 @@ def host_edit(request):
a.save()
a.bis_group = groups
a.dept = depts
a.save()
smg = u'主机 %s 修改成功' % j_ip
return HttpResponseRedirect('/jasset/host_list')
@ -317,10 +336,13 @@ def del_idc(request, offset):
def add_group(request):
header_title, path1, path2 = u'添加主机组', u'资产管理', u'添加主机组'
posts = Asset.objects.all()
edept = DEPT.objects.all()
if request.method == 'POST':
j_group = request.POST.get('j_group')
j_dept = request.POST.get('j_dept')
j_hosts = request.POST.getlist('j_hosts')
j_comment = request.POST.get('j_comment')
j_dept = DEPT.objects.get(name=j_dept)
if BisGroup.objects.filter(name=j_group):
emg = u'该主机组已存在!'
@ -328,6 +350,7 @@ def add_group(request):
else:
BisGroup.objects.create(name=j_group, comment=j_comment, type='A')
group = BisGroup.objects.get(name=j_group)
group.dept = j_dept
for host in j_hosts:
g = Asset.objects.get(id=host)
group.asset_set.add(g)
@ -342,7 +365,7 @@ def list_group(request):
if keyword:
posts = BisGroup.objects.filter(Q(name__contains=keyword) | Q(comment__contains=keyword))
else:
posts = BisGroup.objects.filter(type='A').order_by('id')
posts = BisGroup.objects.all().order_by('id')
contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
return render_to_response('jasset/group_list.html', locals(), context_instance=RequestContext(request))

View File

@ -8,7 +8,7 @@ password = mysql234
database = jumpserver
[ldap]
ldap_enable = 1
ldap_enable = 0
host_url = ldap://127.0.0.1:389
base_dn = dc=jumpserver, dc=org
root_dn = cn=admin,dc=jumpserver,dc=org

View File

@ -27,7 +27,7 @@
var str = document.location.pathname.split("/")[1];
var str1 = document.location.pathname.split("/")[2];
$("#"+str).addClass('active');
if($("#"+str1).length>0) {
$("#"+str1).addClass('active');
if($("."+str1).length>0) {
$("."+str1).addClass('active');
}
</script>

View File

@ -16,13 +16,25 @@
<div class="alert alert-success text-center">{{ smg }}</div>
{% endif %}
<form id="assetForm" method="post" class="form-horizontal">
<div class="form-group"><label class="col-sm-2 control-label"> 主机组名 </label>
<div class="form-group"><label class="col-sm-2 control-label"> 主机组名<span class="red-fonts">*</span></label>
<div class="col-sm-8" name="group_id" value="{{ post.id }}"><input type="text" value="{{ group.name }}" placeholder="网站" name="j_group" class="form-control"></div>
</div>
<div class="hr-line-dashed"></div>
<div class="form-group">
<label for="groups" class="col-lg-2 control-label">主机</label>
<label for="j_dept" class="col-lg-2 control-label">所属部门<span class="red-fonts">*</span></label>
<div class="col-sm-8">
<select id="j_dept" name="j_dept" class="form-control m-b">
{% for d in edept %}
<option type="checkbox" value="{{ d.name }}">{{ d.name }}</option>
{% endfor %}
</select>
</div>
</div>
<div class="hr-line-dashed"></div>
<div class="form-group">
<label for="groups" class="col-lg-2 control-label">主机<span class="red-fonts">*</span></label>
<div class="col-sm-3">
<select id="groups" size="12" class="form-control m-b" multiple>
{% for post in posts %}

View File

@ -28,6 +28,7 @@
<tr>
<th class="text-center"><input id="checkall" type="checkbox" class="i-checks" name="checkall" value="checkall" data-editable='false' onclick="check_all('contents_form')"></th>
<th class="text-center"> 主机组名 </th>
<th class="text-center"> 所属部门 </th>
<th class="text-center"> 主机数量 </th>
<th class="text-center"> 备注 </th>
<th class="text-center"> 操作 </th>
@ -38,6 +39,7 @@
<tr class="gradeX">
<td class="text-center" name="j_id" value="{{ post.id }}" data-editable='false'><input name="id" value="{{ post.id }}" type="checkbox" class="i-checks"></td>
<td class="text-center"> {{ post.name }} </td>
<td class="text-center"> {{ post.dept.name }} </td>
<td class="text-center"> <a href="/jasset/group_detail/?id={{ post.id }}">{{ post.asset_set.count }}</a> </td>
<td class="text-center"> {{ post.comment }} </td>
<td class="text-center">

View File

@ -57,8 +57,6 @@
<div class="form-group"><label class="col-sm-2 control-label"> 登录方式<span class="red-fonts">*</span> </label>
<div class="col-sm-8">
<div class="radio i-checks"><label> <input type="radio" id="L" checked="" value="L" name="j_type" onclick="show(this)"> <i> LDAP </i></label></div>
<div class="radio i-checks"><label> <input type="radio" id="S" value="S" name="j_type" onclick="show(this)"> <i> SSH_KEY </i></label></div>
<div class="radio i-checks"><label> <input type="radio" id="P" value="P" name="j_type" onclick="show(this)"> <i> PASSWORD </i></label></div>
<div class="radio i-checks"><label> <input type="radio" id="M" value="M" name="j_type" onclick="show(this)"> <i> MAP </i></label></div>
</div>
@ -86,6 +84,18 @@
</div>
</div>
<div class="hr-line-dashed"></div>
<div class="form-group">
<label for="j_dept" class="col-lg-2 control-label">所属部门<span class="red-fonts">*</span></label>
<div class="col-sm-8">
<select id="j_dept" name="j_dept" class="form-control m-b" multiple size="10">
{% for d in edept %}
<option type="checkbox" value="{{ d.name }}">{{ d.name }} {% if d.comment %} --- {{ d.comment }} {% endif %}</option>
{% endfor %}
</select>
</div>
</div>
<div class="hr-line-dashed"></div>
<div class="form-group">
<label for="j_group" class="col-lg-2 control-label">所属主机组<span class="red-fonts">*</span></label>

View File

@ -93,6 +93,22 @@
</div>
</div>
<div class="hr-line-dashed"></div>
<div class="form-group">
<label for="j_dept" class="col-lg-2 control-label"> 所属部门<span class="red-fonts">*</span> </label>
<div class="col-sm-8">
<select id="j_dept" name="j_dept" class="form-control m-b" multiple size="10">
{% for g in edept %}
{% if g in e_dept %}
<option type="checkbox" value="{{ g.name }}" selected>{{ g.name }} --- {{ g.comment }}</option>
{% else %}
<option type="checkbox" value="{{ g.name }}" >{{ g.name }} --- {{ g.comment }}</option>
{% endif %}
{% endfor %}
</select>
</div>
</div>
<div class="hr-line-dashed"></div>
<div class="form-group">
<label for="j_group" class="col-lg-2 control-label"> 所属主机组<span class="red-fonts">*</span> </label>

View File

@ -53,9 +53,10 @@
<th class="text-center"> 端口号 </th>
<th class="text-center" name="j_type"> 登录方式 </th>
<th class="text-center" name="j_idc"> 所属IDC </th>
<th class="text-center"> 所属业务组 </th>
<th class="text-center"> 所属部门 </th>
<th class="text-center"> 所属主机组 </th>
<th class="text-center"> 是否激活 </th>
<th class="text-center" name="j_time"> 添加时间 </th>
<!--<th class="text-center" name="j_time"> 添加时间 </th>-->
<th class="text-center" name="j_comment"> 备注 </th>
<th class="text-center"> 操作 </th>
</tr>
@ -68,9 +69,10 @@
<td class="text-center" name="j_port"> {{ post.port }} </td>
<td class="text-center" name="j_type"> {{ login_types|get_item:post.login_type }} </td>
<td class="text-center" name="j_idc"> {{ post.idc.name }} </td>
<td class="text-center" name="j_group">{{ post.dept.all | group_str2 }}</td>
<td class="text-center" name="j_group">{{ post.bis_group.all | group_str2 }}</td>
<td class="text-center" name="j_active"> {{ post.is_active|bool2str }} </td>
<td class="text-center"> {{ post.date_added|date:"Y-m-d H:i:s" }} </td>
<!--<td class="text-center"> {{ post.date_added|date:"Y-m-d H:i:s" }} </td>-->
<td class="text-center" name="j_comment"> {{ post.comment }} </td>
<td class="text-center" data-editable='false'>
<a value="/jasset/{{ post.ip }}/" class="iframe btn btn-xs btn-primary">详情</a>

View File

@ -15,23 +15,23 @@
<li id="juser">
<a href="#"><i class="fa fa-rebel"></i> <span class="nav-label">用户管理</span><span class="fa arrow"></span></a>
<ul class="nav nav-second-level">
<li id="dept_list"><a href="/juser/dept_list/">查看部门</a></li>
<li id="dept_add"><a href="/juser/dept_add/">添加部门</a></li>
<li id="group_list"><a href="/juser/group_list/">查看小组</a></li>
<li id="group_add"><a href="/juser/group_add/">添加小组</a></li>
<li id="user_list"><a href="/juser/user_list/">查看用户<span class="label {% ifequal user_active_num user_total_num %}label-primary {% else %}label-warning {% endifequal %}pull-right">{{ user_active_num }}/{{ user_total_num }}</span></a></li>
<li id="user_add"><a href="/juser/user_add/">添加用户</a></li>
<li class="dept_list"><a href="/juser/dept_list/">查看部门</a></li>
<li class="dept_add"><a href="/juser/dept_add/">添加部门</a></li>
<li class="group_list"><a href="/juser/group_list/">查看小组</a></li>
<li class="group_add"><a href="/juser/group_add/">添加小组</a></li>
<li class="user_list user_edit"><a href="/juser/user_list/">查看用户<span class="label {% ifequal user_active_num user_total_num %}label-primary {% else %}label-warning {% endifequal %}pull-right">{{ user_active_num }}/{{ user_total_num }}</span></a></li>
<li class="user_add"><a href="/juser/user_add/">添加用户</a></li>
</ul>
</li>
<li id="jasset">
<a><i class="fa fa-cube"></i> <span class="nav-label">资产管理</span><span class="fa arrow"></span></a>
<ul class="nav nav-second-level">
<li id="host_add"><a href="/jasset/host_add/">添加资产</a></li>
<li id="host_list"><a href="/jasset/host_list/">查看资产&nbsp&nbsp</span><span class="label label-info pull-right">16/18</span></a></li>
<li id="jgroup_add"><a href="/jasset/jgroup_add/">添加主机组</a></li>
<li id="jgroup_list"><a href="/jasset/jgroup_list/">查看主机组</a></li>
<li id="idc_add"><a href="/jasset/idc_add/">添加IDC</a></li>
<li id="idc_list"><a href="/jasset/idc_list/">查看IDC</a></li>
<li class="host_add host_add_multi"><a href="/jasset/host_add/">添加资产</a></li>
<li class="host_list"><a href="/jasset/host_list/">查看资产&nbsp&nbsp</span><span class="label label-info pull-right">16/18</span></a></li>
<li class="jgroup_add"><a href="/jasset/jgroup_add/">添加主机组</a></li>
<li class="jgroup_list group_detail"><a href="/jasset/jgroup_list/">查看主机组</a></li>
<li class="idc_add"><a href="/jasset/idc_add/">添加IDC</a></li>
<li class="idc_list idc_detail"><a href="/jasset/idc_list/">查看IDC</a></li>
</ul>
</li>
<li id="jperm">