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
feeea6da
authored
7 years ago
by
Szabolcs Gelencser
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Comment unused celery tasks, configure local celery transport
parent
1d8b8edb
Hide whitespace changes
Inline
Side-by-side
Showing
22 changed files
with
662 additions
and
616 deletions
+662
-616
.idea/workspace.xml
+246
-212
circle/celery
+0
-0
circle/circle/db.sqlite3
+0
-0
circle/circle/settings/base.py
+9
-0
circle/common/models.py
+2
-2
circle/dashboard/views/vm.py
+1
-1
circle/firewall/tasks/local_tasks.py
+3
-3
circle/firewall/tasks/remote_tasks.py
+7
-7
circle/manager/mancelery.py
+63
-63
circle/manager/moncelery.py
+75
-75
circle/manager/scheduler.py
+126
-126
circle/manager/slowcelery.py
+53
-53
circle/storage/tasks/local_tasks.py
+9
-9
circle/storage/tasks/storage_tasks.py
+15
-15
circle/vm/models/activity.py
+1
-1
circle/vm/operations.py
+1
-1
circle/vm/tasks/__init__.py
+2
-0
circle/vm/tasks/agent_tasks.py
+16
-16
circle/vm/tasks/local_tasks.py
+3
-3
circle/vm/tasks/net_tasks.py
+3
-3
circle/vm/tasks/vm_tasks.py
+26
-26
requirements/circlestack.txt
+1
-0
No files found.
.idea/workspace.xml
View file @
feeea6da
...
...
@@ -3,8 +3,26 @@
<component
name=
"ChangeListManager"
>
<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/circle/db.sqlite3"
afterPath=
"$PROJECT_DIR$/circle/circle/db.sqlite3"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/circle/settings/base.py"
afterPath=
"$PROJECT_DIR$/circle/circle/settings/base.py"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/common/models.py"
afterPath=
"$PROJECT_DIR$/circle/common/models.py"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/dashboard/views/vm.py"
afterPath=
"$PROJECT_DIR$/circle/dashboard/views/vm.py"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/firewall/tasks/local_tasks.py"
afterPath=
"$PROJECT_DIR$/circle/firewall/tasks/local_tasks.py"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/firewall/tasks/remote_tasks.py"
afterPath=
"$PROJECT_DIR$/circle/firewall/tasks/remote_tasks.py"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/manager/mancelery.py"
afterPath=
"$PROJECT_DIR$/circle/manager/mancelery.py"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/manager/moncelery.py"
afterPath=
"$PROJECT_DIR$/circle/manager/moncelery.py"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/manager/scheduler.py"
afterPath=
"$PROJECT_DIR$/circle/manager/scheduler.py"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/manager/slowcelery.py"
afterPath=
"$PROJECT_DIR$/circle/manager/slowcelery.py"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/storage/tasks/local_tasks.py"
afterPath=
"$PROJECT_DIR$/circle/storage/tasks/local_tasks.py"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/storage/tasks/storage_tasks.py"
afterPath=
"$PROJECT_DIR$/circle/storage/tasks/storage_tasks.py"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/vm/models/activity.py"
afterPath=
"$PROJECT_DIR$/circle/vm/models/activity.py"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/vm/operations.py"
afterPath=
"$PROJECT_DIR$/circle/vm/operations.py"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/vm/tasks/__init__.py"
afterPath=
"$PROJECT_DIR$/circle/vm/tasks/__init__.py"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/vm/tasks/agent_tasks.py"
afterPath=
"$PROJECT_DIR$/circle/vm/tasks/agent_tasks.py"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/vm/tasks/local_tasks.py"
afterPath=
"$PROJECT_DIR$/circle/vm/tasks/local_tasks.py"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/vm/tasks/net_tasks.py"
afterPath=
"$PROJECT_DIR$/circle/vm/tasks/net_tasks.py"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/vm/tasks/vm_tasks.py"
afterPath=
"$PROJECT_DIR$/circle/vm/tasks/vm_tasks.py"
/>
<change
beforePath=
"$PROJECT_DIR$/requirements/circlestack.txt"
afterPath=
"$PROJECT_DIR$/requirements/circlestack.txt"
/>
</list>
<option
name=
"EXCLUDED_CONVERTED_TO_IGNORED"
value=
"true"
/>
<option
name=
"TRACKING_ENABLED"
value=
"true"
/>
...
...
@@ -34,21 +52,11 @@
</component>
<component
name=
"FileEditorManager"
>
<leaf
SIDE_TABS_SIZE_LIMIT_KEY=
"300"
>
<file
leaf-file-name=
"
template-list.html"
pinned=
"false"
current-in-tab=
"fals
e"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
dashboard/templates/dashboard/template-list.html
"
>
<file
leaf-file-name=
"
base.py"
pinned=
"false"
current-in-tab=
"tru
e"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
circle/settings/base.py
"
>
<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=
"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=
"425"
>
<caret
line=
"270"
column=
"69"
lean-forward=
"false"
selection-start-line=
"270"
selection-start-column=
"69"
selection-end-line=
"270"
selection-end-column=
"69"
/>
<state
relative-caret-position=
"363"
>
<caret
line=
"408"
column=
"27"
lean-forward=
"false"
selection-start-line=
"408"
selection-start-column=
"27"
selection-end-line=
"408"
selection-end-column=
"27"
/>
<folding
/>
</state>
</provider>
...
...
@@ -66,12 +74,6 @@
</component>
<component
name=
"FindInProjectRecents"
>
<findStrings>
<find>
vm_op
</find>
<find>
hidden
</find>
<find>
removeint
</find>
<find>
remove_in
</find>
<find>
instance_id
</find>
<find>
favor
</find>
<find>
favourite
</find>
<find>
favouritev
</find>
<find>
v
</find>
...
...
@@ -96,6 +98,12 @@
<find>
vxlandele
</find>
<find>
vxlandeta
</find>
<find>
exclude
</find>
<find>
lease
</find>
<find>
lease
</find>
<find>
installed
</find>
<find>
celery.task
</find>
<find>
@celery.task
</find>
<find>
celery
</find>
</findStrings>
<replaceStrings>
<replace>
'ACTIVE'
</replace>
...
...
@@ -103,6 +111,7 @@
<replace>
<
pk:slug
>
</replace>
<replace>
network/horizon/client_side/
</replace>
<replace>
RequestDecideRequiredMixin
</replace>
<replace>
#@celery.task
</replace>
</replaceStrings>
<dirStrings>
<dir>
$PROJECT_DIR$/circle/dashboard/templates/dashboard
</dir>
...
...
@@ -117,25 +126,6 @@
<component
name=
"IdeDocumentHistory"
>
<option
name=
"CHANGED_PATHS"
>
<list>
<option
value=
"$PROJECT_DIR$/circle/dashboard/templates/dashboard/index-templates.html"
/>
<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/views/util.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/keystone_policy.json"
/>
<option
value=
"$PROJECT_DIR$/circle/openstack_auth/plugin/password.py"
/>
<option
value=
"$PROJECT_DIR$/circle/openstack_auth/policy.py"
/>
<option
value=
"$PROJECT_DIR$/circle/circle/os_policies/circle_policy.json"
/>
<option
value=
"$PROJECT_DIR$/circle/openstack_auth/user.py"
/>
<option
value=
"$PROJECT_DIR$/circle/middleware.py"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/templates/dashboard/base.html"
/>
<option
value=
"$PROJECT_DIR$/circle/request/models.py"
/>
<option
value=
"$PROJECT_DIR$/circle/request/views.py"
/>
<option
value=
"$PROJECT_DIR$/circle/circle/middleware.py"
/>
<option
value=
"$PROJECT_DIR$/circle/manage.py"
/>
<option
value=
"$PROJECT_DIR$/circle/openstack_auth/urls.py"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/templates/auth/login.html"
/>
<option
value=
"$PROJECT_DIR$/circle/circle/settings/local.py"
/>
<option
value=
"$PROJECT_DIR$/circle/openstack_auth/views.py"
/>
<option
value=
"$PROJECT_DIR$/circle/circle/urls.py"
/>
...
...
@@ -143,13 +133,10 @@
<option
value=
"$PROJECT_DIR$/requirements/circlestack.txt"
/>
<option
value=
"$PROJECT_DIR$/circle/vm/models/instance.py"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/tables.py"
/>
<option
value=
"$PROJECT_DIR$/circle/vm/models/activity.py"
/>
<option
value=
"$PROJECT_DIR$/circle/vm/models/__init__.py"
/>
<option
value=
"$PROJECT_DIR$/circle/vm/admin.py"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/templates/dashboard/vm-plain-image-create.html"
/>
<option
value=
"$PROJECT_DIR$/circle/circle/settings/base.py"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/templates/dashboard/vm-detail/_network-public-ip-add.html"
/>
<option
value=
"$PROJECT_DIR$/circle/vm/operations.py"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/forms.py"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/templates/dashboard/vm-detail/network.html"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/models.py"
/>
...
...
@@ -166,8 +153,30 @@
<option
value=
"$PROJECT_DIR$/circle/network/views.py"
/>
<option
value=
"$PROJECT_DIR$/circle/network/tables.py"
/>
<option
value=
"$PROJECT_DIR$/circle/network/templates/network/vxlan-edit.html"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/views/vm.py"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/views/template.py"
/>
<option
value=
"$PROJECT_DIR$/COPYING"
/>
<option
value=
"$PROJECT_DIR$/circle/manager/moncelery.py"
/>
<option
value=
"$PROJECT_DIR$/circle/manager/slowcelery.py"
/>
<option
value=
"$PROJECT_DIR$/circle/manager/scheduler.py"
/>
<option
value=
"$PROJECT_DIR$/circle/manager/mancelery.py"
/>
<option
value=
"$PROJECT_DIR$/circle/common/models.py"
/>
<option
value=
"$PROJECT_DIR$/circle/vm/models/activity.py"
/>
<option
value=
"$PROJECT_DIR$/circle/vm/tasks/agent_tasks.py"
/>
<option
value=
"$PROJECT_DIR$/circle/firewall/tasks/local_tasks.py"
/>
<option
value=
"$PROJECT_DIR$/circle/firewall/tasks/remote_tasks.py"
/>
<option
value=
"$PROJECT_DIR$/circle/vm/tasks/net_tasks.py"
/>
<option
value=
"$PROJECT_DIR$/circle/storage/tasks/local_tasks.py"
/>
<option
value=
"$PROJECT_DIR$/circle/storage/tasks/storage_tasks.py"
/>
<option
value=
"$PROJECT_DIR$/circle/vm/operations.py"
/>
<option
value=
"$PROJECT_DIR$/circle/vm/tasks/local_tasks.py"
/>
<option
value=
"$PROJECT_DIR$/circle/vm/tasks/vm_tasks.py"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/views/vm.py"
/>
<option
value=
"$PROJECT_DIR$/circle/manager/leasemanager.py"
/>
<option
value=
"$PROJECT_DIR$/circle/vm/tasks.py"
/>
<option
value=
"$PROJECT_DIR$/circle/circle/settings/base.py"
/>
<option
value=
"$PROJECT_DIR$/circle/vm/tasks/__init__.py"
/>
<option
value=
"$PROJECT_DIR$/circle/vm/__init__.py"
/>
<option
value=
"$PROJECT_DIR$/circle/vm/tasks/test.py"
/>
</list>
</option>
</component>
...
...
@@ -242,7 +251,19 @@
<item
name=
"cloud"
type=
"b2602c69:ProjectViewProjectNode"
/>
<item
name=
"cloud"
type=
"462c0819:PsiDirectoryNode"
/>
<item
name=
"circle"
type=
"462c0819:PsiDirectoryNode"
/>
<item
name=
"dashboard"
type=
"462c0819:PsiDirectoryNode"
/>
<item
name=
"vm"
type=
"462c0819:PsiDirectoryNode"
/>
</path>
<path>
<item
name=
"cloud"
type=
"b2602c69:ProjectViewProjectNode"
/>
<item
name=
"cloud"
type=
"462c0819:PsiDirectoryNode"
/>
<item
name=
"circle"
type=
"462c0819:PsiDirectoryNode"
/>
<item
name=
"vm"
type=
"462c0819:PsiDirectoryNode"
/>
<item
name=
"tasks"
type=
"462c0819:PsiDirectoryNode"
/>
</path>
<path>
<item
name=
"cloud"
type=
"b2602c69:ProjectViewProjectNode"
/>
<item
name=
"cloud"
type=
"462c0819:PsiDirectoryNode"
/>
<item
name=
"requirements"
type=
"462c0819:PsiDirectoryNode"
/>
</path>
</expand>
<select
/>
...
...
@@ -257,7 +278,7 @@
<property
name=
"settings.editor.selected.configurable"
value=
"watcher.settings"
/>
<property
name=
"NewWatcherDialog.advanced.open"
value=
"true"
/>
<property
name=
"DefaultHtmlFileTemplate"
value=
"HTML File"
/>
<property
name=
"SearchEverywhereHistoryKey"
value=
"
templateli	null	null te	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/dashboard/template-list.html vmcrea	null	null index-tem	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/dashboard/index-templates.html index	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/dashboard/index-vm.html urls	FILE	file:///home/h3yduck/cloud/circle/dashboard/urls.py vxla	FILE	file:///home/h3yduck/cloud/circle/network/templates/network/vxlan-edit.html operat	FILE	file:///home/h3yduck/cloud/circle/network/operations.py network	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/dashboard/vm-detail/network.html vmdetail	null	null vmdeta	null	null forms.	FILE	file:///home/h3yduck/cloud/circle/dashboard/forms.py urls.	FILE	file:///home/h3yduck/cloud/circle/dashboard/urls.py nova	FILE	file:///home/h3yduck/cloud/circle/circle/os_policies/nova_policy.json neutron_p	FILE	file:///home/h3yduck/cloud/circle/circle/os_policies/neutron_policy.json operations	FILE	file:///home/h3yduck/cloud/circle/vm/operations.py base-d	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/dashboard/confirm/base-delete.html indexvi	null	null vm-de	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/dashboard/vm-detail.html index-v	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/dashboard/index-vm.html detailvi	null	null nova.	FILE	file:///home/h3yduck/cloud/circle/circle/os_policies/nova_policy.json operation	FILE	file:///home/h3yduck/cloud/circle/vm/operations.py base	FILE	file:///home/h3yduck/cloud/circle/circle/settings/base.py indev	null	null indexview	null	null operatio	FILE	file:///home/h3yduck/cloud/circle/vm/operations.py vxlanc	null	null plain	null	null base.	FILE	file:///home/h3yduck/cloud/circle/circle/settings/base.py local	FILE	file:///home/h3yduck/cloud/circle/circle/settings/local.py views.	FILE	file:///home/h3yduck/cloud/circle/openstack_auth/views.py login.html	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/auth/login.html LoginVi	null	null indexv	null	null index-vm	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/dashboard/index-vm.html index.	FILE	file:///home/h3yduck/cloud/circle/dashboard/views/index.py bas	FILE	file:///home/h3yduck/cloud/circle/openstack_api/base.py save	null	null plainc	null	null templatedet	null	null instancetemp	null	null instancetem	null	null url	FILE	file:///home/h3yduck/cloud/circle/dashboard/urls.py vmcreate	null	null opera	FILE	file:///home/h3yduck/cloud/circle/vm/operations.py templat	null	null vmadd	null	null addinterfa	null	null addin
	null	null"
/>
<property
name=
"SearchEverywhereHistoryKey"
value=
"
local	null	null base	FILE	file:///home/h3yduck/cloud/circle/circle/settings/base.py base.py	FILE	file:///home/h3yduck/cloud/circle/circle/settings/base.py templateli	null	null te	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/dashboard/template-list.html vmcrea	null	null index-tem	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/dashboard/index-templates.html index	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/dashboard/index-vm.html urls	FILE	file:///home/h3yduck/cloud/circle/dashboard/urls.py vxla	FILE	file:///home/h3yduck/cloud/circle/network/templates/network/vxlan-edit.html operat	FILE	file:///home/h3yduck/cloud/circle/network/operations.py network	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/dashboard/vm-detail/network.html vmdetail	null	null vmdeta	null	null forms.	FILE	file:///home/h3yduck/cloud/circle/dashboard/forms.py urls.	FILE	file:///home/h3yduck/cloud/circle/dashboard/urls.py nova	FILE	file:///home/h3yduck/cloud/circle/circle/os_policies/nova_policy.json neutron_p	FILE	file:///home/h3yduck/cloud/circle/circle/os_policies/neutron_policy.json operations	FILE	file:///home/h3yduck/cloud/circle/vm/operations.py base-d	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/dashboard/confirm/base-delete.html indexvi	null	null vm-de	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/dashboard/vm-detail.html index-v	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/dashboard/index-vm.html detailvi	null	null nova.	FILE	file:///home/h3yduck/cloud/circle/circle/os_policies/nova_policy.json operation	FILE	file:///home/h3yduck/cloud/circle/vm/operations.py indev	null	null indexview	null	null operatio	FILE	file:///home/h3yduck/cloud/circle/vm/operations.py vxlanc	null	null plain	null	null base.	FILE	file:///home/h3yduck/cloud/circle/circle/settings/base.py views.	FILE	file:///home/h3yduck/cloud/circle/openstack_auth/views.py login.html	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/auth/login.html LoginVi	null	null indexv	null	null index-vm	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/dashboard/index-vm.html index.	FILE	file:///home/h3yduck/cloud/circle/dashboard/views/index.py bas	FILE	file:///home/h3yduck/cloud/circle/openstack_api/base.py save	null	null plainc	null	null templatedet	null	null instancetemp	null	null instancetem	null	null url	FILE	file:///home/h3yduck/cloud/circle/dashboard/urls.py vmcreate	null	null opera	FILE	file:///home/h3yduck/cloud/circle/vm/operations.py templat	null	null vmadd	null	null addinterfa
	null	null"
/>
</component>
<component
name=
"RecentsManager"
>
<key
name=
"CopyFile.RECENT_KEYS"
>
...
...
@@ -404,20 +425,20 @@
<component
name=
"ToolWindowManager"
>
<frame
x=
"-2"
y=
"-1"
width=
"1370"
height=
"751"
extended-state=
"0"
/>
<layout>
<window_info
id=
"TODO"
active=
"false"
anchor=
"bottom"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"false"
show_stripe_button=
"true"
weight=
"0.329
8097
3"
sideWeight=
"0.4978701"
order=
"6"
side_tool=
"false"
content_ui=
"tabs"
/>
<window_info
id=
"TODO"
active=
"false"
anchor=
"bottom"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"false"
show_stripe_button=
"true"
weight=
"0.329
65
3"
sideWeight=
"0.4978701"
order=
"6"
side_tool=
"false"
content_ui=
"tabs"
/>
<window_info
id=
"Event Log"
active=
"false"
anchor=
"bottom"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"false"
show_stripe_button=
"true"
weight=
"0.7097792"
sideWeight=
"0.51283985"
order=
"7"
side_tool=
"true"
content_ui=
"tabs"
/>
<window_info
id=
"Version Control"
active=
"false"
anchor=
"bottom"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"false"
show_stripe_button=
"true"
weight=
"0.32492113"
sideWeight=
"0.
50453174
"
order=
"7"
side_tool=
"false"
content_ui=
"tabs"
/>
<window_info
id=
"Version Control"
active=
"false"
anchor=
"bottom"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"false"
show_stripe_button=
"true"
weight=
"0.32492113"
sideWeight=
"0.
4976526
"
order=
"7"
side_tool=
"false"
content_ui=
"tabs"
/>
<window_info
id=
"Python Console"
active=
"false"
anchor=
"bottom"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"false"
show_stripe_button=
"true"
weight=
"0.43023255"
sideWeight=
"0.43610224"
order=
"7"
side_tool=
"true"
content_ui=
"tabs"
/>
<window_info
id=
"Run"
active=
"false"
anchor=
"bottom"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"false"
show_stripe_button=
"true"
weight=
"0.32769555"
sideWeight=
"0.49574015"
order=
"2"
side_tool=
"false"
content_ui=
"tabs"
/>
<window_info
id=
"Terminal"
active=
"false"
anchor=
"bottom"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"
false"
show_stripe_button=
"true"
weight=
"0.32492113"
sideWeight=
"0.4954683
"
order=
"7"
side_tool=
"true"
content_ui=
"tabs"
/>
<window_info
id=
"Project"
active=
"false"
anchor=
"left"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"true"
show_stripe_button=
"true"
weight=
"0.2
0015106
"
sideWeight=
"0.5"
order=
"0"
side_tool=
"false"
content_ui=
"combo"
/>
<window_info
id=
"Terminal"
active=
"false"
anchor=
"bottom"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"
true"
show_stripe_button=
"true"
weight=
"0.32492113"
sideWeight=
"0.5023474
"
order=
"7"
side_tool=
"true"
content_ui=
"tabs"
/>
<window_info
id=
"Project"
active=
"false"
anchor=
"left"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"true"
show_stripe_button=
"true"
weight=
"0.2
5830814
"
sideWeight=
"0.5"
order=
"0"
side_tool=
"false"
content_ui=
"combo"
/>
<window_info
id=
"Docker"
active=
"false"
anchor=
"bottom"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"false"
show_stripe_button=
"false"
weight=
"0.33"
sideWeight=
"0.5"
order=
"8"
side_tool=
"false"
content_ui=
"tabs"
/>
<window_info
id=
"Database"
active=
"false"
anchor=
"right"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"false"
show_stripe_button=
"true"
weight=
"0.33"
sideWeight=
"0.5"
order=
"3"
side_tool=
"false"
content_ui=
"tabs"
/>
<window_info
id=
"Find"
active=
"false"
anchor=
"bottom"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"false"
show_stripe_button=
"true"
weight=
"0.3280757"
sideWeight=
"0.5"
order=
"1"
side_tool=
"false"
content_ui=
"tabs"
/>
<window_info
id=
"SciView"
active=
"false"
anchor=
"right"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"false"
show_stripe_button=
"true"
weight=
"0.33"
sideWeight=
"0.5"
order=
"3"
side_tool=
"false"
content_ui=
"tabs"
/>
<window_info
id=
"Structure"
active=
"false"
anchor=
"left"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"false"
show_stripe_button=
"true"
weight=
"0.25"
sideWeight=
"0.5"
order=
"1"
side_tool=
"false"
content_ui=
"tabs"
/>
<window_info
id=
"Favorites"
active=
"false"
anchor=
"left"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"false"
show_stripe_button=
"true"
weight=
"0.33"
sideWeight=
"0.5"
order=
"2"
side_tool=
"true"
content_ui=
"tabs"
/>
<window_info
id=
"Debug"
active=
"
true"
anchor=
"bottom"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"true"
show_stripe_button=
"true"
weight=
"0.7097792"
sideWeight=
"0.48716012
"
order=
"3"
side_tool=
"false"
content_ui=
"tabs"
/>
<window_info
id=
"Debug"
active=
"
false"
anchor=
"bottom"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"false"
show_stripe_button=
"true"
weight=
"0.7097792"
sideWeight=
"0.48413897
"
order=
"3"
side_tool=
"false"
content_ui=
"tabs"
/>
<window_info
id=
"Cvs"
active=
"false"
anchor=
"bottom"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"false"
show_stripe_button=
"true"
weight=
"0.25"
sideWeight=
"0.5"
order=
"4"
side_tool=
"false"
content_ui=
"tabs"
/>
<window_info
id=
"Messages"
active=
"false"
anchor=
"bottom"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"false"
show_stripe_button=
"true"
weight=
"0.33"
sideWeight=
"0.5"
order=
"7"
side_tool=
"false"
content_ui=
"tabs"
/>
<window_info
id=
"Message"
active=
"false"
anchor=
"bottom"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"false"
show_stripe_button=
"true"
weight=
"0.33"
sideWeight=
"0.5"
order=
"0"
side_tool=
"false"
content_ui=
"tabs"
/>
...
...
@@ -497,6 +518,11 @@
<line>
69
</line>
<option
name=
"timeStamp"
value=
"317"
/>
</line-breakpoint>
<line-breakpoint
enabled=
"true"
suspend=
"THREAD"
type=
"python-line"
>
<url>
file://$PROJECT_DIR$/circle/vm/tasks/local_periodic_tasks.py
</url>
<line>
43
</line>
<option
name=
"timeStamp"
value=
"351"
/>
</line-breakpoint>
</breakpoints>
<breakpoints-dialog>
<breakpoints-dialog
/>
...
...
@@ -508,7 +534,7 @@
</properties>
</breakpoint>
</default-breakpoints>
<option
name=
"time"
value=
"35
1
"
/>
<option
name=
"time"
value=
"35
8
"
/>
</breakpoint-manager>
<watches-manager
/>
</component>
...
...
@@ -623,412 +649,420 @@ certifi.where()</expression-string>
</expressions>
</component>
<component
name=
"editorHistoryManager"
>
<entry
file=
"file://$PROJECT_DIR$/
requirements/circlestack.txt
"
>
<entry
file=
"file://$PROJECT_DIR$/
circle/request/models.py
"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"0"
>
<caret
line=
"11"
column=
"14"
lean-forward=
"false"
selection-start-line=
"11"
selection-start-column=
"14"
selection-end-line=
"11"
selection-end-column=
"14"
/>
<state
relative-caret-position=
"44"
>
<caret
line=
"39"
column=
"0"
lean-forward=
"false"
selection-start-line=
"39"
selection-start-column=
"0"
selection-end-line=
"39"
selection-end-column=
"0"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
circle/settings/local
.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
network/models
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
-600
"
>
<caret
line=
"
38"
column=
"0"
lean-forward=
"true"
selection-start-line=
"38"
selection-start-column=
"0"
selection-end-line=
"38"
selection-end-column=
"0
"
/>
<state
relative-caret-position=
"
237
"
>
<caret
line=
"
29"
column=
"32"
lean-forward=
"true"
selection-start-line=
"29"
selection-start-column=
"32"
selection-end-line=
"29"
selection-end-column=
"32
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
dashboard/templates/dashboard/vm-plain-image-create.html
"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
network/__init__.py
"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
221
"
>
<caret
line=
"
13"
column=
"0"
lean-forward=
"false"
selection-start-line=
"13"
selection-start-column=
"0"
selection-end-line=
"13
"
selection-end-column=
"0"
/>
<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"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$
USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/novaclient/v2/server
s.py"
>
<entry
file=
"file://$
PROJECT_DIR$/circle/dashboard/form
s.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"250"
>
<caret
line=
"734"
column=
"37"
lean-forward=
"false"
selection-start-line=
"734"
selection-start-column=
"37"
selection-end-line=
"734"
selection-end-column=
"37"
/>
<state
relative-caret-position=
"194"
>
<caret
line=
"926"
column=
"6"
lean-forward=
"false"
selection-start-line=
"926"
selection-start-column=
"6"
selection-end-line=
"926"
selection-end-column=
"6"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$
USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/django/views/generic/detail
.py"
>
<entry
file=
"file://$
PROJECT_DIR$/circle/openstack_api/nova
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
156
"
>
<caret
line=
"1
15"
column=
"0"
lean-forward=
"false"
selection-start-line=
"115"
selection-start-column=
"0"
selection-end-line=
"115
"
selection-end-column=
"0"
/>
<state
relative-caret-position=
"
423
"
>
<caret
line=
"1
60"
column=
"0"
lean-forward=
"true"
selection-start-line=
"160"
selection-start-column=
"0"
selection-end-line=
"160
"
selection-end-column=
"0"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
dashboard/templates/dashboard/vm-detail/console.html
"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
network/forms.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
relative-caret-position=
"
38
0"
>
<caret
line=
"
387"
column=
"0"
lean-forward=
"false"
selection-start-line=
"387"
selection-start-column=
"0"
selection-end-line=
"387
"
selection-end-column=
"0"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$
PROJECT_DIR$/circle/dashboard/templates/dashboard/vm-detail/_network-port-add.html
"
>
<entry
file=
"file://$
USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/neutronclient/v2_0/client.py
"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"238"
>
<caret
line=
"14"
column=
"55"
lean-forward=
"false"
selection-start-line=
"14"
selection-start-column=
"55"
selection-end-line=
"14"
selection-end-column=
"55"
/>
<folding>
<element
signature=
"n#style#0;n#select#0;n#div#0;n#form#0;n#div#0;n#!!top"
expanded=
"false"
/>
</folding>
<state
relative-caret-position=
"66"
>
<caret
line=
"784"
column=
"39"
lean-forward=
"false"
selection-start-line=
"784"
selection-start-column=
"39"
selection-end-line=
"784"
selection-end-column=
"39"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/openstack_api/
keystone
.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/openstack_api/
neutron
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"2
89
"
>
<caret
line=
"
634"
column=
"31"
lean-forward=
"false"
selection-start-line=
"634"
selection-start-column=
"19"
selection-end-line=
"634"
selection-end-column=
"31
"
/>
<state
relative-caret-position=
"2
02
"
>
<caret
line=
"
1384"
column=
"4"
lean-forward=
"false"
selection-start-line=
"1384"
selection-start-column=
"4"
selection-end-line=
"1384"
selection-end-column=
"4
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
dashboard/templates/dashboard/vm-detail/_network-public-ip-add.html
"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
common/operations.py
"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
34
"
>
<caret
line=
"
2"
column=
"65"
lean-forward=
"true"
selection-start-line=
"2"
selection-start-column=
"46"
selection-end-line=
"2"
selection-end-column=
"65
"
/>
<state
relative-caret-position=
"
52
"
>
<caret
line=
"
89"
column=
"0"
lean-forward=
"false"
selection-start-line=
"89"
selection-start-column=
"0"
selection-end-line=
"89"
selection-end-column=
"0
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
openstack_api/base.py
"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
dashboard/templates/dashboard/vm-detail/network.html
"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"1
56
"
>
<caret
line=
"
156"
column=
"0"
lean-forward=
"false"
selection-start-line=
"156"
selection-start-column=
"0"
selection-end-line=
"156"
selection-end-column=
"0
"
/>
<state
relative-caret-position=
"1
088
"
>
<caret
line=
"
88"
column=
"29"
lean-forward=
"false"
selection-start-line=
"88"
selection-start-column=
"29"
selection-end-line=
"88"
selection-end-column=
"29
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
openstack_api/utils/memoized
.py"
>
<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=
"10
4"
column=
"0"
lean-forward=
"false"
selection-start-line=
"104"
selection-start-column=
"0"
selection-end-line=
"104"
selection-end-column=
"0
"
/>
<state
relative-caret-position=
"
44
"
>
<caret
line=
"10
7"
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://$USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/django/views/generic/
base
.py"
>
<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=
"
156
"
>
<caret
line=
"
87"
column=
"0"
lean-forward=
"false"
selection-start-line=
"87"
selection-start-column=
"0"
selection-end-line=
"87
"
selection-end-column=
"0"
/>
<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/
circle/settings/base
.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
network/operations
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"482"
>
<caret
line=
"592"
column=
"17"
lean-forward=
"false"
selection-start-line=
"592"
selection-start-column=
"17"
selection-end-line=
"592"
selection-end-column=
"17"
/>
<folding
/>
<state
relative-caret-position=
"448"
>
<caret
line=
"57"
column=
"15"
lean-forward=
"false"
selection-start-line=
"57"
selection-start-column=
"15"
selection-end-line=
"57"
selection-end-column=
"47"
/>
<folding>
<element
signature=
"e#0#20#0"
expanded=
"false"
/>
</folding>
</state>
</provider>
</entry>
<entry
file=
"file://
/usr/lib/python2.7/SocketServer
.py"
>
<entry
file=
"file://
$USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/django_tables2/views
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
306
"
>
<caret
line=
"1
49"
column=
"0"
lean-forward=
"false"
selection-start-line=
"149"
selection-start-column=
"0"
selection-end-line=
"149"
selection-end-column=
"0
"
/>
<state
relative-caret-position=
"
202
"
>
<caret
line=
"1
18"
column=
"6"
lean-forward=
"false"
selection-start-line=
"118"
selection-start-column=
"6"
selection-end-line=
"118"
selection-end-column=
"6
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
dashboard/model
s.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
network/table
s.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
299
"
>
<caret
line=
"
91"
column=
"17"
lean-forward=
"false"
selection-start-line=
"91"
selection-start-column=
"17"
selection-end-line=
"91"
selection-end-column=
"17
"
/>
<state
relative-caret-position=
"
100
"
>
<caret
line=
"
231"
column=
"20"
lean-forward=
"true"
selection-start-line=
"231"
selection-start-column=
"20"
selection-end-line=
"231"
selection-end-column=
"20
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
dashboard/templates/dashboard/vm-detail.html
"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
network/views.py
"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
214
"
>
<caret
line=
"
75"
column=
"96"
lean-forward=
"false"
selection-start-line=
"75"
selection-start-column=
"96"
selection-end-line=
"75"
selection-end-column=
"96
"
/>
<state
relative-caret-position=
"
35
"
>
<caret
line=
"
972"
column=
"25"
lean-forward=
"false"
selection-start-line=
"972"
selection-start-column=
"25"
selection-end-line=
"972"
selection-end-column=
"25
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
dashboard/templates/dashboard/confirm/base-delete
.html"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
network/templates/network/vxlan-edit
.html"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
408
"
>
<caret
line=
"
24"
column=
"51"
lean-forward=
"false"
selection-start-line=
"24"
selection-start-column=
"51"
selection-end-line=
"24"
selection-end-column=
"51
"
/>
<state
relative-caret-position=
"
176
"
>
<caret
line=
"
39"
column=
"6"
lean-forward=
"true"
selection-start-line=
"39"
selection-start-column=
"6"
selection-end-line=
"39"
selection-end-column=
"6
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/dashboard/
templates/dashboard/_disk-list-element.html
"
>
<entry
file=
"file://$PROJECT_DIR$/circle/dashboard/
urls.py
"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"1
36
"
>
<caret
line=
"
8"
column=
"25"
lean-forward=
"true"
selection-start-line=
"8"
selection-start-column=
"25"
selection-end-line=
"8"
selection-end-column=
"25
"
/>
<state
relative-caret-position=
"1
19
"
>
<caret
line=
"
59"
column=
"18"
lean-forward=
"true"
selection-start-line=
"59"
selection-start-column=
"18"
selection-end-line=
"59"
selection-end-column=
"20
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/dashboard/
templates/base.html
"
>
<entry
file=
"file://$PROJECT_DIR$/circle/dashboard/
views/index.py
"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
91
"
>
<caret
line=
"
76"
column=
"0"
lean-forward=
"false"
selection-start-line=
"76"
selection-start-column=
"0"
selection-end-line=
"76"
selection-end-column=
"
0"
/>
<state
relative-caret-position=
"
265
"
>
<caret
line=
"
103"
column=
"31"
lean-forward=
"false"
selection-start-line=
"103"
selection-start-column=
"31"
selection-end-line=
"103"
selection-end-column=
"8
0"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/dashboard/templates/dashboard/
base
.html"
>
<entry
file=
"file://$PROJECT_DIR$/circle/dashboard/templates/dashboard/
index-templates
.html"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
0
"
>
<caret
line=
"
0"
column=
"18"
lean-forward=
"false"
selection-start-line=
"0"
selection-start-column=
"18"
selection-end-line=
"0"
selection-end-column=
"18
"
/>
<state
relative-caret-position=
"
44
"
>
<caret
line=
"
11"
column=
"0"
lean-forward=
"false"
selection-start-line=
"11"
selection-start-column=
"0"
selection-end-line=
"11"
selection-end-column=
"0
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$
USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/django/views/generic/edit.py
"
>
<entry
file=
"file://$
PROJECT_DIR$/circle/dashboard/templates/dashboard/index-vm.html
"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
404
"
>
<caret
line=
"
286"
column=
"6"
lean-forward=
"false"
selection-start-line=
"286"
selection-start-column=
"6"
selection-end-line=
"286"
selection-end-column=
"6
"
/>
<state
relative-caret-position=
"
285
"
>
<caret
line=
"
79"
column=
"31"
lean-forward=
"true"
selection-start-line=
"79"
selection-start-column=
"31"
selection-end-line=
"79"
selection-end-column=
"31
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
circle/os_policies/neutron_policy.json
"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
dashboard/views/template.py
"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
176
"
>
<caret
line=
"
75"
column=
"19"
lean-forward=
"true"
selection-start-line=
"75"
selection-start-column=
"19"
selection-end-line=
"75"
selection-end-column=
"1
9"
/>
<state
relative-caret-position=
"
425
"
>
<caret
line=
"
270"
column=
"69"
lean-forward=
"false"
selection-start-line=
"270"
selection-start-column=
"69"
selection-end-line=
"270"
selection-end-column=
"6
9"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
circle/os_policies/nova_policy.json
"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
dashboard/templates/dashboard/template-list.html
"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
214
"
>
<caret
line=
"
51"
column=
"5"
lean-forward=
"true"
selection-start-line=
"51"
selection-start-column=
"5"
selection-end-line=
"51"
selection-end-column=
"29
"
/>
<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/
vm/__init__
.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
monitor/tasks/local_periodic_tasks
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
0
"
>
<state
relative-caret-position=
"
-1439
"
>
<caret
line=
"0"
column=
"0"
lean-forward=
"false"
selection-start-line=
"0"
selection-start-column=
"0"
selection-end-line=
"0"
selection-end-column=
"0"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/
circle/vm/operations.py
"
>
<entry
file=
"file://$PROJECT_DIR$/
COPYING
"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
306
"
>
<caret
line=
"18"
column=
"
0"
lean-forward=
"false"
selection-start-line=
"18"
selection-start-column=
"0"
selection-end-line=
"18"
selection-end-column=
"0
"
/>
<state
relative-caret-position=
"
202
"
>
<caret
line=
"18"
column=
"
17"
lean-forward=
"false"
selection-start-line=
"18"
selection-start-column=
"17"
selection-end-line=
"18"
selection-end-column=
"17
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$
USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/bpython/translations/__init__
.py"
>
<entry
file=
"file://$
PROJECT_DIR$/circle/vm/models/instance
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
52
"
>
<caret
line=
"
18"
column=
"0"
lean-forward=
"false"
selection-start-line=
"18"
selection-start-column=
"0"
selection-end-line=
"18"
selection-end-column=
"0
"
/>
<state
relative-caret-position=
"
108
"
>
<caret
line=
"
395"
column=
"10"
lean-forward=
"true"
selection-start-line=
"395"
selection-start-column=
"8"
selection-end-line=
"395"
selection-end-column=
"13
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
network/url
s.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
vm/tasks/local_periodic_task
s.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
346
"
>
<caret
line=
"
143"
column=
"60"
lean-forward=
"false"
selection-start-line=
"143"
selection-start-column=
"60"
selection-end-line=
"143"
selection-end-column=
"6
0"
/>
<state
relative-caret-position=
"
-408
"
>
<caret
line=
"
0"
column=
"0"
lean-forward=
"false"
selection-start-line=
"0"
selection-start-column=
"0"
selection-end-line=
"0"
selection-end-column=
"
0"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/
circle/request/models.py
"
>
<entry
file=
"file://$PROJECT_DIR$/
requirements/circlestack.txt
"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
44
"
>
<caret
line=
"
39"
column=
"0"
lean-forward=
"false"
selection-start-line=
"39"
selection-start-column=
"0"
selection-end-line=
"39"
selection-end-column=
"0
"
/>
<state
relative-caret-position=
"
255
"
>
<caret
line=
"
15"
column=
"13"
lean-forward=
"true"
selection-start-line=
"15"
selection-start-column=
"13"
selection-end-line=
"15"
selection-end-column=
"13
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
network/models
.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
manager/moncelery
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
237
"
>
<caret
line=
"
29"
column=
"32"
lean-forward=
"true"
selection-start-line=
"29"
selection-start-column=
"32"
selection-end-line=
"29"
selection-end-column=
"32
"
/>
<state
relative-caret-position=
"
380
"
>
<caret
line=
"
73"
column=
"0"
lean-forward=
"true"
selection-start-line=
"0"
selection-start-column=
"0"
selection-end-line=
"79"
selection-end-column=
"0
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
network/__init__
.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
manager/slowcelery
.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
relative-caret-position=
"
414
"
>
<caret
line=
"
44"
column=
"43"
lean-forward=
"false"
selection-start-line=
"0"
selection-start-column=
"0"
selection-end-line=
"57
"
selection-end-column=
"0"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
dashboard/forms
.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
manager/scheduler
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
194
"
>
<caret
line=
"
926"
column=
"6"
lean-forward=
"false"
selection-start-line=
"926"
selection-start-column=
"6"
selection-end-line=
"926"
selection-end-column=
"6
"
/>
<state
relative-caret-position=
"
0
"
>
<caret
line=
"
0"
column=
"0"
lean-forward=
"false"
selection-start-line=
"0"
selection-start-column=
"0"
selection-end-line=
"126"
selection-end-column=
"0
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
openstack_api/nova
.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
manager/mancelery
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
423
"
>
<caret
line=
"
160"
column=
"0"
lean-forward=
"true"
selection-start-line=
"160"
selection-start-column=
"0"
selection-end-line=
"160
"
selection-end-column=
"0"
/>
<state
relative-caret-position=
"
295
"
>
<caret
line=
"
50"
column=
"12"
lean-forward=
"true"
selection-start-line=
"0"
selection-start-column=
"0"
selection-end-line=
"67
"
selection-end-column=
"0"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
network/form
s.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
common/model
s.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"380"
>
<caret
line=
"387"
column=
"0"
lean-forward=
"false"
selection-start-line=
"387"
selection-start-column=
"0"
selection-end-line=
"387"
selection-end-column=
"0"
/>
<folding
/>
<state
relative-caret-position=
"214"
>
<caret
line=
"244"
column=
"14"
lean-forward=
"false"
selection-start-line=
"244"
selection-start-column=
"3"
selection-end-line=
"244"
selection-end-column=
"14"
/>
<folding>
<element
signature=
"e#732#761#0"
expanded=
"false"
/>
</folding>
</state>
</provider>
</entry>
<entry
file=
"file://$
USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/neutronclient/v2_0/client
.py"
>
<entry
file=
"file://$
PROJECT_DIR$/circle/vm/models/activity
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"66"
>
<caret
line=
"784"
column=
"39"
lean-forward=
"false"
selection-start-line=
"784"
selection-start-column=
"39"
selection-end-line=
"784"
selection-end-column=
"39"
/>
<folding
/>
<state
relative-caret-position=
"214"
>
<caret
line=
"145"
column=
"23"
lean-forward=
"false"
selection-start-line=
"145"
selection-start-column=
"23"
selection-end-line=
"145"
selection-end-column=
"23"
/>
<folding>
<element
signature=
"e#732#788#0"
expanded=
"false"
/>
</folding>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
openstack_api/neutron
.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
vm/tasks/agent_tasks
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
20
2"
>
<caret
line=
"
1384"
column=
"4"
lean-forward=
"false"
selection-start-line=
"1384"
selection-start-column=
"4"
selection-end-line=
"1384"
selection-end-column=
"4
"
/>
<state
relative-caret-position=
"
108
2"
>
<caret
line=
"
90"
column=
"13"
lean-forward=
"false"
selection-start-line=
"90"
selection-start-column=
"13"
selection-end-line=
"90"
selection-end-column=
"13
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
common/operation
s.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
storage/tasks/local_task
s.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
52
"
>
<caret
line=
"
89"
column=
"0"
lean-forward=
"false"
selection-start-line=
"89"
selection-start-column=
"0"
selection-end-line=
"89"
selection-end-column=
"0
"
/>
<state
relative-caret-position=
"
1055
"
>
<caret
line=
"
76"
column=
"13"
lean-forward=
"false"
selection-start-line=
"76"
selection-start-column=
"13"
selection-end-line=
"76"
selection-end-column=
"13
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
dashboard/templates/dashboard/vm-detail/network.html
"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
storage/tasks/storage_tasks.py
"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"1
08
8"
>
<caret
line=
"8
8"
column=
"29"
lean-forward=
"false"
selection-start-line=
"88"
selection-start-column=
"29"
selection-end-line=
"88"
selection-end-column=
"29
"
/>
<state
relative-caret-position=
"1
20
8"
>
<caret
line=
"8
5"
column=
"13"
lean-forward=
"false"
selection-start-line=
"85"
selection-start-column=
"13"
selection-end-line=
"85"
selection-end-column=
"13
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
dashboard/views/util
.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
vm/operations
.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
"
/>
<state
relative-caret-position=
"
69
"
>
<caret
line=
"
48"
column=
"0"
lean-forward=
"false"
selection-start-line=
"48"
selection-start-column=
"0"
selection-end-line=
"48"
selection-end-column=
"0
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$
USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/django/views/generic/list
.py"
>
<entry
file=
"file://$
PROJECT_DIR$/circle/dashboard/views/vm
.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"
/>
<state
relative-caret-position=
"
69
"
>
<caret
line=
"
50"
column=
"0"
lean-forward=
"false"
selection-start-line=
"50"
selection-start-column=
"0"
selection-end-line=
"50
"
selection-end-column=
"0"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
network/operation
s.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
firewall/tasks/local_task
s.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
448
"
>
<caret
line=
"
57"
column=
"15"
lean-forward=
"false"
selection-start-line=
"57"
selection-start-column=
"15"
selection-end-line=
"57"
selection-end-column=
"47
"
/>
<state
relative-caret-position=
"
571
"
>
<caret
line=
"
93"
column=
"13"
lean-forward=
"false"
selection-start-line=
"93"
selection-start-column=
"13"
selection-end-line=
"93"
selection-end-column=
"13
"
/>
<folding>
<element
signature=
"e#
0#20
#0"
expanded=
"false"
/>
<element
signature=
"e#
732#761
#0"
expanded=
"false"
/>
</folding>
</state>
</provider>
</entry>
<entry
file=
"file://$
USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/django_tables2/view
s.py"
>
<entry
file=
"file://$
PROJECT_DIR$/circle/firewall/tasks/remote_task
s.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
202
"
>
<caret
line=
"1
18"
column=
"6"
lean-forward=
"false"
selection-start-line=
"118"
selection-start-column=
"6"
selection-end-line=
"118"
selection-end-column=
"6
"
/>
<state
relative-caret-position=
"
69
"
>
<caret
line=
"1
8"
column=
"0"
lean-forward=
"true"
selection-start-line=
"18"
selection-start-column=
"0"
selection-end-line=
"18"
selection-end-column=
"0
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
network/table
s.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
vm/tasks/net_task
s.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
100
"
>
<caret
line=
"2
31"
column=
"20"
lean-forward=
"true"
selection-start-line=
"231"
selection-start-column=
"20"
selection-end-line=
"231"
selection-end-column=
"20
"
/>
<state
relative-caret-position=
"
425
"
>
<caret
line=
"2
5"
column=
"13"
lean-forward=
"false"
selection-start-line=
"25"
selection-start-column=
"13"
selection-end-line=
"25"
selection-end-column=
"13
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
network/view
s.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
vm/tasks/local_task
s.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
35
"
>
<caret
line=
"
972"
column=
"25"
lean-forward=
"false"
selection-start-line=
"972"
selection-start-column=
"25"
selection-end-line=
"972"
selection-end-column=
"25
"
/>
<state
relative-caret-position=
"
409
"
>
<caret
line=
"
39"
column=
"13"
lean-forward=
"false"
selection-start-line=
"39"
selection-start-column=
"13"
selection-end-line=
"39"
selection-end-column=
"13
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
network/templates/network/vxlan-edit.html
"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
vm/tasks/vm_tasks.py
"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"176"
>
<caret
line=
"39"
column=
"6"
lean-forward=
"true"
selection-start-line=
"39"
selection-start-column=
"6"
selection-end-line=
"39"
selection-end-column=
"6"
/>
<folding
/>
<state
relative-caret-position=
"2840"
>
<caret
line=
"184"
column=
"13"
lean-forward=
"false"
selection-start-line=
"184"
selection-start-column=
"13"
selection-end-line=
"184"
selection-end-column=
"13"
/>
<folding>
<element
signature=
"e#732#767#0"
expanded=
"false"
/>
</folding>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
dashboard/urls
.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
manager/leasemanager
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
119
"
>
<caret
line=
"
59"
column=
"18"
lean-forward=
"true"
selection-start-line=
"59"
selection-start-column=
"18"
selection-end-line=
"59"
selection-end-column=
"20
"
/>
<state
relative-caret-position=
"
68
"
>
<caret
line=
"
4"
column=
"22"
lean-forward=
"false"
selection-start-line=
"4"
selection-start-column=
"22"
selection-end-line=
"4"
selection-end-column=
"22
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
dashboard/views/vm
.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
circle/settings/local
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
44
"
>
<caret
line=
"
1158"
column=
"0"
lean-forward=
"false"
selection-start-line=
"1158"
selection-start-column=
"0"
selection-end-line=
"1158"
selection-end-column=
"0
"
/>
<state
relative-caret-position=
"
85
"
>
<caret
line=
"
5"
column=
"42"
lean-forward=
"false"
selection-start-line=
"5"
selection-start-column=
"42"
selection-end-line=
"5"
selection-end-column=
"42
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
dashboard/views/index
.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
vm/tasks
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
265
"
>
<caret
line=
"
103"
column=
"31"
lean-forward=
"false"
selection-start-line=
"103"
selection-start-column=
"31"
selection-end-line=
"103"
selection-end-column=
"80
"
/>
<state
relative-caret-position=
"
102
"
>
<caret
line=
"
6"
column=
"28"
lean-forward=
"true"
selection-start-line=
"0"
selection-start-column=
"0"
selection-end-line=
"6"
selection-end-column=
"28
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
dashboard/templates/dashboard/index-templates.html
"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
vm/tasks/__init__.py
"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
44
"
>
<caret
line=
"
11"
column=
"0"
lean-forward=
"false"
selection-start-line=
"11"
selection-start-column=
"0"
selection-end-line=
"11"
selection-end-column=
"0
"
/>
<state
relative-caret-position=
"
0
"
>
<caret
line=
"
0"
column=
"17"
lean-forward=
"false"
selection-start-line=
"0"
selection-start-column=
"17"
selection-end-line=
"0"
selection-end-column=
"17
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
dashboard/templates/dashboard/index-vm.html
"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
vm/__init__.py
"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
285
"
>
<caret
line=
"
79"
column=
"31"
lean-forward=
"true"
selection-start-line=
"79"
selection-start-column=
"31"
selection-end-line=
"79"
selection-end-column=
"31
"
/>
<state
relative-caret-position=
"
17
"
>
<caret
line=
"
1"
column=
"0"
lean-forward=
"true"
selection-start-line=
"1"
selection-start-column=
"0"
selection-end-line=
"1"
selection-end-column=
"0
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
dashboard/templates/dashboard/template-list.html
"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
vm/tasks/test.py
"
>
<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
"
/>
<state
relative-caret-position=
"
68
"
>
<caret
line=
"
4"
column=
"33"
lean-forward=
"true"
selection-start-line=
"4"
selection-start-column=
"33"
selection-end-line=
"4"
selection-end-column=
"33
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
dashboard/views/templat
e.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
circle/settings/bas
e.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
425
"
>
<caret
line=
"
270"
column=
"69"
lean-forward=
"false"
selection-start-line=
"270"
selection-start-column=
"69"
selection-end-line=
"270"
selection-end-column=
"69
"
/>
<state
relative-caret-position=
"
363
"
>
<caret
line=
"
408"
column=
"27"
lean-forward=
"false"
selection-start-line=
"408"
selection-start-column=
"27"
selection-end-line=
"408"
selection-end-column=
"27
"
/>
<folding
/>
</state>
</provider>
...
...
This diff is collapsed.
Click to expand it.
circle/celery
0 → 100644
View file @
feeea6da
File added
This diff is collapsed.
Click to expand it.
circle/circle/db.sqlite3
View file @
feeea6da
No preview for this file type
This diff is collapsed.
Click to expand it.
circle/circle/settings/base.py
View file @
feeea6da
...
...
@@ -368,6 +368,8 @@ DJANGO_APPS = (
# Admin panel and documentation:
'django.contrib.admin'
,
# 'django.contrib.admindocs',
'kombu.transport.django'
,
'djcelery'
,
)
THIRD_PARTY_APPS
=
(
...
...
@@ -399,6 +401,13 @@ LOCAL_APPS = (
INSTALLED_APPS
=
DJANGO_APPS
+
THIRD_PARTY_APPS
+
LOCAL_APPS
########## END APP CONFIGURATION
BROKER_URL
=
"django://"
# tell kombu to use the Django database as the message queue
import
djcelery
djcelery
.
setup_loader
()
CELERY_IMPORTS
=
(
'vm.tasks'
,)
AUTHENTICATION_BACKENDS
=
(
'openstack_auth.backend.KeystoneBackend'
,)
AUTHENTICATION_URLS
=
[
'openstack_auth.urls'
]
AUTH_USER_MODEL
=
'openstack_auth.User'
...
...
This diff is collapsed.
Click to expand it.
circle/common/models.py
View file @
feeea6da
...
...
@@ -38,7 +38,7 @@ from django.utils.functional import Promise
from
django.utils.translation
import
ugettext_lazy
as
_
,
ugettext_noop
from
jsonfield
import
JSONField
from
manager.mancelery
import
celery
#
from manager.mancelery import celery
from
model_utils.models
import
TimeStampedModel
from
openstack_auth.user
import
User
...
...
@@ -242,7 +242,7 @@ class ActivityModel(TimeStampedModel):
return
'failed'
@celery.task
()
#
@celery.task()
def
compute_cached
(
method
,
instance
,
memcached_seconds
,
key
,
start
,
*
args
,
**
kwargs
):
"""Compute and store actual value of cached method."""
...
...
This diff is collapsed.
Click to expand it.
circle/dashboard/views/vm.py
View file @
feeea6da
...
...
@@ -47,7 +47,7 @@ from common.models import (
split_activity_code
,
)
from
firewall.models
import
Vlan
,
Host
,
Rule
from
manager.scheduler
import
SchedulerError
#
from manager.scheduler import SchedulerError
from
network.models
import
DefaultPublicRouter
,
DefaultPublicRoutedNet
from
openstack_api.nova
import
Server
from
request.forms
import
TemplateRequestForm
...
...
This diff is collapsed.
Click to expand it.
circle/firewall/tasks/local_tasks.py
View file @
feeea6da
...
...
@@ -22,7 +22,7 @@ import django.conf
from
django.core.cache
import
cache
from
celery.exceptions
import
TimeoutError
from
manager.mancelery
import
celery
#
from manager.mancelery import celery
from
common.models
import
WorkerNotFound
settings
=
django
.
conf
.
settings
.
FIREWALL_SETTINGS
...
...
@@ -60,7 +60,7 @@ def get_firewall_queues():
return
list
(
retval
)
@celery.task
#
@celery.task
def
reloadtask_worker
():
from
firewall.fw
import
BuildFirewall
,
dhcp
,
dns
,
ipset
,
vlan
from
remote_tasks
import
(
reload_dns
,
reload_dhcp
,
reload_firewall
,
...
...
@@ -91,7 +91,7 @@ def reloadtask_worker():
lambda
:
(
list
(
ipset
()),
))
@celery.task
#
@celery.task
def
reloadtask
(
type
=
'Host'
,
timeout
=
15
,
sync
=
False
):
reload
=
{
'Host'
:
[
'dns'
,
'dhcp'
,
'firewall'
],
...
...
This diff is collapsed.
Click to expand it.
circle/firewall/tasks/remote_tasks.py
View file @
feeea6da
...
...
@@ -15,7 +15,7 @@
# You should have received a copy of the GNU General Public License along
# with CIRCLE. If not, see <http://www.gnu.org/licenses/>.
from
manager.mancelery
import
celery
#
from manager.mancelery import celery
def
check_queue
(
firewall
,
queue_id
,
priority
):
...
...
@@ -36,32 +36,32 @@ def check_queue(firewall, queue_id, priority):
return
queue_name
in
queue_names
@celery.task
(
name
=
'firewall.reload_dns'
)
#
@celery.task(name='firewall.reload_dns')
def
reload_dns
(
data
):
pass
@celery.task
(
name
=
'firewall.reload_firewall'
)
#
@celery.task(name='firewall.reload_firewall')
def
reload_firewall
(
data4
,
data6
):
pass
@celery.task
(
name
=
'firewall.reload_firewall_vlan'
)
#
@celery.task(name='firewall.reload_firewall_vlan')
def
reload_firewall_vlan
(
data
):
pass
@celery.task
(
name
=
'firewall.reload_dhcp'
)
#
@celery.task(name='firewall.reload_dhcp')
def
reload_dhcp
(
data
):
pass
@celery.task
(
name
=
'firewall.reload_blacklist'
)
#
@celery.task(name='firewall.reload_blacklist')
def
reload_blacklist
(
data
):
pass
@celery.task
(
name
=
'firewall.get_dhcp_clients'
)
#
@celery.task(name='firewall.get_dhcp_clients')
def
get_dhcp_clients
():
# {'00:21:5a:73:72:cd': {'interface': 'OFF', 'ip': None, 'hostname': None}}
pass
This diff is collapsed.
Click to expand it.
circle/manager/mancelery.py
View file @
feeea6da
# Copyright 2014 Budapest University of Technology and Economics (BME IK)
# # Copyright 2014 Budapest University of Technology and Economics (BME IK)
# #
# # This file is part of CIRCLE Cloud.
# #
# # CIRCLE is free software: you can redistribute it and/or modify it under
# # the terms of the GNU General Public License as published by the Free
# # Software Foundation, either version 3 of the License, or (at your option)
# # any later version.
# #
# # CIRCLE is distributed in the hope that it will be useful, but WITHOUT ANY
# # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# # details.
# #
# # You should have received a copy of the GNU General Public License along
# # with CIRCLE. If not, see <http://www.gnu.org/licenses/>.
#
# This file is part of CIRCLE Cloud.
# from celery import Celery
# from celery.signals import worker_ready
# from datetime import timedelta
# from kombu import Queue, Exchange
# from os import getenv
#
# CIRCLE is free software: you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free
# Software Foundation, either version 3 of the License, or (at your option)
# any later version.
# HOSTNAME = "localhost"
# QUEUE_NAME = HOSTNAME + '.man'
#
# CIRCLE is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along
# with CIRCLE. If not, see <http://www.gnu.org/licenses/>.
from
celery
import
Celery
from
celery.signals
import
worker_ready
from
datetime
import
timedelta
from
kombu
import
Queue
,
Exchange
from
os
import
getenv
HOSTNAME
=
"localhost"
QUEUE_NAME
=
HOSTNAME
+
'.man'
celery
=
Celery
(
'manager'
,
broker
=
getenv
(
"AMQP_URI"
),
include
=
[
'vm.tasks.local_tasks'
,
'vm.tasks.local_periodic_tasks'
,
'vm.tasks.local_agent_tasks'
,
'storage.tasks.local_tasks'
,
'storage.tasks.periodic_tasks'
,
'firewall.tasks.local_tasks'
,
'dashboard.tasks.local_periodic_tasks'
,
])
celery
.
conf
.
update
(
CELERY_RESULT_BACKEND
=
'amqp'
,
CELERY_TASK_RESULT_EXPIRES
=
300
,
CELERY_QUEUES
=
(
Queue
(
HOSTNAME
+
'.man'
,
Exchange
(
'manager'
,
type
=
'direct'
),
routing_key
=
"manager"
),
),
CELERYBEAT_SCHEDULE
=
{
'storage.periodic_tasks'
:
{
'task'
:
'storage.tasks.periodic_tasks.garbage_collector'
,
'schedule'
:
timedelta
(
hours
=
1
),
'options'
:
{
'queue'
:
'localhost.man'
}
},
'dashboard.send_email_notifications'
:
{
'task'
:
'dashboard.tasks.local_periodic_tasks.'
'send_email_notifications'
,
'schedule'
:
timedelta
(
hours
=
24
),
'options'
:
{
'queue'
:
'localhost.man'
}
},
}
)
@worker_ready.connect
()
def
cleanup_tasks
(
conf
=
None
,
**
kwargs
):
'''Discard all task and clean up activity.'''
from
vm.models.activity
import
cleanup
cleanup
(
queue_name
=
QUEUE_NAME
)
# celery = Celery('manager',
# broker=getenv("AMQP_URI"),
# include=['vm.tasks.local_tasks',
# 'vm.tasks.local_periodic_tasks',
# 'vm.tasks.local_agent_tasks',
# 'storage.tasks.local_tasks',
# 'storage.tasks.periodic_tasks',
# 'firewall.tasks.local_tasks',
# 'dashboard.tasks.local_periodic_tasks',
# ])
#
# celery.conf.update(
# CELERY_RESULT_BACKEND='amqp',
# CELERY_TASK_RESULT_EXPIRES=300,
# CELERY_QUEUES=(
# Queue(HOSTNAME + '.man', Exchange('manager', type='direct'),
# routing_key="manager"),
# ),
# CELERYBEAT_SCHEDULE={
# 'storage.periodic_tasks': {
# 'task': 'storage.tasks.periodic_tasks.garbage_collector',
# 'schedule': timedelta(hours=1),
# 'options': {'queue': 'localhost.man'}
# },
# 'dashboard.send_email_notifications': {
# 'task': 'dashboard.tasks.local_periodic_tasks.'
# 'send_email_notifications',
# 'schedule': timedelta(hours=24),
# 'options': {'queue': 'localhost.man'}
# },
# }
#
# )
#
#
# @worker_ready.connect()
# def cleanup_tasks(conf=None, **kwargs):
# '''Discard all task and clean up activity.'''
# from vm.models.activity import cleanup
# cleanup(queue_name=QUEUE_NAME)
This diff is collapsed.
Click to expand it.
circle/manager/moncelery.py
View file @
feeea6da
# Copyright 2014 Budapest University of Technology and Economics (BME IK)
# # Copyright 2014 Budapest University of Technology and Economics (BME IK)
# #
# # This file is part of CIRCLE Cloud.
# #
# # CIRCLE is free software: you can redistribute it and/or modify it under
# # the terms of the GNU General Public License as published by the Free
# # Software Foundation, either version 3 of the License, or (at your option)
# # any later version.
# #
# # CIRCLE is distributed in the hope that it will be useful, but WITHOUT ANY
# # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# # details.
# #
# # You should have received a copy of the GNU General Public License along
# # with CIRCLE. If not, see <http://www.gnu.org/licenses/>.
#
# This file is part of CIRCLE Cloud.
# from celery import Celery
# from celery.signals import worker_ready
# from datetime import timedelta
# from kombu import Queue, Exchange
# from os import getenv
#
# CIRCLE is free software: you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free
# Software Foundation, either version 3 of the License, or (at your option)
# any later version.
# HOSTNAME = "localhost"
# QUEUE_NAME = HOSTNAME + '.monitor'
#
# CIRCLE is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
# celery = Celery('monitor',
# broker=getenv("AMQP_URI"),
# include=['vm.tasks.local_periodic_tasks',
# 'monitor.tasks.local_periodic_tasks',
# ])
#
# You should have received a copy of the GNU General Public License along
# with CIRCLE. If not, see <http://www.gnu.org/licenses/>.
from
celery
import
Celery
from
celery.signals
import
worker_ready
from
datetime
import
timedelta
from
kombu
import
Queue
,
Exchange
from
os
import
getenv
HOSTNAME
=
"localhost"
QUEUE_NAME
=
HOSTNAME
+
'.monitor'
celery
=
Celery
(
'monitor'
,
broker
=
getenv
(
"AMQP_URI"
),
include
=
[
'vm.tasks.local_periodic_tasks'
,
'monitor.tasks.local_periodic_tasks'
,
])
celery
.
conf
.
update
(
CELERY_RESULT_BACKEND
=
'amqp'
,
CELERY_TASK_RESULT_EXPIRES
=
300
,
CELERY_QUEUES
=
(
Queue
(
QUEUE_NAME
,
Exchange
(
'monitor'
,
type
=
'direct'
),
routing_key
=
"monitor"
),
),
CELERYBEAT_SCHEDULE
=
{
'vm.update_domain_states'
:
{
'task'
:
'vm.tasks.local_periodic_tasks.update_domain_states'
,
'schedule'
:
timedelta
(
seconds
=
10
),
'options'
:
{
'queue'
:
'localhost.monitor'
}
},
'monitor.measure_response_time'
:
{
'task'
:
'monitor.tasks.local_periodic_tasks.'
'measure_response_time'
,
'schedule'
:
timedelta
(
seconds
=
30
),
'options'
:
{
'queue'
:
'localhost.monitor'
}
},
'monitor.check_celery_queues'
:
{
'task'
:
'monitor.tasks.local_periodic_tasks.'
'check_celery_queues'
,
'schedule'
:
timedelta
(
seconds
=
60
),
'options'
:
{
'queue'
:
'localhost.monitor'
}
},
'monitor.instance_per_template'
:
{
'task'
:
'monitor.tasks.local_periodic_tasks.'
'instance_per_template'
,
'schedule'
:
timedelta
(
seconds
=
30
),
'options'
:
{
'queue'
:
'localhost.monitor'
}
},
'monitor.allocated_memory'
:
{
'task'
:
'monitor.tasks.local_periodic_tasks.'
'allocated_memory'
,
'schedule'
:
timedelta
(
seconds
=
30
),
'options'
:
{
'queue'
:
'localhost.monitor'
}
},
}
)
@worker_ready.connect
()
def
cleanup_tasks
(
conf
=
None
,
**
kwargs
):
'''Discard all task and clean up activity.'''
from
vm.models.activity
import
cleanup
cleanup
(
queue_name
=
QUEUE_NAME
)
# celery.conf.update(
# CELERY_RESULT_BACKEND='amqp',
# CELERY_TASK_RESULT_EXPIRES=300,
# CELERY_QUEUES=(
# Queue(QUEUE_NAME, Exchange('monitor', type='direct'),
# routing_key="monitor"),
# ),
# CELERYBEAT_SCHEDULE={
# 'vm.update_domain_states': {
# 'task': 'vm.tasks.local_periodic_tasks.update_domain_states',
# 'schedule': timedelta(seconds=10),
# 'options': {'queue': 'localhost.monitor'}
# },
# 'monitor.measure_response_time': {
# 'task': 'monitor.tasks.local_periodic_tasks.'
# 'measure_response_time',
# 'schedule': timedelta(seconds=30),
# 'options': {'queue': 'localhost.monitor'}
# },
# 'monitor.check_celery_queues': {
# 'task': 'monitor.tasks.local_periodic_tasks.'
# 'check_celery_queues',
# 'schedule': timedelta(seconds=60),
# 'options': {'queue': 'localhost.monitor'}
# },
# 'monitor.instance_per_template': {
# 'task': 'monitor.tasks.local_periodic_tasks.'
# 'instance_per_template',
# 'schedule': timedelta(seconds=30),
# 'options': {'queue': 'localhost.monitor'}
# },
# 'monitor.allocated_memory': {
# 'task': 'monitor.tasks.local_periodic_tasks.'
# 'allocated_memory',
# 'schedule': timedelta(seconds=30),
# 'options': {'queue': 'localhost.monitor'}
# },
# }
#
# )
#
#
# @worker_ready.connect()
# def cleanup_tasks(conf=None, **kwargs):
# '''Discard all task and clean up activity.'''
# from vm.models.activity import cleanup
# cleanup(queue_name=QUEUE_NAME)
This diff is collapsed.
Click to expand it.
circle/manager/scheduler.py
View file @
feeea6da
# Copyright 2014 Budapest University of Technology and Economics (BME IK)
#
# This file is part of CIRCLE Cloud.
#
# CIRCLE is free software: you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free
# Software Foundation, either version 3 of the License, or (at your option)
# any later version.
#
# CIRCLE is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along
# with CIRCLE. If not, see <http://www.gnu.org/licenses/>.
from
logging
import
getLogger
from
django.utils.translation
import
ugettext_noop
from
common.models
import
HumanReadableException
logger
=
getLogger
(
__name__
)
class
SchedulerError
(
HumanReadableException
):
admin_message
=
None
def
__init__
(
self
,
params
=
None
,
level
=
None
,
**
kwargs
):
kwargs
.
update
(
params
or
{})
super
(
SchedulerError
,
self
)
.
__init__
(
level
,
self
.
message
,
self
.
admin_message
or
self
.
message
,
kwargs
)
class
NotEnoughMemoryException
(
SchedulerError
):
message
=
ugettext_noop
(
"The resources required for launching the virtual machine are not "
"available currently. Please try again later."
)
admin_message
=
ugettext_noop
(
"The required free memory for launching the virtual machine is not "
"available on any usable node currently. Please try again later."
)
class
TraitsUnsatisfiableException
(
SchedulerError
):
message
=
ugettext_noop
(
"No node can satisfy the required traits of the "
"new virtual machine currently."
)
def
select_node
(
instance
,
nodes
):
''' Select a node for hosting an instance based on its requirements.
'''
# check required traits
nodes
=
[
n
for
n
in
nodes
if
n
.
schedule_enabled
and
n
.
online
and
has_traits
(
instance
.
req_traits
.
all
(),
n
)]
if
not
nodes
:
logger
.
warning
(
'select_node: no usable node for
%
s'
,
unicode
(
instance
))
raise
TraitsUnsatisfiableException
()
# check required RAM
nodes
=
[
n
for
n
in
nodes
if
has_enough_ram
(
instance
.
ram_size
,
n
)]
if
not
nodes
:
logger
.
warning
(
'select_node: no enough RAM for
%
s'
,
unicode
(
instance
))
raise
NotEnoughMemoryException
()
# sort nodes first by processor usage, then priority
nodes
.
sort
(
key
=
lambda
n
:
n
.
priority
,
reverse
=
True
)
nodes
.
sort
(
key
=
free_cpu_time
,
reverse
=
True
)
result
=
nodes
[
0
]
logger
.
info
(
'select_node:
%
s for
%
s'
,
unicode
(
result
),
unicode
(
instance
))
return
result
def
has_traits
(
traits
,
node
):
"""True, if the node has all specified traits; otherwise, false.
"""
traits
=
set
(
traits
)
return
traits
.
issubset
(
node
.
traits
.
all
())
def
has_enough_ram
(
ram_size
,
node
):
"""True, if the node has enough memory to accomodate a guest requiring
ram_size mebibytes of memory; otherwise, false.
"""
ram_size
=
ram_size
*
1024
*
1024
try
:
total
=
node
.
ram_size
used
=
node
.
byte_ram_usage
unused
=
total
-
used
overcommit
=
node
.
ram_size_with_overcommit
reserved
=
node
.
allocated_ram
free
=
overcommit
-
reserved
retval
=
ram_size
<
unused
and
ram_size
<
free
logger
.
debug
(
'has_enough_ram(
%
d,
%
s)=
%
s (total=
%
s unused=
%
s'
' overcommit=
%
s free=
%
s free_ok=
%
s overcommit_ok=
%
s)'
,
ram_size
,
node
,
retval
,
total
,
unused
,
overcommit
,
free
,
ram_size
<
unused
,
ram_size
<
free
)
return
retval
except
TypeError
as
e
:
logger
.
exception
(
'Got incorrect monitoring data for node
%
s.
%
s'
,
unicode
(
node
),
unicode
(
e
))
return
False
def
free_cpu_time
(
node
):
"""Get an indicator number for idle processor time on the node.
Higher values indicate more idle time.
"""
try
:
activity
=
node
.
cpu_usage
/
100
inactivity
=
1
-
activity
cores
=
node
.
num_cores
return
cores
*
inactivity
except
TypeError
as
e
:
logger
.
warning
(
'Got incorrect monitoring data for node
%
s.
%
s'
,
unicode
(
node
),
unicode
(
e
))
return
False
# monitoring data is incorrect
#
#
Copyright 2014 Budapest University of Technology and Economics (BME IK)
#
#
#
#
This file is part of CIRCLE Cloud.
#
#
#
#
CIRCLE is free software: you can redistribute it and/or modify it under
#
#
the terms of the GNU General Public License as published by the Free
#
#
Software Foundation, either version 3 of the License, or (at your option)
#
#
any later version.
#
#
#
#
CIRCLE is distributed in the hope that it will be useful, but WITHOUT ANY
#
#
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
#
#
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
#
#
details.
#
#
#
#
You should have received a copy of the GNU General Public License along
#
#
with CIRCLE. If not, see <http://www.gnu.org/licenses/>.
#
#
from logging import getLogger
#
#
from django.utils.translation import ugettext_noop
#
#
from common.models import HumanReadableException
#
#
logger = getLogger(__name__)
#
#
#
class SchedulerError(HumanReadableException):
#
admin_message = None
#
#
def __init__(self, params=None, level=None, **kwargs):
#
kwargs.update(params or {})
#
super(SchedulerError, self).__init__(
#
level, self.message, self.admin_message or self.message,
#
kwargs)
#
#
#
class NotEnoughMemoryException(SchedulerError):
#
message = ugettext_noop(
#
"The resources required for launching the virtual machine are not "
#
"available currently. Please try again later.")
#
#
admin_message = ugettext_noop(
#
"The required free memory for launching the virtual machine is not "
#
"available on any usable node currently. Please try again later.")
#
#
#
class TraitsUnsatisfiableException(SchedulerError):
#
message = ugettext_noop(
#
"No node can satisfy the required traits of the "
#
"new virtual machine currently.")
#
#
#
def select_node(instance, nodes):
#
''' Select a node for hosting an instance based on its requirements.
#
'''
#
# check required traits
#
nodes = [n for n in nodes
#
if n.schedule_enabled and n.online and
#
has_traits(instance.req_traits.all(), n)]
#
if not nodes:
#
logger.warning('select_node: no usable node for %s', unicode(instance))
#
raise TraitsUnsatisfiableException()
#
#
# check required RAM
#
nodes = [n for n in nodes if has_enough_ram(instance.ram_size, n)]
#
if not nodes:
#
logger.warning('select_node: no enough RAM for %s', unicode(instance))
#
raise NotEnoughMemoryException()
#
#
# sort nodes first by processor usage, then priority
#
nodes.sort(key=lambda n: n.priority, reverse=True)
#
nodes.sort(key=free_cpu_time, reverse=True)
#
result = nodes[0]
#
#
logger.info('select_node: %s for %s', unicode(result), unicode(instance))
#
return result
#
#
#
def has_traits(traits, node):
#
"""True, if the node has all specified traits; otherwise, false.
#
"""
#
traits = set(traits)
#
return traits.issubset(node.traits.all())
#
#
#
def has_enough_ram(ram_size, node):
#
"""True, if the node has enough memory to accomodate a guest requiring
#
ram_size mebibytes of memory; otherwise, false.
#
"""
#
ram_size = ram_size * 1024 * 1024
#
try:
#
total = node.ram_size
#
used = node.byte_ram_usage
#
unused = total - used
#
#
overcommit = node.ram_size_with_overcommit
#
reserved = node.allocated_ram
#
free = overcommit - reserved
#
#
retval = ram_size < unused and ram_size < free
#
#
logger.debug('has_enough_ram(%d, %s)=%s (total=%s unused=%s'
#
' overcommit=%s free=%s free_ok=%s overcommit_ok=%s)',
#
ram_size, node, retval, total, unused, overcommit, free,
#
ram_size < unused, ram_size < free)
#
return retval
#
except TypeError as e:
#
logger.exception('Got incorrect monitoring data for node %s. %s',
#
unicode(node), unicode(e))
#
return False
#
#
#
def free_cpu_time(node):
#
"""Get an indicator number for idle processor time on the node.
#
#
Higher values indicate more idle time.
#
"""
#
try:
#
activity = node.cpu_usage / 100
#
inactivity = 1 - activity
#
cores = node.num_cores
#
return cores * inactivity
#
except TypeError as e:
#
logger.warning('Got incorrect monitoring data for node %s. %s',
#
unicode(node), unicode(e))
#
return False # monitoring data is incorrect
This diff is collapsed.
Click to expand it.
circle/manager/slowcelery.py
View file @
feeea6da
# Copyright 2014 Budapest University of Technology and Economics (BME IK)
# # Copyright 2014 Budapest University of Technology and Economics (BME IK)
# #
# # This file is part of CIRCLE Cloud.
# #
# # CIRCLE is free software: you can redistribute it and/or modify it under
# # the terms of the GNU General Public License as published by the Free
# # Software Foundation, either version 3 of the License, or (at your option)
# # any later version.
# #
# # CIRCLE is distributed in the hope that it will be useful, but WITHOUT ANY
# # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# # details.
# #
# # You should have received a copy of the GNU General Public License along
# # with CIRCLE. If not, see <http://www.gnu.org/licenses/>.
#
# This file is part of CIRCLE Cloud.
# from celery import Celery
# from celery.signals import worker_ready
# from datetime import timedelta
# from kombu import Queue, Exchange
# from os import getenv
#
# CIRCLE is free software: you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free
# Software Foundation, either version 3 of the License, or (at your option)
# any later version.
# HOSTNAME = "localhost"
# QUEUE_NAME = HOSTNAME + '.man.slow'
#
# CIRCLE is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
# celery = Celery('manager.slow',
# broker=getenv("AMQP_URI"),
# include=['vm.tasks.local_tasks',
# 'vm.tasks.local_periodic_tasks',
# 'storage.tasks.local_tasks',
# 'storage.tasks.periodic_tasks',
# ])
#
# You should have received a copy of the GNU General Public License along
# with CIRCLE. If not, see <http://www.gnu.org/licenses/>.
from
celery
import
Celery
from
celery.signals
import
worker_ready
from
datetime
import
timedelta
from
kombu
import
Queue
,
Exchange
from
os
import
getenv
HOSTNAME
=
"localhost"
QUEUE_NAME
=
HOSTNAME
+
'.man.slow'
celery
=
Celery
(
'manager.slow'
,
broker
=
getenv
(
"AMQP_URI"
),
include
=
[
'vm.tasks.local_tasks'
,
'vm.tasks.local_periodic_tasks'
,
'storage.tasks.local_tasks'
,
'storage.tasks.periodic_tasks'
,
])
celery
.
conf
.
update
(
CELERY_RESULT_BACKEND
=
'amqp'
,
CELERY_TASK_RESULT_EXPIRES
=
300
,
CELERY_QUEUES
=
(
Queue
(
QUEUE_NAME
,
Exchange
(
'manager.slow'
,
type
=
'direct'
),
routing_key
=
"manager.slow"
),
),
CELERYBEAT_SCHEDULE
=
{
'vm.garbage_collector'
:
{
'task'
:
'vm.tasks.local_periodic_tasks.garbage_collector'
,
'schedule'
:
timedelta
(
minutes
=
10
),
'options'
:
{
'queue'
:
'localhost.man.slow'
}
},
}
)
@worker_ready.connect
()
def
cleanup_tasks
(
conf
=
None
,
**
kwargs
):
'''Discard all task and clean up activity.'''
from
vm.models.activity
import
cleanup
cleanup
(
queue_name
=
QUEUE_NAME
)
# celery.conf.update(
# CELERY_RESULT_BACKEND='amqp',
# CELERY_TASK_RESULT_EXPIRES=300,
# CELERY_QUEUES=(
# Queue(QUEUE_NAME, Exchange('manager.slow', type='direct'),
# routing_key="manager.slow"),
# ),
# CELERYBEAT_SCHEDULE={
# 'vm.garbage_collector': {
# 'task': 'vm.tasks.local_periodic_tasks.garbage_collector',
# 'schedule': timedelta(minutes=10),
# 'options': {'queue': 'localhost.man.slow'}
# },
# }
#
# )
#
#
# @worker_ready.connect()
# def cleanup_tasks(conf=None, **kwargs):
# '''Discard all task and clean up activity.'''
# from vm.models.activity import cleanup
# cleanup(queue_name=QUEUE_NAME)
This diff is collapsed.
Click to expand it.
circle/storage/tasks/local_tasks.py
View file @
feeea6da
...
...
@@ -15,11 +15,11 @@
# You should have received a copy of the GNU General Public License along
# with CIRCLE. If not, see <http://www.gnu.org/licenses/>.
from
manager.mancelery
import
celery
#
from manager.mancelery import celery
from
celery.contrib.abortable
import
AbortableTask
@celery.task
#
@celery.task
def
check_queue
(
storage
,
queue_id
,
priority
):
''' Celery inspect job to check for active workers at queue_id
return True/False
...
...
@@ -38,34 +38,34 @@ def check_queue(storage, queue_id, priority):
return
queue_name
in
queue_names
@celery.task
#
@celery.task
def
save_as
(
disk
,
timeout
,
user
):
disk
.
save_disk_as
(
task_uuid
=
save_as
.
request
.
id
,
user
=
user
,
disk
=
disk
,
timeout
=
timeout
)
@celery.task
#
@celery.task
def
clone
(
disk
,
new_disk
,
timeout
,
user
):
disk
.
clone
(
task_uuid
=
save_as
.
request
.
id
,
user
=
user
,
disk
=
new_disk
,
timeout
=
timeout
)
@celery.task
#
@celery.task
def
deploy
(
disk
,
user
):
disk
.
deploy
(
task_uuid
=
deploy
.
request
.
id
,
user
=
user
)
@celery.task
#
@celery.task
def
destroy
(
disk
,
user
):
disk
.
destroy
(
task_uuid
=
destroy
.
request
.
id
,
user
=
user
)
@celery.task
#
@celery.task
def
restore
(
disk
,
user
):
disk
.
restore
(
task_uuid
=
restore
.
request
.
id
,
user
=
user
)
@celery.task
(
base
=
AbortableTask
,
bind
=
True
)
#
@celery.task(base=AbortableTask, bind=True)
def
create_from_url
(
self
,
**
kwargs
):
Disk
=
kwargs
.
pop
(
'cls'
)
Disk
.
create_from_url
(
url
=
kwargs
.
pop
(
'url'
),
...
...
@@ -74,7 +74,7 @@ def create_from_url(self, **kwargs):
**
kwargs
)
@celery.task
#
@celery.task
def
create_empty
(
Disk
,
instance
,
user
,
params
):
Disk
.
create_empty
(
instance
,
user
,
task_uuid
=
create_empty
.
request
.
id
,
...
...
This diff is collapsed.
Click to expand it.
circle/storage/tasks/storage_tasks.py
View file @
feeea6da
...
...
@@ -15,74 +15,74 @@
# You should have received a copy of the GNU General Public License along
# with CIRCLE. If not, see <http://www.gnu.org/licenses/>.
from
manager.mancelery
import
celery
#
from manager.mancelery import celery
@celery.task
(
name
=
'storagedriver.list'
)
#
@celery.task(name='storagedriver.list')
def
list
(
dir
):
pass
@celery.task
(
name
=
'storagedriver.list_files'
)
#
@celery.task(name='storagedriver.list_files')
def
list_files
(
dir
):
pass
@celery.task
(
name
=
'storagedriver.create'
)
#
@celery.task(name='storagedriver.create')
def
create
(
disk_desc
):
pass
@celery.task
(
name
=
'storagedriver.download'
)
#
@celery.task(name='storagedriver.download')
def
download
(
disk_desc
,
url
):
pass
@celery.task
(
name
=
'storagedriver.delete'
)
#
@celery.task(name='storagedriver.delete')
def
delete
(
path
):
pass
@celery.task
(
name
=
'storagedriver.delete_dump'
)
#
@celery.task(name='storagedriver.delete_dump')
def
delete_dump
(
path
):
pass
@celery.task
(
name
=
'storagedriver.snapshot'
)
#
@celery.task(name='storagedriver.snapshot')
def
snapshot
(
disk_desc
):
pass
@celery.task
(
name
=
'storagedriver.get'
)
#
@celery.task(name='storagedriver.get')
def
get
(
path
):
pass
@celery.task
(
name
=
'storagedriver.merge'
)
#
@celery.task(name='storagedriver.merge')
def
merge
(
src_disk_desc
,
dst_disk_desc
):
pass
@celery.task
(
name
=
'storagedriver.make_free_space'
)
#
@celery.task(name='storagedriver.make_free_space')
def
make_free_space
(
datastore
,
percent
):
pass
@celery.task
(
name
=
'storagedriver.move_to_trash'
)
#
@celery.task(name='storagedriver.move_to_trash')
def
move_to_trash
(
datastore
,
disk_path
):
pass
@celery.task
(
name
=
'storagedriver.recover_from_trash'
)
#
@celery.task(name='storagedriver.recover_from_trash')
def
recover_from_trash
(
datastore
,
disk_path
):
pass
@celery.task
(
name
=
'storagedriver.get_storage_stat'
)
#
@celery.task(name='storagedriver.get_storage_stat')
def
get_storage_stat
(
path
):
pass
@celery.task
(
name
=
'storagedriver.get_file_statistics'
)
#
@celery.task(name='storagedriver.get_file_statistics')
def
get_file_statistics
(
datastore
):
pass
This diff is collapsed.
Click to expand it.
circle/vm/models/activity.py
View file @
feeea6da
...
...
@@ -32,7 +32,7 @@ from common.models import (
HumanReadableObject
,
HumanReadableException
,
)
from
manager.mancelery
import
celery
#
from manager.mancelery import celery
logger
=
getLogger
(
__name__
)
...
...
This diff is collapsed.
Click to expand it.
circle/vm/operations.py
View file @
feeea6da
...
...
@@ -45,7 +45,7 @@ from common.models import (
create_readable
,
humanize_exception
,
HumanReadableException
)
from
common.operations
import
Operation
,
register_operation
from
manager.scheduler
import
SchedulerError
#
from manager.scheduler import SchedulerError
from
.tasks.local_tasks
import
(
abortable_async_instance_operation
,
abortable_async_node_operation
,
)
...
...
This diff is collapsed.
Click to expand it.
circle/vm/tasks/__init__.py
View file @
feeea6da
from
test
import
*
\ No newline at end of file
This diff is collapsed.
Click to expand it.
circle/vm/tasks/agent_tasks.py
View file @
feeea6da
...
...
@@ -15,79 +15,79 @@
# You should have received a copy of the GNU General Public License along
# with CIRCLE. If not, see <http://www.gnu.org/licenses/>.
from
manager.mancelery
import
celery
#
from manager.mancelery import celery
@celery.task
(
name
=
'agent.change_password'
)
#
@celery.task(name='agent.change_password')
def
change_password
(
vm
,
password
):
pass
@celery.task
(
name
=
'agent.restart_networking'
)
#
@celery.task(name='agent.restart_networking')
def
restart_networking
(
vm
):
pass
@celery.task
(
name
=
'agent.set_time'
)
#
@celery.task(name='agent.set_time')
def
set_time
(
vm
,
time
):
pass
@celery.task
(
name
=
'agent.set_hostname'
)
#
@celery.task(name='agent.set_hostname')
def
set_hostname
(
vm
,
time
):
pass
@celery.task
(
name
=
'agent.mount_store'
)
#
@celery.task(name='agent.mount_store')
def
mount_store
(
vm
,
host
,
username
,
password
):
pass
@celery.task
(
name
=
'agent.cleanup'
)
#
@celery.task(name='agent.cleanup')
def
cleanup
(
vm
):
pass
@celery.task
(
name
=
'agent.start_access_server'
)
#
@celery.task(name='agent.start_access_server')
def
start_access_server
(
vm
):
pass
@celery.task
(
name
=
'agent.update_legacy'
)
#
@celery.task(name='agent.update_legacy')
def
update_legacy
(
vm
,
data
,
executable
=
None
):
pass
@celery.task
(
name
=
'agent.append'
)
#
@celery.task(name='agent.append')
def
append
(
vm
,
data
,
filename
,
chunk_number
):
pass
@celery.task
(
name
=
'agent.update'
)
#
@celery.task(name='agent.update')
def
update
(
vm
,
filename
,
executable
,
checksum
):
pass
@celery.task
(
name
=
'agent.add_keys'
)
#
@celery.task(name='agent.add_keys')
def
add_keys
(
vm
,
keys
):
pass
@celery.task
(
name
=
'agent.del_keys'
)
#
@celery.task(name='agent.del_keys')
def
del_keys
(
vm
,
keys
):
pass
@celery.task
(
name
=
'agent.get_keys'
)
#
@celery.task(name='agent.get_keys')
def
get_keys
(
vm
):
pass
@celery.task
(
name
=
'agent.send_expiration'
)
#
@celery.task(name='agent.send_expiration')
def
send_expiration
(
vm
,
url
):
pass
@celery.task
(
name
=
'agent.change_ip'
)
#
@celery.task(name='agent.change_ip')
def
change_ip
(
vm
,
interfaces
,
dns
):
pass
This diff is collapsed.
Click to expand it.
circle/vm/tasks/local_tasks.py
View file @
feeea6da
...
...
@@ -16,10 +16,10 @@
# with CIRCLE. If not, see <http://www.gnu.org/licenses/>.
from
celery.contrib.abortable
import
AbortableTask
from
manager.mancelery
import
celery
#
from manager.mancelery import celery
@celery.task
(
base
=
AbortableTask
,
bind
=
True
)
#
@celery.task(base=AbortableTask, bind=True)
def
abortable_async_instance_operation
(
task
,
operation_id
,
instance_pk
,
activity_pk
,
allargs
,
auxargs
):
from
vm.models
import
Instance
,
InstanceActivity
...
...
@@ -37,7 +37,7 @@ def abortable_async_instance_operation(task, operation_id, instance_pk,
return
operation
.
_exec_op
(
allargs
,
auxargs
)
@celery.task
(
base
=
AbortableTask
,
bind
=
True
)
#
@celery.task(base=AbortableTask, bind=True)
def
abortable_async_node_operation
(
task
,
operation_id
,
node_pk
,
activity_pk
,
allargs
,
auxargs
):
from
vm.models
import
Node
,
NodeActivity
...
...
This diff is collapsed.
Click to expand it.
circle/vm/tasks/net_tasks.py
View file @
feeea6da
...
...
@@ -15,14 +15,14 @@
# You should have received a copy of the GNU General Public License along
# with CIRCLE. If not, see <http://www.gnu.org/licenses/>.
from
manager.mancelery
import
celery
#
from manager.mancelery import celery
@celery.task
(
name
=
'netdriver.create'
)
#
@celery.task(name='netdriver.create')
def
create
(
params
):
pass
@celery.task
(
name
=
'netdriver.delete'
)
#
@celery.task(name='netdriver.delete')
def
destroy
(
params
):
pass
This diff is collapsed.
Click to expand it.
circle/vm/tasks/vm_tasks.py
View file @
feeea6da
...
...
@@ -18,7 +18,7 @@
from
django.core.cache
import
cache
from
logging
import
getLogger
from
manager.mancelery
import
celery
#
from manager.mancelery import celery
logger
=
getLogger
(
__name__
)
...
...
@@ -62,126 +62,126 @@ def get_queues():
return
result
@celery.task
(
name
=
'vmdriver.attach_disk'
)
#
@celery.task(name='vmdriver.attach_disk')
def
attach_disk
(
vm
,
disk
):
pass
@celery.task
(
name
=
'vmdriver.detach_disk'
)
#
@celery.task(name='vmdriver.detach_disk')
def
detach_disk
(
vm
,
disk
):
pass
@celery.task
(
name
=
'vmdriver.attach_network'
)
#
@celery.task(name='vmdriver.attach_network')
def
attach_network
(
vm
,
net
):
pass
@celery.task
(
name
=
'vmdriver.detach_network'
)
#
@celery.task(name='vmdriver.detach_network')
def
detach_network
(
vm
,
net
):
pass
@celery.task
(
name
=
'vmdriver.create'
)
#
@celery.task(name='vmdriver.create')
def
deploy
(
params
):
pass
@celery.task
(
name
=
'vmdriver.delete'
)
#
@celery.task(name='vmdriver.delete')
def
destroy
(
params
):
pass
@celery.task
(
name
=
'vmdriver.save'
)
#
@celery.task(name='vmdriver.save')
def
sleep
(
params
):
pass
@celery.task
(
name
=
'vmdriver.restore'
)
#
@celery.task(name='vmdriver.restore')
def
wake_up
(
params
):
pass
@celery.task
(
name
=
'vmdriver.suspend'
)
#
@celery.task(name='vmdriver.suspend')
def
suspend
(
params
):
pass
@celery.task
(
name
=
'vmdriver.resume'
)
#
@celery.task(name='vmdriver.resume')
def
resume
(
params
):
pass
@celery.task
(
name
=
'vmdriver.shutdown'
)
#
@celery.task(name='vmdriver.shutdown')
def
shutdown
(
params
):
pass
@celery.task
(
name
=
'vmdriver.reset'
)
#
@celery.task(name='vmdriver.reset')
def
reset
(
params
):
pass
@celery.task
(
name
=
'vmdriver.reboot'
)
#
@celery.task(name='vmdriver.reboot')
def
reboot
(
params
):
pass
@celery.task
(
name
=
'vmdriver.migrate'
)
#
@celery.task(name='vmdriver.migrate')
def
migrate
(
params
):
pass
@celery.task
(
name
=
'vmdriver.resize_disk'
)
#
@celery.task(name='vmdriver.resize_disk')
def
resize_disk
(
params
):
pass
@celery.task
(
name
=
'vmdriver.domain_info'
)
#
@celery.task(name='vmdriver.domain_info')
def
domain_info
(
params
):
pass
@celery.task
(
name
=
'vmdriver.list_domains'
)
#
@celery.task(name='vmdriver.list_domains')
def
list_domains
(
params
):
pass
@celery.task
(
name
=
'vmdriver.list_domains_info'
)
#
@celery.task(name='vmdriver.list_domains_info')
def
list_domains_info
(
params
):
pass
@celery.task
(
name
=
'vmdriver.ping'
)
#
@celery.task(name='vmdriver.ping')
def
ping
(
params
):
pass
@celery.task
(
name
=
'vmdriver.get_core_num'
)
#
@celery.task(name='vmdriver.get_core_num')
def
get_core_num
(
params
):
pass
@celery.task
(
name
=
'vmdriver.get_architecture'
)
#
@celery.task(name='vmdriver.get_architecture')
def
get_architecture
():
pass
@celery.task
(
name
=
'vmdriver.get_ram_size'
)
#
@celery.task(name='vmdriver.get_ram_size')
def
get_ram_size
(
params
):
pass
@celery.task
(
name
=
'vmdriver.get_info'
)
#
@celery.task(name='vmdriver.get_info')
def
get_info
(
params
):
pass
@celery.task
(
name
=
'vmdriver.get_node_metrics'
)
#
@celery.task(name='vmdriver.get_node_metrics')
def
get_node_metrics
(
params
):
pass
@celery.task
(
name
=
'vmdriver.screenshot'
)
#
@celery.task(name='vmdriver.screenshot')
def
screenshot
(
params
):
pass
This diff is collapsed.
Click to expand it.
requirements/circlestack.txt
View file @
feeea6da
...
...
@@ -26,6 +26,7 @@ Django==1.11.6
django-appconf==1.0.2
django-autocomplete-light==3.2.9
django-braces==1.11.0
django-celery==3.2.2
django-crispy-forms==1.6.1
django-model-utils==3.0.0
django-pipeline==1.6.13
...
...
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