diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 7aa07c9..74c4bd7 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -1,42 +1,15 @@
-
-<<<<<<< HEAD
-
-<<<<<<< HEAD
-<<<<<<< HEAD
-=======
-<<<<<<< HEAD
-
-=======
-
->>>>>>> a328e88122d80e72999261759f2594796f8da35b
-=======
-
->>>>>>> 1-rbac
-
-
-<<<<<<< HEAD
-<<<<<<< HEAD
-
-<<<<<<< HEAD
-=======
-
->>>>>>> 1-rbac
->>>>>>> a328e88122d80e72999261759f2594796f8da35b
-=======
-
->>>>>>> 1-rbac
-=======
->>>>>>> 1-rbac
-=======
-
-
->>>>>>> 1-rbac
+
+
+
+
+
+
+
-
@@ -47,164 +20,76 @@
-
-
+
+
-<<<<<<< HEAD
-<<<<<<< HEAD
-<<<<<<< HEAD
-<<<<<<< HEAD
-
-
-=======
-
-<<<<<<< HEAD
-
-=======
-
->>>>>>> 1-rbac
->>>>>>> a328e88122d80e72999261759f2594796f8da35b
-=======
-
-
->>>>>>> 1-rbac
-=======
-
-
->>>>>>> 1-rbac
-=======
-
-
->>>>>>> 1-rbac
+
+
-
+
-<<<<<<< HEAD
-
-
+
+
-<<<<<<< HEAD
-<<<<<<< HEAD
-<<<<<<< HEAD
-
-
-=======
-<<<<<<< HEAD
-
-
-=======
-
-
->>>>>>> 1-rbac
->>>>>>> a328e88122d80e72999261759f2594796f8da35b
-
-=======
-
-
-=======
-
-
->>>>>>> 1-rbac
+
-
-
->>>>>>> 1-rbac
-
-
-
-
-
-
-
-<<<<<<< HEAD
-<<<<<<< HEAD
-<<<<<<< HEAD
-
-
-
-=======
-
-
-=======
-
-
->>>>>>> 1-rbac
-
-
-
->>>>>>> 1-rbac
-
-
-
-
-
-
-
-
-
-
-
+
-
-
+
+
-<<<<<<< HEAD
-<<<<<<< HEAD
-
-
-
-=======
-<<<<<<< HEAD
-
-
-=======
-
-
->>>>>>> 1-rbac
+
+
-
+
->>>>>>> a328e88122d80e72999261759f2594796f8da35b
-=======
-
-
-
-
-
->>>>>>> 1-rbac
-=======
-
-
-
->>>>>>> 1-rbac
-=======
->>>>>>> 1-rbac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
- reverse
- OA
+ all_cabinet
@@ -213,110 +98,25 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
- true
- DEFINITION_ORDER
+
+
+
+
-<<<<<<< HEAD
-
-<<<<<<< HEAD
-
-=======
-=======
-
-<<<<<<< HEAD
->>>>>>> 1-rbac
-
->>>>>>> 1-rbac
-=======
-
->>>>>>> 1-rbac
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- AngularJS
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
@@ -329,6 +129,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -337,30 +154,17 @@
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -376,617 +180,151 @@
-
+
+
-
+
-
-
+
+
-
-
-
-
- 1539589405377
+
+ 1554181508462
- 1539589405377
+ 1554181508462
+
+
-
-
-
-
-
-
-
-
+
+
-<<<<<<< HEAD
-<<<<<<< HEAD
-<<<<<<< HEAD
-
-=======
-
->>>>>>> 1-rbac
-=======
-
->>>>>>> 1-rbac
-=======
-
->>>>>>> 1-rbac
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
+
+
-
+
-
-
+
+
-
+
+
+
+
-
-
+
+
+
+
+
-
+
-
-
+
+
+
+
-
+
+
+
+
+
+
+
+
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<<<<<<< HEAD
-<<<<<<< HEAD
-
-
-<<<<<<< HEAD
-
-
-=======
-
-
-<<<<<<< HEAD
-=======
->>>>>>> 1-rbac
+
+
-
-
->>>>>>> a328e88122d80e72999261759f2594796f8da35b
-
-
-
-=======
->>>>>>> 1-rbac
-
-=======
-
->>>>>>> 1-rbac
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<<<<<<< HEAD
-<<<<<<< HEAD
-<<<<<<< HEAD
-
-
-=======
-
-
->>>>>>> 1-rbac
-=======
-
-
->>>>>>> 1-rbac
-
-
-
-
-
-<<<<<<< HEAD
-<<<<<<< HEAD
-
-
-=======
-
-<<<<<<< HEAD
-
-=======
-
->>>>>>> a328e88122d80e72999261759f2594796f8da35b
-=======
-
-
-
-
-
-<<<<<<< HEAD
-
-
-
-
->>>>>>> 1-rbac
-
->>>>>>> 1-rbac
-
-
-
-=======
->>>>>>> 1-rbac
-
-=======
-
-
-
-
-
-
->>>>>>> 1-rbac
-
-
-
-
-
-
-
-
-<<<<<<< HEAD
-<<<<<<< HEAD
-<<<<<<< HEAD
-
-
-=======
-
-<<<<<<< HEAD
-
-=======
-
->>>>>>> 1-rbac
->>>>>>> a328e88122d80e72999261759f2594796f8da35b
-
-
-
-=======
-
-
->>>>>>> 1-rbac
-=======
-
-
->>>>>>> 1-rbac
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<<<<<<< HEAD
-<<<<<<< HEAD
-<<<<<<< HEAD
-
-
-=======
-
-
->>>>>>> 1-rbac
-
-=======
-<<<<<<< HEAD
-
-
-=======
-
-
->>>>>>> 1-rbac
-
-
-
->>>>>>> a328e88122d80e72999261759f2594796f8da35b
-=======
-
-
->>>>>>> 1-rbac
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-<<<<<<< HEAD
-
+
-<<<<<<< HEAD
-<<<<<<< HEAD
-<<<<<<< HEAD
-
-
-=======
-<<<<<<< HEAD
-
-
-=======
-
-
->>>>>>> 1-rbac
->>>>>>> a328e88122d80e72999261759f2594796f8da35b
-=======
-
-
->>>>>>> 1-rbac
-=======
-
-
->>>>>>> 1-rbac
-
+
+
+
+
+
-=======
->>>>>>> 1-rbac
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/apps/cmdb/forms.py b/apps/cmdb/forms.py
index 33302ac..42b381e 100644
--- a/apps/cmdb/forms.py
+++ b/apps/cmdb/forms.py
@@ -4,7 +4,7 @@
from django import forms
-from .models import Code, DeviceInfo, ConnectionInfo, DeviceFile, NetworkAsset
+from .models import Code, DeviceInfo, ConnectionInfo, DeviceFile, NetworkAsset, NatRule
class CodeCreateForm(forms.ModelForm):
@@ -127,4 +127,16 @@ class NetworkAssetUpdateForm(NetworkAssetCreateForm):
if self.instance:
matching_asset = NetworkAsset.objects.exclude(pk=self.instance.pk)
if matching_asset.filter(ip_address=ip_address).exists():
- raise forms.ValidationError('资产地址已存在:{}已存在'.format(ip_address))
\ No newline at end of file
+ raise forms.ValidationError('资产地址已存在:{}已存在'.format(ip_address))
+
+
+class NatRuleForm(forms.ModelForm):
+ class Meta:
+ model = NatRule
+ fields = '__all__'
+ error_messages = {
+ 'internet_ip': {'required': '请填写公网IP'},
+ 'src_port': {'required': '请填写公网端口'},
+ 'lan_ip': {'required': '请填写内网地址'},
+ 'dest_port': {'required': '请填写内网端口'}
+ }
diff --git a/apps/cmdb/models.py b/apps/cmdb/models.py
index 00d63be..cb1b03c 100644
--- a/apps/cmdb/models.py
+++ b/apps/cmdb/models.py
@@ -148,12 +148,13 @@ class NetworkAsset(models.Model):
class NatRule(models.Model):
- internet_ip = models.CharField(max_length=80, blank=True, default='', verbose_name='互联网IP')
- src_port = models.IntegerField(blank=True, default='', verbose_name='源端口')
- lan_ip = models.CharField(max_length=80, blank=True, default='', verbose_name='内网IP')
- dest_port = models.IntegerField(blank=True, default='', verbose_name='目的端口')
+ internet_ip = models.CharField(max_length=80, verbose_name='互联网IP')
+ src_port = models.IntegerField(verbose_name='源端口')
+ lan_ip = models.CharField(max_length=80, verbose_name='内网IP')
+ dest_port = models.IntegerField(verbose_name='目的端口')
state = models.BooleanField(default=True, verbose_name='状态')
- desc = models.TextField(blank=True, default='', verbose_name='备注信息')
+ dev_cabinet = models.ForeignKey('Cabinet', blank=True, default='', on_delete=models.SET_DEFAULT, verbose_name='机柜信息')
+ desc = models.CharField(max_length=100, verbose_name='规则说明')
class Meta:
verbose_name = 'NAT规则'
@@ -164,14 +165,12 @@ class DomainName(AbstractMode):
dn_type_choices = (('1', '主域名'),('2', '二级域名'))
domain = models.CharField(max_length=200, verbose_name='域名')
dn_type = models.CharField(max_length=20, choices=dn_type_choices, default='1')
- addr_resolution = models.ForeignKey('NatRule', blank=True, null=True,
- on_delete=models.SET_NULL, verbose_name='解析地址')
resolution_server = models.ForeignKey('Supplier', related_name='res_server',
blank=True, null=True, on_delete=models.SET_NULL, verbose_name='解析服务')
domain_provider = models.ForeignKey('Supplier', related_name='do_provider',
- blank=True, null=True, on_delete=models.SET_NULL, verbose_name='解析服务')
+ blank=True, null=True, on_delete=models.SET_NULL, verbose_name='域名服务')
state = models.BooleanField(default=True, verbose_name='状态')
- ssl = models.FileField(upload_to="ssl_file/%Y/%m", null=True, blank=True, verbose_name="SSL证书")
+ ssl_cert = models.FileField(upload_to="ssl_cert/%Y/%m", null=True, blank=True, verbose_name="SSL证书")
buyDate = models.DateField(default=datetime.now, blank=True, null=True, verbose_name='购买日期')
warrantyDate = models.DateField(default=datetime.now, blank=True, null=True, verbose_name='到保日期')
desc = models.TextField(blank=True, default='', verbose_name='备注信息')
@@ -181,3 +180,5 @@ class DomainName(AbstractMode):
verbose_name_plural = verbose_name
+
+
diff --git a/apps/cmdb/urls.py b/apps/cmdb/urls.py
index 87c2c3d..95afc6b 100644
--- a/apps/cmdb/urls.py
+++ b/apps/cmdb/urls.py
@@ -50,4 +50,10 @@ urlpatterns = [
path('eam/network_asset/update/', views_eam.NetworkAssetUpdateView.as_view(), name='eam-network_asset-update'),
path('eam/network_asset/list/', views_eam.NetworkAssetListView.as_view(), name='eam-network_asset-list'),
path('eam/network_asset/delete/', views_eam.NetworkAssetDeleteView.as_view(), name='eam-network_asset-delete'),
+
+ path('eam/natrule/', views_eam.NatRuleView.as_view(), name='eam-natrule'),
+ path('eam/natrule/create/', views_eam.NatRuleCreateView.as_view(), name='eam-natrule-create'),
+ path('eam/natrule/update/', views_eam.NatRuleUpdateView.as_view(), name='eam-natrule-update'),
+ path('eam/natrule/list/', views_eam.NatRuleListView.as_view(), name='eam-natrule-list'),
+ path('eam/natrule/delete/', views_eam.NatRuleDeleteView.as_view(), name='eam-natrule-delete'),
]
diff --git a/apps/cmdb/views_eam.py b/apps/cmdb/views_eam.py
index e0b1e1c..9e7481d 100644
--- a/apps/cmdb/views_eam.py
+++ b/apps/cmdb/views_eam.py
@@ -11,9 +11,10 @@ from system.mixin import LoginRequiredMixin
from custom import (BreadcrumbMixin, SandboxDeleteView,
SandboxListView, SandboxUpdateView, SandboxCreateView)
from .models import (Cabinet, DeviceInfo, Code, ConnectionInfo, DeviceFile,
- Supplier, NetworkAsset)
+ Supplier, NetworkAsset, NatRule, DomainName)
from .forms import (DeviceCreateForm, DeviceUpdateForm, ConnectionInfoForm,
- DeviceFileUploadForm, NetworkAssetCreateForm, NetworkAssetUpdateForm)
+ DeviceFileUploadForm, NetworkAssetCreateForm,
+ NetworkAssetUpdateForm,NatRuleForm)
from utils.db_utils import MongodbDriver
from utils.sandbox_utils import LoginExecution
@@ -314,3 +315,97 @@ class NetworkAssetListView(SandboxListView):
class NetworkAssetDeleteView(SandboxDeleteView):
model = NetworkAsset
+
+class NatRuleView(LoginRequiredMixin, BreadcrumbMixin, TemplateView):
+ template_name = 'cmdb/natrule.html'
+
+ def get_context_data(self, **kwargs):
+ kwargs['all_cabinet'] = Cabinet.objects.all()
+ return super().get_context_data(**kwargs)
+
+
+class NatRuleCreateView(SandboxCreateView):
+ model = NatRule
+ form_class = NatRuleForm
+
+ def get_context_data(self, **kwargs):
+ kwargs['all_cabinet'] = Cabinet.objects.all()
+ return super().get_context_data(**kwargs)
+
+
+class NatRuleUpdateView(SandboxUpdateView):
+ model = NatRule
+ form_class = NatRuleForm
+
+ def get_context_data(self, **kwargs):
+ kwargs['all_cabinet'] = Cabinet.objects.all()
+ return super().get_context_data(**kwargs)
+
+
+class NatRuleListView(SandboxListView):
+ model = NatRule
+ fields = ['id', 'internet_ip', 'src_port', 'lan_ip', 'dest_port', 'state', 'dev_cabinet__number', 'desc']
+
+ def get_filters(self):
+ data = self.request.GET
+ filters = {}
+ if 'internet_ip' in data and data['internet_ip']:
+ filters['internet_ip__icontains'] = data['internet_ip']
+ if 'src_port' in data and data['src_port']:
+ filters['src_port'] = data['src_port']
+ if 'lan_ip' in data and data['lan_ip']:
+ filters['lan_ip__icontains'] = data['lan_ip']
+ if 'dest_port' in data and data['dest_port']:
+ filters['dest_port'] = data['dest_port']
+ if 'dev_cabinet' in data and data['dev_cabinet']:
+ filters['dev_cabinet'] = data['dev_cabinet']
+ if 'desc' in data and data['desc']:
+ filters['desc__icontains'] = data['desc']
+ return filters
+
+
+class NatRuleDeleteView(SandboxDeleteView):
+ model = NatRule
+
+
+# class DomainNameView(LoginRequiredMixin, BreadcrumbMixin, TemplateView):
+# template_name = 'cmdb/domainname.html'
+#
+#
+# class DomainNameCreateView(SandboxCreateView):
+# model = DomainName
+# form_class = NetworkAssetCreateForm
+#
+# def get_context_data(self, **kwargs):
+# kwargs['all_supplier'] = Supplier.objects.all()
+# return super().get_context_data(**kwargs)
+#
+#
+# class DomainNameUpdateView(SandboxUpdateView):
+# model = NetworkAsset
+# form_class = NetworkAssetUpdateForm
+#
+# def get_context_data(self, **kwargs):
+# kwargs['all_provider'] = Supplier.objects.all()
+# return super().get_context_data(**kwargs)
+#
+#
+# class DomainNameListView(SandboxListView):
+# model = NetworkAsset
+# fields = ['id', 'domain', 'resolution_server', 'domain_provider', 'state', 'buyDate', 'warrantyDate', 'desc']
+#
+# def get_filters(self):
+# data = self.request.GET
+# filters = {'dn_type': '1'}
+# if 'domain' in data and data['domain']:
+# filters['domain__icontains'] = data['domain']
+# if 'resolution_server' in data and data['resolution_server']:
+# filters['resolution_server'] = data['resolution_server']
+# if 'domain_provider' in data and data['domain_provider']:
+# filters['domain_provider'] = data['domain_provider']
+#
+# return filters
+#
+#
+# class DomainNameDeleteView(SandboxDeleteView):
+# model = DomainName
\ No newline at end of file
diff --git a/templates/cmdb/domainname.html b/templates/cmdb/domainname.html
new file mode 100644
index 0000000..eb31fce
--- /dev/null
+++ b/templates/cmdb/domainname.html
@@ -0,0 +1,359 @@
+{% extends "base-left.html" %}
+{% load staticfiles %}
+
+{% block css %}
+
+
+
+{% endblock %}
+
+{% block content %}
+
+
+
+
+
+
+{% endblock %}
+
+
+{% block javascripts %}
+
+
+
+
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/templates/cmdb/natrule.html b/templates/cmdb/natrule.html
new file mode 100644
index 0000000..e806079
--- /dev/null
+++ b/templates/cmdb/natrule.html
@@ -0,0 +1,325 @@
+{% extends "base-left.html" %}
+{% load staticfiles %}
+
+{% block css %}
+
+
+
+{% endblock %}
+
+{% block content %}
+
+
+
+
+
+
+{% endblock %}
+
+
+{% block javascripts %}
+
+
+
+
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/templates/cmdb/natrule_form.html b/templates/cmdb/natrule_form.html
new file mode 100644
index 0000000..295348f
--- /dev/null
+++ b/templates/cmdb/natrule_form.html
@@ -0,0 +1,152 @@
+{% extends 'base-layer.html' %}
+{% load staticfiles %}
+
+{% block css %}
+
+
+
+{% endblock %}
+
+{% block main %}
+
+
+{% endblock %}
+
+{% block javascripts %}
+
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/templates/cmdb/network_asset.html b/templates/cmdb/network_asset.html
index 51f319d..f884367 100644
--- a/templates/cmdb/network_asset.html
+++ b/templates/cmdb/network_asset.html
@@ -145,10 +145,10 @@
{
data: "state",
render : function(data, type, row, meta) {
- if (data=true) {
+ if (data==1) {
var ret="";
return ret;
- }if (data=false) {
+ }if (data==0) {
var ret="";
return ret;