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
Apr 23, 2018
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>
...
...
circle/celery
0 → 100644
View file @
feeea6da
File added
circle/circle/db.sqlite3
View file @
feeea6da
No preview for this file type
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'
...
...
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."""
...
...
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
...
...
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'
],
...
...
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
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)
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)
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
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)
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
,
...
...
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
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__
)
...
...
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
,
)
...
...
circle/vm/tasks/__init__.py
View file @
feeea6da
from
test
import
*
\ No newline at end of file
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
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
...
...
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
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
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
...
...
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