Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
CIRCLE
/
cloud
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
94
Merge Requests
10
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
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
111 additions
and
35 deletions
+111
-35
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
+0
-0
circle/network/templates/network/rule-list.html
+18
-1
circle/network/views.py
+18
-1
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
function
colortable
()
{
$
(
'.false'
).
closest
(
"tr"
).
addClass
(
'danger'
);
$
(
'.true'
).
closest
(
"tr"
).
removeClass
(
'danger'
);
}
$
(
'.node-disabled'
).
closest
(
"tr"
).
addClass
(
'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
This diff is collapsed.
Click to expand it.
circle/network/templates/network/rule-list.html
View file @
23ae8ecc
...
...
@@ -8,10 +8,27 @@
{% 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>
<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 %}
</div>
...
...
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,11 +599,26 @@ 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
):
r
eturn
Rule
.
objects
.
select_related
(
'host'
,
'hostgroup'
,
'vlan'
,
r
ules
=
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
,
SuccessMessageMixin
,
UpdateView
):
...
...
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