Commit feeea6da by Szabolcs Gelencser

Comment unused celery tasks, configure local celery transport

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