Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
Gelencsér Szabolcs
/
circlestack
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
c4d12b46
authored
Apr 10, 2018
by
Szabolcs Gelencser
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Remove some dead code and packages for easier install
parent
6315b419
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
566 additions
and
746 deletions
+566
-746
.idea/inspectionProfiles/Project_Default.xml
+5
-1
.idea/workspace.xml
+296
-286
circle/circle/db.sqlite3
+0
-0
circle/circle/settings/base.py
+4
-2
circle/circle/urls.py
+2
-1
circle/dashboard/forms.py
+1
-94
circle/dashboard/tables.py
+53
-53
circle/dashboard/templates/auth/login.html
+8
-4
circle/dashboard/validators.py
+0
-20
circle/dashboard/views/index.py
+1
-1
circle/openstack_auth/views.py
+2
-0
circle/vm/admin.py
+1
-4
circle/vm/models/__init__.py
+1
-5
circle/vm/models/activity.py
+0
-65
circle/vm/models/instance.py
+0
-10
circle/vm/operations.py
+191
-192
requirements/circlestack.txt
+1
-8
No files found.
.idea/inspectionProfiles/Project_Default.xml
View file @
c4d12b46
...
...
@@ -14,12 +14,16 @@
<inspection_tool
class=
"PyPackageRequirementsInspection"
enabled=
"true"
level=
"WARNING"
enabled_by_default=
"true"
>
<option
name=
"ignoredPackages"
>
<value>
<list
size=
"
5
"
>
<list
size=
"
9
"
>
<item
index=
"0"
class=
"java.lang.String"
itemvalue=
"salt"
/>
<item
index=
"1"
class=
"java.lang.String"
itemvalue=
"six"
/>
<item
index=
"2"
class=
"java.lang.String"
itemvalue=
"netaddr"
/>
<item
index=
"3"
class=
"java.lang.String"
itemvalue=
"requests"
/>
<item
index=
"4"
class=
"java.lang.String"
itemvalue=
"cryptography"
/>
<item
index=
"5"
class=
"java.lang.String"
itemvalue=
"psycopg2"
/>
<item
index=
"6"
class=
"java.lang.String"
itemvalue=
"lxml"
/>
<item
index=
"7"
class=
"java.lang.String"
itemvalue=
"MarkupSafe"
/>
<item
index=
"8"
class=
"java.lang.String"
itemvalue=
"pylibmc"
/>
</list>
</value>
</option>
...
...
.idea/workspace.xml
View file @
c4d12b46
...
...
@@ -4,8 +4,20 @@
<list
default=
"true"
id=
"1fbec8af-5a7c-40f9-b994-83ac07d1ae1d"
name=
"Default"
comment=
""
>
<change
beforePath=
"$PROJECT_DIR$/.idea/inspectionProfiles/Project_Default.xml"
afterPath=
"$PROJECT_DIR$/.idea/inspectionProfiles/Project_Default.xml"
/>
<change
beforePath=
"$PROJECT_DIR$/.idea/workspace.xml"
afterPath=
"$PROJECT_DIR$/.idea/workspace.xml"
/>
<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/circle/settings/local.py"
afterPath=
"$PROJECT_DIR$/circle/circle/settings/local.py"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/circle/urls.py"
afterPath=
"$PROJECT_DIR$/circle/circle/urls.py"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/dashboard/forms.py"
afterPath=
"$PROJECT_DIR$/circle/dashboard/forms.py"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/dashboard/tables.py"
afterPath=
"$PROJECT_DIR$/circle/dashboard/tables.py"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/dashboard/templates/auth/login.html"
afterPath=
"$PROJECT_DIR$/circle/dashboard/templates/auth/login.html"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/dashboard/validators.py"
afterPath=
"$PROJECT_DIR$/circle/dashboard/validators.py"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/dashboard/views/index.py"
afterPath=
"$PROJECT_DIR$/circle/dashboard/views/index.py"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/openstack_auth/views.py"
afterPath=
"$PROJECT_DIR$/circle/openstack_auth/views.py"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/vm/admin.py"
afterPath=
"$PROJECT_DIR$/circle/vm/admin.py"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/vm/models/__init__.py"
afterPath=
"$PROJECT_DIR$/circle/vm/models/__init__.py"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/vm/models/activity.py"
afterPath=
"$PROJECT_DIR$/circle/vm/models/activity.py"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/vm/models/instance.py"
afterPath=
"$PROJECT_DIR$/circle/vm/models/instance.py"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/vm/operations.py"
afterPath=
"$PROJECT_DIR$/circle/vm/operations.py"
/>
<change
beforePath=
"$PROJECT_DIR$/requirements/circlestack.txt"
afterPath=
"$PROJECT_DIR$/requirements/circlestack.txt"
/>
</list>
<option
name=
"EXCLUDED_CONVERTED_TO_IGNORED"
value=
"true"
/>
...
...
@@ -36,53 +48,73 @@
</component>
<component
name=
"FileEditorManager"
>
<leaf
SIDE_TABS_SIZE_LIMIT_KEY=
"300"
>
<file
leaf-file-name=
"
base.py"
pinned=
"false"
current-in-tab=
"tru
e"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
circle/settings/bas
e.py"
>
<file
leaf-file-name=
"
instance.py"
pinned=
"false"
current-in-tab=
"fals
e"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
vm/models/instanc
e.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
760
"
>
<caret
line=
"5
84"
column=
"38"
lean-forward=
"false"
selection-start-line=
"584"
selection-start-column=
"38"
selection-end-line=
"584"
selection-end-column=
"38
"
/>
<state
relative-caret-position=
"
94
"
>
<caret
line=
"5
3"
column=
"0"
lean-forward=
"false"
selection-start-line=
"53"
selection-start-column=
"0"
selection-end-line=
"53"
selection-end-column=
"0
"
/>
<folding
/>
</state>
</provider>
</entry>
</file>
<file
leaf-file-name=
"
manage
.py"
pinned=
"false"
current-in-tab=
"false"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
manage
.py"
>
<file
leaf-file-name=
"
__init__
.py"
pinned=
"false"
current-in-tab=
"false"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
vm/models/__init__
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"185"
>
<caret
line=
"24"
column=
"0"
lean-forward=
"false"
selection-start-line=
"24"
selection-start-column=
"0"
selection-end-line=
"24"
selection-end-column=
"0"
/>
<folding>
<element
signature=
"e#755#764#0"
expanded=
"true"
/>
</folding>
<state
relative-caret-position=
"34"
>
<caret
line=
"2"
column=
"0"
lean-forward=
"false"
selection-start-line=
"2"
selection-start-column=
"0"
selection-end-line=
"2"
selection-end-column=
"0"
/>
<folding
/>
</state>
</provider>
</entry>
</file>
<file
leaf-file-name=
"models.py"
pinned=
"false"
current-in-tab=
"false"
>
<entry
file=
"file://$PROJECT_DIR$/circle/request/models.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"-416"
>
<caret
line=
"39"
column=
"0"
lean-forward=
"false"
selection-start-line=
"39"
selection-start-column=
"0"
selection-end-line=
"39"
selection-end-column=
"0"
/>
<folding
/>
</state>
</provider>
</entry>
</file>
<file
leaf-file-name=
"
local
.py"
pinned=
"false"
current-in-tab=
"false"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
circle/settings/local
.py"
>
<file
leaf-file-name=
"
activity
.py"
pinned=
"false"
current-in-tab=
"false"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
vm/models/activity
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
248
"
>
<caret
line=
"1
06"
column=
"16"
lean-forward=
"false"
selection-start-line=
"106"
selection-start-column=
"16"
selection-end-line=
"106"
selection-end-column=
"16
"
/>
<state
relative-caret-position=
"
516
"
>
<caret
line=
"1
96"
column=
"31"
lean-forward=
"false"
selection-start-line=
"196"
selection-start-column=
"31"
selection-end-line=
"196"
selection-end-column=
"31
"
/>
<folding
/>
</state>
</provider>
</entry>
</file>
<file
leaf-file-name=
"
pydevd
.py"
pinned=
"false"
current-in-tab=
"false"
>
<entry
file=
"file://$
APPLICATION_HOME_DIR$/helpers/pydev/pydevd
.py"
>
<file
leaf-file-name=
"
operations
.py"
pinned=
"false"
current-in-tab=
"false"
>
<entry
file=
"file://$
PROJECT_DIR$/circle/vm/operations
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
11
0"
>
<caret
line=
"
1071"
column=
"0"
lean-forward=
"false"
selection-start-line=
"1071"
selection-start-column=
"0"
selection-end-line=
"1071"
selection-end-column=
"0
"
/>
<state
relative-caret-position=
"
5
0"
>
<caret
line=
"
52"
column=
"59"
lean-forward=
"false"
selection-start-line=
"52"
selection-start-column=
"59"
selection-end-line=
"52"
selection-end-column=
"59
"
/>
<folding
/>
</state>
</provider>
</entry>
</file>
<file
leaf-file-name=
"
views
.py"
pinned=
"false"
current-in-tab=
"false"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
openstack_auth/views
.py"
>
<file
leaf-file-name=
"
admin
.py"
pinned=
"false"
current-in-tab=
"false"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
vm/admin
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"127"
>
<caret
line=
"60"
column=
"64"
lean-forward=
"true"
selection-start-line=
"60"
selection-start-column=
"64"
selection-end-line=
"60"
selection-end-column=
"64"
/>
<state
relative-caret-position=
"482"
>
<caret
line=
"35"
column=
"0"
lean-forward=
"true"
selection-start-line=
"35"
selection-start-column=
"0"
selection-end-line=
"35"
selection-end-column=
"0"
/>
<folding>
<element
signature=
"e#732#764#0"
expanded=
"true"
/>
</folding>
</state>
</provider>
</entry>
</file>
<file
leaf-file-name=
"circlestack.txt"
pinned=
"false"
current-in-tab=
"true"
>
<entry
file=
"file://$PROJECT_DIR$/requirements/circlestack.txt"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"268"
>
<caret
line=
"124"
column=
"4"
lean-forward=
"false"
selection-start-line=
"124"
selection-start-column=
"4"
selection-end-line=
"124"
selection-end-column=
"4"
/>
<folding
/>
</state>
</provider>
...
...
@@ -100,23 +132,6 @@
</component>
<component
name=
"FindInProjectRecents"
>
<findStrings>
<find>
context_is_admin
</find>
<find>
service
</find>
<find>
get_
</find>
<find>
image
</find>
<find>
template-access
</find>
<find>
images
</find>
<find>
update
</find>
<find>
rule:owner
</find>
<find>
defa
</find>
<find>
Defa
</find>
<find>
'default'
</find>
<find>
domain
</find>
<find>
OPENSTACK_KEYSTONE_DEFAULT_DOMAIN
</find>
<find>
TODO
</find>
<find>
login
</find>
<find>
signal
</find>
<find>
accepted
</find>
<find>
user_logged
</find>
<find>
policy
</find>
<find>
check
</find>
...
...
@@ -130,6 +145,23 @@
<find>
localhost
</find>
<find>
requests
</find>
<find>
cert
</find>
<find>
saml
</find>
<find>
saml_ava
</find>
<find>
loginview
</find>
<find>
sso
</find>
<find>
settings.
</find>
<find>
microsofttranslator
</find>
<find>
markupsafe
</find>
<find>
lx
</find>
<find>
ET
</find>
<find>
domain_validator
</find>
<find>
connect_command_template_validator
</find>
<find>
M2Crypto
</find>
<find>
salt
</find>
<find>
LocalClient
</find>
<find>
trait
</find>
<find>
class NodeActivity
</find>
<find>
Node
</find>
</findStrings>
<replaceStrings>
<replace>
'ACTIVE'
</replace>
...
...
@@ -150,15 +182,6 @@
<component
name=
"IdeDocumentHistory"
>
<option
name=
"CHANGED_PATHS"
>
<list>
<option
value=
"$PROJECT_DIR$/circle/network/templates/network/horizon/client_side/templates.html"
/>
<option
value=
"$PROJECT_DIR$/circle/network/templates/network/horizon/client_side/_loading_modal.html"
/>
<option
value=
"$PROJECT_DIR$/circle/network/templatetags/horizon.py"
/>
<option
value=
"$PROJECT_DIR$/circle/network/templatetags/__init__.py"
/>
<option
value=
"$PROJECT_DIR$/circle/network/static/js/horizon.networktopology.js"
/>
<option
value=
"$PROJECT_DIR$/circle/network/static/js/horizon.flatnetworktopology.js"
/>
<option
value=
"$PROJECT_DIR$/circle/network/urls.py"
/>
<option
value=
"$PROJECT_DIR$/circle/network/templates/network/editor.html"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/views/user.py"
/>
<option
value=
"$PROJECT_DIR$/circle/bower.json"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/static/vue.css"
/>
<option
value=
"$PROJECT_DIR$/circle/network/templates/network/vxlan-edit.html"
/>
...
...
@@ -177,16 +200,12 @@
<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/views/vm.py"
/>
<option
value=
"$PROJECT_DIR$/circle/vm/models/instance.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/views/template.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/dashboard/forms.py"
/>
<option
value=
"$PROJECT_DIR$/circle/vm/operations.py"
/>
<option
value=
"$PROJECT_DIR$/circle/circle/os_policies/keystone_policy.json"
/>
<option
value=
"$PROJECT_DIR$/circle/circle/urls.py"
/>
<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"
/>
...
...
@@ -196,11 +215,24 @@
<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/dashboard/views/index.py"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/templates/dashboard/index-vm.html"
/>
<option
value=
"$PROJECT_DIR$/circle/circle/settings/local.py"
/>
<option
value=
"$PROJECT_DIR$/circle/manage.py"
/>
<option
value=
"$PROJECT_DIR$/circle/openstack_auth/urls.py"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/templates/auth/login.html"
/>
<option
value=
"$PROJECT_DIR$/circle/circle/settings/local.py"
/>
<option
value=
"$PROJECT_DIR$/circle/openstack_auth/views.py"
/>
<option
value=
"$PROJECT_DIR$/circle/circle/urls.py"
/>
<option
value=
"$PROJECT_DIR$/circle/circle/settings/base.py"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/validators.py"
/>
<option
value=
"$PROJECT_DIR$/requirements/circlestack.txt"
/>
<option
value=
"$PROJECT_DIR$/circle/vm/models/instance.py"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/forms.py"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/views/index.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/operations.py"
/>
<option
value=
"$PROJECT_DIR$/circle/vm/admin.py"
/>
</list>
</option>
</component>
...
...
@@ -218,8 +250,8 @@
<component
name=
"ProjectFrameBounds"
>
<option
name=
"x"
value=
"-2"
/>
<option
name=
"y"
value=
"-1"
/>
<option
name=
"width"
value=
"1
924
"
/>
<option
name=
"height"
value=
"
1063
"
/>
<option
name=
"width"
value=
"1
370
"
/>
<option
name=
"height"
value=
"
751
"
/>
</component>
<component
name=
"ProjectInspectionProfilesVisibleTreeState"
>
<entry
key=
"Project Default"
>
...
...
@@ -289,17 +321,12 @@
<item
name=
"circle"
type=
"462c0819:PsiDirectoryNode"
/>
<item
name=
"openstack_auth"
type=
"462c0819:PsiDirectoryNode"
/>
</path>
<path>
<item
name=
"cloud"
type=
"b2602c69:ProjectViewProjectNode"
/>
<item
name=
"cloud"
type=
"462c0819:PsiDirectoryNode"
/>
<item
name=
"requirements"
type=
"462c0819:PsiDirectoryNode"
/>
</path>
</expand>
<select
/>
</subPane>
</pane>
<pane
id=
"Scope"
/>
<pane
id=
"Scratches"
/>
<pane
id=
"Scope"
/>
</panes>
</component>
<component
name=
"PropertiesComponent"
>
...
...
@@ -308,7 +335,7 @@
<property
name=
"settings.editor.selected.configurable"
value=
"watcher.settings"
/>
<property
name=
"NewWatcherDialog.advanced.open"
value=
"true"
/>
<property
name=
"DefaultHtmlFileTemplate"
value=
"HTML File"
/>
<property
name=
"SearchEverywhereHistoryKey"
value=
"
indexv	null	null index-vm	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/dashboard/index-vm.html index.	FILE	file:///home/h3yduck/cloud/circle/dashboard/views/index.py index	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/dashboard/index.html bas	FILE	file:///home/h3yduck/cloud/circle/openstack_api/base.py save	null	null plainc	null	null vmdeta	null	null templatedet	null	null instancetemp	null	null instancetem	null	null url	FILE	file:///home/h3yduck/cloud/circle/dashboard/urls.py vmcreate	null	null base	FILE	file:///home/h3yduck/cloud/circle/circle/settings/base.py opera	FILE	file:///home/h3yduck/cloud/circle/vm/operations.py operations	FILE	file:///home/h3yduck/cloud/circle/common/operations.py templat	null	null vmadd	null	null vmdetail	null	null addinterfa	null	null addin	null	null server	null	null Instance	null	null instance	FILE	file:///home/h3yduck/cloud/circle/vm/models/instance.py operat	null	null ins	FILE	file:///home/h3yduck/cloud/circle/vm/models/instance.py vmdetai	null	null operationvi	null	null ser	null	null server.	FILE	file:///home/h3yduck/.virtualenvs/cloud/local/lib/python2.7/site-packages/novaclient/v2/servers.py resources.	FILE	file:///home/h3yduck/cloud/circle/request/templates/request/initials/resources.html vm-de	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/dashboard/vm-detail.html vxla	null	null urls	FILE	file:///home/h3yduck/cloud/circle/dashboard/urls.py index-v	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/dashboard/index-vxlans.html create	FILE	file:///home/h3yduck/cloud/circle/network/templates/network/vxlan-create.html vxl	null	null nov	FILE	file:///home/h3yduck/cloud/circle/openstack_api/nova.py nova.p	FILE	file:///home/h3yduck/cloud/circle/openstack_api/nova.py vmdetailv	null	null editor	null	null networktopo	FILE	file:///home/h3yduck/cloud/circle/network/static/js/horizon.networktopology.js bow	FILE	file:///home/h3yduck/cloud/circle/bower.json base.py	FILE	file:///home/h3yduck/cloud/circle/circle/settings/base.py local	null	null vnc	null	null plain	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/dashboard/vm-plain-image-create.html forms	null	null vxlanform	null	null instanc	FILE	file:///home/h3yduck/cloud/circle/vm/models/instance.py
"
/>
<property
name=
"SearchEverywhereHistoryKey"
value=
"
views.	FILE	file:///home/h3yduck/cloud/circle/openstack_auth/views.py login.html	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/auth/login.html LoginVi	null	null indexv	null	null index-vm	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/dashboard/index-vm.html index.	FILE	file:///home/h3yduck/cloud/circle/dashboard/views/index.py index	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/dashboard/index.html bas	FILE	file:///home/h3yduck/cloud/circle/openstack_api/base.py save	null	null plainc	null	null vmdeta	null	null templatedet	null	null instancetemp	null	null instancetem	null	null url	FILE	file:///home/h3yduck/cloud/circle/dashboard/urls.py vmcreate	null	null base	FILE	file:///home/h3yduck/cloud/circle/circle/settings/base.py opera	FILE	file:///home/h3yduck/cloud/circle/vm/operations.py operations	FILE	file:///home/h3yduck/cloud/circle/common/operations.py templat	null	null vmadd	null	null vmdetail	null	null addinterfa	null	null addin	null	null server	null	null Instance	null	null instance	FILE	file:///home/h3yduck/cloud/circle/vm/models/instance.py operat	null	null ins	FILE	file:///home/h3yduck/cloud/circle/vm/models/instance.py vmdetai	null	null operationvi	null	null ser	null	null server.	FILE	file:///home/h3yduck/.virtualenvs/cloud/local/lib/python2.7/site-packages/novaclient/v2/servers.py resources.	FILE	file:///home/h3yduck/cloud/circle/request/templates/request/initials/resources.html vm-de	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/dashboard/vm-detail.html vxla	null	null urls	FILE	file:///home/h3yduck/cloud/circle/dashboard/urls.py index-v	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/dashboard/index-vxlans.html create	FILE	file:///home/h3yduck/cloud/circle/network/templates/network/vxlan-create.html vxl	null	null nov	FILE	file:///home/h3yduck/cloud/circle/openstack_api/nova.py nova.p	FILE	file:///home/h3yduck/cloud/circle/openstack_api/nova.py vmdetailv	null	null editor	null	null networktopo	FILE	file:///home/h3yduck/cloud/circle/network/static/js/horizon.networktopology.js bow	FILE	file:///home/h3yduck/cloud/circle/bower.json base.py	FILE	file:///home/h3yduck/cloud/circle/circle/settings/base.py local	null	null vnc	null	null plain	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/dashboard/vm-plain-image-create.html
"
/>
</component>
<component
name=
"RecentsManager"
>
<key
name=
"MoveFile.RECENT_KEYS"
>
...
...
@@ -393,8 +420,8 @@
<option
name=
"INTERPRETER_OPTIONS"
value=
""
/>
<option
name=
"PARENT_ENVS"
value=
"true"
/>
<envs>
<env
name=
"DJANGO_SETTINGS_MODULE"
value=
"circle.settings.local"
/>
<env
name=
"PYTHONUNBUFFERED"
value=
"1"
/>
<env
name=
"DJANGO_SETTINGS_MODULE"
value=
"circle.settings.local"
/>
</envs>
<option
name=
"SDK_HOME"
value=
"$PROJECT_DIR$/../.virtualenvs/cloud/bin/python"
/>
<option
name=
"WORKING_DIRECTORY"
value=
""
/>
...
...
@@ -452,24 +479,25 @@
</todo-panel>
</component>
<component
name=
"ToolWindowManager"
>
<frame
x=
"-2"
y=
"-1"
width=
"1924"
height=
"1063"
extended-state=
"0"
/>
<frame
x=
"-2"
y=
"-1"
width=
"1370"
height=
"751"
extended-state=
"0"
/>
<editor
active=
"true"
/>
<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=
"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=
"Event Log"
active=
"false"
anchor=
"bottom"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"false"
show_stripe_button=
"true"
weight=
"0.5972516"
sideWeight=
"0.49520767"
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.32
55814
"
sideWeight=
"0.50745475"
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.32
492113
"
sideWeight=
"0.50745475"
order=
"7"
side_tool=
"false"
content_ui=
"tabs"
/>
<window_info
id=
"Python Console"
active=
"false"
anchor=
"bottom"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"false"
show_stripe_button=
"true"
weight=
"0.43023255"
sideWeight=
"0.43610224"
order=
"7"
side_tool=
"true"
content_ui=
"tabs"
/>
<window_info
id=
"Run"
active=
"false"
anchor=
"bottom"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"false"
show_stripe_button=
"true"
weight=
"0.32769555"
sideWeight=
"0.49574015"
order=
"2"
side_tool=
"false"
content_ui=
"tabs"
/>
<window_info
id=
"Terminal"
active=
"false"
anchor=
"bottom"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"false"
show_stripe_button=
"true"
weight=
"0.
5972516"
sideWeight=
"0.49520767
"
order=
"7"
side_tool=
"true"
content_ui=
"tabs"
/>
<window_info
id=
"Project"
active=
"false"
anchor=
"left"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"true"
show_stripe_button=
"true"
weight=
"0.2
3855165
"
sideWeight=
"0.5"
order=
"0"
side_tool=
"false"
content_ui=
"combo"
/>
<window_info
id=
"Terminal"
active=
"false"
anchor=
"bottom"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"false"
show_stripe_button=
"true"
weight=
"0.
47634068"
sideWeight=
"0.49848944
"
order=
"7"
side_tool=
"true"
content_ui=
"tabs"
/>
<window_info
id=
"Project"
active=
"false"
anchor=
"left"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"true"
show_stripe_button=
"true"
weight=
"0.2
8096676
"
sideWeight=
"0.5"
order=
"0"
side_tool=
"false"
content_ui=
"combo"
/>
<window_info
id=
"Docker"
active=
"false"
anchor=
"bottom"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"false"
show_stripe_button=
"false"
weight=
"0.33"
sideWeight=
"0.5"
order=
"8"
side_tool=
"false"
content_ui=
"tabs"
/>
<window_info
id=
"Database"
active=
"false"
anchor=
"right"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"false"
show_stripe_button=
"true"
weight=
"0.33"
sideWeight=
"0.5"
order=
"3"
side_tool=
"false"
content_ui=
"tabs"
/>
<window_info
id=
"Find"
active=
"false"
anchor=
"bottom"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"false"
show_stripe_button=
"true"
weight=
"0.329
8097
3"
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.329
65
3"
sideWeight=
"0.5"
order=
"1"
side_tool=
"false"
content_ui=
"tabs"
/>
<window_info
id=
"SciView"
active=
"false"
anchor=
"right"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"false"
show_stripe_button=
"true"
weight=
"0.33"
sideWeight=
"0.5"
order=
"3"
side_tool=
"false"
content_ui=
"tabs"
/>
<window_info
id=
"Structure"
active=
"false"
anchor=
"left"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"false"
show_stripe_button=
"true"
weight=
"0.25"
sideWeight=
"0.5"
order=
"1"
side_tool=
"false"
content_ui=
"tabs"
/>
<window_info
id=
"Favorites"
active=
"false"
anchor=
"left"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"false"
show_stripe_button=
"true"
weight=
"0.33"
sideWeight=
"0.5"
order=
"2"
side_tool=
"true"
content_ui=
"tabs"
/>
<window_info
id=
"Debug"
active=
"
true"
anchor=
"bottom"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"true"
show_stripe_button=
"true"
weight=
"0.5972516"
sideWeight=
"0.50479233
"
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.47634068"
sideWeight=
"0.50151056
"
order=
"3"
side_tool=
"false"
content_ui=
"tabs"
/>
<window_info
id=
"Cvs"
active=
"false"
anchor=
"bottom"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"false"
show_stripe_button=
"true"
weight=
"0.25"
sideWeight=
"0.5"
order=
"4"
side_tool=
"false"
content_ui=
"tabs"
/>
<window_info
id=
"Messages"
active=
"false"
anchor=
"bottom"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"false"
show_stripe_button=
"true"
weight=
"0.33"
sideWeight=
"0.5"
order=
"7"
side_tool=
"false"
content_ui=
"tabs"
/>
<window_info
id=
"Message"
active=
"false"
anchor=
"bottom"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"false"
show_stripe_button=
"true"
weight=
"0.33"
sideWeight=
"0.5"
order=
"0"
side_tool=
"false"
content_ui=
"tabs"
/>
<window_info
id=
"Commander"
active=
"false"
anchor=
"right"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"false"
show_stripe_button=
"true"
weight=
"0.4"
sideWeight=
"0.5"
order=
"0"
side_tool=
"false"
content_ui=
"tabs"
/>
<window_info
id=
"Inspection"
active=
"false"
anchor=
"bottom"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"false"
show_stripe_button=
"true"
weight=
"0.4"
sideWeight=
"0.5"
order=
"5"
side_tool=
"false"
content_ui=
"tabs"
/>
...
...
@@ -553,69 +581,62 @@
</properties>
</breakpoint>
</default-breakpoints>
<option
name=
"time"
value=
"2
71
"
/>
<option
name=
"time"
value=
"2
82
"
/>
</breakpoint-manager>
<watches-manager
/>
</component>
<component
name=
"debuggerHistoryManager"
>
<expressions
id=
"evaluateCodeFragment"
>
<expression>
<expression-string>
import certifi
certifi.where(
)
</expression-string>
<expression-string>
session.post(token_url, json=body, headers=headers,
authenticated=False, log=False, **rkwargs
)
</expression-string>
<language-id>
Python
</language-id>
<evaluation-mode>
CODE_FRAGMENT
</evaluation-mode>
</expression>
<expression>
<expression-string>
improt
</expression-string>
<expression-string>
auth.authenticate(request=request, auth_url=(auth_url), token=token)
</expression-string>
<language-id>
Python
</language-id>
<evaluation-mode>
CODE_FRAGMENT
</evaluation-mode>
</expression>
<expression>
<expression-string>
import requests
r = requests.certs.old_where()
print(r)
</expression-string>
<expression-string>
auth.authenticate(request=request, auth_url=(auth_url + '/v3'), token=token)
</expression-string>
<language-id>
Python
</language-id>
<evaluation-mode>
CODE_FRAGMENT
</evaluation-mode>
</expression>
<expression>
<expression-string>
import requests
r = requests.certs.where()
print(r)
</expression-string>
<expression-string>
auth.authenticate(request=request, auth_url=auth_url + '/v3', token=token)
</expression-string>
<language-id>
Python
</language-id>
<evaluation-mode>
CODE_FRAGMENT
</evaluation-mode>
</expression>
<expression>
<expression-string>
import requests
r = requests.certs.where()
</expression-string>
<expression-string>
auth.authenticate(request=request, auth_url=auth_url, token=token)
</expression-string>
<language-id>
Python
</language-id>
<evaluation-mode>
CODE_FRAGMENT
</evaluation-mode>
</expression>
<expression>
<expression-string>
import requests
requests.certs.where()
</expression-string>
<expression-string>
import certifi
certifi.where()
</expression-string>
<language-id>
Python
</language-id>
<evaluation-mode>
CODE_FRAGMENT
</evaluation-mode>
</expression>
<expression>
<expression-string>
import requests
r = requests.get('https://google.com')
</expression-string>
<expression-string>
improt
</expression-string>
<language-id>
Python
</language-id>
<evaluation-mode>
CODE_FRAGMENT
</evaluation-mode>
</expression>
<expression>
<expression-string>
check(self.os_policy_actions, request,
{'project_id': self.instance._os_server.tenant_id})
</expression-string>
<expression-string>
import requests
r = requests.certs.old_where()
print(r)
</expression-string>
<language-id>
Python
</language-id>
<evaluation-mode>
CODE_FRAGMENT
</evaluation-mode>
</expression>
<expression>
<expression-string>
has_rights = policy(self.os_policy_actions, request,
{'project_id': self.instance._os_server.tenant_id})
</expression-string>
<expression-string>
import requests
r = requests.certs.where()
print(r)
</expression-string>
<language-id>
Python
</language-id>
<evaluation-mode>
CODE_FRAGMENT
</evaluation-mode>
</expression>
...
...
@@ -681,416 +702,405 @@ r = requests.get('https://google.com')</expression-string>
</expressions>
</component>
<component
name=
"editorHistoryManager"
>
<entry
file=
"file://$
USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/django/views/decorators/cache
.py"
>
<entry
file=
"file://$
PROJECT_DIR$/circle/openstack_auth/user
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
565
"
>
<caret
line=
"
58"
column=
"0"
lean-forward=
"false"
selection-start-line=
"58"
selection-start-column=
"0"
selection-end-line=
"58"
selection-end-column=
"0
"
/>
<state
relative-caret-position=
"
697
"
>
<caret
line=
"
255"
column=
"28"
lean-forward=
"false"
selection-start-line=
"255"
selection-start-column=
"28"
selection-end-line=
"255"
selection-end-column=
"28
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$
USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/django/utils/decorators.py
"
>
<entry
file=
"file://$
PROJECT_DIR$/circle/dashboard/templates/dashboard/base.html
"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"539"
>
<caret
line=
"166"
column=
"0"
lean-forward=
"false"
selection-start-line=
"166"
selection-start-column=
"0"
selection-end-line=
"166"
selection-end-column=
"0"
/>
<folding
/>
<state
relative-caret-position=
"161"
>
<caret
line=
"54"
column=
"37"
lean-forward=
"true"
selection-start-line=
"54"
selection-start-column=
"37"
selection-end-line=
"54"
selection-end-column=
"37"
/>
</state>
</provider>
</entry>
<entry
file=
"file://
/usr/lib/python2.7/threading
.py"
>
<entry
file=
"file://
$PROJECT_DIR$/circle/dashboard/urls
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
454
"
>
<caret
line=
"
766"
column=
"68"
lean-forward=
"true"
selection-start-line=
"766"
selection-start-column=
"68"
selection-end-line=
"766"
selection-end-column=
"68
"
/>
<state
relative-caret-position=
"
289
"
>
<caret
line=
"
45"
column=
"25"
lean-forward=
"false"
selection-start-line=
"45"
selection-start-column=
"25"
selection-end-line=
"45"
selection-end-column=
"25
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://
/usr/lib/python2.7/SocketServer
.py"
>
<entry
file=
"file://
$USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/django/views/generic/base
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
242
"
>
<caret
line=
"
596"
column=
"0"
lean-forward=
"false"
selection-start-line=
"596"
selection-start-column=
"0"
selection-end-line=
"596"
selection-end-column=
"0
"
/>
<state
relative-caret-position=
"
306
"
>
<caret
line=
"
46"
column=
"8"
lean-forward=
"false"
selection-start-line=
"46"
selection-start-column=
"8"
selection-end-line=
"46"
selection-end-column=
"8
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/django
/core/servers/basehttp
.py"
>
<entry
file=
"file://$USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/django
_tables2/views
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"259"
>
<caret
line=
"154"
column=
"0"
lean-forward=
"false"
selection-start-line=
"154"
selection-start-column=
"0"
selection-end-line=
"154"
selection-end-column=
"0"
/>
<folding
/>
<state
relative-caret-position=
"306"
>
<caret
line=
"118"
column=
"6"
lean-forward=
"false"
selection-start-line=
"118"
selection-start-column=
"6"
selection-end-line=
"118"
selection-end-column=
"6"
/>
</state>
</provider>
</entry>
<entry
file=
"file://
/usr/lib/python2.7/wsgiref/handler
s.py"
>
<entry
file=
"file://
$USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/braces/views/_acces
s.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
250
"
>
<caret
line=
"
85"
column=
"0"
lean-forward=
"false"
selection-start-line=
"85"
selection-start-column=
"0"
selection-end-line=
"85"
selection-end-column=
"0
"
/>
<state
relative-caret-position=
"
187
"
>
<caret
line=
"
24"
column=
"6"
lean-forward=
"false"
selection-start-line=
"24"
selection-start-column=
"6"
selection-end-line=
"24"
selection-end-column=
"6
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$
USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/django/contrib/staticfiles/handler
s.py"
>
<entry
file=
"file://$
PROJECT_DIR$/circle/request/url
s.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"565"
>
<caret
line=
"62"
column=
"0"
lean-forward=
"false"
selection-start-line=
"62"
selection-start-column=
"0"
selection-end-line=
"62"
selection-end-column=
"0"
/>
<folding
/>
<state
relative-caret-position=
"199"
>
<caret
line=
"29"
column=
"27"
lean-forward=
"false"
selection-start-line=
"29"
selection-start-column=
"27"
selection-end-line=
"29"
selection-end-column=
"27"
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/circle/
wsgi
.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/circle/
middleware
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"514"
>
<caret
line=
"59"
column=
"0"
lean-forward=
"false"
selection-start-line=
"59"
selection-start-column=
"0"
selection-end-line=
"59"
selection-end-column=
"0"
/>
<folding
/>
<state
relative-caret-position=
"221"
>
<caret
line=
"13"
column=
"72"
lean-forward=
"true"
selection-start-line=
"13"
selection-start-column=
"72"
selection-end-line=
"13"
selection-end-column=
"72"
/>
</state>
</provider>
</entry>
<entry
file=
"file://$
USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/django/core/handlers/wsgi.py
"
>
<entry
file=
"file://$
PROJECT_DIR$/circle/dashboard/templates/dashboard/index-vm.html
"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"420"
>
<caret
line=
"167"
column=
"0"
lean-forward=
"false"
selection-start-line=
"167"
selection-start-column=
"0"
selection-end-line=
"167"
selection-end-column=
"0"
/>
<folding
/>
<state
relative-caret-position=
"617"
>
<caret
line=
"91"
column=
"96"
lean-forward=
"false"
selection-start-line=
"91"
selection-start-column=
"96"
selection-end-line=
"91"
selection-end-column=
"96"
/>
</state>
</provider>
</entry>
<entry
file=
"file://$
USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/django/core/handlers/base.py
"
>
<entry
file=
"file://$
PROJECT_DIR$/circle/request/templates/request/_request-template-form.html
"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"293"
>
<caret
line=
"152"
column=
"13"
lean-forward=
"true"
selection-start-line=
"152"
selection-start-column=
"13"
selection-end-line=
"152"
selection-end-column=
"13"
/>
<folding
/>
<state
relative-caret-position=
"0"
>
<caret
line=
"0"
column=
"0"
lean-forward=
"false"
selection-start-line=
"0"
selection-start-column=
"0"
selection-end-line=
"0"
selection-end-column=
"0"
/>
</state>
</provider>
</entry>
<entry
file=
"file://$
USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/django/views/decorators/debug.py
"
>
<entry
file=
"file://$
PROJECT_DIR$/circle/request/templates/request/request-template.html
"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"548"
>
<caret
line=
"75"
column=
"0"
lean-forward=
"false"
selection-start-line=
"75"
selection-start-column=
"0"
selection-end-line=
"75"
selection-end-column=
"0"
/>
<folding
/>
<state
relative-caret-position=
"255"
>
<caret
line=
"15"
column=
"49"
lean-forward=
"false"
selection-start-line=
"15"
selection-start-column=
"49"
selection-end-line=
"15"
selection-end-column=
"49"
/>
</state>
</provider>
</entry>
<entry
file=
"file://$
USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/django/core/handlers/exception
.py"
>
<entry
file=
"file://$
PROJECT_DIR$/circle/openstack_api/network
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"408"
>
<caret
line=
"43"
column=
"0"
lean-forward=
"false"
selection-start-line=
"43"
selection-start-column=
"0"
selection-end-line=
"43"
selection-end-column=
"0"
/>
<folding
/>
<state
relative-caret-position=
"0"
>
<caret
line=
"0"
column=
"0"
lean-forward=
"false"
selection-start-line=
"0"
selection-start-column=
"0"
selection-end-line=
"0"
selection-end-column=
"0"
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
openstack_auth/tests/setting
s.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
request/view
s.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"539"
>
<caret
line=
"55"
column=
"0"
lean-forward=
"false"
selection-start-line=
"55"
selection-start-column=
"0"
selection-end-line=
"55"
selection-end-column=
"0"
/>
<folding
/>
<state
relative-caret-position=
"352"
>
<caret
line=
"51"
column=
"7"
lean-forward=
"true"
selection-start-line=
"51"
selection-start-column=
"7"
selection-end-line=
"51"
selection-end-column=
"7"
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/openstack_a
uth/plugin/password
.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/openstack_a
pi/nova
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"4
22
"
>
<caret
line=
"
42"
column=
"54"
lean-forward=
"true"
selection-start-line=
"42"
selection-start-column=
"54"
selection-end-line=
"42"
selection-end-column=
"54
"
/>
<state
relative-caret-position=
"4
85
"
>
<caret
line=
"
284"
column=
"22"
lean-forward=
"false"
selection-start-line=
"284"
selection-start-column=
"22"
selection-end-line=
"284"
selection-end-column=
"22
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$
PROJECT_DIR$/circle/openstack_api/base
.py"
>
<entry
file=
"file://$
USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/novaclient/__init__
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"76"
>
<caret
line=
"328"
column=
"0"
lean-forward=
"false"
selection-start-line=
"328"
selection-start-column=
"0"
selection-end-line=
"328"
selection-end-column=
"0"
/>
<folding
/>
<state
relative-caret-position=
"0"
>
<caret
line=
"0"
column=
"0"
lean-forward=
"false"
selection-start-line=
"0"
selection-start-column=
"0"
selection-end-line=
"0"
selection-end-column=
"0"
/>
</state>
</provider>
</entry>
<entry
file=
"file://$
PROJECT_DIR$/circle/network/models
.py"
>
<entry
file=
"file://$
USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/novaclient/extension
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"244"
>
<caret
line=
"86"
column=
"8"
lean-forward=
"false"
selection-start-line=
"86"
selection-start-column=
"8"
selection-end-line=
"86"
selection-end-column=
"8"
/>
<folding
/>
<state
relative-caret-position=
"0"
>
<caret
line=
"0"
column=
"0"
lean-forward=
"false"
selection-start-line=
"0"
selection-start-column=
"0"
selection-end-line=
"0"
selection-end-column=
"0"
/>
</state>
</provider>
</entry>
<entry
file=
"file://$
PROJECT_DIR$/circle/dashboard/models
.py"
>
<entry
file=
"file://$
USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/novaclient/client
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"193"
>
<caret
line=
"435"
column=
"31"
lean-forward=
"true"
selection-start-line=
"435"
selection-start-column=
"31"
selection-end-line=
"435"
selection-end-column=
"31"
/>
<folding>
<element
signature=
"e#732#770#0"
expanded=
"false"
/>
</folding>
<state
relative-caret-position=
"562"
>
<caret
line=
"45"
column=
"38"
lean-forward=
"true"
selection-start-line=
"45"
selection-start-column=
"38"
selection-end-line=
"45"
selection-end-column=
"38"
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/
circle/dashboard/templates/dashboard/index.html
"
>
<entry
file=
"file://$PROJECT_DIR$/
requirements.txt
"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"0"
>
<caret
line=
"0"
column=
"
25"
lean-forward=
"false"
selection-start-line=
"0"
selection-start-column=
"25"
selection-end-line=
"0"
selection-end-column=
"25
"
/>
<caret
line=
"0"
column=
"
0"
lean-forward=
"false"
selection-start-line=
"0"
selection-start-column=
"0"
selection-end-line=
"0"
selection-end-column=
"0
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/
circle/openstack_auth/backend.py
"
>
<entry
file=
"file://$PROJECT_DIR$/
requirements/base.txt
"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
186
"
>
<caret
line=
"
78"
column=
"34"
lean-forward=
"false"
selection-start-line=
"78"
selection-start-column=
"34"
selection-end-line=
"78"
selection-end-column=
"34
"
/>
<state
relative-caret-position=
"
595
"
>
<caret
line=
"
35"
column=
"8"
lean-forward=
"false"
selection-start-line=
"35"
selection-start-column=
"8"
selection-end-line=
"35"
selection-end-column=
"8
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
openstack_auth/utils
.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
manage
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"185"
>
<caret
line=
"51"
column=
"8"
lean-forward=
"true"
selection-start-line=
"51"
selection-start-column=
"8"
selection-end-line=
"51"
selection-end-column=
"8"
/>
<folding
/>
<state
relative-caret-position=
"408"
>
<caret
line=
"24"
column=
"0"
lean-forward=
"false"
selection-start-line=
"24"
selection-start-column=
"0"
selection-end-line=
"24"
selection-end-column=
"0"
/>
</state>
</provider>
</entry>
<entry
file=
"file://$
PROJECT_DIR$/circle/openstack_auth/policy
.py"
>
<entry
file=
"file://$
APPLICATION_HOME_DIR$/helpers/pydev/pydevd
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"-289"
>
<caret
line=
"77"
column=
"45"
lean-forward=
"false"
selection-start-line=
"77"
selection-start-column=
"41"
selection-end-line=
"77"
selection-end-column=
"45"
/>
<folding
/>
<state
relative-caret-position=
"110"
>
<caret
line=
"1071"
column=
"0"
lean-forward=
"false"
selection-start-line=
"1071"
selection-start-column=
"0"
selection-end-line=
"1071"
selection-end-column=
"0"
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
openstack_auth
/user.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
dashboard/views
/user.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"697"
>
<caret
line=
"255"
column=
"28"
lean-forward=
"false"
selection-start-line=
"255"
selection-start-column=
"28"
selection-end-line=
"255"
selection-end-column=
"28"
/>
<folding
/>
<state
relative-caret-position=
"306"
>
<caret
line=
"107"
column=
"24"
lean-forward=
"false"
selection-start-line=
"107"
selection-start-column=
"24"
selection-end-line=
"107"
selection-end-column=
"24"
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
vm/operations.py
"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
circle/os_policies/circle_policy.json
"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"339"
>
<caret
line=
"65"
column=
"23"
lean-forward=
"false"
selection-start-line=
"65"
selection-start-column=
"23"
selection-end-line=
"65"
selection-end-column=
"23"
/>
<folding>
<element
signature=
"e#732#788#0"
expanded=
"false"
/>
</folding>
<state
relative-caret-position=
"136"
>
<caret
line=
"8"
column=
"1"
lean-forward=
"true"
selection-start-line=
"8"
selection-start-column=
"1"
selection-end-line=
"8"
selection-end-column=
"1"
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/dashboard/templates/
dashboard/base
.html"
>
<entry
file=
"file://$PROJECT_DIR$/circle/dashboard/templates/
auth/login
.html"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"161"
>
<caret
line=
"54"
column=
"37"
lean-forward=
"true"
selection-start-line=
"54"
selection-start-column=
"37"
selection-end-line=
"54"
selection-end-column=
"37"
/>
<folding
/>
<state
relative-caret-position=
"459"
>
<caret
line=
"33"
column=
"15"
lean-forward=
"true"
selection-start-line=
"33"
selection-start-column=
"15"
selection-end-line=
"33"
selection-end-column=
"15"
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
request/models.py
"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
templates/registration/login.html
"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"510"
>
<caret
line=
"333"
column=
"53"
lean-forward=
"false"
selection-start-line=
"333"
selection-start-column=
"53"
selection-end-line=
"333"
selection-end-column=
"53"
/>
<folding
/>
<state
relative-caret-position=
"391"
>
<caret
line=
"23"
column=
"10"
lean-forward=
"true"
selection-start-line=
"23"
selection-start-column=
"10"
selection-end-line=
"23"
selection-end-column=
"10"
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
circle/os_policies/circle_policy.json
"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
dashboard/views/util.py
"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
119
"
>
<caret
line=
"7
"
column=
"52"
lean-forward=
"false"
selection-start-line=
"7"
selection-start-column=
"52"
selection-end-line=
"7"
selection-end-column=
"52
"
/>
<state
relative-caret-position=
"
284
"
>
<caret
line=
"7
76"
column=
"47"
lean-forward=
"true"
selection-start-line=
"776"
selection-start-column=
"47"
selection-end-line=
"776"
selection-end-column=
"47
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
dashboard/ur
ls.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
openstack_auth/uti
ls.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"2
89
"
>
<caret
line=
"
45"
column=
"25"
lean-forward=
"false"
selection-start-line=
"45"
selection-start-column=
"25"
selection-end-line=
"45"
selection-end-column=
"25
"
/>
<state
relative-caret-position=
"2
36
"
>
<caret
line=
"
155"
column=
"54"
lean-forward=
"false"
selection-start-line=
"155"
selection-start-column=
"40"
selection-end-line=
"155"
selection-end-column=
"54
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
circle
/urls.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
openstack_auth
/urls.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"204"
>
<caret
line=
"28"
column=
"20"
lean-forward=
"true"
selection-start-line=
"28"
selection-start-column=
"20"
selection-end-line=
"28"
selection-end-column=
"20"
/>
<folding
/>
<state
relative-caret-position=
"493"
>
<caret
line=
"35"
column=
"4"
lean-forward=
"false"
selection-start-line=
"35"
selection-start-column=
"4"
selection-end-line=
"35"
selection-end-column=
"70"
/>
</state>
</provider>
</entry>
<entry
file=
"file://$USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/django/
views/generic/base
.py"
>
<entry
file=
"file://$USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/django/
contrib/auth/__init__
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
306
"
>
<caret
line=
"
46"
column=
"8"
lean-forward=
"false"
selection-start-line=
"46"
selection-start-column=
"8"
selection-end-line=
"46"
selection-end-column=
"8
"
/>
<state
relative-caret-position=
"
451
"
>
<caret
line=
"
114"
column=
"0"
lean-forward=
"false"
selection-start-line=
"114"
selection-start-column=
"0"
selection-end-line=
"114"
selection-end-column=
"0
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/
django_tables2/views
.py"
>
<entry
file=
"file://$USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/
keystoneauth1/identity/base
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"306"
>
<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
/>
<state
relative-caret-position=
"136"
>
<caret
line=
"133"
column=
"0"
lean-forward=
"false"
selection-start-line=
"133"
selection-start-column=
"0"
selection-end-line=
"133"
selection-end-column=
"0"
/>
</state>
</provider>
</entry>
<entry
file=
"file://$
USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/braces/views/_access
.py"
>
<entry
file=
"file://$
PROJECT_DIR$/circle/openstack_auth/plugin/base
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"187"
>
<caret
line=
"24"
column=
"6"
lean-forward=
"false"
selection-start-line=
"24"
selection-start-column=
"6"
selection-end-line=
"24"
selection-end-column=
"6"
/>
<folding
/>
<state
relative-caret-position=
"102"
>
<caret
line=
"125"
column=
"0"
lean-forward=
"false"
selection-start-line=
"125"
selection-start-column=
"0"
selection-end-line=
"125"
selection-end-column=
"0"
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
request/urls
.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
openstack_auth/backend
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"1
99
"
>
<caret
line=
"
29"
column=
"27"
lean-forward=
"false"
selection-start-line=
"29"
selection-start-column=
"27"
selection-end-line=
"29"
selection-end-column=
"27
"
/>
<state
relative-caret-position=
"1
887
"
>
<caret
line=
"
122"
column=
"0"
lean-forward=
"false"
selection-start-line=
"122"
selection-start-column=
"0"
selection-end-line=
"122"
selection-end-column=
"0
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$
PROJECT_DIR$/circle/circle/middlewar
e.py"
>
<entry
file=
"file://$
USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/keystoneauth1/identity/v3/bas
e.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"2
21
"
>
<caret
line=
"1
3"
column=
"72"
lean-forward=
"true"
selection-start-line=
"13"
selection-start-column=
"72"
selection-end-line=
"13"
selection-end-column=
"72
"
/>
<state
relative-caret-position=
"2
839
"
>
<caret
line=
"1
75"
column=
"15"
lean-forward=
"false"
selection-start-line=
"175"
selection-start-column=
"15"
selection-end-line=
"176"
selection-end-column=
"70
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
dashboard/templates/dashboard/index-vm.html
"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
openstack_auth/views.py
"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"617"
>
<caret
line=
"91"
column=
"96"
lean-forward=
"false"
selection-start-line=
"91"
selection-start-column=
"96"
selection-end-line=
"91"
selection-end-column=
"96"
/>
<folding
/>
<state
relative-caret-position=
"2040"
>
<caret
line=
"148"
column=
"36"
lean-forward=
"false"
selection-start-line=
"148"
selection-start-column=
"36"
selection-end-line=
"148"
selection-end-column=
"36"
/>
<folding>
<element
signature=
"e#545#559#0"
expanded=
"false"
/>
</folding>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
dashboard/views/index
.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
circle/settings/local
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
136
"
>
<caret
line=
"
49"
column=
"26"
lean-forward=
"false"
selection-start-line=
"49"
selection-start-column=
"13"
selection-end-line=
"49"
selection-end-column=
"26
"
/>
<state
relative-caret-position=
"
23
"
>
<caret
line=
"
93"
column=
"5"
lean-forward=
"true"
selection-start-line=
"93"
selection-start-column=
"5"
selection-end-line=
"93"
selection-end-column=
"5
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
request/templates/request/_request-template-form.html
"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
dashboard/validators.py
"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"0"
>
<caret
line=
"0"
column=
"0"
lean-forward=
"false"
selection-start-line=
"0"
selection-start-column=
"0"
selection-end-line=
"0"
selection-end-column=
"0"
/>
<folding
/>
<state
relative-caret-position=
"108"
>
<caret
line=
"16"
column=
"0"
lean-forward=
"false"
selection-start-line=
"16"
selection-start-column=
"0"
selection-end-line=
"16"
selection-end-column=
"0"
/>
<folding>
<element
signature=
"e#732#782#0"
expanded=
"false"
/>
</folding>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
request/templates/request/request-template.html
"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
dashboard/models.py
"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"255"
>
<caret
line=
"15"
column=
"49"
lean-forward=
"false"
selection-start-line=
"15"
selection-start-column=
"49"
selection-end-line=
"15"
selection-end-column=
"49"
/>
<folding
/>
<state
relative-caret-position=
"389"
>
<caret
line=
"161"
column=
"71"
lean-forward=
"false"
selection-start-line=
"161"
selection-start-column=
"37"
selection-end-line=
"161"
selection-end-column=
"71"
/>
<folding>
<element
signature=
"e#732#770#0"
expanded=
"true"
/>
</folding>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
openstack_api/network
.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
circle/settings/base
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"0"
>
<caret
line=
"0"
column=
"0"
lean-forward=
"false"
selection-start-line=
"0"
selection-start-column=
"0"
selection-end-line=
"0"
selection-end-column=
"0"
/>
<folding
/>
<state
relative-caret-position=
"227"
>
<caret
line=
"573"
column=
"0"
lean-forward=
"false"
selection-start-line=
"573"
selection-start-column=
"0"
selection-end-line=
"573"
selection-end-column=
"0"
/>
<folding>
<element
signature=
"e#782#791#0"
expanded=
"true"
/>
</folding>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
request/view
s.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
circle/url
s.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"352"
>
<caret
line=
"51"
column=
"7"
lean-forward=
"true"
selection-start-line=
"51"
selection-start-column=
"7"
selection-end-line=
"51"
selection-end-column=
"7"
/>
<folding
/>
<state
relative-caret-position=
"306"
>
<caret
line=
"51"
column=
"25"
lean-forward=
"false"
selection-start-line=
"51"
selection-start-column=
"25"
selection-end-line=
"51"
selection-end-column=
"25"
/>
<folding>
<element
signature=
"e#732#773#0"
expanded=
"true"
/>
</folding>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
openstack_api/nova
.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
vm/models/node
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
485
"
>
<caret
line=
"2
84"
column=
"22"
lean-forward=
"false"
selection-start-line=
"284"
selection-start-column=
"22"
selection-end-line=
"284"
selection-end-column=
"22
"
/>
<state
relative-caret-position=
"
94
"
>
<caret
line=
"2
4"
column=
"0"
lean-forward=
"false"
selection-start-line=
"24"
selection-start-column=
"0"
selection-end-line=
"24"
selection-end-column=
"0
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$
USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/novaclient/__init__
.py"
>
<entry
file=
"file://$
PROJECT_DIR$/circle/vm/models/instance
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
0
"
>
<caret
line=
"
0"
column=
"0"
lean-forward=
"false"
selection-start-line=
"0"
selection-start-column=
"0"
selection-end-line=
"0
"
selection-end-column=
"0"
/>
<state
relative-caret-position=
"
94
"
>
<caret
line=
"
53"
column=
"0"
lean-forward=
"false"
selection-start-line=
"53"
selection-start-column=
"0"
selection-end-line=
"53
"
selection-end-column=
"0"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$
USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/novaclient/extension
.py"
>
<entry
file=
"file://$
PROJECT_DIR$/circle/common/operations
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
0
"
>
<caret
line=
"
0"
column=
"0"
lean-forward=
"false"
selection-start-line=
"0"
selection-start-column=
"0"
selection-end-line=
"0
"
selection-end-column=
"0"
/>
<state
relative-caret-position=
"
94
"
>
<caret
line=
"
231"
column=
"0"
lean-forward=
"false"
selection-start-line=
"231"
selection-start-column=
"0"
selection-end-line=
"231
"
selection-end-column=
"0"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$
USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/novaclient/client
.py"
>
<entry
file=
"file://$
PROJECT_DIR$/circle/dashboard/tables
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"562"
>
<caret
line=
"45"
column=
"38"
lean-forward=
"true"
selection-start-line=
"45"
selection-start-column=
"38"
selection-end-line=
"45"
selection-end-column=
"38"
/>
<folding
/>
<state
relative-caret-position=
"163"
>
<caret
line=
"106"
column=
"22"
lean-forward=
"true"
selection-start-line=
"106"
selection-start-column=
"22"
selection-end-line=
"106"
selection-end-column=
"22"
/>
<folding>
<element
signature=
"e#732#770#0"
expanded=
"true"
/>
</folding>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/
requirements.txt
"
>
<entry
file=
"file://$PROJECT_DIR$/
circle/dashboard/views/index.py
"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
0
"
>
<caret
line=
"
0"
column=
"0"
lean-forward=
"false"
selection-start-line=
"0"
selection-start-column=
"0"
selection-end-line=
"0"
selection-end-column=
"
0"
/>
<state
relative-caret-position=
"
102
"
>
<caret
line=
"
27"
column=
"30"
lean-forward=
"false"
selection-start-line=
"27"
selection-start-column=
"30"
selection-end-line=
"27"
selection-end-column=
"3
0"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/
requirements/base.txt
"
>
<entry
file=
"file://$PROJECT_DIR$/
circle/dashboard/forms.py
"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"595"
>
<caret
line=
"35"
column=
"8"
lean-forward=
"false"
selection-start-line=
"35"
selection-start-column=
"8"
selection-end-line=
"35"
selection-end-column=
"8"
/>
<folding
/>
<state
relative-caret-position=
"51"
>
<caret
line=
"410"
column=
"54"
lean-forward=
"false"
selection-start-line=
"410"
selection-start-column=
"54"
selection-end-line=
"410"
selection-end-column=
"54"
/>
<folding>
<element
signature=
"e#732#770#0"
expanded=
"true"
/>
</folding>
</state>
</provider>
</entry>
<entry
file=
"file://$
APPLICATION_HOME_DIR$/helpers/pydev/pydevd
.py"
>
<entry
file=
"file://$
PROJECT_DIR$/circle/request/models
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
110
"
>
<caret
line=
"
1071"
column=
"0"
lean-forward=
"false"
selection-start-line=
"1071"
selection-start-column=
"0"
selection-end-line=
"1071
"
selection-end-column=
"0"
/>
<state
relative-caret-position=
"
-416
"
>
<caret
line=
"
39"
column=
"0"
lean-forward=
"false"
selection-start-line=
"39"
selection-start-column=
"0"
selection-end-line=
"39
"
selection-end-column=
"0"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/
requirements/circlestack.txt
"
>
<entry
file=
"file://$PROJECT_DIR$/
circle/vm/models/activity.py
"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
-1955
"
>
<caret
line=
"
0"
column=
"0"
lean-forward=
"false"
selection-start-line=
"0"
selection-start-column=
"0"
selection-end-line=
"0"
selection-end-column=
"0
"
/>
<state
relative-caret-position=
"
516
"
>
<caret
line=
"
196"
column=
"31"
lean-forward=
"false"
selection-start-line=
"196"
selection-start-column=
"31"
selection-end-line=
"196"
selection-end-column=
"31
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
circle/settings/local
.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
vm/models/__init__
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
248
"
>
<caret
line=
"
106"
column=
"16"
lean-forward=
"false"
selection-start-line=
"106"
selection-start-column=
"16"
selection-end-line=
"106"
selection-end-column=
"16
"
/>
<state
relative-caret-position=
"
34
"
>
<caret
line=
"
2"
column=
"0"
lean-forward=
"false"
selection-start-line=
"2"
selection-start-column=
"0"
selection-end-line=
"2"
selection-end-column=
"0
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
manage
.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
vm/operations
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"185"
>
<caret
line=
"24"
column=
"0"
lean-forward=
"false"
selection-start-line=
"24"
selection-start-column=
"0"
selection-end-line=
"24"
selection-end-column=
"0"
/>
<folding>
<element
signature=
"e#755#764#0"
expanded=
"true"
/>
</folding>
<state
relative-caret-position=
"50"
>
<caret
line=
"52"
column=
"59"
lean-forward=
"false"
selection-start-line=
"52"
selection-start-column=
"59"
selection-end-line=
"52"
selection-end-column=
"59"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
openstack_auth/views
.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
vm/admin
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"127"
>
<caret
line=
"60"
column=
"64"
lean-forward=
"true"
selection-start-line=
"60"
selection-start-column=
"64"
selection-end-line=
"60"
selection-end-column=
"64"
/>
<folding
/>
<state
relative-caret-position=
"482"
>
<caret
line=
"35"
column=
"0"
lean-forward=
"true"
selection-start-line=
"35"
selection-start-column=
"0"
selection-end-line=
"35"
selection-end-column=
"0"
/>
<folding>
<element
signature=
"e#732#764#0"
expanded=
"true"
/>
</folding>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/
circle/circle/settings/base.py
"
>
<entry
file=
"file://$PROJECT_DIR$/
requirements/circlestack.txt
"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
760
"
>
<caret
line=
"
584"
column=
"38"
lean-forward=
"false"
selection-start-line=
"584"
selection-start-column=
"38"
selection-end-line=
"584"
selection-end-column=
"38
"
/>
<state
relative-caret-position=
"
268
"
>
<caret
line=
"
124"
column=
"4"
lean-forward=
"false"
selection-start-line=
"124"
selection-start-column=
"4"
selection-end-line=
"124"
selection-end-column=
"4
"
/>
<folding
/>
</state>
</provider>
...
...
circle/circle/db.sqlite3
View file @
c4d12b46
No preview for this file type
circle/circle/settings/base.py
View file @
c4d12b46
...
...
@@ -583,5 +583,7 @@ DEFAULT_SUBNETPOOL_PREFIXES = (
DEFAULT_SUBNETPOOL_PREFIX_LEN
=
20
OPENSTACK_KEYSTONE_DEFAULT_DOMAIN
=
"bme"
OPENSTACK_KEYSTONE_URL
=
"https://oscircle.guest.ik.bme.hu:5000"
WEBSSO_ENABLED
=
True
#TODO: it is always enabled, refactor openstack_auth
OPENSTACK_KEYSTONE_URL
=
"https://10.4.1.19:5000"
\ No newline at end of file
OPENSTACK_SSL_NO_VERIFY
=
True
\ No newline at end of file
circle/circle/urls.py
View file @
c4d12b46
...
...
@@ -22,7 +22,7 @@ from django.core.urlresolvers import reverse
from
django.shortcuts
import
redirect
from
openstack_auth
import
utils
from
openstack_auth.views
import
login
from
openstack_auth.views
import
login
,
websso
admin
.
autodiscover
()
...
...
@@ -49,6 +49,7 @@ urlpatterns = [
url
(
r'^accounts/login/?$'
,
login
,
name
=
"accounts.login"
),
url
(
r'^accounts/'
,
include
(
'django.contrib.auth.urls'
)),
url
(
r'^auth/websso/$'
,
websso
,
name
=
'websso'
),
# url(r'^two-factor-login/$', TwoFactorLoginView.as_view(),
# name="two-factor-login"),
#
...
...
circle/dashboard/forms.py
View file @
c4d12b46
...
...
@@ -53,7 +53,7 @@ from django.core.urlresolvers import reverse_lazy
from
firewall.models
import
Vlan
,
Host
from
vm.models
import
(
InstanceTemplate
,
Lease
,
InterfaceTemplate
,
Node
,
Trait
,
Instance
InstanceTemplate
,
Lease
,
InterfaceTemplate
,
Trait
,
Instance
)
from
storage.models
import
DataStore
,
Disk
from
django.contrib.admin.widgets
import
FilteredSelectMultiple
...
...
@@ -62,8 +62,6 @@ from .models import Profile, GroupProfile, Message
from
circle.settings.base
import
LANGUAGES
,
MAX_NODE_RAM
from
django.utils.translation
import
string_concat
from
.validators
import
domain_validator
from
dashboard.models
import
ConnectCommand
from
openstack_auth.user_key
import
UserKey
...
...
@@ -412,97 +410,6 @@ class HostForm(NoFormTagMixin, forms.ModelForm):
model
=
Host
fields
=
[
'hostname'
,
'vlan'
,
'mac'
,
'ipv4'
,
]
class
NodeForm
(
forms
.
ModelForm
):
def
__init__
(
self
,
*
args
,
**
kwargs
):
super
(
NodeForm
,
self
)
.
__init__
(
*
args
,
**
kwargs
)
self
.
helper
=
FormHelper
(
self
)
self
.
helper
.
form_show_labels
=
False
self
.
helper
.
layout
=
Layout
(
Div
(
Div
(
Div
(
Div
(
AnyTag
(
'h3'
,
HTML
(
_
(
"Node"
)),
),
css_class
=
"col-sm-3"
,
),
css_class
=
"row"
,
),
Div
(
Div
(
# nodename
HTML
(
'<label for="node-nodename-box">'
'Name'
'</label>'
),
css_class
=
"col-sm-3"
,
),
Div
(
'name'
,
css_class
=
"col-sm-9"
,
),
css_class
=
"row"
,
),
Div
(
Div
(
# priority
HTML
(
'<label for="node-nodename-box">'
'Priority'
'</label>'
),
css_class
=
"col-sm-3"
,
),
Div
(
'priority'
,
css_class
=
"col-sm-9"
,
),
css_class
=
"row"
,
),
Div
(
Div
(
# enabled
HTML
(
'<label for="node-nodename-box">'
'Enabled'
'</label>'
),
css_class
=
"col-sm-3"
,
),
Div
(
'enabled'
,
css_class
=
"col-sm-9"
,
),
css_class
=
"row"
,
),
Div
(
# nested host
HTML
(
"""{
%
load crispy_forms_tags
%
}
{
%
crispy hostform
%
}
"""
)
),
Div
(
Div
(
AnyTag
(
# tip: don't try to use Button class
"button"
,
AnyTag
(
"i"
,
css_class
=
"fa fa-play"
),
HTML
(
"Start"
),
css_id
=
"node-create-submit"
,
css_class
=
"btn btn-success"
,
),
css_class
=
"col-sm-12 text-right"
,
),
css_class
=
"row"
,
),
css_class
=
"col-sm-11"
,
),
css_class
=
"row"
,
),
)
class
Meta
:
model
=
Node
fields
=
[
'name'
,
'priority'
,
'enabled'
,
]
class
TemplateForm
(
forms
.
ModelForm
):
# networks = forms.ModelMultipleChoiceField(queryset=None, required=False, label=_("Networks"))
#
...
...
circle/dashboard/tables.py
View file @
c4d12b46
...
...
@@ -27,7 +27,7 @@ from django_tables2.columns import (
)
from
storage.models
import
Disk
from
vm.models
import
Node
,
InstanceTemplate
,
Lease
from
vm.models
import
InstanceTemplate
,
Lease
from
dashboard.models
import
ConnectCommand
,
Message
from
openstack_auth.user_key
import
UserKey
...
...
@@ -57,58 +57,58 @@ class ApplianceColumn(TemplateColumn):
return
mark_safe
(
"
%
s
%
s"
%
(
abbr
%
(
title
,
text
),
value
))
class
NodeListTable
(
Table
):
pk
=
Column
(
verbose_name
=
"ID"
,
attrs
=
{
'th'
:
{
'class'
:
'node-list-table-thin'
}},
)
overcommit
=
Column
(
verbose_name
=
_
(
"Overcommit"
),
attrs
=
{
'th'
:
{
'class'
:
'node-list-table-thin'
}},
)
get_status_display
=
Column
(
verbose_name
=
_
(
"Status"
),
attrs
=
{
'th'
:
{
'class'
:
'node-list-table-thin'
}},
order_by
=
(
"enabled"
,
"schedule_enabled"
),
)
name
=
TemplateColumn
(
template_name
=
"dashboard/node-list/column-name.html"
,
order_by
=
"normalized_name"
)
priority
=
Column
(
attrs
=
{
'th'
:
{
'class'
:
'node-list-table-thin'
}},
)
number_of_VMs
=
TemplateColumn
(
verbose_name
=
_
(
"Number of VMs"
),
template_name
=
'dashboard/node-list/column-vm.html'
,
attrs
=
{
'th'
:
{
'class'
:
'node-list-table-thin'
}},
)
monitor
=
TemplateColumn
(
verbose_name
=
_
(
"Monitor"
),
template_name
=
'dashboard/node-list/column-monitor.html'
,
attrs
=
{
'th'
:
{
'class'
:
'node-list-table-monitor'
}},
orderable
=
False
,
)
minion_online
=
BooleanColumn
(
verbose_name
=
_
(
"Minion online"
),
attrs
=
{
'th'
:
{
'class'
:
'node-list-table-thin'
}},
orderable
=
False
,
)
class
Meta
:
model
=
Node
attrs
=
{
'class'
:
(
'table table-bordered table-striped table-hover '
'node-list-table'
)}
fields
=
(
'pk'
,
'name'
,
'host'
,
'get_status_display'
,
'priority'
,
'minion_online'
,
'overcommit'
,
'number_of_VMs'
,
)
#
class NodeListTable(Table):
#
#
pk = Column(
#
verbose_name="ID",
#
attrs={'th': {'class': 'node-list-table-thin'}},
#
)
#
#
overcommit = Column(
#
verbose_name=_("Overcommit"),
#
attrs={'th': {'class': 'node-list-table-thin'}},
#
)
#
#
get_status_display = Column(
#
verbose_name=_("Status"),
#
attrs={'th': {'class': 'node-list-table-thin'}},
#
order_by=("enabled", "schedule_enabled"),
#
)
#
#
name = TemplateColumn(
#
template_name="dashboard/node-list/column-name.html",
#
order_by="normalized_name"
#
)
#
#
priority = Column(
#
attrs={'th': {'class': 'node-list-table-thin'}},
#
)
#
#
number_of_VMs = TemplateColumn(
#
verbose_name=_("Number of VMs"),
#
template_name='dashboard/node-list/column-vm.html',
#
attrs={'th': {'class': 'node-list-table-thin'}},
#
)
#
#
monitor = TemplateColumn(
#
verbose_name=_("Monitor"),
#
template_name='dashboard/node-list/column-monitor.html',
#
attrs={'th': {'class': 'node-list-table-monitor'}},
#
orderable=False,
#
)
#
#
minion_online = BooleanColumn(
#
verbose_name=_("Minion online"),
#
attrs={'th': {'class': 'node-list-table-thin'}},
#
orderable=False,
#
)
#
#
class Meta:
#
model = Node
#
attrs = {'class': ('table table-bordered table-striped table-hover '
#
'node-list-table')}
#
fields = ('pk', 'name', 'host', 'get_status_display', 'priority',
#
'minion_online', 'overcommit', 'number_of_VMs', )
class
GroupListTable
(
Table
):
...
...
circle/dashboard/templates/auth/login.html
View file @
c4d12b46
...
...
@@ -14,7 +14,7 @@
{% include "display-form-errors.html" %}
</div>
{% endif %}
<div
class=
"col-xs-
{% if saml2 %}6{% else %}12{% endif %}
"
>
<div
class=
"col-xs-
6
"
>
<div
class=
"login-form"
>
<form
method=
"POST"
>
{% csrf_token %}
...
...
@@ -34,11 +34,15 @@
</form>
</div>
</div>
{% if saml2 %}
<div
class=
"col-xs-6"
>
<h4
style=
"padding-top: 0; margin-top: 20px;"
>
{% trans "Login with SSO" %}
</h4>
<a
href=
"{% url "
saml2_login
"
%}"
>
{% trans "Click here!" %}
</a>
<form
method=
"POST"
>
{% csrf_token %}
<button
type=
"submit"
class=
"btn btn-success"
>
{% trans "Click here!" %}
</button>
<input
type=
"hidden"
name=
"username"
>
<input
type=
"hidden"
name=
"password"
>
<input
type=
"hidden"
name=
"auth_type"
value=
"saml2"
>
</form>
</div>
{% endif %}
</div>
{% endblock %}
circle/dashboard/validators.py
View file @
c4d12b46
...
...
@@ -18,7 +18,6 @@
from
django.core.exceptions
import
ValidationError
from
django.utils.translation
import
ugettext_lazy
as
_
from
lxml
import
etree
as
ET
import
logging
rng_file
=
"/usr/share/libvirt/schemas/domain.rng"
...
...
@@ -31,25 +30,6 @@ footer = "</domain>"
logger
=
logging
.
getLogger
()
def
domain_validator
(
value
):
xml
=
header
+
value
+
footer
try
:
parsed_xml
=
ET
.
fromstring
(
xml
)
except
Exception
as
e
:
raise
ValidationError
(
e
.
message
)
try
:
relaxng
=
ET
.
RelaxNG
(
file
=
rng_file
)
except
:
logger
.
critical
(
"
%
s RelaxNG libvirt domain schema file "
"is missing for validation."
,
rng_file
)
else
:
try
:
relaxng
.
assertValid
(
parsed_xml
)
except
Exception
as
e
:
raise
ValidationError
(
e
.
message
)
def
connect_command_template_validator
(
value
):
"""Validate value as a connect command template.
...
...
circle/dashboard/views/index.py
View file @
c4d12b46
...
...
@@ -25,7 +25,7 @@ from django.conf import settings
from
django.contrib.auth.models
import
Group
,
User
from
django.core.cache
import
cache
from
django.views.generic
import
TemplateView
from
vm.models
import
Instance
,
Node
,
InstanceTemplate
from
vm.models
import
Instance
,
InstanceTemplate
from
dashboard.views.vm
import
vm_ops
from
network.models
import
Vxlan
...
...
circle/openstack_auth/views.py
View file @
c4d12b46
...
...
@@ -61,6 +61,8 @@ def login(request, template_name=None, extra_context=None, **kwargs):
auth_type
=
request
.
POST
.
get
(
'auth_type'
,
'credentials'
)
if
utils
.
is_websso_enabled
()
and
auth_type
!=
'credentials'
:
auth_url
=
request
.
POST
.
get
(
'region'
)
if
auth_url
is
None
:
auth_url
=
settings
.
OPENSTACK_KEYSTONE_URL
+
'/v3'
url
=
utils
.
get_websso_url
(
request
,
auth_url
,
auth_type
)
return
shortcuts
.
redirect
(
url
)
...
...
circle/vm/admin.py
View file @
c4d12b46
...
...
@@ -18,8 +18,7 @@
from
django.contrib
import
admin
from
.models
import
(
Instance
,
InstanceActivity
,
InstanceTemplate
,
Interface
,
InterfaceTemplate
,
Lease
,
NamedBaseResourceConfig
,
Node
,
NodeActivity
,
Trait
)
InterfaceTemplate
,
Lease
,
NamedBaseResourceConfig
,
Trait
)
class
InstanceActivityAdmin
(
admin
.
ModelAdmin
):
...
...
@@ -33,6 +32,4 @@ admin.site.register(Interface)
admin
.
site
.
register
(
InterfaceTemplate
)
admin
.
site
.
register
(
Lease
)
admin
.
site
.
register
(
NamedBaseResourceConfig
)
admin
.
site
.
register
(
Node
)
admin
.
site
.
register
(
NodeActivity
)
admin
.
site
.
register
(
Trait
)
circle/vm/models/__init__.py
View file @
c4d12b46
# flake8: noqa
from
.activity
import
InstanceActivity
from
.activity
import
NodeActivity
from
.activity
import
node_activity
from
.common
import
BaseResourceConfigModel
from
.common
import
Lease
from
.common
import
NamedBaseResourceConfig
...
...
@@ -13,12 +11,10 @@ from .instance import post_state_changed
from
.instance
import
pre_state_changed
from
.network
import
InterfaceTemplate
from
.network
import
Interface
from
.node
import
Node
__all__
=
[
'InstanceActivity'
,
'BaseResourceConfigModel'
,
'NamedBaseResourceConfig'
,
'VirtualMachineDescModel'
,
'InstanceTemplate'
,
'Instance'
,
'post_state_changed'
,
'pre_state_changed'
,
'InterfaceTemplate'
,
'Interface'
,
'Trait'
,
'Node'
,
'NodeActivity'
,
'Lease'
,
'node_activity'
,
'pwgen'
'Interface'
,
'Trait'
,
'NodeActivity'
,
'Lease'
,
'node_activity'
]
circle/vm/models/activity.py
View file @
c4d12b46
...
...
@@ -196,71 +196,6 @@ class InstanceActivity(ActivityModel):
return
self
.
instance
.
get_operation_from_activity_code
(
self
.
activity_code
)
class
NodeActivity
(
ActivityModel
):
ACTIVITY_CODE_BASE
=
join_activity_code
(
'vm'
,
'Node'
)
node
=
ForeignKey
(
'Node'
,
related_name
=
'activity_log'
,
help_text
=
_
(
'Node this activity works on.'
),
verbose_name
=
_
(
'node'
))
class
Meta
:
app_label
=
'vm'
db_table
=
'vm_nodeactivity'
def
get_operation
(
self
):
return
self
.
node
.
get_operation_from_activity_code
(
self
.
activity_code
)
def
get_absolute_url
(
self
):
return
reverse
(
'dashboard.views.node-activity'
,
args
=
[
self
.
pk
])
def
__unicode__
(
self
):
if
self
.
parent
:
return
'{}({})->{}'
.
format
(
self
.
parent
.
activity_code
,
self
.
node
,
self
.
activity_code
)
else
:
return
'{}({})'
.
format
(
self
.
activity_code
,
self
.
node
)
@classmethod
def
create
(
cls
,
code_suffix
,
node
,
task_uuid
=
None
,
user
=
None
,
readable_name
=
None
):
readable_name
=
_normalize_readable_name
(
readable_name
,
code_suffix
)
activity_code
=
join_activity_code
(
cls
.
ACTIVITY_CODE_BASE
,
code_suffix
)
act
=
cls
(
activity_code
=
activity_code
,
node
=
node
,
parent
=
None
,
readable_name_data
=
readable_name
.
to_dict
(),
started
=
timezone
.
now
(),
task_uuid
=
task_uuid
,
user
=
user
)
act
.
save
()
return
act
def
create_sub
(
self
,
code_suffix
,
task_uuid
=
None
,
readable_name
=
None
):
readable_name
=
_normalize_readable_name
(
readable_name
,
code_suffix
)
act
=
NodeActivity
(
activity_code
=
join_activity_code
(
self
.
activity_code
,
code_suffix
),
node
=
self
.
node
,
parent
=
self
,
started
=
timezone
.
now
(),
readable_name_data
=
readable_name
.
to_dict
(),
task_uuid
=
task_uuid
,
user
=
self
.
user
)
act
.
save
()
return
act
@contextmanager
def
sub_activity
(
self
,
code_suffix
,
task_uuid
=
None
,
readable_name
=
None
):
act
=
self
.
create_sub
(
code_suffix
,
task_uuid
,
readable_name
=
readable_name
)
return
activitycontextimpl
(
act
)
@contextmanager
def
node_activity
(
code_suffix
,
node
,
task_uuid
=
None
,
user
=
None
,
readable_name
=
None
):
act
=
NodeActivity
.
create
(
code_suffix
,
node
,
task_uuid
,
user
,
readable_name
=
readable_name
)
return
activitycontextimpl
(
act
)
def
cleanup
(
conf
=
None
,
**
kwargs
):
# TODO check if other manager workers are running
msg_txt
=
ugettext_noop
(
"Manager is restarted, activity is cleaned up. "
...
...
circle/vm/models/instance.py
View file @
c4d12b46
...
...
@@ -51,7 +51,6 @@ from ..tasks import agent_tasks
from
.activity
import
(
ActivityInProgressError
,
InstanceActivity
)
from
.common
import
BaseResourceConfigModel
,
Lease
from
.network
import
Interface
from
.node
import
Node
,
Trait
from
network.models
import
EditorElement
...
...
@@ -109,11 +108,6 @@ class VirtualMachineDescModel(BaseResourceConfigModel):
verbose_name
=
_
(
"Lease"
))
raw_data
=
TextField
(
verbose_name
=
_
(
'raw_data'
),
blank
=
True
,
help_text
=
_
(
'Additional libvirt domain parameters in XML format.'
))
req_traits
=
ManyToManyField
(
Trait
,
blank
=
True
,
help_text
=
_
(
"A set of traits required for a "
"node to declare to be suitable "
"for hosting the VM."
),
verbose_name
=
_
(
"required traits"
))
system
=
TextField
(
verbose_name
=
_
(
'operating system'
),
help_text
=
(
_
(
'Name of operating system in format like '
'"Ubuntu 12.04 LTS Desktop amd64".'
)))
...
...
@@ -222,10 +216,6 @@ class Instance(OperatedMixin, TimeStampedModel):
verbose_name
=
_
(
'time of delete'
),
help_text
=
_
(
"Proposed time of automatic "
"deletion."
))
node
=
ForeignKey
(
Node
,
blank
=
True
,
null
=
True
,
related_name
=
'instance_set'
,
help_text
=
_
(
"Current hypervisor of this instance."
),
verbose_name
=
_
(
'host node'
))
disks
=
ManyToManyField
(
'storage.Disk'
,
related_name
=
'instance_set'
,
help_text
=
_
(
"Set of mounted disks."
),
verbose_name
=
_
(
'disks'
))
...
...
circle/vm/operations.py
View file @
c4d12b46
...
...
@@ -50,8 +50,7 @@ from .tasks.local_tasks import (
abortable_async_instance_operation
,
abortable_async_node_operation
,
)
from
.models
import
(
Instance
,
InstanceActivity
,
InstanceTemplate
,
Interface
,
Node
,
NodeActivity
Instance
,
InstanceActivity
,
InstanceTemplate
,
Interface
)
from
.tasks
import
agent_tasks
,
vm_tasks
...
...
@@ -755,7 +754,7 @@ class RedeployOperation(InstanceOperation):
class
NodeOperation
(
Operation
):
async_operation
=
abortable_async_node_operation
host_cls
=
No
d
e
host_cls
=
No
n
e
online_required
=
True
superuser_required
=
True
...
...
@@ -790,195 +789,195 @@ class NodeOperation(Operation):
code_suffix
=
self
.
get_activity_code_suffix
(),
node
=
self
.
node
,
user
=
user
,
readable_name
=
name
)
@register_operation
class
ResetNodeOperation
(
NodeOperation
):
id
=
'reset'
name
=
_
(
"reset"
)
description
=
_
(
"Disable missing node and redeploy all instances "
"on other ones."
)
required_perms
=
()
online_required
=
False
async_queue
=
"localhost.man.slow"
def
check_precond
(
self
):
super
(
ResetNodeOperation
,
self
)
.
check_precond
()
if
not
self
.
node
.
enabled
or
self
.
node
.
online
:
raise
humanize_exception
(
ugettext_noop
(
"You cannot reset a disabled or online node."
),
Exception
())
def
_operation
(
self
,
activity
,
user
):
for
i
in
self
.
node
.
instance_set
.
all
():
name
=
create_readable
(
ugettext_noop
(
"redeploy
%(instance)
s (
%(pk)
s)"
),
instance
=
i
.
name
,
pk
=
i
.
pk
)
with
activity
.
sub_activity
(
'migrate_instance_
%
d'
%
i
.
pk
,
readable_name
=
name
):
i
.
redeploy
(
user
=
user
)
self
.
node
.
enabled
=
False
self
.
node
.
schedule_enabled
=
False
self
.
node
.
save
()
@register_operation
class
FlushOperation
(
NodeOperation
):
id
=
'flush'
name
=
_
(
"flush"
)
description
=
_
(
"Passivate node and move all instances to other ones."
)
required_perms
=
()
async_queue
=
"localhost.man.slow"
def
_operation
(
self
,
activity
,
user
):
if
self
.
node
.
schedule_enabled
:
PassivateOperation
(
self
.
node
)
.
call
(
parent_activity
=
activity
,
user
=
user
)
for
i
in
self
.
node
.
instance_set
.
all
():
name
=
create_readable
(
ugettext_noop
(
"migrate
%(instance)
s (
%(pk)
s)"
),
instance
=
i
.
name
,
pk
=
i
.
pk
)
with
activity
.
sub_activity
(
'migrate_instance_
%
d'
%
i
.
pk
,
readable_name
=
name
):
i
.
migrate
(
user
=
user
)
@register_operation
class
ActivateOperation
(
NodeOperation
):
id
=
'activate'
name
=
_
(
"activate"
)
description
=
_
(
"Make node active, i.e. scheduler is allowed to deploy "
"virtual machines to it."
)
required_perms
=
()
def
check_precond
(
self
):
super
(
ActivateOperation
,
self
)
.
check_precond
()
if
self
.
node
.
enabled
and
self
.
node
.
schedule_enabled
:
raise
humanize_exception
(
ugettext_noop
(
"You cannot activate an active node."
),
Exception
())
def
_operation
(
self
):
self
.
node
.
enabled
=
True
self
.
node
.
schedule_enabled
=
True
self
.
node
.
get_info
(
invalidate_cache
=
True
)
self
.
node
.
save
()
@register_operation
class
PassivateOperation
(
NodeOperation
):
id
=
'passivate'
name
=
_
(
"passivate"
)
description
=
_
(
"Make node passive, i.e. scheduler is denied to deploy "
"virtual machines to it, but remaining instances and "
"the ones manually migrated will continue running."
)
required_perms
=
()
def
check_precond
(
self
):
if
self
.
node
.
enabled
and
not
self
.
node
.
schedule_enabled
:
raise
humanize_exception
(
ugettext_noop
(
"You cannot passivate a passive node."
),
Exception
())
super
(
PassivateOperation
,
self
)
.
check_precond
()
def
_operation
(
self
):
self
.
node
.
enabled
=
True
self
.
node
.
schedule_enabled
=
False
self
.
node
.
get_info
(
invalidate_cache
=
True
)
self
.
node
.
save
()
@register_operation
class
DisableOperation
(
NodeOperation
):
id
=
'disable'
name
=
_
(
"disable"
)
description
=
_
(
"Disable node."
)
required_perms
=
()
online_required
=
False
def
check_precond
(
self
):
if
not
self
.
node
.
enabled
:
raise
humanize_exception
(
ugettext_noop
(
"You cannot disable a disabled node."
),
Exception
())
if
self
.
node
.
instance_set
.
exists
():
raise
humanize_exception
(
ugettext_noop
(
"You cannot disable a node which is hosting instances."
),
Exception
())
super
(
DisableOperation
,
self
)
.
check_precond
()
def
_operation
(
self
):
self
.
node
.
enabled
=
False
self
.
node
.
schedule_enabled
=
False
self
.
node
.
save
()
@register_operation
class
UpdateNodeOperation
(
NodeOperation
):
id
=
'update_node'
name
=
_
(
"update node"
)
description
=
_
(
"Upgrade or install node software (vmdriver, agentdriver, "
"monitor-client) with Salt."
)
required_perms
=
()
online_required
=
False
async_queue
=
"localhost.man.slow"
def
minion_cmd
(
self
,
module
,
params
,
timeout
=
3600
):
# see https://git.ik.bme.hu/circle/cloud/issues/377
from
salt.client
import
LocalClient
name
=
self
.
node
.
host
.
hostname
client
=
LocalClient
()
data
=
client
.
cmd
(
name
,
module
,
params
,
timeout
=
timeout
)
try
:
data
=
data
[
name
]
except
KeyError
:
raise
HumanReadableException
.
create
(
ugettext_noop
(
"No minions matched the target (
%(target)
s). "
"Data: (
%(data)
s)"
),
target
=
name
,
data
=
data
)
if
not
isinstance
(
data
,
dict
):
raise
HumanReadableException
.
create
(
ugettext_noop
(
"Unhandled exception:
%(msg)
s"
),
msg
=
unicode
(
data
))
return
data
def
_operation
(
self
,
activity
):
with
activity
.
sub_activity
(
'upgrade_packages'
,
readable_name
=
ugettext_noop
(
'upgrade packages'
))
as
sa
:
data
=
self
.
minion_cmd
(
'pkg.upgrade'
,
[])
if
not
data
.
get
(
'result'
):
raise
HumanReadableException
.
create
(
ugettext_noop
(
"Unhandled exception:
%(msg)
s"
),
msg
=
unicode
(
data
))
# data = {'vim': {'new': '1.2.7', 'old': '1.3.7'}}
data
=
[
v
for
v
in
data
.
values
()
if
isinstance
(
v
,
dict
)]
upgraded
=
len
([
x
for
x
in
data
if
x
.
get
(
'old'
)
and
x
.
get
(
'new'
)])
installed
=
len
([
x
for
x
in
data
if
not
x
.
get
(
'old'
)
and
x
.
get
(
'new'
)])
removed
=
len
([
x
for
x
in
data
if
x
.
get
(
'old'
)
and
not
x
.
get
(
'new'
)])
sa
.
result
=
create_readable
(
ugettext_noop
(
"Upgraded:
%(upgraded)
s, Installed:
%(installed)
s, "
"Removed:
%(removed)
s"
),
upgraded
=
upgraded
,
installed
=
installed
,
removed
=
removed
)
data
=
self
.
minion_cmd
(
'state.sls'
,
[
'node'
])
failed
=
0
for
k
,
v
in
data
.
iteritems
():
logger
.
debug
(
'salt state
%
s
%
s'
,
k
,
v
)
act_name
=
': '
.
join
(
k
.
split
(
'_|-'
)[:
2
])
if
not
v
[
"result"
]
or
v
[
"changes"
]:
act
=
activity
.
create_sub
(
act_name
[:
70
],
readable_name
=
act_name
)
act
.
result
=
create_readable
(
ugettext_noop
(
"Changes:
%(changes)
s Comment:
%(comment)
s"
),
changes
=
v
[
"changes"
],
comment
=
v
[
"comment"
])
act
.
finish
(
v
[
"result"
])
if
not
v
[
"result"
]:
failed
+=
1
if
failed
:
raise
HumanReadableException
.
create
(
ugettext_noop
(
"Failed:
%(failed)
s"
),
failed
=
failed
)
#
#
@register_operation
#
class ResetNodeOperation(NodeOperation):
#
id = 'reset'
#
name = _("reset")
#
description = _("Disable missing node and redeploy all instances "
#
"on other ones.")
#
required_perms = ()
#
online_required = False
#
async_queue = "localhost.man.slow"
#
#
def check_precond(self):
#
super(ResetNodeOperation, self).check_precond()
#
if not self.node.enabled or self.node.online:
#
raise humanize_exception(ugettext_noop(
#
"You cannot reset a disabled or online node."), Exception())
#
#
def _operation(self, activity, user):
#
for i in self.node.instance_set.all():
#
name = create_readable(ugettext_noop(
#
"redeploy %(instance)s (%(pk)s)"), instance=i.name, pk=i.pk)
#
with activity.sub_activity('migrate_instance_%d' % i.pk,
#
readable_name=name):
#
i.redeploy(user=user)
#
#
self.node.enabled = False
#
self.node.schedule_enabled = False
#
self.node.save()
#
@register_operation
#
class FlushOperation(NodeOperation):
#
id = 'flush'
#
name = _("flush")
#
description = _("Passivate node and move all instances to other ones.")
#
required_perms = ()
#
async_queue = "localhost.man.slow"
#
#
def _operation(self, activity, user):
#
if self.node.schedule_enabled:
#
PassivateOperation(self.node).call(parent_activity=activity,
#
user=user)
#
for i in self.node.instance_set.all():
#
name = create_readable(ugettext_noop(
#
"migrate %(instance)s (%(pk)s)"), instance=i.name, pk=i.pk)
#
with activity.sub_activity('migrate_instance_%d' % i.pk,
#
readable_name=name):
#
i.migrate(user=user)
#
#
#
@register_operation
#
class ActivateOperation(NodeOperation):
#
id = 'activate'
#
name = _("activate")
#
description = _("Make node active, i.e. scheduler is allowed to deploy "
#
"virtual machines to it.")
#
required_perms = ()
#
#
def check_precond(self):
#
super(ActivateOperation, self).check_precond()
#
if self.node.enabled and self.node.schedule_enabled:
#
raise humanize_exception(ugettext_noop(
#
"You cannot activate an active node."), Exception())
#
#
def _operation(self):
#
self.node.enabled = True
#
self.node.schedule_enabled = True
#
self.node.get_info(invalidate_cache=True)
#
self.node.save()
#
#
#
@register_operation
#
class PassivateOperation(NodeOperation):
#
id = 'passivate'
#
name = _("passivate")
#
description = _("Make node passive, i.e. scheduler is denied to deploy "
#
"virtual machines to it, but remaining instances and "
#
"the ones manually migrated will continue running.")
#
required_perms = ()
#
#
def check_precond(self):
#
if self.node.enabled and not self.node.schedule_enabled:
#
raise humanize_exception(ugettext_noop(
#
"You cannot passivate a passive node."), Exception())
#
super(PassivateOperation, self).check_precond()
#
#
def _operation(self):
#
self.node.enabled = True
#
self.node.schedule_enabled = False
#
self.node.get_info(invalidate_cache=True)
#
self.node.save()
#
#
#
@register_operation
#
class DisableOperation(NodeOperation):
#
id = 'disable'
#
name = _("disable")
#
description = _("Disable node.")
#
required_perms = ()
#
online_required = False
#
#
def check_precond(self):
#
if not self.node.enabled:
#
raise humanize_exception(ugettext_noop(
#
"You cannot disable a disabled node."), Exception())
#
if self.node.instance_set.exists():
#
raise humanize_exception(ugettext_noop(
#
"You cannot disable a node which is hosting instances."),
#
Exception())
#
super(DisableOperation, self).check_precond()
#
#
def _operation(self):
#
self.node.enabled = False
#
self.node.schedule_enabled = False
#
self.node.save()
#
#
#
@register_operation
#
class UpdateNodeOperation(NodeOperation):
#
id = 'update_node'
#
name = _("update node")
#
description = _("Upgrade or install node software (vmdriver, agentdriver, "
#
"monitor-client) with Salt.")
#
required_perms = ()
#
online_required = False
#
async_queue = "localhost.man.slow"
#
#
def minion_cmd(self, module, params, timeout=3600):
#
# see https://git.ik.bme.hu/circle/cloud/issues/377
#
from salt.client import LocalClient
#
name = self.node.host.hostname
#
client = LocalClient()
#
data = client.cmd(
#
name, module, params, timeout=timeout)
#
#
try:
#
data = data[name]
#
except KeyError:
#
raise HumanReadableException.create(ugettext_noop(
#
"No minions matched the target (%(target)s). "
#
"Data: (%(data)s)"), target=name, data=data)
#
#
if not isinstance(data, dict):
#
raise HumanReadableException.create(ugettext_noop(
#
"Unhandled exception: %(msg)s"), msg=unicode(data))
#
#
return data
#
#
def _operation(self, activity):
#
with activity.sub_activity(
#
'upgrade_packages',
#
readable_name=ugettext_noop('upgrade packages')) as sa:
#
data = self.minion_cmd('pkg.upgrade', [])
#
if not data.get('result'):
#
raise HumanReadableException.create(ugettext_noop(
#
"Unhandled exception: %(msg)s"), msg=unicode(data))
#
#
# data = {'vim': {'new': '1.2.7', 'old': '1.3.7'}}
#
data = [v for v in data.values() if isinstance(v, dict)]
#
upgraded = len([x for x in data
#
if x.get('old') and x.get('new')])
#
installed = len([x for x in data
#
if not x.get('old') and x.get('new')])
#
removed = len([x for x in data
#
if x.get('old') and not x.get('new')])
#
sa.result = create_readable(ugettext_noop(
#
"Upgraded: %(upgraded)s, Installed: %(installed)s, "
#
"Removed: %(removed)s"), upgraded=upgraded,
#
installed=installed, removed=removed)
#
#
data = self.minion_cmd('state.sls', ['node'])
#
failed = 0
#
for k, v in data.iteritems():
#
logger.debug('salt state %s %s', k, v)
#
act_name = ': '.join(k.split('_|-')[:2])
#
if not v["result"] or v["changes"]:
#
act = activity.create_sub(
#
act_name[:70], readable_name=act_name)
#
act.result = create_readable(ugettext_noop(
#
"Changes: %(changes)s Comment: %(comment)s"),
#
changes=v["changes"], comment=v["comment"])
#
act.finish(v["result"])
#
if not v["result"]:
#
failed += 1
#
#
if failed:
#
raise HumanReadableException.create(ugettext_noop(
#
"Failed: %(failed)s"), failed=failed)
#
@register_operation
class
ScreenshotOperation
(
RemoteInstanceOperation
):
...
...
requirements/circlestack.txt
View file @
c4d12b46
...
...
@@ -59,15 +59,11 @@ jsonschema==2.6.0
keystoneauth1==3.4.0
kombu==3.0.30
logutils==0.3.3
lxml==3.4.4
MarkupSafe==0.23
microsofttranslator==0.8
models==0.9.3
MarkupSafe==1.0
monotonic==1.4
msgpack==0.5.4
msgpack-python==0.5.4
munch==2.2.0
MySQL-python==1.2.5
netaddr==0.7.19
netifaces==0.10.6
nltk==3.2.5
...
...
@@ -95,14 +91,12 @@ ply==3.10
polib==1.1.0
prettytable==0.7.2
prompt-toolkit==1.0.15
psycopg2==2.6
ptyprocess==0.5.2
pyasn1==0.4.2
pycparser==2.18
pycryptodomex==3.4.12
Pygments==2.0.2
pyinotify==0.9.5
pylibmc==1.4.3
PyNaCl==1.2.1
pyOpenSSL==17.5.0
pyotp==2.1.1
...
...
@@ -122,7 +116,6 @@ requests==2.18.4
requestsexceptions==1.4.0
rfc3986==1.1.0
rosetta==0.3
salt==2014.7.0
scandir==1.7
scipy==1.0.0
semantic-version==2.6.0
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment