Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
Gelencsér Szabolcs
/
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
17cc67c3
authored
8 years ago
by
Czémán Arnold
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
dashboard, vm: transform old vm rename solution to RenameOperation
parent
a8272957
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
72 additions
and
27 deletions
+72
-27
circle/dashboard/forms.py
+4
-0
circle/dashboard/static/dashboard/vm-details.js
+2
-1
circle/dashboard/templates/dashboard/vm-detail.html
+1
-1
circle/dashboard/templates/dashboard/vm-detail/home.html
+1
-1
circle/dashboard/views/vm.py
+42
-24
circle/vm/operations.py
+22
-0
No files found.
circle/dashboard/forms.py
View file @
17cc67c3
...
...
@@ -1528,6 +1528,10 @@ class VmResourcesForm(forms.ModelForm):
fields
=
(
'num_cores'
,
'priority'
,
'ram_size'
,
)
class
VmRenameForm
(
forms
.
Form
):
new_name
=
forms
.
CharField
()
vm_search_choices
=
(
(
"owned"
,
_
(
"owned"
)),
(
"shared"
,
_
(
"shared"
)),
...
...
This diff is collapsed.
Click to expand it.
circle/dashboard/static/dashboard/vm-details.js
View file @
17cc67c3
...
...
@@ -111,9 +111,10 @@ $(function() {
/* rename ajax */
$
(
'.vm-details-rename-submit'
).
click
(
function
()
{
var
name
=
$
(
this
).
parent
(
"span"
).
prev
(
"input"
).
val
();
var
url
=
$
(
"#vm-details-rename-form"
).
attr
(
"action"
);
$
.
ajax
({
method
:
'POST'
,
url
:
location
.
href
,
url
:
url
,
data
:
{
'new_name'
:
name
},
headers
:
{
"X-CSRFToken"
:
getCookie
(
'csrftoken'
)},
success
:
function
(
data
,
textStatus
,
xhr
)
{
...
...
This diff is collapsed.
Click to expand it.
circle/dashboard/templates/dashboard/vm-detail.html
View file @
17cc67c3
...
...
@@ -55,7 +55,7 @@
</div>
<h1>
<div
id=
"vm-details-rename"
class=
"vm-details-home-rename-form-div"
>
<form
action=
""
method=
"POST"
id=
"vm-details-rename-form"
>
<form
action=
"
{{ rename_op.get_url }}
"
method=
"POST"
id=
"vm-details-rename-form"
>
{% csrf_token %}
<div
class=
"input-group vm-details-home-name"
>
<input
id=
"vm-details-rename-name"
class=
"form-control input-sm"
name=
"new_name"
type=
"text"
value=
"{{ instance.name }}"
/>
...
...
This diff is collapsed.
Click to expand it.
circle/dashboard/templates/dashboard/vm-detail/home.html
View file @
17cc67c3
...
...
@@ -16,7 +16,7 @@
<small
class=
"vm-details-home-edit-name"
>
{{ instance.name }}
</small>
</div>
<div
class=
"js-hidden vm-details-home-rename-form-div"
id=
"vm-details-home-rename"
>
<form
method=
"POST"
>
<form
action=
"{{ rename_op.get_url }}"
method=
"POST"
>
{% csrf_token %}
<div
class=
"input-group"
>
<input
type=
"text"
name=
"new_name"
value=
"{{ instance.name }}"
class=
"form-control input-sm"
/>
...
...
This diff is collapsed.
Click to expand it.
circle/dashboard/views/vm.py
View file @
17cc67c3
...
...
@@ -68,6 +68,7 @@ from ..forms import (
VmMigrateForm
,
VmDeployForm
,
VmPortRemoveForm
,
VmPortAddForm
,
VmRemoveInterfaceForm
,
VmRenameForm
,
)
from
request.models
import
TemplateAccessType
,
LeaseType
from
request.forms
import
LeaseRequestForm
,
TemplateRequestForm
...
...
@@ -133,6 +134,7 @@ class VmDetailView(GraphMixin, CheckedDetailView):
kwargs
=
{
'pk'
:
self
.
object
.
pk
}),
'ops'
:
ops
,
'op'
:
{
i
.
op
:
i
for
i
in
ops
},
'rename_op'
:
self
.
get_rename_operation
(
instance
),
'connect_commands'
:
user
.
profile
.
get_connect_commands
(
instance
),
'hide_tutorial'
:
hide_tutorial
,
'fav'
:
instance
.
favourite_set
.
filter
(
user
=
user
)
.
exists
(),
...
...
@@ -199,7 +201,6 @@ class VmDetailView(GraphMixin, CheckedDetailView):
def
post
(
self
,
request
,
*
args
,
**
kwargs
):
options
=
{
'new_name'
:
self
.
__set_name
,
'new_description'
:
self
.
__set_description
,
'new_tag'
:
self
.
__add_tag
,
'to_remove'
:
self
.
__remove_tag
,
...
...
@@ -210,29 +211,6 @@ class VmDetailView(GraphMixin, CheckedDetailView):
return
v
(
request
)
raise
Http404
()
def
__set_name
(
self
,
request
):
self
.
object
=
self
.
get_object
()
if
not
self
.
object
.
has_level
(
request
.
user
,
"operator"
):
raise
PermissionDenied
()
new_name
=
request
.
POST
.
get
(
"new_name"
)
Instance
.
objects
.
filter
(
pk
=
self
.
object
.
pk
)
.
update
(
**
{
'name'
:
new_name
})
success_message
=
_
(
"VM successfully renamed."
)
if
request
.
is_ajax
():
response
=
{
'message'
:
success_message
,
'new_name'
:
new_name
,
'vm_pk'
:
self
.
object
.
pk
}
return
HttpResponse
(
json
.
dumps
(
response
),
content_type
=
"application/json"
)
else
:
messages
.
success
(
request
,
success_message
)
return
redirect
(
self
.
object
.
get_absolute_url
())
def
__set_description
(
self
,
request
):
self
.
object
=
self
.
get_object
()
if
not
self
.
object
.
has_level
(
request
.
user
,
"operator"
):
...
...
@@ -306,6 +284,19 @@ class VmDetailView(GraphMixin, CheckedDetailView):
return
HttpResponseRedirect
(
"
%
s#activity"
%
self
.
object
.
get_absolute_url
())
def
get_rename_operation
(
self
,
instance
):
v
=
VmRenameView
try
:
op
=
v
.
get_op_by_object
(
instance
)
op
.
check_auth
(
self
.
request
.
user
)
op
.
check_precond
()
except
PermissionDenied
as
e
:
logger
.
debug
(
'Not showing operation
%
s for
%
s:
%
s'
,
'rename'
,
instance
,
unicode
(
e
))
except
Exception
:
return
v
.
bind_to_object
(
instance
,
disabled
=
True
)
return
v
.
bind_to_object
(
instance
)
class
VmTraitsUpdate
(
SuperuserRequiredMixin
,
UpdateView
):
form_class
=
TraitsForm
...
...
@@ -743,6 +734,32 @@ class VmDeployView(FormOperationMixin, VmOperationView):
return
kwargs
class
VmRenameView
(
FormOperationMixin
,
VmOperationView
):
op
=
'rename'
icon
=
'pencil'
effect
=
'success'
show_in_toolbar
=
False
form_class
=
VmRenameForm
def
post
(
self
,
request
,
extra
=
None
,
*
args
,
**
kwargs
):
if
extra
is
None
:
extra
=
{}
form
=
self
.
form_class
(
self
.
request
.
POST
,
**
self
.
get_form_kwargs
())
if
form
.
is_valid
():
extra
.
update
(
form
.
cleaned_data
)
resp
=
super
(
FormOperationMixin
,
self
)
.
post
(
request
,
extra
,
*
args
,
**
kwargs
)
new_name
=
request
.
POST
.
get
(
"new_name"
)
success_message
=
_
(
"VM successfully renamed."
)
if
request
.
is_ajax
():
return
JsonResponse
({
'new_name'
:
new_name
})
else
:
messages
.
success
(
request
,
success_message
)
return
resp
else
:
return
self
.
get
(
request
)
vm_ops
=
OrderedDict
([
(
'deploy'
,
VmDeployView
),
(
'wake_up'
,
VmOperationView
.
factory
(
...
...
@@ -792,6 +809,7 @@ vm_ops = OrderedDict([
op
=
'install_keys'
,
icon
=
'key'
,
effect
=
'info'
,
show_in_toolbar
=
False
,
)),
(
'rename'
,
VmRenameView
),
])
...
...
This diff is collapsed.
Click to expand it.
circle/vm/operations.py
View file @
17cc67c3
...
...
@@ -1403,6 +1403,28 @@ class ResourcesOperation(InstanceOperation):
@register_operation
class
RenameOperation
(
InstanceOperation
):
id
=
"rename"
name
=
_
(
"rename"
)
description
=
_
(
"Change the name of virtual machine."
)
acl_level
=
"operator"
required_perms
=
(
"vm.change_resources"
,
)
def
_operation
(
self
,
user
,
activity
,
new_name
):
old_name
=
self
.
instance
.
name
self
.
instance
.
name
=
new_name
self
.
instance
.
full_clean
()
self
.
instance
.
save
()
return
create_readable
(
ugettext_noop
(
"Changed name from '
%(old_name)
s' to '
%(new_name)
s'."
),
old_name
=
old_name
,
new_name
=
new_name
)
@register_operation
class
PasswordResetOperation
(
RemoteAgentOperation
):
id
=
'password_reset'
name
=
_
(
"password reset"
)
...
...
This diff is collapsed.
Click to expand it.
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