mirror of https://github.com/openspug/spug
fix issue
parent
5aeac11c6e
commit
4de40bc430
|
@ -15,11 +15,8 @@ class Host(models.Model, ModelMixin):
|
||||||
username = models.CharField(max_length=50)
|
username = models.CharField(max_length=50)
|
||||||
pkey = models.TextField(null=True)
|
pkey = models.TextField(null=True)
|
||||||
desc = models.CharField(max_length=255, null=True)
|
desc = models.CharField(max_length=255, null=True)
|
||||||
|
|
||||||
created_at = models.CharField(max_length=20, default=human_datetime)
|
created_at = models.CharField(max_length=20, default=human_datetime)
|
||||||
created_by = models.ForeignKey(User, models.PROTECT, related_name='+')
|
created_by = models.ForeignKey(User, models.PROTECT, related_name='+')
|
||||||
deleted_at = models.CharField(max_length=20, null=True)
|
|
||||||
deleted_by = models.ForeignKey(User, models.PROTECT, related_name='+', null=True)
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def private_key(self):
|
def private_key(self):
|
||||||
|
@ -42,6 +39,37 @@ class Host(models.Model, ModelMixin):
|
||||||
ordering = ('-id',)
|
ordering = ('-id',)
|
||||||
|
|
||||||
|
|
||||||
|
class HostExtend(models.Model, ModelMixin):
|
||||||
|
INSTANCE_CHARGE_TYPES = (
|
||||||
|
('PrePaid', '包年包月'),
|
||||||
|
('PostPaid', '按量付费'),
|
||||||
|
('Other', '其他')
|
||||||
|
)
|
||||||
|
INTERNET_CHARGE_TYPES = (
|
||||||
|
('PayByTraffic', '按流量计费'),
|
||||||
|
('PayByBandwidth', '按带宽计费'),
|
||||||
|
('Other', '其他')
|
||||||
|
)
|
||||||
|
host = models.OneToOneField(Host, on_delete=models.CASCADE)
|
||||||
|
instance_id = models.CharField(max_length=64)
|
||||||
|
zone_id = models.CharField(max_length=30)
|
||||||
|
cpu = models.IntegerField()
|
||||||
|
memory = models.FloatField()
|
||||||
|
disk = models.CharField(max_length=255)
|
||||||
|
os_name = models.CharField(max_length=50)
|
||||||
|
os_type = models.CharField(max_length=20)
|
||||||
|
private_ip_address = models.CharField(max_length=255)
|
||||||
|
public_ip_address = models.CharField(max_length=255)
|
||||||
|
instance_charge_type = models.CharField(max_length=20, choices=INSTANCE_CHARGE_TYPES)
|
||||||
|
internet_charge_type = models.CharField(max_length=20, choices=INTERNET_CHARGE_TYPES)
|
||||||
|
created_time = models.CharField(max_length=20)
|
||||||
|
expired_time = models.CharField(max_length=20, null=True)
|
||||||
|
updated_at = models.CharField(max_length=20, default=human_datetime)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
db_table = 'host_extend'
|
||||||
|
|
||||||
|
|
||||||
class Group(models.Model, ModelMixin):
|
class Group(models.Model, ModelMixin):
|
||||||
name = models.CharField(max_length=20)
|
name = models.CharField(max_length=20)
|
||||||
parent_id = models.IntegerField(default=0)
|
parent_id = models.IntegerField(default=0)
|
||||||
|
|
|
@ -13,7 +13,7 @@ from apps.monitor.models import Detection
|
||||||
from apps.account.models import Role
|
from apps.account.models import Role
|
||||||
from libs.ssh import SSH, AuthenticationException
|
from libs.ssh import SSH, AuthenticationException
|
||||||
from paramiko.ssh_exception import BadAuthenticationType
|
from paramiko.ssh_exception import BadAuthenticationType
|
||||||
from libs import human_datetime, AttrDict
|
from libs import AttrDict
|
||||||
from openpyxl import load_workbook
|
from openpyxl import load_workbook
|
||||||
import socket
|
import socket
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ class HostView(View):
|
||||||
if not request.user.has_host_perm(host_id):
|
if not request.user.has_host_perm(host_id):
|
||||||
return json_response(error='无权访问该主机,请联系管理员')
|
return json_response(error='无权访问该主机,请联系管理员')
|
||||||
return json_response(Host.objects.get(pk=host_id))
|
return json_response(Host.objects.get(pk=host_id))
|
||||||
hosts = {x.id: x.to_view() for x in Host.objects.filter(deleted_by_id__isnull=True)}
|
hosts = {x.id: x.to_view() for x in Host.objects.all()}
|
||||||
for rel in Group.hosts.through.objects.all():
|
for rel in Group.hosts.through.objects.all():
|
||||||
hosts[rel.host_id]['group_ids'].append(rel.group_id)
|
hosts[rel.host_id]['group_ids'].append(rel.group_id)
|
||||||
return json_response(list(hosts.values()))
|
return json_response(list(hosts.values()))
|
||||||
|
@ -48,7 +48,7 @@ class HostView(View):
|
||||||
return json_response('auth fail')
|
return json_response('auth fail')
|
||||||
|
|
||||||
group_ids = form.pop('group_ids')
|
group_ids = form.pop('group_ids')
|
||||||
other = Host.objects.filter(name=form.name, deleted_by_id__isnull=True).first()
|
other = Host.objects.filter(name=form.name).first()
|
||||||
if other and (not form.id or other.id != form.id):
|
if other and (not form.id or other.id != form.id):
|
||||||
return json_response(error=f'已存在的主机名称【{form.name}】')
|
return json_response(error=f'已存在的主机名称【{form.name}】')
|
||||||
if form.id:
|
if form.id:
|
||||||
|
@ -94,10 +94,7 @@ class HostView(View):
|
||||||
role = Role.objects.filter(host_perms__regex=fr'[^0-9]{form.id}[^0-9]').first()
|
role = Role.objects.filter(host_perms__regex=fr'[^0-9]{form.id}[^0-9]').first()
|
||||||
if role:
|
if role:
|
||||||
return json_response(error=f'角色【{role.name}】的主机权限关联了该主机,请解除关联后再尝试删除该主机')
|
return json_response(error=f'角色【{role.name}】的主机权限关联了该主机,请解除关联后再尝试删除该主机')
|
||||||
Host.objects.filter(pk=form.id).update(
|
Host.objects.filter(pk=form.id).delete()
|
||||||
deleted_at=human_datetime(),
|
|
||||||
deleted_by=request.user,
|
|
||||||
)
|
|
||||||
return json_response(error=error)
|
return json_response(error=error)
|
||||||
|
|
||||||
|
|
||||||
|
@ -121,8 +118,7 @@ def post_import(request):
|
||||||
password=row[5].value,
|
password=row[5].value,
|
||||||
desc=row[6].value
|
desc=row[6].value
|
||||||
)
|
)
|
||||||
if Host.objects.filter(hostname=data.hostname, port=data.port, username=data.username,
|
if Host.objects.filter(hostname=data.hostname, port=data.port, username=data.username).exists():
|
||||||
deleted_by_id__isnull=True).exists():
|
|
||||||
summary['skip'].append(i)
|
summary['skip'].append(i)
|
||||||
continue
|
continue
|
||||||
try:
|
try:
|
||||||
|
@ -139,7 +135,7 @@ def post_import(request):
|
||||||
except Exception:
|
except Exception:
|
||||||
summary['error'].append(i)
|
summary['error'].append(i)
|
||||||
continue
|
continue
|
||||||
if Host.objects.filter(name=data.name, deleted_by_id__isnull=True).exists():
|
if Host.objects.filter(name=data.name).exists():
|
||||||
summary['repeat'].append(i)
|
summary['repeat'].append(i)
|
||||||
continue
|
continue
|
||||||
host = Host.objects.create(created_by=request.user, **data)
|
host = Host.objects.create(created_by=request.user, **data)
|
||||||
|
|
Loading…
Reference in New Issue