Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
Fukász Rómeó Ervin
/
cloud
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
A prog2-höz tartozó friss repo anyagok itt elérhetőek:
https://git.iit.bme.hu/
Commit
815d11ea
authored
Mar 17, 2015
by
Kálmán Viktor
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
request: accept/decline requests
parent
11305fea
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
103 additions
and
31 deletions
+103
-31
circle/dashboard/templates/dashboard/base.html
+17
-4
circle/request/models.py
+10
-8
circle/request/templates/request/detail.html
+19
-5
circle/request/templates/request/list.html
+13
-7
circle/request/views.py
+10
-6
circle/vm/operations.py
+34
-1
No files found.
circle/dashboard/templates/dashboard/base.html
View file @
815d11ea
...
@@ -22,16 +22,29 @@
...
@@ -22,16 +22,29 @@
{% if user.is_superuser %}
{% if user.is_superuser %}
{% if ADMIN_ENABLED %}
{% if ADMIN_ENABLED %}
<li>
<li>
<a
href=
"/admin/"
><i
class=
"fa fa-cogs"
></i>
{% trans "Admin" %}
</a>
<a
href=
"/admin/"
>
<i
class=
"fa fa-cogs"
></i>
<span
class=
"hidden-sm"
>
{% trans "Admin" %}
</span>
</a>
</li>
</li>
{% endif %}
{% endif %}
<li>
<li>
<a
href=
"{% url "
dashboard
.
views
.
storage
"
%}"
><i
class=
"fa fa-database"
></i>
<a
href=
"{% url "
dashboard
.
views
.
storage
"
%}"
>
{% trans "Storage" %}
<i
class=
"fa fa-database"
></i>
<span
class=
"hidden-sm"
>
{% trans "Storage" %}
</span>
</a>
</a>
</li>
</li>
<li>
<li>
<a
href=
"/network/"
><i
class=
"fa fa-globe"
></i>
{% trans "Network" %}
</a>
<a
href=
"{% url "
network
.
index
"
%}"
>
<i
class=
"fa fa-globe"
></i>
<span
class=
"hidden-sm"
>
{% trans "Network" %}
</span>
</a>
</li>
<li>
<a
href=
"{% url "
request
.
views
.
request-list
"
%}"
>
<i
class=
"fa fa-phone"
></i>
<span
class=
"hidden-sm"
>
{% trans "Requests" %}
</span>
</a>
</li>
</li>
{% endif %}
{% endif %}
<li>
<li>
...
...
circle/request/models.py
View file @
815d11ea
...
@@ -87,7 +87,8 @@ class Request(TimeStampedModel):
...
@@ -87,7 +87,8 @@ class Request(TimeStampedModel):
"DECLINED"
:
"times"
,
"DECLINED"
:
"times"
,
}
.
get
(
self
.
status
)
}
.
get
(
self
.
status
)
def
accept
(
self
):
def
accept
(
self
,
user
):
self
.
action
.
accept
(
user
)
self
.
status
=
"ACCEPTED"
self
.
status
=
"ACCEPTED"
self
.
save
()
self
.
save
()
...
@@ -131,17 +132,17 @@ class ResourceChangeAction(RequestAction):
...
@@ -131,17 +132,17 @@ class ResourceChangeAction(RequestAction):
help_text
=
_
(
'CPU priority.'
),
help_text
=
_
(
'CPU priority.'
),
validators
=
[
MinValueValidator
(
0
)])
validators
=
[
MinValueValidator
(
0
)])
def
accept
(
self
):
def
accept
(
self
,
user
):
pass
self
.
instance
.
resources_request
.
async
(
user
=
user
,
resource_request
=
self
)
# self.instance.change_resources(xy=xy)
class
ExtendLeaseAction
(
RequestAction
):
class
ExtendLeaseAction
(
RequestAction
):
instance
=
ForeignKey
(
Instance
)
instance
=
ForeignKey
(
Instance
)
lease_type
=
ForeignKey
(
LeaseType
)
lease_type
=
ForeignKey
(
LeaseType
)
def
accept
(
self
):
def
accept
(
self
,
user
):
pass
self
.
instance
.
renew
(
lease
=
self
.
lease_type
.
lease
,
save
=
True
,
force
=
True
,
user
=
user
)
class
TemplateAccessAction
(
RequestAction
):
class
TemplateAccessAction
(
RequestAction
):
...
@@ -157,5 +158,6 @@ class TemplateAccessAction(RequestAction):
...
@@ -157,5 +158,6 @@ class TemplateAccessAction(RequestAction):
def
get_readable_level
(
self
):
def
get_readable_level
(
self
):
return
self
.
LEVELS
[
self
.
level
]
return
self
.
LEVELS
[
self
.
level
]
def
accept
(
self
):
def
accept
(
self
,
user
):
pass
for
t
in
self
.
template_type
.
templates
.
all
():
t
.
set_user_level
(
self
.
user
,
self
.
level
)
circle/request/templates/request/detail.html
View file @
815d11ea
...
@@ -3,7 +3,7 @@
...
@@ -3,7 +3,7 @@
{% load i18n %}
{% load i18n %}
{% load render_table from django_tables2 %}
{% load render_table from django_tables2 %}
{% block title-page %}{% trans "
Group li
st" %}{% endblock %}
{% block title-page %}{% trans "
Reque
st" %}{% endblock %}
{% block content %}
{% block content %}
...
@@ -16,7 +16,7 @@
...
@@ -16,7 +16,7 @@
</a>
</a>
<h3
class=
"no-margin"
>
<h3
class=
"no-margin"
>
<i
class=
"fa fa-{{ object.get_request_icon }}"
></i>
<i
class=
"fa fa-{{ object.get_request_icon }}"
></i>
{
% trans "Request" %
}
{
{ object.get_readable_type|capfirst }
}
</h3>
</h3>
</div>
</div>
<div
class=
"panel-body"
>
<div
class=
"panel-body"
>
...
@@ -65,6 +65,11 @@
...
@@ -65,6 +65,11 @@
<dl>
<dl>
<dt>
{% trans "VM name" %}
</dt>
<dt>
{% trans "VM name" %}
</dt>
<dd><a
href=
"{{ action.instance.get_absolute_url }}"
>
{{ action.instance.name }}
</a></dd>
<dd><a
href=
"{{ action.instance.get_absolute_url }}"
>
{{ action.instance.name }}
</a></dd>
<dt>
{% trans "Status" %}
</dt>
<dd>
<i
class=
"fa {{ action.instance.get_status_icon }}"
></i>
{{ action.instance.get_status_display|upper }}
</dd>
<dt>
{% trans "VM description" %}
</dt>
<dt>
{% trans "VM description" %}
</dt>
<dd>
{{ action.instance.description }}
</dd>
<dd>
{{ action.instance.description }}
</dd>
<dt>
<dt>
...
@@ -89,20 +94,29 @@
...
@@ -89,20 +94,29 @@
{% csrf_token %}
{% csrf_token %}
<button
class=
"btn btn-danger"
type=
"submit"
>
<button
class=
"btn btn-danger"
type=
"submit"
>
<i
class=
"fa fa-thumbs-down"
></i>
<i
class=
"fa fa-thumbs-down"
></i>
nope
{% trans "Decline" %}
</button>
</button>
</form>
</form>
{{ acceptable_statuses }}
{% if object.type == "resource" and action.instance.status not in accept_states %}
{% trans "You can't accept this request because of the VM's state." %}
{% else %}
<form
method=
"POST"
style=
"display: inline;"
>
<form
method=
"POST"
style=
"display: inline;"
>
{% csrf_token %}
{% csrf_token %}
<input
type=
"hidden"
name=
"accept"
value=
"1"
/>
<input
type=
"hidden"
name=
"accept"
value=
"1"
/>
<button
class=
"btn btn-success"
>
<button
class=
"btn btn-success"
>
<i
class=
"fa fa-thumbs-up"
></i>
<i
class=
"fa fa-thumbs-up"
></i>
yep
{% trans "Accept" %}
</button>
</button>
</form>
</form>
{% endif %}
</div>
</div>
{% else %}
{% else %}
close date
<div
class=
"text-right"
>
{% blocktrans with close_date=object.modified %}
Closed at {{ close_date }}
{% endblocktrans %}
</div>
{% endif %}
{% endif %}
</div>
<!-- .panel-body -->
</div>
<!-- .panel-body -->
</div>
</div>
...
...
circle/request/templates/request/list.html
View file @
815d11ea
...
@@ -3,7 +3,7 @@
...
@@ -3,7 +3,7 @@
{% load i18n %}
{% load i18n %}
{% load render_table from django_tables2 %}
{% load render_table from django_tables2 %}
{% block title-page %}{% trans "
Group list
" %}{% endblock %}
{% block title-page %}{% trans "
Requests
" %}{% endblock %}
{% block content %}
{% block content %}
...
@@ -11,14 +11,20 @@
...
@@ -11,14 +11,20 @@
<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>
{% trans "Requests" %}
</h3>
<a
class=
"btn btn-xs btn-primary pull-right "
href=
"{% url "
request
.
views
.
type-list
"
%}"
>
{% trans "Request types" %}
</a>
<h3
class=
"no-margin"
><i
class=
"fa fa-phone"
></i>
{% trans "Requests" %}
</h3>
</div>
</div>
<div
class=
"panel-body"
>
<div
class=
"panel-body"
>
<div
id=
"table_container"
>
<div
class=
"panel-body"
>
<div
id=
"rendered_table"
class=
"panel-body"
>
{% trans "Filter by status" %}:
<div
class=
"table-responsive"
>
<a
href=
"{{ request.path }}"
>
{% trans "ALL" %}
</a>
{% render_table table %}
{% for s in statuses %}
</div>
<a
href=
"?status={{ s.0 }}"
>
{{ s.1|upper }}
</a>
{% endfor %}
<div
class=
"table-responsive"
>
{% render_table table %}
</div>
</div>
</div>
</div>
</div>
<!-- .panel-body -->
</div>
<!-- .panel-body -->
...
...
circle/request/views.py
View file @
815d11ea
...
@@ -14,6 +14,7 @@ from request.models import (
...
@@ -14,6 +14,7 @@ from request.models import (
ExtendLeaseAction
,
ResourceChangeAction
,
ExtendLeaseAction
,
ResourceChangeAction
,
)
)
from
vm.models
import
Instance
from
vm.models
import
Instance
from
vm.operations
import
ResourcesRequestOperation
from
request.tables
import
(
from
request.tables
import
(
RequestTable
,
TemplateAccessTypeTable
,
LeaseTypeTable
,
RequestTable
,
TemplateAccessTypeTable
,
LeaseTypeTable
,
)
)
...
@@ -47,12 +48,14 @@ class RequestDetail(LoginRequiredMixin, SuperuserRequiredMixin, DetailView):
...
@@ -47,12 +48,14 @@ class RequestDetail(LoginRequiredMixin, SuperuserRequiredMixin, DetailView):
template_name
=
"request/detail.html"
template_name
=
"request/detail.html"
def
post
(
self
,
*
args
,
**
kwargs
):
def
post
(
self
,
*
args
,
**
kwargs
):
accept
=
self
.
request
.
POST
.
get
(
"accept"
)
if
self
.
get_object
()
.
status
in
[
"PENDING"
,
"UNSEEN"
]:
request
=
self
.
get_object
()
# not self.request!
user
=
self
.
request
.
user
if
accept
:
accept
=
self
.
request
.
POST
.
get
(
"accept"
)
request
.
accept
()
request
=
self
.
get_object
()
# not self.request!
else
:
if
accept
:
request
.
decline
()
request
.
accept
(
user
)
else
:
request
.
decline
(
user
)
return
redirect
(
request
.
get_absolute_url
())
return
redirect
(
request
.
get_absolute_url
())
...
@@ -61,6 +64,7 @@ class RequestDetail(LoginRequiredMixin, SuperuserRequiredMixin, DetailView):
...
@@ -61,6 +64,7 @@ class RequestDetail(LoginRequiredMixin, SuperuserRequiredMixin, DetailView):
context
=
super
(
RequestDetail
,
self
)
.
get_context_data
(
**
kwargs
)
context
=
super
(
RequestDetail
,
self
)
.
get_context_data
(
**
kwargs
)
context
[
'action'
]
=
request
.
action
context
[
'action'
]
=
request
.
action
context
[
'accept_states'
]
=
ResourcesRequestOperation
.
accept_states
if
request
.
status
==
Request
.
STATUSES
.
UNSEEN
:
if
request
.
status
==
Request
.
STATUSES
.
UNSEEN
:
request
.
status
=
Request
.
STATUSES
.
PENDING
request
.
status
=
Request
.
STATUSES
.
PENDING
...
...
circle/vm/operations.py
View file @
815d11ea
...
@@ -1328,7 +1328,14 @@ class ResourcesOperation(InstanceOperation):
...
@@ -1328,7 +1328,14 @@ class ResourcesOperation(InstanceOperation):
accept_states
=
(
'STOPPED'
,
'PENDING'
,
)
accept_states
=
(
'STOPPED'
,
'PENDING'
,
)
def
_operation
(
self
,
user
,
activity
,
def
_operation
(
self
,
user
,
activity
,
num_cores
,
ram_size
,
max_ram_size
,
priority
):
num_cores
,
ram_size
,
max_ram_size
,
priority
,
with_shutdown
=
True
):
if
with_shutdown
:
try
:
self
.
instance
.
shutdown
(
parent_activity
=
activity
,
user
=
user
)
except
Instance
.
WrongStateError
:
pass
self
.
instance
.
num_cores
=
num_cores
self
.
instance
.
num_cores
=
num_cores
self
.
instance
.
ram_size
=
ram_size
self
.
instance
.
ram_size
=
ram_size
...
@@ -1346,6 +1353,32 @@ class ResourcesOperation(InstanceOperation):
...
@@ -1346,6 +1353,32 @@ class ResourcesOperation(InstanceOperation):
@register_operation
@register_operation
class
ResourcesRequestOperation
(
InstanceOperation
):
id
=
"resources_request"
name
=
_
(
"resources request"
)
description
=
""
required_perms
=
()
accept_states
=
(
"STOPPED"
,
"RUNNING"
,
"PENDING"
,
)
async_queue
=
"localhost.man.slow"
def
_operation
(
self
,
user
,
activity
,
resource_request
,
task
=
None
):
try
:
self
.
instance
.
shutdown
(
parent_activity
=
activity
,
task
=
task
)
except
Instance
.
WrongStateError
:
pass
self
.
instance
.
_update_status
()
self
.
instance
.
resources_change
(
parent_activity
=
activity
,
num_cores
=
resource_request
.
num_cores
,
ram_size
=
resource_request
.
ram_size
,
max_ram_size
=
resource_request
.
ram_size
,
priority
=
resource_request
.
priority
)
@register_operation
class
PasswordResetOperation
(
RemoteAgentOperation
):
class
PasswordResetOperation
(
RemoteAgentOperation
):
id
=
'password_reset'
id
=
'password_reset'
name
=
_
(
"password reset"
)
name
=
_
(
"password reset"
)
...
...
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