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
A prog2-höz tartozó friss repo anyagok itt elérhetőek:
https://git.iit.bme.hu/
Commit
6c0ce42b
authored
Apr 22, 2018
by
Szabolcs Gelencser
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Show initial template lists
parent
0a3d40e0
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
108 additions
and
104 deletions
+108
-104
.idea/workspace.xml
+57
-35
circle/dashboard/views/template.py
+51
-69
No files found.
.idea/workspace.xml
View file @
6c0ce42b
...
@@ -2,9 +2,7 @@
...
@@ -2,9 +2,7 @@
<project
version=
"4"
>
<project
version=
"4"
>
<component
name=
"ChangeListManager"
>
<component
name=
"ChangeListManager"
>
<list
default=
"true"
id=
"1fbec8af-5a7c-40f9-b994-83ac07d1ae1d"
name=
"Default"
comment=
""
>
<list
default=
"true"
id=
"1fbec8af-5a7c-40f9-b994-83ac07d1ae1d"
name=
"Default"
comment=
""
>
<change
beforePath=
"$PROJECT_DIR$/.idea/workspace.xml"
afterPath=
"$PROJECT_DIR$/.idea/workspace.xml"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/dashboard/views/template.py"
afterPath=
"$PROJECT_DIR$/circle/dashboard/views/template.py"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/network/templates/network/vxlan-edit.html"
afterPath=
"$PROJECT_DIR$/circle/network/templates/network/vxlan-edit.html"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/network/views.py"
afterPath=
"$PROJECT_DIR$/circle/network/views.py"
/>
</list>
</list>
<option
name=
"EXCLUDED_CONVERTED_TO_IGNORED"
value=
"true"
/>
<option
name=
"EXCLUDED_CONVERTED_TO_IGNORED"
value=
"true"
/>
<option
name=
"TRACKING_ENABLED"
value=
"true"
/>
<option
name=
"TRACKING_ENABLED"
value=
"true"
/>
...
@@ -34,7 +32,7 @@
...
@@ -34,7 +32,7 @@
</component>
</component>
<component
name=
"FileEditorManager"
>
<component
name=
"FileEditorManager"
>
<leaf
SIDE_TABS_SIZE_LIMIT_KEY=
"300"
>
<leaf
SIDE_TABS_SIZE_LIMIT_KEY=
"300"
>
<file
leaf-file-name=
"vxlan-edit.html"
pinned=
"false"
current-in-tab=
"
tru
e"
>
<file
leaf-file-name=
"vxlan-edit.html"
pinned=
"false"
current-in-tab=
"
fals
e"
>
<entry
file=
"file://$PROJECT_DIR$/circle/network/templates/network/vxlan-edit.html"
>
<entry
file=
"file://$PROJECT_DIR$/circle/network/templates/network/vxlan-edit.html"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"431"
>
<state
relative-caret-position=
"431"
>
...
@@ -46,6 +44,26 @@
...
@@ -46,6 +44,26 @@
</provider>
</provider>
</entry>
</entry>
</file>
</file>
<file
leaf-file-name=
"template.py"
pinned=
"false"
current-in-tab=
"true"
>
<entry
file=
"file://$PROJECT_DIR$/circle/dashboard/views/template.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"153"
>
<caret
line=
"203"
column=
"11"
lean-forward=
"true"
selection-start-line=
"203"
selection-start-column=
"11"
selection-end-line=
"203"
selection-end-column=
"11"
/>
<folding
/>
</state>
</provider>
</entry>
</file>
<file
leaf-file-name=
"template-list.html"
pinned=
"false"
current-in-tab=
"false"
>
<entry
file=
"file://$PROJECT_DIR$/circle/dashboard/templates/dashboard/template-list.html"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"125"
>
<caret
line=
"16"
column=
"18"
lean-forward=
"true"
selection-start-line=
"16"
selection-start-column=
"18"
selection-end-line=
"16"
selection-end-column=
"18"
/>
<folding
/>
</state>
</provider>
</entry>
</file>
<file
leaf-file-name=
"views.py"
pinned=
"false"
current-in-tab=
"false"
>
<file
leaf-file-name=
"views.py"
pinned=
"false"
current-in-tab=
"false"
>
<entry
file=
"file://$PROJECT_DIR$/circle/network/views.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/network/views.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
...
@@ -80,7 +98,6 @@
...
@@ -80,7 +98,6 @@
</component>
</component>
<component
name=
"FindInProjectRecents"
>
<component
name=
"FindInProjectRecents"
>
<findStrings>
<findStrings>
<find>
removeinterface
</find>
<find>
vm_op
</find>
<find>
vm_op
</find>
<find>
hidden
</find>
<find>
hidden
</find>
<find>
removeint
</find>
<find>
removeint
</find>
...
@@ -110,6 +127,7 @@
...
@@ -110,6 +127,7 @@
<find>
connect
</find>
<find>
connect
</find>
<find>
vxlandele
</find>
<find>
vxlandele
</find>
<find>
vxlandeta
</find>
<find>
vxlandeta
</find>
<find>
exclude
</find>
</findStrings>
</findStrings>
<replaceStrings>
<replaceStrings>
<replace>
'ACTIVE'
</replace>
<replace>
'ACTIVE'
</replace>
...
@@ -136,7 +154,6 @@
...
@@ -136,7 +154,6 @@
<option
value=
"$PROJECT_DIR$/circle/dashboard/templatetags/instance_tags.py"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/templatetags/instance_tags.py"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/templates/dashboard/template-edit.html"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/templates/dashboard/template-edit.html"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/views/util.py"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/views/util.py"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/views/template.py"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/urls.py"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/urls.py"
/>
<option
value=
"$PROJECT_DIR$/circle/circle/os_policies/glance_policy.json"
/>
<option
value=
"$PROJECT_DIR$/circle/circle/os_policies/glance_policy.json"
/>
<option
value=
"$PROJECT_DIR$/circle/circle/os_policies/keystone_policy.json"
/>
<option
value=
"$PROJECT_DIR$/circle/circle/os_policies/keystone_policy.json"
/>
...
@@ -182,6 +199,7 @@
...
@@ -182,6 +199,7 @@
<option
value=
"$PROJECT_DIR$/circle/network/operations.py"
/>
<option
value=
"$PROJECT_DIR$/circle/network/operations.py"
/>
<option
value=
"$PROJECT_DIR$/circle/network/views.py"
/>
<option
value=
"$PROJECT_DIR$/circle/network/views.py"
/>
<option
value=
"$PROJECT_DIR$/circle/network/templates/network/vxlan-edit.html"
/>
<option
value=
"$PROJECT_DIR$/circle/network/templates/network/vxlan-edit.html"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/views/template.py"
/>
</list>
</list>
</option>
</option>
</component>
</component>
...
@@ -632,27 +650,6 @@ certifi.where()</expression-string>
...
@@ -632,27 +650,6 @@ certifi.where()</expression-string>
</expressions>
</expressions>
</component>
</component>
<component
name=
"editorHistoryManager"
>
<component
name=
"editorHistoryManager"
>
<entry
file=
"file://$PROJECT_DIR$/circle/dashboard/compilers.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"0"
>
<caret
line=
"0"
column=
"0"
lean-forward=
"false"
selection-start-line=
"0"
selection-start-column=
"0"
selection-end-line=
"0"
selection-end-column=
"0"
/>
</state>
</provider>
</entry>
<entry
file=
"file://$USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/urllib3/connectionpool.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"102"
>
<caret
line=
"857"
column=
"0"
lean-forward=
"false"
selection-start-line=
"857"
selection-start-column=
"0"
selection-end-line=
"857"
selection-end-column=
"0"
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/common/management/commands/watch.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"204"
>
<caret
line=
"32"
column=
"0"
lean-forward=
"true"
selection-start-line=
"32"
selection-start-column=
"0"
selection-end-line=
"32"
selection-end-column=
"0"
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/common/management/commands/compileless.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/common/management/commands/compileless.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"0"
>
<state
relative-caret-position=
"0"
>
...
@@ -771,14 +768,6 @@ certifi.where()</expression-string>
...
@@ -771,14 +768,6 @@ certifi.where()</expression-string>
</state>
</state>
</provider>
</provider>
</entry>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/dashboard/views/util.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"148"
>
<caret
line=
"296"
column=
"19"
lean-forward=
"false"
selection-start-line=
"296"
selection-start-column=
"19"
selection-end-line=
"296"
selection-end-column=
"32"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/circle/settings/base.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/circle/settings/base.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"482"
>
<state
relative-caret-position=
"482"
>
...
@@ -1029,6 +1018,14 @@ certifi.where()</expression-string>
...
@@ -1029,6 +1018,14 @@ certifi.where()</expression-string>
</state>
</state>
</provider>
</provider>
</entry>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/dashboard/views/util.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"44"
>
<caret
line=
"107"
column=
"41"
lean-forward=
"false"
selection-start-line=
"107"
selection-start-column=
"27"
selection-end-line=
"107"
selection-end-column=
"41"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/network/templates/network/vxlan-edit.html"
>
<entry
file=
"file://$PROJECT_DIR$/circle/network/templates/network/vxlan-edit.html"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"431"
>
<state
relative-caret-position=
"431"
>
...
@@ -1039,5 +1036,29 @@ certifi.where()</expression-string>
...
@@ -1039,5 +1036,29 @@ certifi.where()</expression-string>
</state>
</state>
</provider>
</provider>
</entry>
</entry>
<entry
file=
"file://$USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/django/views/generic/list.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"358"
>
<caret
line=
"159"
column=
"0"
lean-forward=
"false"
selection-start-line=
"159"
selection-start-column=
"0"
selection-end-line=
"159"
selection-end-column=
"0"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/dashboard/templates/dashboard/template-list.html"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"125"
>
<caret
line=
"16"
column=
"18"
lean-forward=
"true"
selection-start-line=
"16"
selection-start-column=
"18"
selection-end-line=
"16"
selection-end-column=
"18"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/dashboard/views/template.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"153"
>
<caret
line=
"203"
column=
"11"
lean-forward=
"true"
selection-start-line=
"203"
selection-start-column=
"11"
selection-end-line=
"203"
selection-end-column=
"11"
/>
<folding
/>
</state>
</provider>
</entry>
</component>
</component>
</project>
</project>
\ No newline at end of file
circle/dashboard/views/template.py
View file @
6c0ce42b
...
@@ -20,6 +20,7 @@ from datetime import timedelta
...
@@ -20,6 +20,7 @@ from datetime import timedelta
import
json
import
json
import
logging
import
logging
import
openstack_api
from
django.contrib
import
messages
from
django.contrib
import
messages
from
django.contrib.auth.models
import
User
from
django.contrib.auth.models
import
User
from
django.contrib.messages.views
import
SuccessMessageMixin
from
django.contrib.messages.views
import
SuccessMessageMixin
...
@@ -196,52 +197,52 @@ class TemplateList(LoginRequiredMixin, FilterMixin, SingleTableView):
...
@@ -196,52 +197,52 @@ class TemplateList(LoginRequiredMixin, FilterMixin, SingleTableView):
def
get_context_data
(
self
,
*
args
,
**
kwargs
):
def
get_context_data
(
self
,
*
args
,
**
kwargs
):
context
=
super
(
TemplateList
,
self
)
.
get_context_data
(
*
args
,
**
kwargs
)
context
=
super
(
TemplateList
,
self
)
.
get_context_data
(
*
args
,
**
kwargs
)
user
=
self
.
request
.
user
user
=
self
.
request
.
user
leases_w_operator
=
Lease
.
get_objects_with_level
(
"operator"
,
user
)
#
leases_w_operator = Lease.get_objects_with_level("operator", user)
context
[
'lease_table'
]
=
LeaseListTable
(
#
context['lease_table'] = LeaseListTable(
leases_w_operator
,
request
=
self
.
request
,
#
leases_w_operator, request=self.request,
template
=
"django_tables2/table_no_page.html"
,
#
template="django_tables2/table_no_page.html",
)
#
)
context
[
'show_lease_table'
]
=
(
context
[
'show_lease_table'
]
=
(
leases_w_operator
.
count
()
>
0
or
# leases_w_operator.count() > 0 or
user
.
has_perm
(
"vm.create_leases"
)
# user.has_perm("vm.create_leases")
False
)
)
context
[
'search_form'
]
=
self
.
search_form
context
[
'search_form'
]
=
self
.
search_form
# templates without any instances
# tem0for t in InstanceTemplate.objects.all()
# [t for t in InstanceTemplate.objects.all()
# # if t.instance_set.count() < 1]
# if t.instance_set.count() < 1]
# never_instantiated = context['object_list'].annotate(
never_instantiated
=
context
[
'object_list'
]
.
annotate
(
# instance_count=Count("instance_set")).filter(instance_count__lt=1)
instance_count
=
Count
(
"instance_set"
))
.
filter
(
instance_count__lt
=
1
)
#
# # templates without active virtual machines
# templates without active virtual machines
# active_statuses = Instance.STATUS._db_values - set(["DESTROYED"])
active_statuses
=
Instance
.
STATUS
.
_db_values
-
set
([
"DESTROYED"
])
# templates_wo_instances = context['object_list'].exclude(
templates_wo_instances
=
context
[
'object_list'
]
.
exclude
(
# pk__in=InstanceTemplate.objects.filter(
pk__in
=
InstanceTemplate
.
objects
.
filter
(
# instance_set__status__in=active_statuses)
instance_set__status__in
=
active_statuses
)
# ).exclude(pk__in=never_instantiated)
)
.
exclude
(
pk__in
=
never_instantiated
)
#
# def get_create_acts_younger_than(days):
def
get_create_acts_younger_than
(
days
):
# return InstanceActivity.objects.filter(
return
InstanceActivity
.
objects
.
filter
(
# activity_code="vm.Instance.create",
activity_code
=
"vm.Instance.create"
,
# finished__gt=timezone.now() - timedelta(days=days))
finished__gt
=
timezone
.
now
()
-
timedelta
(
days
=
days
))
#
# # templates without active virtual machines
# templates without active virtual machines
# # last machine started later than 90 days
# last machine started later than 90 days
# templates_wo_i_90 = templates_wo_instances.exclude(
templates_wo_i_90
=
templates_wo_instances
.
exclude
(
# instance_set__activity_log__in=get_create_acts_younger_than(90))
instance_set__activity_log__in
=
get_create_acts_younger_than
(
90
))
#
# # templates without active virtual machines
# templates without active virtual machines
# # last machine started later than 180 days
# last machine started later than 180 days
# templates_wo_i_180 = templates_wo_instances.exclude(
templates_wo_i_180
=
templates_wo_instances
.
exclude
(
# instance_set__activity_log__in=get_create_acts_younger_than(180))
instance_set__activity_log__in
=
get_create_acts_younger_than
(
180
))
#
# context['unused_templates'] = {
context
[
'unused_templates'
]
=
{
# 'never_instantiated': never_instantiated,
'never_instantiated'
:
never_instantiated
,
# 'templates_wo_instances': templates_wo_instances,
'templates_wo_instances'
:
templates_wo_instances
,
# 'templates_wo_instances_90': templates_wo_i_90,
'templates_wo_instances_90'
:
templates_wo_i_90
,
# 'templates_wo_instances_180': templates_wo_i_180,
'templates_wo_instances_180'
:
templates_wo_i_180
,
# }
}
return
context
return
context
...
@@ -249,12 +250,14 @@ class TemplateList(LoginRequiredMixin, FilterMixin, SingleTableView):
...
@@ -249,12 +250,14 @@ class TemplateList(LoginRequiredMixin, FilterMixin, SingleTableView):
self
.
search_form
=
TemplateListSearchForm
(
self
.
request
.
GET
)
self
.
search_form
=
TemplateListSearchForm
(
self
.
request
.
GET
)
self
.
search_form
.
full_clean
()
self
.
search_form
.
full_clean
()
if
self
.
request
.
is_ajax
():
if
self
.
request
.
is_ajax
():
templates
=
[{
templates
=
[
'icon'
:
i
.
os_type
,
{
'system'
:
i
.
system
,
'icon'
:
i
.
os_type
,
'url'
:
reverse
(
"dashboard.views.template-detail"
,
'system'
:
i
.
system
,
kwargs
=
{
'pk'
:
i
.
pk
}),
'url'
:
reverse
(
"dashboard.views.template-detail"
,
'name'
:
i
.
name
}
for
i
in
self
.
get_queryset
()]
kwargs
=
{
'pk'
:
i
.
pk
}),
'name'
:
i
.
name
}
for
i
in
self
.
get_queryset
()]
return
HttpResponse
(
return
HttpResponse
(
json
.
dumps
(
templates
),
json
.
dumps
(
templates
),
content_type
=
"application/json"
,
content_type
=
"application/json"
,
...
@@ -262,29 +265,8 @@ class TemplateList(LoginRequiredMixin, FilterMixin, SingleTableView):
...
@@ -262,29 +265,8 @@ class TemplateList(LoginRequiredMixin, FilterMixin, SingleTableView):
else
:
else
:
return
super
(
TemplateList
,
self
)
.
get
(
*
args
,
**
kwargs
)
return
super
(
TemplateList
,
self
)
.
get
(
*
args
,
**
kwargs
)
def
create_acl_queryset
(
self
,
model
):
queryset
=
super
(
TemplateList
,
self
)
.
create_acl_queryset
(
model
)
sql
=
(
"SELECT count(*) FROM vm_instance WHERE "
"vm_instance.template_id = vm_instancetemplate.id and "
"vm_instance.destroyed_at is null and "
"vm_instance.status = 'RUNNING'"
)
queryset
=
queryset
.
extra
(
select
=
{
'running'
:
sql
})
return
queryset
def
get_queryset
(
self
):
def
get_queryset
(
self
):
logger
.
debug
(
'TemplateList.get_queryset() called. User:
%
s'
,
return
InstanceTemplate
.
objects
.
all
()
unicode
(
self
.
request
.
user
))
qs
=
self
.
create_acl_queryset
(
InstanceTemplate
)
self
.
create_fake_get
()
try
:
filters
,
excludes
=
self
.
get_queryset_filters
()
qs
=
qs
.
filter
(
**
filters
)
.
exclude
(
**
excludes
)
.
distinct
()
except
ValueError
:
messages
.
error
(
self
.
request
,
_
(
"Error during filtering."
))
return
qs
.
select_related
(
"lease"
,
"owner"
,
"owner__profile"
)
class
TemplateDelete
(
DeleteViewBase
):
class
TemplateDelete
(
DeleteViewBase
):
model
=
InstanceTemplate
model
=
InstanceTemplate
...
...
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