Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
Gutyán Gábor
/
circlestack
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
23ae8ecc
authored
Jan 26, 2015
by
Kálmán Viktor
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'network-fixes' into 'master'
Network fixes
🚧
See merge request !285
parents
8916d530
c1a10731
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
251 additions
and
175 deletions
+251
-175
circle/dashboard/static/dashboard/node-list.js
+2
-8
circle/dashboard/templates/dashboard/node-list/column-monitor.html
+1
-0
circle/network/static/network/network.less
+7
-0
circle/network/tables.py
+17
-6
circle/network/templates/network/columns/_rule-type.html
+16
-0
circle/network/templates/network/columns/color-desc.html
+0
-19
circle/network/templates/network/columns/rule-short-description.html
+32
-0
circle/network/templates/network/dashboard.html
+136
-136
circle/network/templates/network/rule-list.html
+20
-3
circle/network/views.py
+20
-3
No files found.
circle/dashboard/static/dashboard/node-list.js
View file @
23ae8ecc
$
(
function
()
{
$
(
document
).
ready
(
function
()
{
colortable
();
// find disabled nodes, set danger (red) on the rows
$
(
'.node-disabled'
).
closest
(
"tr"
).
addClass
(
'danger'
);
});
// find disabled nodes, set danger (red) on the rows
function
colortable
()
{
$
(
'.false'
).
closest
(
"tr"
).
addClass
(
'danger'
);
$
(
'.true'
).
closest
(
"tr"
).
removeClass
(
'danger'
);
}
});
circle/dashboard/templates/dashboard/node-list/column-monitor.html
View file @
23ae8ecc
{% load sizefieldtags %}
{% load i18n %}
<span
class=
"{% if not record.enabled %}node-disabled{% endif %}"
></span>
<i
class=
"fa fa-gears"
></i>
{% trans "CPU" %}
<div
class=
"progress pull-right"
>
<div
class=
"progress-bar progress-bar-success"
role=
"progressbar"
...
...
circle/network/static/network/network.less
View file @
23ae8ecc
...
...
@@ -11,3 +11,10 @@
text-align: center;
width: 60px;
}
#rule-list-table {
td {
text-align: center;
&:nth-child(2), &:nth-child(3) {text-align: left;}
}
}
circle/network/tables.py
View file @
23ae8ecc
...
...
@@ -148,6 +148,7 @@ class RecordTable(Table):
address
=
TemplateColumn
(
template_name
=
"network/columns/records-address.html"
)
ttl
=
Column
(
verbose_name
=
_
(
"TTL"
))
class
Meta
:
model
=
Record
...
...
@@ -171,16 +172,26 @@ class SmallRecordTable(Table):
class
RuleTable
(
Table
):
r_type
=
LinkColumn
(
'network.rule'
,
args
=
[
A
(
'pk'
)])
r_type
=
LinkColumn
(
'network.rule'
,
args
=
[
A
(
'pk'
)],
verbose_name
=
_
(
"type"
),
orderable
=
False
,
)
color_desc
=
TemplateColumn
(
template_name
=
"network/columns/color-desc.html"
template_name
=
"network/columns/rule-short-description.html"
,
verbose_name
=
_
(
"Short description"
),
orderable
=
False
,
)
nat_external_port
=
Column
(
verbose_name
=
_
(
"NAT"
)
)
class
Meta
:
model
=
Rule
attrs
=
{
'class'
:
'table table-striped table-hover table-condensed'
}
fields
=
(
'r_type'
,
'color_desc'
,
'owner'
,
'extra'
,
'direction'
,
'action'
,
'proto'
,
'sport'
,
'dport'
,
'nat'
,
attrs
=
{
'class'
:
'table table-striped table-hover table-condensed'
,
'id'
:
"rule-list-table"
}
fields
=
(
'r_type'
,
'color_desc'
,
'extra'
,
'direction'
,
'action'
,
'proto'
,
'dport'
,
'nat_external_port'
,
)
order_by
=
'direction'
...
...
@@ -202,7 +213,7 @@ class VlanTable(Table):
class
Meta
:
model
=
Vlan
attrs
=
{
'class'
:
'table table-striped table-condensed'
}
fields
=
(
'vid'
,
'name'
,
'
interface'
,
'
network4'
,
'network6'
,
fields
=
(
'vid'
,
'name'
,
'network4'
,
'network6'
,
'domain'
,
)
order_by
=
'vid'
...
...
circle/network/templates/network/columns/_rule-type.html
0 → 100644
View file @
23ae8ecc
{% if record.r_type == "host" %}
{{ record.host.get_fqdn }}
{% elif record.r_type == "vlan" %}
{{ record.vlan.name }}
{% elif record.r_type == "vlangroup" %}
{{ record.vlangroup }}
[{% for v in record.vlangroup.vlans.all %}
{{ v.name }}{% if not forloop.last %},{% endif %}
{% endfor %}]
{% elif record.r_type == "group" %}
{{ record.hostgroup.name }}
{% elif record.r_type == "firewall" %}
{{ record.firewall }}
{% else %}
-
{% endif %}
circle/network/templates/network/columns/color-desc.html
deleted
100644 → 0
View file @
8916d530
{% load i18n %}
{% load l10n %}
{#
<span
style=
"color: #FF0000;"
>
[{{ record.r_type }}]
</span>
#}
{% if record.direction == "1" %}{{ record.foreign_network }}{% else %}{{ record.r_type }}{% endif %}
{#
<span
style=
"color: #0000FF;"
>
▸
</span>
#}
<i
class=
"fa fa-arrow-right"
></i>
{% if record.direction == "0" %}{{ record.foreign_network }}{% else %}{{ record.r_type }}{% endif %}
<span
style=
"color: #00FF00;"
>
{% if record.proto %}
proto={{ record.proto }}
{% endif %}
{% if record.sport %}
sport={{ record.sport }}
{% endif %}
{% if record.dport %}
dport={{ record.dport }}
{% endif %}
{{ record.description }}
circle/network/templates/network/columns/rule-short-description.html
0 → 100644
View file @
23ae8ecc
{% load i18n %}
{% if record.direction == "in" %}
{{ record.foreign_network }}
[{% for v in record.foreign_network.vlans.all %}
{{ v.name }}{% if not forloop.last %},{% endif %}
{% endfor %}]
{% else %}
{% include "network/columns/_rule-type.html" %}
{% endif %}
<i
class=
"fa fa-arrow-right"
></i>
{% if record.direction == "out" %}
{{ record.foreign_network }}
[{% for v in record.foreign_network.vlans.all %}
{{ v.name }}{% if not forloop.last %},{% endif %}
{% endfor %}]
{% else %}
{% include "network/columns/_rule-type.html" %}
{% endif %}
{% if record.nat %}
<span
class=
"label label-success"
>
NAT
[
{{record.nat_external_port}}
<i
class=
"fa fa-arrow-right"
></i>
{{ record.dport }}
]
{{ record.proto|upper }}
</span>
{% endif %}
circle/network/templates/network/dashboard.html
View file @
23ae8ecc
{% load i18n %}
{% load l10n %}
{% load staticfiles %}
<style>
.thumbnail
{
margin-bottom
:
30px
;
}
.dashboard-text
{
text-align
:
justify
;
}
</style>
<div
class=
"row"
>
<div
class=
"col-sm-3"
>
<div
class=
"thumbnail"
>
<div
class=
"caption"
>
<p
class=
"lead"
>
<a
href=
"{% url "
network
.
host_list
"
%}"
>
Hosts
</a>
are machines on the network.
</p>
<p
class=
"dashboard-text"
>
Proin mattis enim risus. Ut eu enim quis auctor. Duis lobort sollicitudin lacus, scelerisque dictum arcu aliquam nec.
</p>
<p
class=
"text-right"
>
<a
href=
"{% url "
network
.
host_list
"
%}"
class=
"btn btn-default"
>
{% trans "List" %}
</a>
<a
href=
"{% url "
network
.
host_create
"
%}"
class=
"btn btn-success"
>
{% trans "Create" %}
</a>
</p>
</div>
</div>
</div>
<div
class=
"col-sm-3"
>
<div
class=
"thumbnail"
>
<div
class=
"caption"
>
<p
class=
"lead"
>
<a
href=
"{% url "
network
.
vlan_list
"
%}"
>
Vlans
</a>
are machines on the network.
</p>
<p
class=
"dashboard-text"
>
Proin mattis enim risus. Ut eu enim quis auctor. Duis lobort sollicitudin lacus, scelerisque dictum arcu aliquam nec.
</p>
<p
class=
"text-right"
>
<a
href=
"{% url "
network
.
vlan_list
"
%}"
class=
"btn btn-default"
>
{% trans "List" %}
</a>
<a
href=
"{% url "
network
.
vlan_create
"
%}"
class=
"btn btn-success"
>
{% trans "Create" %}
</a>
</p>
</div>
</div>
</div>
<div
class=
"col-sm-3"
>
<div
class=
"thumbnail"
>
<div
class=
"caption"
>
<p
class=
"lead"
>
<a
href=
"{% url "
network
.
domain_list
"
%}"
>
Domains
</a>
are machines on the network.
</p>
<p
class=
"dashboard-text"
>
Proin mattis enim risus. Ut eu enim quis auctor. Duis lobort sollicitudin lacus, scelerisque dictum arcu aliquam nec.
</p>
<p
class=
"text-right"
>
<a
href=
"{% url "
network
.
domain_list
"
%}"
class=
"btn btn-default"
>
{% trans "List" %}
</a>
<a
href=
"{% url "
network
.
domain_create
"
%}"
class=
"btn btn-success"
>
{% trans "Create" %}
</a>
</p>
</div>
</div>
</div>
<div
class=
"col-sm-3"
>
<div
class=
"thumbnail"
>
<div
class=
"caption"
>
<p
class=
"lead"
>
<a
href=
"{% url "
network
.
record_list
"
%}"
>
Records
</a>
are machines on the network.
</p>
<p
class=
"dashboard-text"
>
Proin mattis enim risus. Ut eu enim quis auctor. Duis lobort sollicitudin lacus, scelerisque dictum arcu aliquam nec.
</p>
<p
class=
"text-right"
>
<a
href=
"{% url "
network
.
record_list
"
%}"
class=
"btn btn-default"
>
{% trans "List" %}
</a>
<a
href=
"{% url "
network
.
record_create
"
%}"
class=
"btn btn-success"
>
{% trans "Create" %}
</a>
</p>
</div>
</div>
</div>
<div
class=
"col-sm-3"
>
<div
class=
"thumbnail"
>
<div
class=
"caption"
>
<p
class=
"lead"
>
<a
href=
"{% url "
network
.
blacklist_list
"
%}"
>
Blacklists
</a>
are machines on the network.
</p>
<p
class=
"dashboard-text"
>
Proin mattis enim risus. Ut eu enim quis auctor. Duis lobort sollicitudin lacus, scelerisque dictum arcu aliquam nec.
</p>
<p
class=
"text-right"
>
<a
href=
"{% url "
network
.
blacklist_list
"
%}"
class=
"btn btn-default"
>
{% trans "List" %}
</a>
<a
href=
"{% url "
network
.
blacklist_create
"
%}"
class=
"btn btn-success"
>
{% trans "Create" %}
</a>
</p>
</div>
</div>
</div>
<div
class=
"col-sm-3"
>
<div
class=
"thumbnail"
>
<div
class=
"caption"
>
<p
class=
"lead"
>
<a
href=
"{% url "
network
.
rule_list
"
%}"
>
Rules
</a>
are machines on the network.
</p>
<p
class=
"dashboard-text"
>
Proin mattis enim risus. Ut eu enim quis auctor. Duis lobort sollicitudin lacus, scelerisque dictum arcu aliquam nec.
</p>
<p
class=
"text-right"
>
<a
href=
"{% url "
network
.
rule_list
"
%}"
class=
"btn btn-default"
>
{% trans "List" %}
</a>
<a
href=
"{% url "
network
.
rule_create
"
%}"
class=
"btn btn-success"
>
{% trans "Create" %}
</a>
</p>
</div>
</div>
</div>
<div
class=
"col-sm-3"
>
<div
class=
"thumbnail"
>
<div
class=
"caption"
>
<p
class=
"lead"
>
<a
href=
"{% url "
network
.
group_list
"
%}"
>
Host groups
</a>
are machines on the network.
</p>
<p
class=
"dashboard-text"
>
Proin mattis enim risus. Ut eu enim quis auctor. Duis lobort sollicitudin lacus, scelerisque dictum arcu aliquam nec.
</p>
<p
class=
"text-right"
>
<a
href=
"{% url "
network
.
group_list
"
%}"
class=
"btn btn-default"
>
{% trans "List" %}
</a>
<a
href=
"{% url "
network
.
group_create
"
%}"
class=
"btn btn-success"
>
{% trans "Create" %}
</a>
</p>
</div>
</div>
</div>
<div
class=
"col-sm-3"
>
<div
class=
"thumbnail"
>
<div
class=
"caption"
>
<p
class=
"lead"
>
<a
href=
"{% url "
network
.
vlan_group_list
"
%}"
>
Vlan groups
</a>
are machines on the network.
</p>
<p
class=
"dashboard-text"
>
Proin mattis enim risus. Ut eu enim quis auctor. Duis lobort sollicitudin lacus, scelerisque dictum arcu aliquam nec.
</p>
<p
class=
"text-right"
>
<a
href=
"{% url "
network
.
vlan_group_list
"
%}"
class=
"btn btn-default"
>
{% trans "List" %}
</a>
<a
href=
"{% url "
network
.
vlan_group_create
"
%}"
class=
"btn btn-success"
>
{% trans "Create" %}
</a>
</p>
</div>
</div>
</div>
<div
class=
"col-sm-12"
>
<h3>
<div
class=
"pull-right"
>
<a
href=
"{% url "
network
.
host_list
"
%}"
class=
"btn btn-xs btn-default"
>
<i
class=
"fa fa-list"
></i>
{% trans "list" %}
</a>
<a
href=
"{% url "
network
.
host_create
"
%}"
class=
"btn btn-xs btn-success"
>
<i
class=
"fa fa-plus-circle"
></i>
{% trans "new" %}
</a>
</div>
{% trans "Hosts" %}
<div>
<small>
{% trans "Hosts are machines on the network" %}
</small>
</div>
</h3>
<h3>
<div
class=
"pull-right"
>
<a
href=
"{% url "
network
.
vlan_list
"
%}"
class=
"btn btn-xs btn-default"
>
<i
class=
"fa fa-list"
></i>
{% trans "list" %}
</a>
<a
href=
"{% url "
network
.
vlan_create
"
%}"
class=
"btn btn-xs btn-success"
>
<i
class=
"fa fa-plus-circle"
></i>
{% trans "new" %}
</a>
</div>
{% trans "Vlans" %}
<div>
<small>
{% trans "Hosts are machines on the network" %}
</small>
</div>
</h3>
<h3>
<div
class=
"pull-right"
>
<a
href=
"{% url "
network
.
domain_list
"
%}"
class=
"btn btn-xs btn-default"
>
<i
class=
"fa fa-list"
></i>
{% trans "list" %}
</a>
<a
href=
"{% url "
network
.
domain_create
"
%}"
class=
"btn btn-xs btn-success"
>
<i
class=
"fa fa-plus-circle"
></i>
{% trans "new" %}
</a>
</div>
{% trans "Domains" %}
<div>
<small>
{% trans "Hosts are machines on the network" %}
</small>
</div>
</h3>
<h3>
<div
class=
"pull-right"
>
<a
href=
"{% url "
network
.
record_list
"
%}"
class=
"btn btn-xs btn-default"
>
<i
class=
"fa fa-list"
></i>
{% trans "list" %}
</a>
<a
href=
"{% url "
network
.
record_create
"
%}"
class=
"btn btn-xs btn-success"
>
<i
class=
"fa fa-plus-circle"
></i>
{% trans "new" %}
</a>
</div>
{% trans "Records" %}
<div>
<small>
{% trans "Hosts are machines on the network" %}
</small>
</div>
</h3>
<h3>
<div
class=
"pull-right"
>
<a
href=
"{% url "
network
.
blacklist_list
"
%}"
class=
"btn btn-xs btn-default"
>
<i
class=
"fa fa-list"
></i>
{% trans "list" %}
</a>
<a
href=
"{% url "
network
.
blacklist_create
"
%}"
class=
"btn btn-xs btn-success"
>
<i
class=
"fa fa-plus-circle"
></i>
{% trans "new" %}
</a>
</div>
{% trans "Blacklist items" %}
<div>
<small>
{% trans "Hosts are machines on the network" %}
</small>
</div>
</h3>
<h3>
<div
class=
"pull-right"
>
<a
href=
"{% url "
network
.
rule_list
"
%}"
class=
"btn btn-xs btn-default"
>
<i
class=
"fa fa-list"
></i>
{% trans "list" %}
</a>
<a
href=
"{% url "
network
.
rule_create
"
%}"
class=
"btn btn-xs btn-success"
>
<i
class=
"fa fa-plus-circle"
></i>
{% trans "new" %}
</a>
</div>
{% trans "Rules" %}
<div>
<small>
{% trans "Hosts are machines on the network" %}
</small>
</div>
</h3>
<h3>
<div
class=
"pull-right"
>
<a
href=
"{% url "
network
.
switch_port_list
"
%}"
class=
"btn btn-xs btn-default"
>
<i
class=
"fa fa-list"
></i>
{% trans "list" %}
</a>
<a
href=
"{% url "
network
.
switch_port_create
"
%}"
class=
"btn btn-xs btn-success"
>
<i
class=
"fa fa-plus-circle"
></i>
{% trans "new" %}
</a>
</div>
{% trans "Switch ports" %}
<div>
<small>
{% trans "Hosts are machines on the network" %}
</small>
</div>
</h3>
<h3>
<div
class=
"pull-right"
>
<a
href=
"{% url "
network
.
vlan_group_list
"
%}"
class=
"btn btn-xs btn-default"
>
<i
class=
"fa fa-list"
></i>
{% trans "list" %}
</a>
<a
href=
"{% url "
network
.
vlan_group_create
"
%}"
class=
"btn btn-xs btn-success"
>
<i
class=
"fa fa-plus-circle"
></i>
{% trans "new" %}
</a>
</div>
{% trans "Vlan groups" %}
<div>
<small>
{% trans "Hosts are machines on the network" %}
</small>
</div>
</h3>
<h3>
<div
class=
"pull-right"
>
<a
href=
"{% url "
network
.
group_list
"
%}"
class=
"btn btn-xs btn-default"
>
<i
class=
"fa fa-list"
></i>
{% trans "list" %}
</a>
<a
href=
"{% url "
network
.
group_create
"
%}"
class=
"btn btn-xs btn-success"
>
<i
class=
"fa fa-plus-circle"
></i>
{% trans "new" %}
</a>
</div>
{% trans "Host groups" %}
<div>
<small>
{% trans "Hosts are machines on the network" %}
</small>
</div>
</h3>
</div>
</div>
circle/network/templates/network/rule-list.html
View file @
23ae8ecc
...
...
@@ -8,11 +8,28 @@
{% block content %}
<div
class=
"page-header"
>
<a
href=
"{% url "
network
.
rule_create
"
%}"
class=
"btn btn-success pull-right"
><i
class=
"fa fa-plus-circle"
></i>
{% trans "Create a new rule" %}
</a>
<h1>
{% trans "Rules" %}
<small>
{% trans "list of all rules" %}
</small></h1>
<a
href=
"{% url "
network
.
rule_create
"
%}"
class=
"btn btn-success pull-right"
>
<i
class=
"fa fa-plus-circle"
></i>
{% trans "Create a new rule" %}
</a>
<h1>
{% trans "Rules" %}
<small>
{% trans "list of all rules" %}
</small></h1>
</div>
<ul
class=
"nav nav-pills"
style=
"margin: 5px 0 20px 0;"
>
<li
class=
"disabled"
>
<a
href=
"#"
>
{% trans "Filter by types" %}
</a>
</li>
<li
{%
if
not
request
.
GET
.
type
%}
class=
"active"
{%
endif
%}
>
<a
href=
"{{ request.path }}"
>
{% trans "ALL" %}
</a>
</li>
{% for k, v in types.items %}
<li
{%
if
request
.
GET
.
type =
=
k
%}
class=
"active"
{%
endif
%}
>
<a
href=
"?type={{ k }}"
>
{{ v }}
</a>
</li>
{% endfor %}
</ul>
<div
class=
"table-responsive"
>
{% render_table table %}
{% render_table table %}
</div>
{% endblock %}
circle/network/views.py
View file @
23ae8ecc
...
...
@@ -15,6 +15,8 @@
# You should have received a copy of the GNU General Public License along
# with CIRCLE. If not, see <http://www.gnu.org/licenses/>.
from
collections
import
OrderedDict
from
netaddr
import
IPNetwork
from
django.views.generic
import
(
TemplateView
,
UpdateView
,
DeleteView
,
CreateView
)
...
...
@@ -597,10 +599,25 @@ class RuleList(LoginRequiredMixin, SuperuserRequiredMixin, SingleTableView):
template_name
=
"network/rule-list.html"
table_pagination
=
False
def
get_context_data
(
self
,
**
kwargs
):
self
.
types
=
OrderedDict
([
(
'vlan'
,
_
(
"Vlan"
)),
(
'vlangroup'
,
_
(
"Vlan group"
)),
(
'host'
,
_
(
"Host"
)),
(
'hostgroup'
,
_
(
"Host group"
)),
(
'firewall'
,
_
(
"Firewall"
))
])
context
=
super
(
RuleList
,
self
)
.
get_context_data
(
**
kwargs
)
context
[
'types'
]
=
self
.
types
return
context
def
get_table_data
(
self
):
return
Rule
.
objects
.
select_related
(
'host'
,
'hostgroup'
,
'vlan'
,
'vlangroup'
,
'firewall'
,
'foreign_network'
,
'owner'
)
rules
=
Rule
.
objects
.
select_related
(
'host'
,
'hostgroup'
,
'vlan'
,
'vlangroup'
,
'firewall'
,
'foreign_network'
,
'owner'
)
rule_type
=
self
.
request
.
GET
.
get
(
"type"
)
if
rule_type
and
rule_type
in
self
.
types
.
keys
():
rules
=
rules
.
filter
(
**
{
'
%
s__isnull'
%
rule_type
:
False
})
return
rules
class
RuleDetail
(
LoginRequiredMixin
,
SuperuserRequiredMixin
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment