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
fc553851
authored
Nov 03, 2014
by
Bach Dániel
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master' into feature-port-operations
Conflicts: circle/dashboard/urls.py
parents
c4872897
833d5490
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
42 changed files
with
456 additions
and
265 deletions
+456
-265
circle/circle/settings/local.py
+7
-0
circle/circle/urls.py
+10
-1
circle/dashboard/static/dashboard/dashboard.css
+10
-1
circle/dashboard/static/dashboard/dashboard.js
+34
-4
circle/dashboard/static/dashboard/disk-list.js
+0
-23
circle/dashboard/static/dashboard/group-details.js
+1
-1
circle/dashboard/static/dashboard/group-list.js
+1
-0
circle/dashboard/static/dashboard/node-details.js
+1
-1
circle/dashboard/static/dashboard/node-list.js
+0
-34
circle/dashboard/tables.py
+3
-0
circle/dashboard/templates/dashboard/confirm/ajax-node-status.html
+0
-0
circle/dashboard/templates/dashboard/confirm/ajax-remove.html
+0
-0
circle/dashboard/templates/dashboard/confirm/node-flush.html
+0
-0
circle/dashboard/templates/dashboard/confirm/node-status.html
+0
-0
circle/dashboard/templates/dashboard/confirm/transfer-instance-ownership.html
+0
-0
circle/dashboard/templates/dashboard/confirm/transfer-template-ownership.html
+28
-0
circle/dashboard/templates/dashboard/group-detail.html
+48
-38
circle/dashboard/templates/dashboard/group-list.html
+1
-1
circle/dashboard/templates/dashboard/index-groups.html
+0
-0
circle/dashboard/templates/dashboard/index-nodes.html
+2
-0
circle/dashboard/templates/dashboard/index.html
+1
-1
circle/dashboard/templates/dashboard/node-add-trait.html
+0
-0
circle/dashboard/templates/dashboard/node-detail.html
+2
-0
circle/dashboard/templates/dashboard/node-detail/home.html
+3
-0
circle/dashboard/templates/dashboard/node-detail/resources.html
+12
-0
circle/dashboard/templates/dashboard/template-edit.html
+20
-0
circle/dashboard/templates/dashboard/template-tx-owner.html
+16
-0
circle/dashboard/templates/dashboard/vm-detail.html
+8
-1
circle/dashboard/templates/dashboard/vm-detail/access.html
+3
-2
circle/dashboard/tests/test_views.py
+3
-3
circle/dashboard/urls.py
+12
-4
circle/dashboard/views/graph.py
+9
-3
circle/dashboard/views/index.py
+1
-1
circle/dashboard/views/node.py
+11
-3
circle/dashboard/views/template.py
+22
-2
circle/dashboard/views/util.py
+136
-5
circle/dashboard/views/vm.py
+23
-132
circle/locale/hu/LC_MESSAGES/django.po
+0
-0
circle/locale/hu/LC_MESSAGES/djangojs.po
+0
-0
circle/vm/models/node.py
+8
-1
circle/vm/operations.py
+19
-3
requirements/local.txt
+1
-0
No files found.
circle/circle/settings/local.py
View file @
fc553851
...
@@ -64,6 +64,13 @@ CACHES = {
...
@@ -64,6 +64,13 @@ CACHES = {
########## END CACHE CONFIGURATION
########## END CACHE CONFIGURATION
########## ROSETTA CONFIGURATION
INSTALLED_APPS
+=
(
'rosetta'
,
)
########## END ROSETTA CONFIGURATION
########## TOOLBAR CONFIGURATION
########## TOOLBAR CONFIGURATION
# https://github.com/django-debug-toolbar/django-debug-toolbar#installation
# https://github.com/django-debug-toolbar/django-debug-toolbar#installation
if
get_env_variable
(
'DJANGO_TOOLBAR'
,
'FALSE'
)
==
'TRUE'
:
if
get_env_variable
(
'DJANGO_TOOLBAR'
,
'FALSE'
)
==
'TRUE'
:
...
...
circle/circle/urls.py
View file @
fc553851
...
@@ -18,9 +18,11 @@
...
@@ -18,9 +18,11 @@
from
django.conf.urls
import
patterns
,
include
,
url
from
django.conf.urls
import
patterns
,
include
,
url
from
django.views.generic
import
TemplateView
from
django.views.generic
import
TemplateView
from
django.conf
import
settings
from
django.contrib
import
admin
from
django.contrib
import
admin
from
django.shortcuts
import
redirect
from
django.core.urlresolvers
import
reverse
from
django.core.urlresolvers
import
reverse
from
django.shortcuts
import
redirect
from
circle.settings.base
import
get_env_variable
from
circle.settings.base
import
get_env_variable
from
dashboard.views
import
circle_login
,
HelpView
from
dashboard.views
import
circle_login
,
HelpView
...
@@ -71,6 +73,13 @@ urlpatterns = patterns(
...
@@ -71,6 +73,13 @@ urlpatterns = patterns(
)
)
if
'rosetta'
in
settings
.
INSTALLED_APPS
:
urlpatterns
+=
patterns
(
''
,
url
(
r'^rosetta/'
,
include
(
'rosetta.urls'
)),
)
if
get_env_variable
(
'DJANGO_SAML'
,
'FALSE'
)
==
'TRUE'
:
if
get_env_variable
(
'DJANGO_SAML'
,
'FALSE'
)
==
'TRUE'
:
urlpatterns
+=
patterns
(
urlpatterns
+=
patterns
(
''
,
''
,
...
...
circle/dashboard/static/dashboard/dashboard.css
View file @
fc553851
...
@@ -216,7 +216,7 @@ html {
...
@@ -216,7 +216,7 @@ html {
}
}
#vm-list-rename-name
,
#node-list-rename-name
,
#group-list-rename-name
{
#vm-list-rename-name
,
#node-list-rename-name
,
#group-list-rename-name
{
max-width
:
1
0
0px
;
max-width
:
1
5
0px
;
}
}
.label-tag
{
.label-tag
{
...
@@ -1042,3 +1042,12 @@ textarea[name="new_members"] {
...
@@ -1042,3 +1042,12 @@ textarea[name="new_members"] {
#vm-migrate-node-list
li
{
#vm-migrate-node-list
li
{
cursor
:
pointer
;
cursor
:
pointer
;
}
}
.group-list-table
.actions
,
.group-list-table
.admin
,
.group-list-table
.number_of_users
,
.group-list-table
.pk
{
width
:
1px
;
white-space
:
nowrap
;
text-align
:
center
;
}
circle/dashboard/static/dashboard/dashboard.js
View file @
fc553851
...
@@ -50,6 +50,21 @@ $(function () {
...
@@ -50,6 +50,21 @@ $(function () {
return
false
;
return
false
;
});
});
$
(
'.tx-tpl-ownership'
).
click
(
function
(
e
)
{
$
.
ajax
({
type
:
'GET'
,
url
:
$
(
'.tx-tpl-ownership'
).
attr
(
'href'
),
success
:
function
(
data
)
{
$
(
'body'
).
append
(
data
);
$
(
'#confirmation-modal'
).
modal
(
'show'
);
$
(
'#confirmation-modal'
).
on
(
'hidden.bs.modal'
,
function
()
{
$
(
'#confirmation-modal'
).
remove
();
});
}
});
return
false
;
});
$
(
'.template-choose'
).
click
(
function
(
e
)
{
$
(
'.template-choose'
).
click
(
function
(
e
)
{
$
.
ajax
({
$
.
ajax
({
type
:
'GET'
,
type
:
'GET'
,
...
@@ -428,7 +443,7 @@ function generateVmHTML(pk, name, host, icon, _status, fav, is_last) {
...
@@ -428,7 +443,7 @@ function generateVmHTML(pk, name, host, icon, _status, fav, is_last) {
return
'<a href="/dashboard/vm/'
+
pk
+
'/" class="list-group-item'
+
return
'<a href="/dashboard/vm/'
+
pk
+
'/" class="list-group-item'
+
(
is_last
?
' list-group-item-last'
:
''
)
+
'">'
+
(
is_last
?
' list-group-item-last'
:
''
)
+
'">'
+
'<span class="index-vm-list-name">'
+
'<span class="index-vm-list-name">'
+
'<i class="fa '
+
icon
+
'" title="'
+
_status
+
'"></i> '
+
name
+
'<i class="fa '
+
icon
+
'" title="'
+
_status
+
'"></i> '
+
safe_tags_replace
(
name
)
+
'</span>'
+
'</span>'
+
'<small class="text-muted"> '
+
host
+
'</small>'
+
'<small class="text-muted"> '
+
host
+
'</small>'
+
'<div class="pull-right dashboard-vm-favourite" data-vm="'
+
pk
+
'">'
+
'<div class="pull-right dashboard-vm-favourite" data-vm="'
+
pk
+
'">'
+
...
@@ -441,14 +456,14 @@ function generateVmHTML(pk, name, host, icon, _status, fav, is_last) {
...
@@ -441,14 +456,14 @@ function generateVmHTML(pk, name, host, icon, _status, fav, is_last) {
function
generateGroupHTML
(
url
,
name
,
is_last
)
{
function
generateGroupHTML
(
url
,
name
,
is_last
)
{
return
'<a href="'
+
url
+
'" class="list-group-item real-link'
+
(
is_last
?
" list-group-item-last"
:
""
)
+
'">'
+
return
'<a href="'
+
url
+
'" class="list-group-item real-link'
+
(
is_last
?
" list-group-item-last"
:
""
)
+
'">'
+
'<i class="fa fa-users"></i> '
+
name
+
'<i class="fa fa-users"></i> '
+
safe_tags_replace
(
name
)
+
'</a>'
;
'</a>'
;
}
}
function
generateNodeHTML
(
name
,
icon
,
_status
,
url
,
is_last
)
{
function
generateNodeHTML
(
name
,
icon
,
_status
,
url
,
is_last
)
{
return
'<a href="'
+
url
+
'" class="list-group-item real-link'
+
(
is_last
?
' list-group-item-last'
:
''
)
+
'">'
+
return
'<a href="'
+
url
+
'" class="list-group-item real-link'
+
(
is_last
?
' list-group-item-last'
:
''
)
+
'">'
+
'<span class="index-node-list-name">'
+
'<span class="index-node-list-name">'
+
'<i class="fa '
+
icon
+
'" title="'
+
_status
+
'"></i> '
+
name
+
'<i class="fa '
+
icon
+
'" title="'
+
_status
+
'"></i> '
+
safe_tags_replace
(
name
)
+
'</span>'
+
'</span>'
+
'<div style="clear: both;"></div>'
+
'<div style="clear: both;"></div>'
+
'</a>'
;
'</a>'
;
...
@@ -456,7 +471,7 @@ function generateNodeHTML(name, icon, _status, url, is_last) {
...
@@ -456,7 +471,7 @@ function generateNodeHTML(name, icon, _status, url, is_last) {
function
generateNodeTagHTML
(
name
,
icon
,
_status
,
label
,
url
)
{
function
generateNodeTagHTML
(
name
,
icon
,
_status
,
label
,
url
)
{
return
'<a href="'
+
url
+
'" class="label '
+
label
+
'" >'
+
return
'<a href="'
+
url
+
'" class="label '
+
label
+
'" >'
+
'<i class="fa '
+
icon
+
'" title="'
+
_status
+
'"></i> '
+
name
+
'<i class="fa '
+
icon
+
'" title="'
+
_status
+
'"></i> '
+
safe_tags_replace
(
name
)
+
'</a> '
;
'</a> '
;
}
}
...
@@ -678,3 +693,18 @@ function getParameterByName(name) {
...
@@ -678,3 +693,18 @@ function getParameterByName(name) {
results
=
regex
.
exec
(
location
.
search
);
results
=
regex
.
exec
(
location
.
search
);
return
results
==
null
?
""
:
decodeURIComponent
(
results
[
1
].
replace
(
/
\+
/g
,
" "
));
return
results
==
null
?
""
:
decodeURIComponent
(
results
[
1
].
replace
(
/
\+
/g
,
" "
));
}
}
var
tagsToReplace
=
{
'&'
:
'&'
,
'<'
:
'<'
,
'>'
:
'>'
};
function
replaceTag
(
tag
)
{
return
tagsToReplace
[
tag
]
||
tag
;
}
function
safe_tags_replace
(
str
)
{
return
str
.
replace
(
/
[
&<>
]
/g
,
replaceTag
);
}
circle/dashboard/static/dashboard/disk-list.js
deleted
100644 → 0
View file @
c4872897
$
(
function
()
{
$
(
".disk-list-disk-percentage"
).
each
(
function
()
{
var
disk
=
$
(
this
).
data
(
"disk-pk"
);
var
element
=
$
(
this
);
refreshDisk
(
disk
,
element
);
});
});
function
refreshDisk
(
disk
,
element
)
{
$
.
get
(
"/dashboard/disk/"
+
disk
+
"/status/"
,
function
(
result
)
{
if
(
result
.
percentage
==
null
||
result
.
failed
==
"True"
)
{
location
.
reload
();
}
else
{
var
diff
=
result
.
percentage
-
parseInt
(
element
.
html
());
var
refresh
=
5
-
diff
;
refresh
=
refresh
<
1
?
1
:
(
result
.
percentage
==
0
?
1
:
refresh
);
if
(
isNaN
(
refresh
))
refresh
=
2
;
// this should not happen
element
.
html
(
result
.
percentage
);
setTimeout
(
function
()
{
refreshDisk
(
disk
,
element
)},
refresh
*
1000
);
}
});
}
circle/dashboard/static/dashboard/group-details.js
View file @
fc553851
...
@@ -14,7 +14,7 @@
...
@@ -14,7 +14,7 @@
data
:
{
'new_name'
:
name
},
data
:
{
'new_name'
:
name
},
headers
:
{
"X-CSRFToken"
:
getCookie
(
'csrftoken'
)},
headers
:
{
"X-CSRFToken"
:
getCookie
(
'csrftoken'
)},
success
:
function
(
data
,
textStatus
,
xhr
)
{
success
:
function
(
data
,
textStatus
,
xhr
)
{
$
(
"#group-details-h1-name"
).
html
(
data
[
'new_name'
]).
show
();
$
(
"#group-details-h1-name"
).
text
(
data
[
'new_name'
]).
show
();
$
(
'#group-details-rename'
).
hide
();
$
(
'#group-details-rename'
).
hide
();
// addMessage(data['message'], "success");
// addMessage(data['message'], "success");
},
},
...
...
circle/dashboard/static/dashboard/group-list.js
View file @
fc553851
...
@@ -3,6 +3,7 @@ $(function() {
...
@@ -3,6 +3,7 @@ $(function() {
$
(
"#group-list-rename-button, .group-details-rename-button"
).
click
(
function
()
{
$
(
"#group-list-rename-button, .group-details-rename-button"
).
click
(
function
()
{
$
(
"#group-list-column-name"
,
$
(
this
).
closest
(
"tr"
)).
hide
();
$
(
"#group-list-column-name"
,
$
(
this
).
closest
(
"tr"
)).
hide
();
$
(
"#group-list-rename"
,
$
(
this
).
closest
(
"tr"
)).
css
(
'display'
,
'inline'
);
$
(
"#group-list-rename"
,
$
(
this
).
closest
(
"tr"
)).
css
(
'display'
,
'inline'
);
$
(
"#group-list-rename"
).
find
(
"input"
).
select
();
});
});
/* rename ajax */
/* rename ajax */
...
...
circle/dashboard/static/dashboard/node-details.js
View file @
fc553851
...
@@ -15,7 +15,7 @@ $(function() {
...
@@ -15,7 +15,7 @@ $(function() {
data
:
{
'new_name'
:
name
},
data
:
{
'new_name'
:
name
},
headers
:
{
"X-CSRFToken"
:
getCookie
(
'csrftoken'
)},
headers
:
{
"X-CSRFToken"
:
getCookie
(
'csrftoken'
)},
success
:
function
(
data
,
textStatus
,
xhr
)
{
success
:
function
(
data
,
textStatus
,
xhr
)
{
$
(
"#node-details-h1-name"
).
html
(
data
[
'new_name'
]).
show
();
$
(
"#node-details-h1-name"
).
text
(
data
[
'new_name'
]).
show
();
$
(
'#node-details-rename'
).
hide
();
$
(
'#node-details-rename'
).
hide
();
// addMessage(data['message'], "success");
// addMessage(data['message'], "success");
},
},
...
...
circle/dashboard/static/dashboard/node-list.js
View file @
fc553851
...
@@ -12,40 +12,6 @@ $(function() {
...
@@ -12,40 +12,6 @@ $(function() {
tr
.
removeClass
(
'danger'
);
tr
.
removeClass
(
'danger'
);
}
}
/* rename */
$
(
"#node-list-rename-button, .node-details-rename-button"
).
click
(
function
()
{
$
(
"#node-list-column-name"
,
$
(
this
).
closest
(
"tr"
)).
hide
();
$
(
"#node-list-rename"
,
$
(
this
).
closest
(
"tr"
)).
css
(
'display'
,
'inline'
);
});
/* rename ajax */
$
(
'.node-list-rename-submit'
).
click
(
function
()
{
var
row
=
$
(
this
).
closest
(
"tr"
)
var
name
=
$
(
'#node-list-rename-name'
,
row
).
val
();
var
url
=
'/dashboard/node/'
+
row
.
children
(
"td:first-child"
).
text
().
replace
(
" "
,
""
)
+
'/'
;
$
.
ajax
({
method
:
'POST'
,
url
:
url
,
data
:
{
'new_name'
:
name
},
headers
:
{
"X-CSRFToken"
:
getCookie
(
'csrftoken'
)},
success
:
function
(
data
,
textStatus
,
xhr
)
{
$
(
"#node-list-column-name"
,
row
).
html
(
$
(
"<a/>"
,
{
'class'
:
"real-link"
,
href
:
"/dashboard/node/"
+
data
[
'node_pk'
]
+
"/"
,
text
:
data
[
'new_name'
]
})
).
show
();
$
(
'#node-list-rename'
,
row
).
hide
();
// addMessage(data['message'], "success");
},
error
:
function
(
xhr
,
textStatus
,
error
)
{
addMessage
(
"Error during renaming!"
,
"danger"
);
}
});
return
false
;
});
function
statuschangeSuccess
(
tr
){
function
statuschangeSuccess
(
tr
){
var
tspan
=
tr
.
children
(
'.enabled'
).
children
();
var
tspan
=
tr
.
children
(
'.enabled'
).
children
();
...
...
circle/dashboard/tables.py
View file @
fc553851
...
@@ -88,18 +88,21 @@ class GroupListTable(Table):
...
@@ -88,18 +88,21 @@ class GroupListTable(Table):
number_of_users
=
TemplateColumn
(
number_of_users
=
TemplateColumn
(
orderable
=
False
,
orderable
=
False
,
verbose_name
=
_
(
"Number of users"
),
template_name
=
'dashboard/group-list/column-users.html'
,
template_name
=
'dashboard/group-list/column-users.html'
,
attrs
=
{
'th'
:
{
'class'
:
'group-list-table-admin'
}},
attrs
=
{
'th'
:
{
'class'
:
'group-list-table-admin'
}},
)
)
admin
=
TemplateColumn
(
admin
=
TemplateColumn
(
orderable
=
False
,
orderable
=
False
,
verbose_name
=
_
(
"Admin"
),
template_name
=
'dashboard/group-list/column-admin.html'
,
template_name
=
'dashboard/group-list/column-admin.html'
,
attrs
=
{
'th'
:
{
'class'
:
'group-list-table-admin'
}},
attrs
=
{
'th'
:
{
'class'
:
'group-list-table-admin'
}},
)
)
actions
=
TemplateColumn
(
actions
=
TemplateColumn
(
orderable
=
False
,
orderable
=
False
,
verbose_name
=
_
(
"Actions"
),
attrs
=
{
'th'
:
{
'class'
:
'group-list-table-thin'
}},
attrs
=
{
'th'
:
{
'class'
:
'group-list-table-thin'
}},
template_code
=
(
'{
%
include "dashboard/group-list/column-'
template_code
=
(
'{
%
include "dashboard/group-list/column-'
'actions.html" with btn_size="btn-xs"
%
}'
),
'actions.html" with btn_size="btn-xs"
%
}'
),
...
...
circle/dashboard/templates/dashboard/confirm/ajax-node-status.html
View file @
fc553851
circle/dashboard/templates/dashboard/confirm/ajax-remove.html
View file @
fc553851
circle/dashboard/templates/dashboard/confirm/node-flush.html
View file @
fc553851
circle/dashboard/templates/dashboard/confirm/node-status.html
View file @
fc553851
circle/dashboard/templates/dashboard/confirm/
base-transfer
-ownership.html
→
circle/dashboard/templates/dashboard/confirm/
transfer-instance
-ownership.html
View file @
fc553851
circle/dashboard/templates/dashboard/confirm/transfer-template-ownership.html
0 → 100644
View file @
fc553851
{% extends "dashboard/base.html" %}
{% load i18n %}
{% block content %}
<div
class=
"body-content"
>
<div
class=
"panel panel-default"
>
<div
class=
"panel-heading"
>
<h3
class=
"no-margin"
>
{% trans "Ownership transfer" %}
</h3>
</div>
<div
class=
"panel-body"
>
{% blocktrans with owner=instance.owner name=instance.name id=instance.id%}
<strong>
{{ owner }}
</strong>
offered to take the ownership of
template
<strong>
{{name}} ({{id}})
</strong>
.
Do you accept the responsility of being the template's owner?
{% endblocktrans %}
<div
class=
"pull-right"
>
<form
action=
""
method=
"POST"
>
{% csrf_token %}
<a
class=
"btn btn-default"
href=
"{% url "
dashboard
.
index
"
%}"
>
{% trans "No" %}
</a>
<input
type=
"hidden"
name=
"key"
value=
"{{ key }}"
/>
<button
class=
"btn btn-danger"
type=
"submit"
>
{% trans "Yes" %}
</button>
</form>
</div>
</div>
</div>
{% endblock %}
circle/dashboard/templates/dashboard/group-detail.html
View file @
fc553851
{% extends "dashboard/base.html" %}
{% extends "dashboard/base.html" %}
{% load crispy_forms_tags %}
{% load crispy_forms_tags %}
{% load i18n %}
{% load i18n %}
{% load static %}
{% block title-page %}{{ group.name }} | {% trans "group" %}{% endblock %}
{% block title-page %}{{ group.name }} | {% trans "group" %}{% endblock %}
...
@@ -8,9 +9,15 @@
...
@@ -8,9 +9,15 @@
<div
class=
"body-content"
>
<div
class=
"body-content"
>
<div
class=
"page-header"
>
<div
class=
"page-header"
>
<div
class=
"pull-right"
style=
"padding-top: 15px;"
>
<div
class=
"pull-right"
style=
"padding-top: 15px;"
>
<a
title=
"{% trans "
Rename
"
%}"
href=
"#"
class=
"btn btn-default btn-xs group-details-rename-button"
><i
class=
"fa fa-pencil"
></i></a>
<a
title=
"{% trans "
Rename
"
%}"
href=
"#"
class=
"btn btn-default btn-xs group-details-rename-button"
>
<a
title=
"{% trans "
Delete
"
%}"
data-group-pk=
"{{ group.pk }}"
class=
"btn btn-default btn-xs real-link group-delete"
href=
"{% url "
dashboard
.
views
.
delete-group
"
pk=
group.pk
%}"
><i
class=
"fa fa-trash-o"
></i></a>
<i
class=
"fa fa-pencil"
></i>
<a
title=
"{% trans "
Help
"
%}"
href=
"#"
class=
"btn btn-default btn-xs group-details-help-button"
><i
class=
"fa fa-question"
></i></a>
</a>
<a
title=
"{% trans "
Delete
"
%}"
data-group-pk=
"{{ group.pk }}"
class=
"btn btn-default btn-xs real-link group-delete"
href=
"{% url "
dashboard
.
views
.
delete-group
"
pk=
group.pk
%}"
>
<i
class=
"fa fa-trash-o"
></i>
</a>
<a
title=
"{% trans "
Help
"
%}"
href=
"#"
class=
"btn btn-default btn-xs group-details-help-button"
>
<i
class=
"fa fa-question"
></i>
</a>
</div>
</div>
<h1>
<h1>
<div
id=
"group-details-rename"
>
<div
id=
"group-details-rename"
>
...
@@ -39,21 +46,18 @@
...
@@ -39,21 +46,18 @@
</li>
</li>
</ul>
</ul>
</div>
</div>
</div
>
</div>
<!-- .page-header --
>
<div
class=
"row"
>
<div
class=
"row"
>
<div
class=
"col-md-12"
id=
"group-detail-pane"
>
<div
class=
"col-md-12"
id=
"group-detail-pane"
>
<div
class=
"panel panel-default"
id=
"group-detail-panel"
>
<div
class=
"panel panel-default panel-body"
id=
"group-detail-panel"
>
<div
class=
"tab-content panel-body"
id=
"group-form-body"
>
<form
method=
"POST"
action=
"{% url "
dashboard
.
views
.
group-update
"
pk=
group.pk
%}"
>
<form
method=
"POST"
action=
"{% url "
dashboard
.
views
.
group-update
"
pk=
group.pk
%}"
>
{% csrf_token %}
{% csrf_token %}
{% crispy group_profile_form %}
{% crispy group_profile_form %}
</form>
</form>
<hr
/>
<hr
/>
<h3>
{% trans "Available objects for this group" %}
</h3>
<h3>
{% trans "Available objects for this group" %}
</h3>
<ul
class=
"dashboard-profile-vm-list fa-ul"
>
<ul
class=
"dashboard-profile-vm-list fa-ul"
>
{% for i in vm_objects %}
{% for i in vm_objects %}
<li>
<li>
<a
href=
"{{ i.get_absolute_url }}"
>
<a
href=
"{{ i.get_absolute_url }}"
>
...
@@ -78,17 +82,19 @@
...
@@ -78,17 +82,19 @@
</a>
</a>
</li>
</li>
{% endfor %}
{% endfor %}
</ul>
</ul>
<hr
/>
<hr
/>
<h3>
{% trans "User list"|capfirst %}
<h3>
{% trans "User list" %}
{% if perms.auth.add_user %}
{% if perms.auth.add_user %}
<a
href=
"{% url "
dashboard
.
views
.
create-user
"
group
.
pk
%}"
class=
"btn btn-success pull-right"
>
{% trans "Create user" %}
</a>
<a
href=
"{% url "
dashboard
.
views
.
create-user
"
group
.
pk
%}"
class=
"btn btn-success pull-right"
>
{% trans "Create user" %}
</a>
{% endif %}
{% endif %}
</h3>
</h3>
<form
action=
""
method=
"post"
>
{% csrf_token %}
<form
action=
""
method=
"post"
>
{% csrf_token %}
<table
class=
"table table-striped table-with-form-fields table-bordered"
id=
"group-detail-user-table"
>
<table
class=
"table table-striped table-with-form-fields table-bordered"
id=
"group-detail-user-table"
>
<tbody>
<tbody>
<thead><tr><th></th><th>
{% trans "Who" %}
</th><th>
{% trans "Remove" %}
</th></tr></thead>
<thead><tr><th></th><th>
{% trans "Who" %}
</th><th>
{% trans "Remove" %}
</th></tr></thead>
{% for i in users %}
{% for i in users %}
...
@@ -101,7 +107,9 @@
...
@@ -101,7 +107,9 @@
>
{% include "dashboard/_display-name.html" with user=i show_org=True %}
</a>
>
{% include "dashboard/_display-name.html" with user=i show_org=True %}
</a>
</td>
</td>
<td>
<td>
<a
data-group_pk=
"{{ group.pk }}"
data-member_pk=
"{{i.pk}}"
href=
"{% url "
dashboard
.
views
.
remove-user
"
member_pk=
i.pk
group_pk=
group.pk
%}"
class=
"real-link delete-from-group btn btn-link btn-xs"
><i
class=
"fa fa-times"
><span
class=
"sr-only"
>
{% trans "remove" %}
</span></i></a>
<a
data-group_pk=
"{{ group.pk }}"
data-member_pk=
"{{i.pk}}"
href=
"{% url "
dashboard
.
views
.
remove-user
"
member_pk=
i.pk
group_pk=
group.pk
%}"
class=
"real-link delete-from-group btn btn-link btn-xs"
><i
class=
"fa fa-times"
>
<span
class=
"sr-only"
>
{% trans "remove" %}
</span></i>
</a>
</td>
</td>
</tr>
</tr>
{% endfor %}
{% endfor %}
...
@@ -132,29 +140,31 @@
...
@@ -132,29 +140,31 @@
<button
type=
"submit"
class=
"btn btn-success"
>
{% trans "Save" %}
</button>
<button
type=
"submit"
class=
"btn btn-success"
>
{% trans "Save" %}
</button>
</div>
</div>
</form>
</form>
<hr
/>
<h3
id=
"group-detail-perm-header"
>
{% trans "Access permissions"|capfirst %}
</h3>
{% include "dashboard/_manage_access.html" with table_id="group-detail-perm-table" %}
{% if user.is_superuser %}
<hr
/>
<hr
/>
<h3
id=
"group-detail-perm-header"
>
{% trans "Access permissions" %}
</h3>
{% include "dashboard/_manage_access.html" with table_id="group-detail-perm-table" %}
<script
type=
"text/javascript"
src=
"/static/admin/js/jquery.min.js"
></script>
{% if user.is_superuser %}
<script
type=
"text/javascript"
src=
"/static/admin/js/jquery.init.js"
></script>
<hr
/>
{{ group_perm_form.media }}
<h3>
{% trans "Group permissions" %}
</h3>
<script
type=
"text/javascript"
src=
"/static/admin/js/jquery.min.js"
></script>
<script
type=
"text/javascript"
src=
"/static/admin/js/jquery.init.js"
></script>
{{ group_perm_form.media }}
<div
id=
"group-detail-permissions"
>
<h3>
{% trans "Group permissions" %}
</h3>
{% crispy group_perm_form %}
</div>
<link
rel=
"stylesheet"
type=
"text/css"
href=
"/static/admin/css/widgets.css"
/>
<div
id=
"group-detail-permissions"
>
{% crispy group_perm_form %}
{% endif %}
</div>
</div>
<link
rel=
"stylesheet"
type=
"text/css"
href=
"/static/admin/css/widgets.css"
/>
{% endif %}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
{% endblock %}
{% block extra_js %}
<script
type=
"text/javascript"
src=
"{% static "
dashboard
/
group-details
.
js
"
%}"
></script>
{% endblock %}
circle/dashboard/templates/dashboard/group-list.html
View file @
fc553851
...
@@ -10,7 +10,7 @@
...
@@ -10,7 +10,7 @@
<div
class=
"col-md-12"
>
<div
class=
"col-md-12"
>
<div
class=
"panel panel-default"
>
<div
class=
"panel panel-default"
>
<div
class=
"panel-heading"
>
<div
class=
"panel-heading"
>
<h3
class=
"no-margin"
><i
class=
"fa fa-group"
></i>
Your groups
</h3>
<h3
class=
"no-margin"
><i
class=
"fa fa-group"
></i>
{% trans "Groups" %}
</h3>
</div>
</div>
<div
class=
"panel-body"
>
<div
class=
"panel-body"
>
<div
id=
"table_container"
>
<div
id=
"table_container"
>
...
...
circle/dashboard/templates/dashboard/index-groups.html
View file @
fc553851
circle/dashboard/templates/dashboard/index-nodes.html
View file @
fc553851
...
@@ -74,9 +74,11 @@
...
@@ -74,9 +74,11 @@
{% trans "list" %}
{% trans "list" %}
{% endif %}
{% endif %}
</a>
</a>
{% if request.user.is_superuser %}
<a
class=
"btn btn-success btn-xs node-create"
href=
"{% url "
dashboard
.
views
.
node-create
"
%}"
>
<a
class=
"btn btn-success btn-xs node-create"
href=
"{% url "
dashboard
.
views
.
node-create
"
%}"
>
<i
class=
"fa fa-plus-circle"
></i>
{% trans "new" %}
<i
class=
"fa fa-plus-circle"
></i>
{% trans "new" %}
</a>
</a>
{% endif %}
</div>
</div>
</div>
</div>
</div>
</div>
...
...
circle/dashboard/templates/dashboard/index.html
View file @
fc553851
...
@@ -35,7 +35,7 @@
...
@@ -35,7 +35,7 @@
</div>
</div>
{% endif %}
{% endif %}
{% if
user.is_superuser
%}
{% if
perms.vm.view_statistics
%}
<div
class=
"col-lg-4 col-sm-6"
>
<div
class=
"col-lg-4 col-sm-6"
>
{% include "dashboard/index-nodes.html" %}
{% include "dashboard/index-nodes.html" %}
</div>
</div>
...
...
circle/dashboard/templates/dashboard/node-add-trait.html
View file @
fc553851
circle/dashboard/templates/dashboard/node-detail.html
View file @
fc553851
...
@@ -6,6 +6,7 @@
...
@@ -6,6 +6,7 @@
{% block content %}
{% block content %}
<div
class=
"body-content"
>
<div
class=
"body-content"
>
<div
class=
"page-header"
>
<div
class=
"page-header"
>
{% if request.user.is_superuser %}
<div
class=
"pull-right"
id=
"ops"
>
<div
class=
"pull-right"
id=
"ops"
>
{% include "dashboard/vm-detail/_operations.html" %}
{% include "dashboard/vm-detail/_operations.html" %}
</div>
</div>
...
@@ -13,6 +14,7 @@
...
@@ -13,6 +14,7 @@
<a
title=
"{% trans "
Rename
"
%}"
href=
"#"
class=
"btn btn-default btn-xs node-details-rename-button"
><i
class=
"fa fa-pencil"
></i></a>
<a
title=
"{% trans "
Rename
"
%}"
href=
"#"
class=
"btn btn-default btn-xs node-details-rename-button"
><i
class=
"fa fa-pencil"
></i></a>
<a
title=
"{% trans "
Delete
"
%}"
data-node-pk=
"{{ node.pk }}"
class=
"btn btn-default btn-xs real-link node-delete"
href=
"{% url "
dashboard
.
views
.
delete-node
"
pk=
node.pk
%}"
><i
class=
"fa fa-trash-o"
></i></a>
<a
title=
"{% trans "
Delete
"
%}"
data-node-pk=
"{{ node.pk }}"
class=
"btn btn-default btn-xs real-link node-delete"
href=
"{% url "
dashboard
.
views
.
delete-node
"
pk=
node.pk
%}"
><i
class=
"fa fa-trash-o"
></i></a>
</div>
</div>
{% endif %}
<h1>
<h1>
<div
id=
"node-details-rename"
>
<div
id=
"node-details-rename"
>
<form
action=
""
method=
"POST"
id=
"node-details-rename-form"
>
<form
action=
""
method=
"POST"
id=
"node-details-rename-form"
>
...
...
circle/dashboard/templates/dashboard/node-detail/home.html
View file @
fc553851
...
@@ -16,16 +16,19 @@
...
@@ -16,16 +16,19 @@
{% endif %}
{% endif %}
</div>
</div>
{% load crispy_forms_tags %}
{% load crispy_forms_tags %}
<style>
<style>
.row
{
.row
{
margin-bottom
:
15px
;
margin-bottom
:
15px
;
}
}
</style>
</style>
{% if request.user.is_superuser %}
<form
action=
"{% url "
dashboard
.
views
.
node-addtrait
"
node
.
pk
%}"
method=
"POST"
>
<form
action=
"{% url "
dashboard
.
views
.
node-addtrait
"
node
.
pk
%}"
method=
"POST"
>
{% csrf_token %}
{% csrf_token %}
{% crispy trait_form %}
{% crispy trait_form %}
</form>
</form>
{% endif %}
</div>
<!-- id:node-details-traits -->
</div>
<!-- id:node-details-traits -->
</div>
</div>
<div
class=
"col-md-8"
>
<div
class=
"col-md-8"
>
...
...
circle/dashboard/templates/dashboard/node-detail/resources.html
View file @
fc553851
...
@@ -10,6 +10,16 @@
...
@@ -10,6 +10,16 @@
<dt>
{% trans "Enabled" %}:
</dt><dd>
{{ node.enabled }}
</dd>
<dt>
{% trans "Enabled" %}:
</dt><dd>
{{ node.enabled }}
</dd>
<dt>
{% trans "Host online" %}:
</dt><dd>
{{ node.online }}
</dd>
<dt>
{% trans "Host online" %}:
</dt><dd>
{{ node.online }}
</dd>
<dt>
{% trans "Priority" %}:
</dt><dd>
{{ node.priority }}
</dd>
<dt>
{% trans "Priority" %}:
</dt><dd>
{{ node.priority }}
</dd>
<dt>
{% trans "Driver Version:" %}
</dt>
<dd>
{% if node.driver_version %}
{{ node.driver_version.branch }} at
{{ node.driver_version.commit }} ({{ node.driver_version.commit_text }})
{% if node.driver_version.is_dirty %}
<span
class=
"label label-danger"
>
{% trans "with uncommitted changes!" %}
</span>
{% endif %}
{% endif %}
</dd>
<dt>
{% trans "Host owner" %}:
</dt>
<dt>
{% trans "Host owner" %}:
</dt>
<dd>
<dd>
{% include "dashboard/_display-name.html" with user=node.host.owner show_org=True %}
{% include "dashboard/_display-name.html" with user=node.host.owner show_org=True %}
...
@@ -18,10 +28,12 @@
...
@@ -18,10 +28,12 @@
<dt>
{% trans "Host name" %}:
</dt>
<dt>
{% trans "Host name" %}:
</dt>
<dd>
<dd>
{{ node.host.hostname }}
{{ node.host.hostname }}
{% if request.user.is_superuser %}
<a
href=
"{{ node.host.get_absolute_url }}"
class=
"btn btn-default btn-xs"
>
<a
href=
"{{ node.host.get_absolute_url }}"
class=
"btn btn-default btn-xs"
>
<i
class=
"fa fa-pencil"
></i>
<i
class=
"fa fa-pencil"
></i>
{% trans "Edit host" %}
{% trans "Edit host" %}
</a>
</a>
{% endif %}
</dd>
</dd>
</dl>
</dl>
...
...
circle/dashboard/templates/dashboard/template-edit.html
View file @
fc553851
...
@@ -81,6 +81,26 @@
...
@@ -81,6 +81,26 @@
<div
class=
"panel panel-default"
>
<div
class=
"panel panel-default"
>
<div
class=
"panel-heading"
>
<div
class=
"panel-heading"
>
<h4
class=
"no-margin"
><i
class=
"fa fa-user"
></i>
{% trans "Owner" %}
</h4>
</div>
<div
class=
"panel-body"
>
{% if user == object.owner %}
{% blocktrans %}You are the current owner of this template.{% endblocktrans %}
{% else %}
{% url "dashboard.views.profile" username=object.owner.username as url %}
{% blocktrans with owner=object.owner name=object.owner.get_full_name%}
The current owner of this template is
<a
href=
"{{url}}"
>
{{name}} ({{owner}})
</a>
.
{% endblocktrans %}
{% endif %}
{% if user == object.owner or user.is_superuser %}
<a
href=
"{% url "
dashboard
.
views
.
template-transfer-ownership
"
object
.
pk
%}"
class=
"btn btn-link tx-tpl-ownership"
>
{% trans "Transfer ownership..." %}
</a>
{% endif %}
</div>
</div>
<div
class=
"panel panel-default"
>
<div
class=
"panel-heading"
>
<h4
class=
"no-margin"
><i
class=
"fa fa-group"
></i>
{% trans "Manage access" %}
</h4>
<h4
class=
"no-margin"
><i
class=
"fa fa-group"
></i>
{% trans "Manage access" %}
</h4>
</div>
</div>
<div
class=
"panel-body"
>
<div
class=
"panel-body"
>
...