Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
Gelencsér Szabolcs
/
circlestack
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
A prog2-höz tartozó friss repo anyagok itt elérhetőek:
https://git.iit.bme.hu/
Commit
fda9c192
authored
Mar 03, 2018
by
Szabolcs Gelencser
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
implement network create, details
parent
327e7892
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
368 additions
and
376 deletions
+368
-376
.idea/workspace.xml
+296
-227
circle/circle/db.sqlite3
+0
-0
circle/dashboard/templates/dashboard/index-vxlans.html
+1
-1
circle/dashboard/views/index.py
+1
-1
circle/network/forms.py
+8
-18
circle/network/models.py
+5
-1
circle/network/templates/network/vxlan-create.html
+9
-7
circle/network/templates/network/vxlan-edit.html
+3
-8
circle/network/urls.py
+3
-2
circle/network/views.py
+41
-110
circle/openstack_api/nova.py
+1
-1
No files found.
.idea/workspace.xml
View file @
fda9c192
...
...
@@ -2,23 +2,17 @@
<project
version=
"4"
>
<component
name=
"ChangeListManager"
>
<list
default=
"true"
id=
"1fbec8af-5a7c-40f9-b994-83ac07d1ae1d"
name=
"Default"
comment=
""
>
<change
beforePath=
""
afterPath=
"$PROJECT_DIR$/circle/dashboard/templates/dashboard/vm-plain-image-create.html"
/>
<change
beforePath=
""
afterPath=
"$PROJECT_DIR$/circle/openstack_api/policy.py"
/>
<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/dashboard/forms.py"
afterPath=
"$PROJECT_DIR$/circle/dashboard/forms.py"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/dashboard/templates/dashboard/_vm-create-1.html"
afterPath=
"$PROJECT_DIR$/circle/dashboard/templates/dashboard/_vm-create-1.html"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/dashboard/urls.py"
afterPath=
"$PROJECT_DIR$/circle/dashboard/urls.py"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/dashboard/templates/dashboard/index-vxlans.html"
afterPath=
"$PROJECT_DIR$/circle/dashboard/templates/dashboard/index-vxlans.html"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/dashboard/views/index.py"
afterPath=
"$PROJECT_DIR$/circle/dashboard/views/index.py"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/dashboard/views/util.py"
afterPath=
"$PROJECT_DIR$/circle/dashboard/views/util.py"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/dashboard/views/vm.py"
afterPath=
"$PROJECT_DIR$/circle/dashboard/views/vm.py"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/network/forms.py"
afterPath=
"$PROJECT_DIR$/circle/network/forms.py"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/network/models.py"
afterPath=
"$PROJECT_DIR$/circle/network/models.py"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/openstack_api/__init__.py"
afterPath=
"$PROJECT_DIR$/circle/openstack_api/__init__.py"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/openstack_api/neutron.py"
afterPath=
"$PROJECT_DIR$/circle/openstack_api/neutron.py"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/network/templates/network/vxlan-create.html"
afterPath=
"$PROJECT_DIR$/circle/network/templates/network/vxlan-create.html"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/network/templates/network/vxlan-edit.html"
afterPath=
"$PROJECT_DIR$/circle/network/templates/network/vxlan-edit.html"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/network/urls.py"
afterPath=
"$PROJECT_DIR$/circle/network/urls.py"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/network/views.py"
afterPath=
"$PROJECT_DIR$/circle/network/views.py"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/openstack_api/nova.py"
afterPath=
"$PROJECT_DIR$/circle/openstack_api/nova.py"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/request/urls.py"
afterPath=
"$PROJECT_DIR$/circle/request/urls.py"
/>
<change
beforePath=
"$PROJECT_DIR$/circle/vm/models/instance.py"
afterPath=
"$PROJECT_DIR$/circle/vm/models/instance.py"
/>
</list>
<option
name=
"EXCLUDED_CONVERTED_TO_IGNORED"
value=
"true"
/>
<option
name=
"TRACKING_ENABLED"
value=
"true"
/>
...
...
@@ -44,11 +38,79 @@
</component>
<component
name=
"FileEditorManager"
>
<leaf
SIDE_TABS_SIZE_LIMIT_KEY=
"300"
>
<file
leaf-file-name=
"
__init__.py"
pinned=
"false"
current-in-tab=
"tru
e"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
openstack_api/__init__
.py"
>
<file
leaf-file-name=
"
urls.py"
pinned=
"false"
current-in-tab=
"fals
e"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
network/urls
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"284"
>
<caret
line=
"38"
column=
"0"
lean-forward=
"false"
selection-start-line=
"38"
selection-start-column=
"0"
selection-end-line=
"38"
selection-end-column=
"0"
/>
<state
relative-caret-position=
"227"
>
<caret
line=
"137"
column=
"0"
lean-forward=
"true"
selection-start-line=
"137"
selection-start-column=
"0"
selection-end-line=
"137"
selection-end-column=
"0"
/>
<folding>
<element
signature=
"e#732#764#0"
expanded=
"true"
/>
</folding>
</state>
</provider>
</entry>
</file>
<file
leaf-file-name=
"views.py"
pinned=
"false"
current-in-tab=
"true"
>
<entry
file=
"file://$PROJECT_DIR$/circle/network/views.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"204"
>
<caret
line=
"996"
column=
"38"
lean-forward=
"false"
selection-start-line=
"996"
selection-start-column=
"38"
selection-end-line=
"996"
selection-end-column=
"38"
/>
<folding>
<element
signature=
"e#732#746#0"
expanded=
"true"
/>
</folding>
</state>
</provider>
</entry>
</file>
<file
leaf-file-name=
"neutron.py"
pinned=
"false"
current-in-tab=
"false"
>
<entry
file=
"file://$PROJECT_DIR$/circle/openstack_api/neutron.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"201"
>
<caret
line=
"1053"
column=
"26"
lean-forward=
"false"
selection-start-line=
"1053"
selection-start-column=
"26"
selection-end-line=
"1053"
selection-end-column=
"26"
/>
<folding>
<element
signature=
"e#804#842#0"
expanded=
"true"
/>
</folding>
</state>
</provider>
</entry>
</file>
<file
leaf-file-name=
"vxlan-create.html"
pinned=
"false"
current-in-tab=
"false"
>
<entry
file=
"file://$PROJECT_DIR$/circle/network/templates/network/vxlan-create.html"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"1"
>
<caret
line=
"1"
column=
"7"
lean-forward=
"false"
selection-start-line=
"1"
selection-start-column=
"7"
selection-end-line=
"1"
selection-end-column=
"7"
/>
<folding
/>
</state>
</provider>
</entry>
</file>
<file
leaf-file-name=
"forms.py"
pinned=
"false"
current-in-tab=
"false"
>
<entry
file=
"file://$PROJECT_DIR$/circle/network/forms.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"324"
>
<caret
line=
"381"
column=
"0"
lean-forward=
"false"
selection-start-line=
"381"
selection-start-column=
"0"
selection-end-line=
"381"
selection-end-column=
"0"
/>
<folding>
<element
signature=
"e#732#775#0"
expanded=
"true"
/>
</folding>
</state>
</provider>
</entry>
</file>
<file
leaf-file-name=
"vxlan-edit.html"
pinned=
"false"
current-in-tab=
"false"
>
<entry
file=
"file://$PROJECT_DIR$/circle/network/templates/network/vxlan-edit.html"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"289"
>
<caret
line=
"23"
column=
"27"
lean-forward=
"false"
selection-start-line=
"23"
selection-start-column=
"27"
selection-end-line=
"23"
selection-end-column=
"27"
/>
<folding
/>
</state>
</provider>
</entry>
</file>
<file
leaf-file-name=
"vm-plain-image-create.html"
pinned=
"false"
current-in-tab=
"false"
>
<entry
file=
"file://$PROJECT_DIR$/circle/dashboard/templates/dashboard/vm-plain-image-create.html"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"119"
>
<caret
line=
"7"
column=
"2"
lean-forward=
"false"
selection-start-line=
"7"
selection-start-column=
"2"
selection-end-line=
"16"
selection-end-column=
"9"
/>
<folding
/>
</state>
</provider>
...
...
@@ -66,17 +128,6 @@
</component>
<component
name=
"FindInProjectRecents"
>
<findStrings>
<find>
admin_and_matching_domain_id
</find>
<find>
network-editor
</find>
<find>
editor.es
</find>
<find>
editor.es6
</find>
<find>
{% cris
</find>
<find>
FormHelper
</find>
<find>
vxlan
</find>
<find>
disk
</find>
<find>
disk(
</find>
<find>
instance(
</find>
<find>
template
</find>
<find>
class
</find>
<find>
vmcreate
</find>
<find>
priority_choices
</find>
...
...
@@ -96,10 +147,22 @@
<find>
vmdeta
</find>
<find>
instanc
</find>
<find>
[a-z0-9-]+
</find>
<find>
network
</find>
<find>
(?P
<
pk
>
[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})
</find>
<find>
initial
</find>
<find>
ini
</find>
<find>
initi
</find>
<find>
initialOwner
</find>
<find>
initialow
</find>
<find>
VxlanForm
</find>
<find>
vxlancrea
</find>
<find>
forms
</find>
<find>
create
</find>
</findStrings>
<replaceStrings>
<replace>
'ACTIVE'
</replace>
<replace>
[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}
</replace>
<replace>
<
pk:slug
>
</replace>
</replaceStrings>
</component>
<component
name=
"Git.Settings"
>
...
...
@@ -108,11 +171,6 @@
<component
name=
"IdeDocumentHistory"
>
<option
name=
"CHANGED_PATHS"
>
<list>
<option
value=
"$PROJECT_DIR$/circle/dashboard/context_processors.py"
/>
<option
value=
"$PROJECT_DIR$/circle/openstack_auth/user.py"
/>
<option
value=
"$PROJECT_DIR$/circle/openstack_api/base.py"
/>
<option
value=
"$PROJECT_DIR$/circle/openstack_api/exceptions.py"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/templatetags/instance_tags.py"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/templates/dashboard/index-vm.html"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/templates/base.html"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/templates/dashboard/base.html"
/>
...
...
@@ -138,13 +196,9 @@
<option
value=
"$PROJECT_DIR$/circle/dashboard/templates/dashboard/index.html"
/>
<option
value=
"$PROJECT_DIR$/circle/circle/urls.py"
/>
<option
value=
"$PROJECT_DIR$/circle/common/views.py"
/>
<option
value=
"$PROJECT_DIR$/circle/network/views.py"
/>
<option
value=
"$PROJECT_DIR$/circle/network/templates/network/editor.html"
/>
<option
value=
"$PROJECT_DIR$/circle/circle/settings/static_and_pipeline.py"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/templates/auth/login.html"
/>
<option
value=
"$PROJECT_DIR$/circle/network/models.py"
/>
<option
value=
"$PROJECT_DIR$/circle/network/forms.py"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/views/index.py"
/>
<option
value=
"$PROJECT_DIR$/circle/storage/models.py"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/templates/dashboard/_vm-create-2.html"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/templates/dashboard/_vm-create-1.html"
/>
...
...
@@ -152,13 +206,22 @@
<option
value=
"$PROJECT_DIR$/circle/openstack_api/neutron.py"
/>
<option
value=
"$PROJECT_DIR$/circle/openstack_api/policy.py"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/forms.py"
/>
<option
value=
"$PROJECT_DIR$/circle/openstack_api/nova.py"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/templates/dashboard/vm-plain-image-create.html"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/views/vm.py"
/>
<option
value=
"$PROJECT_DIR$/circle/vm/models/instance.py"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/views/util.py"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/urls.py"
/>
<option
value=
"$PROJECT_DIR$/circle/request/urls.py"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/views/index.py"
/>
<option
value=
"$PROJECT_DIR$/circle/network/models.py"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/templates/dashboard/index-vxlans.html"
/>
<option
value=
"$PROJECT_DIR$/circle/openstack_api/base.py"
/>
<option
value=
"$PROJECT_DIR$/circle/dashboard/urls.py"
/>
<option
value=
"$PROJECT_DIR$/circle/network/urls.py"
/>
<option
value=
"$PROJECT_DIR$/circle/network/templates/network/vxlan-edit.html"
/>
<option
value=
"$PROJECT_DIR$/circle/openstack_api/nova.py"
/>
<option
value=
"$PROJECT_DIR$/circle/network/forms.py"
/>
<option
value=
"$PROJECT_DIR$/circle/network/templates/network/vxlan-create.html"
/>
<option
value=
"$PROJECT_DIR$/circle/network/views.py"
/>
</list>
</option>
</component>
...
...
@@ -228,20 +291,13 @@
<item
name=
"cloud"
type=
"b2602c69:ProjectViewProjectNode"
/>
<item
name=
"cloud"
type=
"462c0819:PsiDirectoryNode"
/>
<item
name=
"circle"
type=
"462c0819:PsiDirectoryNode"
/>
<item
name=
"
dashboard
"
type=
"462c0819:PsiDirectoryNode"
/>
<item
name=
"
network
"
type=
"462c0819:PsiDirectoryNode"
/>
</path>
<path>
<item
name=
"cloud"
type=
"b2602c69:ProjectViewProjectNode"
/>
<item
name=
"cloud"
type=
"462c0819:PsiDirectoryNode"
/>
<item
name=
"circle"
type=
"462c0819:PsiDirectoryNode"
/>
<item
name=
"dashboard"
type=
"462c0819:PsiDirectoryNode"
/>
<item
name=
"views"
type=
"462c0819:PsiDirectoryNode"
/>
</path>
<path>
<item
name=
"cloud"
type=
"b2602c69:ProjectViewProjectNode"
/>
<item
name=
"cloud"
type=
"462c0819:PsiDirectoryNode"
/>
<item
name=
"circle"
type=
"462c0819:PsiDirectoryNode"
/>
<item
name=
"request"
type=
"462c0819:PsiDirectoryNode"
/>
<item
name=
"openstack_api"
type=
"462c0819:PsiDirectoryNode"
/>
</path>
</expand>
<select
/>
...
...
@@ -256,7 +312,7 @@
<property
name=
"settings.editor.selected.configurable"
value=
"preferences.sourceCode.HTML"
/>
<property
name=
"NewWatcherDialog.advanced.open"
value=
"true"
/>
<property
name=
"DefaultHtmlFileTemplate"
value=
"HTML File"
/>
<property
name=
"SearchEverywhereHistoryKey"
value=
"
instance	FILE	file:///home/h3yduck/cloud/circle/vm/models/instance.py index	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/dashboard/index-vm.html
_vm-c	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/dashboard/_vm-create-1.html vmcrea	null	null loginV	null	null index.html	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/dashboard/index.html sleep	null	null Deploy	null	null Instance	null	null Vmdeta	null	null list_from	null	null aclupda	null	null base.htm	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/base.html method	ACTION	GoToMenuEx base.ht	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/base.html base.html	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/dashboard/base.html index.py	FILE	file:///home/h3yduck/cloud/circle/dashboard/views/index.py index.htm	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/dashboard/index.html server	null	null Disk	null	null"
/>
<property
name=
"SearchEverywhereHistoryKey"
value=
"
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 index	FILE	file:///home/h3yduck/cloud/circle/dashboard/views/index.py index-vxla	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/dashboard/index-vxlans.html instance	FILE	file:///home/h3yduck/cloud/circle/vm/models/instance.py
_vm-c	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/dashboard/_vm-create-1.html vmcrea	null	null loginV	null	null index.html	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/dashboard/index.html sleep	null	null Deploy	null	null Instance	null	null Vmdeta	null	null list_from	null	null aclupda	null	null base.htm	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/base.html method	ACTION	GoToMenuEx base.ht	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/base.html base.html	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/dashboard/base.html index.py	FILE	file:///home/h3yduck/cloud/circle/dashboard/views/index.py index.htm	FILE	file:///home/h3yduck/cloud/circle/dashboard/templates/dashboard/index.html server	null	null Disk	null	null"
/>
</component>
<component
name=
"RecentsManager"
>
<key
name=
"MoveFile.RECENT_KEYS"
>
...
...
@@ -332,15 +388,15 @@
<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=
"Event Log"
active=
"false"
anchor=
"bottom"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"false"
show_stripe_button=
"true"
weight=
"0.327818"
sideWeight=
"0.5021299"
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.32875264"
sideWeight=
"0.4978701"
order=
"2"
side_tool=
"false"
content_ui=
"tabs"
/>
<window_info
id=
"Version Control"
active=
"false"
anchor=
"bottom"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"
true"
show_stripe_button=
"true"
weight=
"0.3280757"
sideWeight=
"0.5
"
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.3280757"
sideWeight=
"0.5234139
"
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=
"Terminal"
active=
"false"
anchor=
"bottom"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"false"
show_stripe_button=
"true"
weight=
"0.
5264271"
sideWeight=
"0.44888178
"
order=
"7"
side_tool=
"true"
content_ui=
"tabs"
/>
<window_info
id=
"Terminal"
active=
"false"
anchor=
"bottom"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"false"
show_stripe_button=
"true"
weight=
"0.
3280757"
sideWeight=
"0.4765861
"
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.18504532"
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=
"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=
"Debug"
active=
"false"
anchor=
"bottom"
auto_hide=
"false"
internal_type=
"DOCKED"
type=
"DOCKED"
visible=
"false"
show_stripe_button=
"true"
weight=
"0.
35962147
"
sideWeight=
"0.5511182"
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.
24921136
"
sideWeight=
"0.5511182"
order=
"3"
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=
"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=
"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"
/>
...
...
@@ -424,7 +480,7 @@
</properties>
</breakpoint>
</default-breakpoints>
<option
name=
"time"
value=
"1
55
"
/>
<option
name=
"time"
value=
"1
61
"
/>
</breakpoint-manager>
<watches-manager
/>
</component>
...
...
@@ -457,114 +513,53 @@
</expressions>
<expressions
id=
"evaluateExpression"
>
<expression>
<expression-string>
self.get_object().pk
</expression-string>
<expression-string>
form.cleaned_data
</expression-string>
<language-id>
Python
</language-id>
<evaluation-mode>
EXPRESSION
</evaluation-mode>
</expression>
<expression>
<expression-string>
self.get_object()
</expression-string>
<expression-string>
form['name']
</expression-string>
<language-id>
Python
</language-id>
<evaluation-mode>
EXPRESSION
</evaluation-mode>
</expression>
<expression>
<expression-string>
request.POST.get(
"
network
"
)
</expression-string>
<expression-string>
form.name
</expression-string>
<language-id>
Python
</language-id>
<evaluation-mode>
EXPRESSION
</evaluation-mode>
</expression>
<expression>
<expression-string>
request.POST.get(
"
name
"
)
</expression-string>
<expression-string>
form.fields.name
</expression-string>
<language-id>
Python
</language-id>
<evaluation-mode>
EXPRESSION
</evaluation-mode>
</expression>
<expression>
<expression-string>
request.POST
</expression-string>
<expression-string>
form.fields['name']
</expression-string>
<language-id>
Python
</language-id>
<evaluation-mode>
EXPRESSION
</evaluation-mode>
</expression>
<expression>
<expression-string>
request.POST.get(
"
from_plain_image
"
)
</expression-string>
<expression-string>
context[u'object'].id
</expression-string>
<language-id>
Python
</language-id>
<evaluation-mode>
EXPRESSION
</evaluation-mode>
</expression>
<expression>
<expression-string>
openstack_api.nova.flavor_list(request)
</expression-string>
<expression-string>
self.get_object().pk
</expression-string>
<language-id>
Python
</language-id>
<evaluation-mode>
EXPRESSION
</evaluation-mode>
</expression>
<expression>
<expression-string>
templates.all().all
()
</expression-string>
<expression-string>
self.get_object
()
</expression-string>
<language-id>
Python
</language-id>
<evaluation-mode>
EXPRESSION
</evaluation-mode>
</expression>
<expression>
<expression-string>
templates.all(
)
</expression-string>
<expression-string>
request.POST.get(
"
network
"
)
</expression-string>
<language-id>
Python
</language-id>
<evaluation-mode>
EXPRESSION
</evaluation-mode>
</expression>
</expressions>
</component>
<component
name=
"editorHistoryManager"
>
<entry
file=
"file://$PROJECT_DIR$/circle/common/views.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"220"
>
<caret
line=
"66"
column=
"38"
lean-forward=
"false"
selection-start-line=
"66"
selection-start-column=
"38"
selection-end-line=
"66"
selection-end-column=
"38"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/django/contrib/messages/views.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"51"
>
<caret
line=
"3"
column=
"6"
lean-forward=
"false"
selection-start-line=
"3"
selection-start-column=
"6"
selection-end-line=
"3"
selection-end-column=
"6"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/static_collected/jsPlumb/demo/logo.svg"
>
<provider
selected=
"true"
editor-type-id=
"images"
>
<state
/>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/static_collected/js/network.js"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"-1540"
>
<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/templates/network/editor.html"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"760"
>
<caret
line=
"51"
column=
"24"
lean-forward=
"false"
selection-start-line=
"51"
selection-start-column=
"17"
selection-end-line=
"51"
selection-end-column=
"24"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/circle/settings/static_and_pipeline.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"624"
>
<caret
line=
"157"
column=
"10"
lean-forward=
"false"
selection-start-line=
"157"
selection-start-column=
"10"
selection-end-line=
"157"
selection-end-column=
"10"
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/openstack_auth/views.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"-612"
>
<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/dashboard/templates/auth/login.html"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"510"
>
<caret
line=
"30"
column=
"33"
lean-forward=
"false"
selection-start-line=
"30"
selection-start-column=
"33"
selection-end-line=
"30"
selection-end-column=
"33"
/>
<folding>
<element
signature=
"n#style#0;n#h4#0;n#div#2;n#div#0;n#!!top"
expanded=
"false"
/>
</folding>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/templates/registration/login.html"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"0"
>
...
...
@@ -580,53 +575,6 @@
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/network/forms.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"794"
>
<caret
line=
"392"
column=
"0"
lean-forward=
"true"
selection-start-line=
"392"
selection-start-column=
"0"
selection-end-line=
"392"
selection-end-column=
"0"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/django/forms/models.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"132"
>
<caret
line=
"276"
column=
"0"
lean-forward=
"false"
selection-start-line=
"276"
selection-start-column=
"0"
selection-end-line=
"276"
selection-end-column=
"0"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/network/models.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"471"
>
<caret
line=
"56"
column=
"9"
lean-forward=
"true"
selection-start-line=
"56"
selection-start-column=
"9"
selection-end-line=
"56"
selection-end-column=
"9"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/network/urls.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"140"
>
<caret
line=
"18"
column=
"0"
lean-forward=
"false"
selection-start-line=
"18"
selection-start-column=
"0"
selection-end-line=
"18"
selection-end-column=
"0"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/network/views.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"132"
>
<caret
line=
"50"
column=
"0"
lean-forward=
"false"
selection-start-line=
"50"
selection-start-column=
"0"
selection-end-line=
"50"
selection-end-column=
"0"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/dashboard/templates/dashboard/index-vxlans.html"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"238"
>
<caret
line=
"14"
column=
"28"
lean-forward=
"false"
selection-start-line=
"14"
selection-start-column=
"22"
selection-end-line=
"14"
selection-end-column=
"28"
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/dashboard/templates/dashboard/index.html"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"306"
>
...
...
@@ -635,16 +583,6 @@
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/dashboard/views/index.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"436"
>
<caret
line=
"108"
column=
"9"
lean-forward=
"false"
selection-start-line=
"108"
selection-start-column=
"9"
selection-end-line=
"108"
selection-end-column=
"9"
/>
<folding>
<element
signature=
"e#731#787#0"
expanded=
"false"
/>
</folding>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/request/models.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"194"
>
...
...
@@ -767,14 +705,6 @@
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/openstack_api/neutron.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"255"
>
<caret
line=
"39"
column=
"18"
lean-forward=
"false"
selection-start-line=
"39"
selection-start-column=
"18"
selection-end-line=
"39"
selection-end-column=
"18"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/django/core/handlers/wsgi.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"126"
>
...
...
@@ -799,121 +729,259 @@
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
openstack_api/nova
.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
dashboard/models
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"1
01
"
>
<caret
line=
"
510"
column=
"58"
lean-forward=
"false"
selection-start-line=
"510"
selection-start-column=
"58"
selection-end-line=
"510"
selection-end-column=
"58
"
/>
<state
relative-caret-position=
"1
82
"
>
<caret
line=
"
359"
column=
"40"
lean-forward=
"true"
selection-start-line=
"359"
selection-start-column=
"40"
selection-end-line=
"359"
selection-end-column=
"40
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$
PROJECT_DIR$/circle/dashboard/templates/dashboard/vm-plain-image-create.html
"
>
<entry
file=
"file://$
USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/django/db/models/base.py
"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
221
"
>
<caret
line=
"
13"
column=
"40"
lean-forward=
"true"
selection-start-line=
"13"
selection-start-column=
"40"
selection-end-line=
"13"
selection-end-column=
"4
0"
/>
<state
relative-caret-position=
"
126
"
>
<caret
line=
"
474"
column=
"0"
lean-forward=
"false"
selection-start-line=
"474"
selection-start-column=
"0"
selection-end-line=
"474"
selection-end-column=
"
0"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
dashboard/model
s.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
common/operation
s.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
182
"
>
<caret
line=
"
359"
column=
"40"
lean-forward=
"true"
selection-start-line=
"359"
selection-start-column=
"40"
selection-end-line=
"359"
selection-end-column=
"40
"
/>
<state
relative-caret-position=
"
-233
"
>
<caret
line=
"
159"
column=
"6"
lean-forward=
"false"
selection-start-line=
"159"
selection-start-column=
"6"
selection-end-line=
"159"
selection-end-column=
"6
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/django/
db/models/base
.py"
>
<entry
file=
"file://$USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/django/
views/generic/detail
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"126"
>
<caret
line=
"
474"
column=
"0"
lean-forward=
"false"
selection-start-line=
"474"
selection-start-column=
"0"
selection-end-line=
"474"
selection-end-column=
"0
"
/>
<caret
line=
"
21"
column=
"8"
lean-forward=
"false"
selection-start-line=
"21"
selection-start-column=
"8"
selection-end-line=
"21"
selection-end-column=
"8
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
common/operation
s.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
request/url
s.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
-233
"
>
<caret
line=
"
159"
column=
"6"
lean-forward=
"false"
selection-start-line=
"159"
selection-start-column=
"6"
selection-end-line=
"159"
selection-end-column=
"6
"
/>
<state
relative-caret-position=
"
601
"
>
<caret
line=
"
61"
column=
"161"
lean-forward=
"false"
selection-start-line=
"61"
selection-start-column=
"161"
selection-end-line=
"61"
selection-end-column=
"161
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/dashboard/forms.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/dashboard/views/util.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"206"
>
<caret
line=
"242"
column=
"0"
lean-forward=
"false"
selection-start-line=
"242"
selection-start-column=
"0"
selection-end-line=
"242"
selection-end-column=
"0"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/dashboard/templates/dashboard/index-vm.html"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"230"
>
<caret
line=
"95"
column=
"36"
lean-forward=
"true"
selection-start-line=
"95"
selection-start-column=
"36"
selection-end-line=
"95"
selection-end-column=
"36"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/openstack_api/__init__.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"284"
>
<caret
line=
"38"
column=
"0"
lean-forward=
"false"
selection-start-line=
"38"
selection-start-column=
"0"
selection-end-line=
"38"
selection-end-column=
"0"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/vm/models/network.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"986"
>
<caret
line=
"69"
column=
"6"
lean-forward=
"false"
selection-start-line=
"69"
selection-start-column=
"6"
selection-end-line=
"69"
selection-end-column=
"6"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/vm/models/instance.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"214"
>
<caret
line=
"52"
column=
"25"
lean-forward=
"false"
selection-start-line=
"52"
selection-start-column=
"25"
selection-end-line=
"52"
selection-end-column=
"25"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/django/forms/models.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"126"
>
<caret
line=
"294"
column=
"0"
lean-forward=
"false"
selection-start-line=
"294"
selection-start-column=
"0"
selection-end-line=
"294"
selection-end-column=
"0"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/braces/views/_access.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"202"
>
<caret
line=
"87"
column=
"6"
lean-forward=
"false"
selection-start-line=
"87"
selection-start-column=
"6"
selection-end-line=
"87"
selection-end-column=
"6"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/django/contrib/messages/views.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"272"
>
<caret
line=
"16"
column=
"27"
lean-forward=
"false"
selection-start-line=
"16"
selection-start-column=
"8"
selection-end-line=
"16"
selection-end-column=
"27"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/dashboard/urls.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"17"
>
<caret
line=
"52"
column=
"23"
lean-forward=
"false"
selection-start-line=
"0"
selection-start-column=
"0"
selection-end-line=
"238"
selection-end-column=
"0"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/dashboard/templates/dashboard/index-vxlans.html"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"204"
>
<caret
line=
"15"
column=
"49"
lean-forward=
"false"
selection-start-line=
"15"
selection-start-column=
"47"
selection-end-line=
"15"
selection-end-column=
"49"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/network/models.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
516
"
>
<caret
line=
"
150"
column=
"9"
lean-forward=
"true"
selection-start-line=
"150"
selection-start-column=
"9"
selection-end-line=
"150"
selection-end-column=
"9
"
/>
<state
relative-caret-position=
"
465
"
>
<caret
line=
"
78"
column=
"63"
lean-forward=
"false"
selection-start-line=
"78"
selection-start-column=
"60"
selection-end-line=
"78"
selection-end-column=
"63
"
/>
<folding>
<element
signature=
"e#73
2#770
#0"
expanded=
"true"
/>
<element
signature=
"e#73
1#751
#0"
expanded=
"true"
/>
</folding>
</state>
</provider>
</entry>
<entry
file=
"file://$
USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/django/views/generic/detail
.py"
>
<entry
file=
"file://$
PROJECT_DIR$/circle/dashboard/views/index
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
126
"
>
<caret
line=
"
21"
column=
"8"
lean-forward=
"false"
selection-start-line=
"21"
selection-start-column=
"8"
selection-end-line=
"21"
selection-end-column=
"8
"
/>
<state
relative-caret-position=
"
232
"
>
<caret
line=
"
108"
column=
"46"
lean-forward=
"false"
selection-start-line=
"108"
selection-start-column=
"46"
selection-end-line=
"108"
selection-end-column=
"46
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/dashboard/views/vm.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
189
"
>
<caret
line=
"1
09"
column=
"8"
lean-forward=
"false"
selection-start-line=
"109"
selection-start-column=
"8"
selection-end-line=
"109"
selection-end-column=
"81
"
/>
<state
relative-caret-position=
"
257
"
>
<caret
line=
"1
10"
column=
"0"
lean-forward=
"true"
selection-start-line=
"110"
selection-start-column=
"0"
selection-end-line=
"110"
selection-end-column=
"0
"
/>
<folding>
<element
signature=
"e#40141#41312#0"
expanded=
"false"
/>
</folding>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
vm/models/instanc
e.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
openstack_api/bas
e.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
308
"
>
<caret
line=
"
485"
column=
"46"
lean-forward=
"true"
selection-start-line=
"485"
selection-start-column=
"46"
selection-end-line=
"485"
selection-end-column=
"46
"
/>
<state
relative-caret-position=
"
126
"
>
<caret
line=
"
139"
column=
"27"
lean-forward=
"false"
selection-start-line=
"139"
selection-start-column=
"21"
selection-end-line=
"139"
selection-end-column=
"27
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
request/urls
.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
openstack_api/nova
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
6
01"
>
<caret
line=
"
61"
column=
"161"
lean-forward=
"false"
selection-start-line=
"61"
selection-start-column=
"161"
selection-end-line=
"61"
selection-end-column=
"161
"
/>
<state
relative-caret-position=
"
1
01"
>
<caret
line=
"
510"
column=
"58"
lean-forward=
"false"
selection-start-line=
"510"
selection-start-column=
"58"
selection-end-line=
"510"
selection-end-column=
"58
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$
PROJECT_DIR$/circle/dashboard/urls
.py"
>
<entry
file=
"file://$
USER_HOME$/.virtualenvs/cloud/local/lib/python2.7/site-packages/django/views/generic/edit
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
133
"
>
<caret
line=
"
59"
column=
"46"
lean-forward=
"true"
selection-start-line=
"59"
selection-start-column=
"46"
selection-end-line=
"59"
selection-end-column=
"4
6"
/>
<state
relative-caret-position=
"
202
"
>
<caret
line=
"
198"
column=
"6"
lean-forward=
"false"
selection-start-line=
"198"
selection-start-column=
"6"
selection-end-line=
"198"
selection-end-column=
"
6"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
dashboard/views/util.py
"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
network/templates/network/rule-create.html
"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"
206
"
>
<caret
line=
"
242"
column=
"0"
lean-forward=
"false"
selection-start-line=
"242"
selection-start-column=
"0"
selection-end-line=
"242
"
selection-end-column=
"0"
/>
<state
relative-caret-position=
"
0
"
>
<caret
line=
"
0"
column=
"0"
lean-forward=
"false"
selection-start-line=
"0"
selection-start-column=
"0"
selection-end-line=
"0
"
selection-end-column=
"0"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
dashboard/templates/dashboard/index-vm
.html"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
network/templates/network/vxlan-edit
.html"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"2
30
"
>
<caret
line=
"
95"
column=
"36"
lean-forward=
"true"
selection-start-line=
"95"
selection-start-column=
"36"
selection-end-line=
"95"
selection-end-column=
"36
"
/>
<state
relative-caret-position=
"2
89
"
>
<caret
line=
"
23"
column=
"27"
lean-forward=
"false"
selection-start-line=
"23"
selection-start-column=
"27"
selection-end-line=
"23"
selection-end-column=
"27
"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/
openstack_api/__init__
.py"
>
<entry
file=
"file://$PROJECT_DIR$/circle/
dashboard/forms
.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"284"
>
<caret
line=
"38"
column=
"0"
lean-forward=
"false"
selection-start-line=
"38"
selection-start-column=
"0"
selection-end-line=
"38"
selection-end-column=
"0"
/>
<state
relative-caret-position=
"212"
>
<caret
line=
"1702"
column=
"27"
lean-forward=
"false"
selection-start-line=
"1702"
selection-start-column=
"27"
selection-end-line=
"1702"
selection-end-column=
"27"
/>
<folding>
<element
signature=
"e#732#770#0"
expanded=
"true"
/>
</folding>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/network/forms.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"324"
>
<caret
line=
"381"
column=
"0"
lean-forward=
"false"
selection-start-line=
"381"
selection-start-column=
"0"
selection-end-line=
"381"
selection-end-column=
"0"
/>
<folding>
<element
signature=
"e#732#775#0"
expanded=
"true"
/>
</folding>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/dashboard/templates/dashboard/vm-plain-image-create.html"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"119"
>
<caret
line=
"7"
column=
"2"
lean-forward=
"false"
selection-start-line=
"7"
selection-start-column=
"2"
selection-end-line=
"16"
selection-end-column=
"9"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/network/templates/network/vxlan-create.html"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"1"
>
<caret
line=
"1"
column=
"7"
lean-forward=
"false"
selection-start-line=
"1"
selection-start-column=
"7"
selection-end-line=
"1"
selection-end-column=
"7"
/>
<folding
/>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/openstack_api/neutron.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"201"
>
<caret
line=
"1053"
column=
"26"
lean-forward=
"false"
selection-start-line=
"1053"
selection-start-column=
"26"
selection-end-line=
"1053"
selection-end-column=
"26"
/>
<folding>
<element
signature=
"e#804#842#0"
expanded=
"true"
/>
</folding>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/network/urls.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"227"
>
<caret
line=
"137"
column=
"0"
lean-forward=
"true"
selection-start-line=
"137"
selection-start-column=
"0"
selection-end-line=
"137"
selection-end-column=
"0"
/>
<folding>
<element
signature=
"e#732#764#0"
expanded=
"true"
/>
</folding>
</state>
</provider>
</entry>
<entry
file=
"file://$PROJECT_DIR$/circle/network/views.py"
>
<provider
selected=
"true"
editor-type-id=
"text-editor"
>
<state
relative-caret-position=
"204"
>
<caret
line=
"996"
column=
"38"
lean-forward=
"false"
selection-start-line=
"996"
selection-start-column=
"38"
selection-end-line=
"996"
selection-end-column=
"38"
/>
<folding>
<element
signature=
"e#732#746#0"
expanded=
"true"
/>
</folding>
</state>
</provider>
</entry>
</component>
</project>
\ No newline at end of file
circle/circle/db.sqlite3
View file @
fda9c192
No preview for this file type
circle/dashboard/templates/dashboard/index-vxlans.html
View file @
fda9c192
...
...
@@ -13,7 +13,7 @@
<div
class=
"list-group"
id=
"vxlan-list-view"
>
<div
id=
"dashboard-vxlan-list"
>
{% for vxlan in vxlans %}
<a
href=
"{% url "
network
.
vxlan
"
vni=
vxlan.vni
%}"
class=
"list-group-item
<a
href=
"{% url "
network
.
vxlan
"
pk=
vxlan.id
%}"
class=
"list-group-item
{% if forloop.last and vxlan|length < 5 %} list-group-item-last{% endif %}"
>
<span
class=
"index-vxlan-list-name"
>
<i
class=
"fa fa-sitemap"
></i>
{{ vxlan.name }}
...
...
circle/dashboard/views/index.py
View file @
fda9c192
...
...
@@ -106,7 +106,7 @@ class IndexView(LoginRequiredMixin, TemplateView):
'operator'
,
user
,
disregard_superuser
=
True
)
.
all
()[:
5
]
# vxlan
#context['vxlans'] = Instance
.list_from_os(self.request)[:5]
context
[
'vxlans'
]
=
Vxlan
.
list_from_os
(
self
.
request
)[:
5
]
# toplist
if
settings
.
STORE_URL
:
...
...
circle/network/forms.py
View file @
fda9c192
...
...
@@ -16,6 +16,7 @@
# with CIRCLE. If not, see <http://www.gnu.org/licenses/>.
from
django.forms
import
ModelForm
,
widgets
from
django
import
forms
from
django.core.urlresolvers
import
reverse_lazy
from
django.utils.translation
import
ugettext_lazy
as
_
...
...
@@ -28,6 +29,7 @@ from firewall.models import (
SwitchPort
,
Firewall
)
from
network.models
import
Vxlan
from
openstack_api.neutron
import
Network
class
LinkButton
(
BaseInput
):
...
...
@@ -372,21 +374,9 @@ class VxlanSuperUserForm(ModelForm):
)
)
class
VxlanForm
(
ModelForm
):
helper
=
FormHelper
()
helper
.
layout
=
Layout
(
Div
(
Fieldset
(
''
,
'name'
,
'description'
,
'comment'
,
Field
(
'vni'
,
type
=
'hidden'
),
)
),
FormActions
(
Submit
(
'submit'
,
_
(
'Save'
)),
LinkButton
(
'back'
,
_
(
'Back'
),
reverse_lazy
(
'network.vxlan-list'
))
)
)
class
VxlanForm
(
forms
.
Form
):
name
=
forms
.
CharField
(
widget
=
forms
.
TextInput
(
attrs
=
{
'class'
:
"form-control"
,
'required'
:
""
,
}))
circle/network/models.py
View file @
fda9c192
...
...
@@ -14,7 +14,7 @@
#
# You should have received a copy of the GNU General Public License along
# with CIRCLE. If not, see <http://www.gnu.org/licenses/>.
import
openstack_api
from
django.db
import
models
from
django.core.validators
import
MinValueValidator
,
MaxValueValidator
from
django.core.urlresolvers
import
reverse
...
...
@@ -68,6 +68,10 @@ class Vxlan(models.Model):
class
Meta
:
app_label
=
'network'
@classmethod
def
list_from_os
(
cls
,
request
):
return
openstack_api
.
neutron
.
network_list_for_tenant
(
request
,
request
.
user
.
tenant_id
)
def
__unicode__
(
self
):
return
self
.
name
...
...
circle/network/templates/network/vxlan-create.html
View file @
fda9c192
...
...
@@ -5,18 +5,20 @@
{% load staticfiles %}
{% load crispy_forms_tags %}
{% block title-page %}{% trans "Create" %} | {% trans "
vxlan
" %}{% endblock %}
{% block title-page %}{% trans "Create" %} | {% trans "
network
" %}{% endblock %}
{% block content %}
<div
class=
"page-header"
>
<h2>
{% trans "Create a new
vxlan
" %}
</h2>
<h2>
{% trans "Create a new
network
" %}
</h2>
</div>
<div
class=
"row"
>
<div
class=
"col-sm-8"
>
{% crispy form %}
</div>
<div
class=
"col-sm-4"
>
</div>
<form
method=
"POST"
"
>
{% csrf_token %}
{{ form.name|as_crispy_field }}
<button
class=
"btn btn-success pull-right text-right"
type=
"submit"
>
<i
class=
"fa fa-plus"
></i>
{% trans "Create" %}
</button>
</form>
</div>
{% endblock %}
circle/network/templates/network/vxlan-edit.html
View file @
fda9c192
...
...
@@ -9,8 +9,8 @@
{% block content %}
<div
class=
"page-header"
>
<a
href=
"{% url "
network
.
vxlan-delete
"
vni=
vxlan.vni
%}"
class=
"btn btn-danger pull-right"
><i
class=
"fa fa-times-circle"
></i>
{% trans "Delete this vxlan
" %}
</a>
<h2>
{{ form.name.value }}
<small>
{% trans "details of
vxlan
" %}
</small></h2>
<a
href=
"{% url "
network
.
vxlan-delete
"
pk=
network.id
%}"
class=
"btn btn-danger pull-right"
><i
class=
"fa fa-times-circle"
></i>
{% trans "Delete this network
" %}
</a>
<h2>
{{ form.name.value }}
<small>
{% trans "details of
network
" %}
</small></h2>
</div>
<div
class=
"row"
>
...
...
@@ -21,12 +21,7 @@
<div
class=
"page-header"
>
<h3>
{% trans "Connected virtual machines" %}
</h3>
</div>
{% render_table vm_list %}
<div
class=
"page-header"
>
<h3>
{% trans "Manage access" %}
</h3>
</div>
{% include "dashboard/_manage_access.html" with table_id="vxlan-access-table" %}
{# {% render_table vm_list %}#}
</div>
</div>
{% endblock %}
circle/network/urls.py
View file @
fda9c192
...
...
@@ -129,10 +129,11 @@ urlpatterns = [
# vxlan
url
(
'^vxlans/$'
,
VxlanList
.
as_view
(),
name
=
'network.vxlan-list'
),
url
(
'^vxlans/create$'
,
VxlanCreate
.
as_view
(),
name
=
'network.vxlan-create'
),
url
(
'^vxlans/(?P<vni>
\
d+)/$'
,
VxlanDetail
.
as_view
(),
name
=
'network.vxlan'
),
url
(
'^vxlans/(?P<pk>[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})/$'
,
VxlanDetail
.
as_view
(),
name
=
'network.vxlan'
),
url
(
'^vxlans/(?P<pk>
\
d+)/acl/$'
,
VxlanAclUpdateView
.
as_view
(),
name
=
'network.vxlan-acl'
),
url
(
'^vxlans/delete/(?P<
vni>
\
d+
)/$'
,
VxlanDelete
.
as_view
(),
url
(
'^vxlans/delete/(?P<
pk>[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}
)/$'
,
VxlanDelete
.
as_view
(),
name
=
"network.vxlan-delete"
),
# editor
...
...
circle/network/views.py
View file @
fda9c192
...
...
@@ -20,10 +20,11 @@ import random
import
json
from
collections
import
OrderedDict
import
openstack_api
from
netaddr
import
IPNetwork
from
django.views.generic
import
(
TemplateView
,
UpdateView
,
DeleteView
,
CreateView
,
)
DetailView
)
from
django.core.exceptions
import
(
ValidationError
,
PermissionDenied
,
ImproperlyConfigured
)
...
...
@@ -40,6 +41,8 @@ from firewall.models import (
SwitchPort
,
EthernetDevice
,
Firewall
)
from
network.models
import
Vxlan
,
EditorElement
from
numpy.distutils.from_template
import
template_name_re
from
openstack_api.neutron
import
Network
from
vm.models
import
Interface
,
Instance
from
common.views
import
CreateLimitedResourceMixin
from
.tables
import
(
...
...
@@ -50,9 +53,7 @@ from .tables import (
)
from
.forms
import
(
HostForm
,
VlanForm
,
DomainForm
,
GroupForm
,
RecordForm
,
BlacklistItemForm
,
RuleForm
,
VlanGroupForm
,
SwitchPortForm
,
FirewallForm
,
VxlanForm
,
VxlanSuperUserForm
,
)
RuleForm
,
VlanGroupForm
,
SwitchPortForm
,
FirewallForm
,
VxlanForm
)
from
django.contrib
import
messages
from
django.contrib.messages.views
import
SuccessMessageMixin
...
...
@@ -61,7 +62,7 @@ from django.utils.translation import ugettext_lazy as _
from
braces.views
import
LoginRequiredMixin
,
SuperuserRequiredMixin
from
operator
import
itemgetter
from
itertools
import
chain
from
dashboard.views
import
AclUpdateView
from
dashboard.views
import
AclUpdateView
,
FormView
from
dashboard.forms
import
AclUserOrGroupAddForm
try
:
...
...
@@ -94,14 +95,6 @@ class MagicMixin(object):
else
:
return
super
(
MagicMixin
,
self
)
.
get
(
*
args
,
**
kwargs
)
class
InitialOwnerMixin
(
FormMixin
):
def
get_initial
(
self
):
initial
=
super
(
InitialOwnerMixin
,
self
)
.
get_initial
()
initial
[
'owner'
]
=
self
.
request
.
user
return
initial
class
IndexView
(
LoginRequiredMixin
,
SuperuserRequiredMixin
,
TemplateView
):
template_name
=
"network/index.html"
...
...
@@ -225,7 +218,7 @@ class DomainDetail(LoginRequiredMixin, SuperuserRequiredMixin,
class
DomainCreate
(
LoginRequiredMixin
,
SuperuserRequiredMixin
,
SuccessMessageMixin
,
InitialOwnerMixin
,
CreateView
):
SuccessMessageMixin
,
CreateView
):
model
=
Domain
template_name
=
"network/domain-create.html"
form_class
=
DomainForm
...
...
@@ -356,7 +349,7 @@ class GroupList(LoginRequiredMixin, SuperuserRequiredMixin, SingleTableView):
class
GroupCreate
(
LoginRequiredMixin
,
SuperuserRequiredMixin
,
SuccessMessageMixin
,
InitialOwnerMixin
,
CreateView
):
SuccessMessageMixin
,
CreateView
):
model
=
Group
template_name
=
"network/group-create.html"
form_class
=
GroupForm
...
...
@@ -621,7 +614,7 @@ class RecordDetail(LoginRequiredMixin, SuperuserRequiredMixin,
class
RecordCreate
(
LoginRequiredMixin
,
SuperuserRequiredMixin
,
SuccessMessageMixin
,
InitialOwnerMixin
,
CreateView
):
SuccessMessageMixin
,
CreateView
):
model
=
Record
template_name
=
"network/record-create.html"
form_class
=
RecordForm
...
...
@@ -708,7 +701,7 @@ class RuleDetail(LoginRequiredMixin, SuperuserRequiredMixin,
class
RuleCreate
(
LoginRequiredMixin
,
SuperuserRequiredMixin
,
SuccessMessageMixin
,
InitialOwnerMixin
,
CreateView
):
SuccessMessageMixin
,
CreateView
):
model
=
Rule
template_name
=
"network/rule-create.html"
form_class
=
RuleForm
...
...
@@ -743,6 +736,22 @@ class SwitchPortList(LoginRequiredMixin, SuperuserRequiredMixin,
table_pagination
=
False
class
RuleCreate
(
LoginRequiredMixin
,
SuperuserRequiredMixin
,
SuccessMessageMixin
,
CreateView
):
model
=
Rule
template_name
=
"network/rule-create.html"
form_class
=
RuleForm
success_message
=
_
(
u'Successfully created rule.'
)
def
get_initial
(
self
):
initial
=
super
(
RuleCreate
,
self
)
.
get_initial
()
initial
.
update
({
'host'
:
self
.
request
.
GET
.
get
(
'host'
),
'hostgroup'
:
self
.
request
.
GET
.
get
(
'hostgroup'
)
})
return
initial
class
SwitchPortDetail
(
LoginRequiredMixin
,
SuperuserRequiredMixin
,
SuccessMessageMixin
,
UpdateView
):
model
=
SwitchPort
...
...
@@ -829,7 +838,7 @@ class VlanDetail(VlanMagicMixin, LoginRequiredMixin, SuperuserRequiredMixin,
class
VlanCreate
(
VlanMagicMixin
,
LoginRequiredMixin
,
SuperuserRequiredMixin
,
SuccessMessageMixin
,
InitialOwnerMixin
,
CreateView
):
SuccessMessageMixin
,
CreateView
):
model
=
Vlan
template_name
=
"network/vlan-create.html"
form_class
=
VlanForm
...
...
@@ -909,7 +918,7 @@ class VlanGroupDetail(LoginRequiredMixin, SuperuserRequiredMixin,
class
VlanGroupCreate
(
LoginRequiredMixin
,
SuperuserRequiredMixin
,
SuccessMessageMixin
,
InitialOwnerMixin
,
CreateView
):
SuccessMessageMixin
,
CreateView
):
model
=
VlanGroup
template_name
=
"network/vlan-group-create.html"
form_class
=
VlanGroupForm
...
...
@@ -963,107 +972,29 @@ class VxlanAclUpdateView(AclUpdateView):
model
=
Vxlan
class
VxlanDetail
(
LoginRequiredMixin
,
SuccessMessageMixin
,
UpdateView
):
#TODO: check user
model
=
Vxlan
slug_field
=
'vni'
slug_url_kwarg
=
'vni'
class
VxlanDetail
(
LoginRequiredMixin
,
SuccessMessageMixin
,
DetailView
):
#TODO: check user
# model = Network
success_message
=
_
(
u'Succesfully modified vlan
%(name)
s.'
)
success_url
=
reverse_lazy
(
'network.vxlan-list'
)
template_name
=
'network/vxlan-edit.html'
context_object_name
=
'network'
def
get_template_names
(
self
):
if
self
.
request
.
user
.
is_superuser
:
return
[
"network/vxlan-superuser-edit.html"
]
else
:
return
[
"network/vxlan-edit.html"
]
def
get_form_class
(
self
,
is_post
=
False
):
if
self
.
request
.
user
.
is_superuser
:
return
VxlanSuperUserForm
return
VxlanForm
def
get_object
(
self
,
queryset
=
None
):
return
openstack_api
.
neutron
.
network_get
(
self
.
request
,
self
.
kwargs
[
'pk'
])
def
get_context_data
(
self
,
**
kwargs
):
context
=
super
(
VxlanDetail
,
self
)
.
get_context_data
(
**
kwargs
)
context
[
'vm_list'
]
=
SmallVmTable
(
self
.
object
.
vm_interface
.
all
())
context
[
'acl'
]
=
AclUpdateView
.
get_acl_data
(
self
.
object
,
self
.
request
.
user
,
'network.vxlan-acl'
)
context
[
'aclform'
]
=
AclUserOrGroupAddForm
()
context
[
'vm_list'
]
=
()
#SmallVmTable(self.object.vm_interface.all())
context
[
'form'
]
=
VxlanForm
return
context
def
post
(
self
,
*
args
,
**
kwargs
):
if
not
self
.
object
.
has_level
(
self
.
request
.
user
,
'owner'
):
raise
PermissionDenied
()
return
super
(
VxlanDetail
,
self
)
.
post
(
*
args
,
**
kwargs
)
class
VxlanCreate
(
LoginRequiredMixin
,
SuccessMessageMixin
,
InitialOwnerMixin
,
CreateView
):
model
=
Vxlan
profile_attribute
=
'network_limit'
resource_name
=
_
(
'Virtual network'
)
success_message
=
_
(
u'Successfully created vxlan
%(name)
s.'
)
def
get_template_names
(
self
):
if
self
.
request
.
user
.
is_superuser
:
return
[
"network/vxlan-superuser-create.html"
]
else
:
return
[
"network/vxlan-create.html"
]
def
get_form_class
(
self
,
is_post
=
False
):
if
self
.
request
.
user
.
is_superuser
:
return
VxlanSuperUserForm
return
VxlanForm
def
get_initial
(
self
):
initial
=
super
(
VxlanCreate
,
self
)
.
get_initial
()
initial
[
'vni'
]
=
self
.
_generate_vni
()
return
initial
def
get_default_vlan
(
self
):
vlan
=
Vlan
.
objects
.
filter
(
name
=
settings
.
DEFAULT_USERNET_VLAN_NAME
)
.
first
()
if
vlan
is
None
:
msg
=
(
_
(
'Cannot find server vlan:
%
s'
)
%
settings
.
DEFAULT_USERNET_VLAN_NAME
)
if
self
.
request
.
user
.
is_superuser
:
messages
.
error
(
self
.
request
,
msg
)
logger
.
error
(
msg
)
raise
ImproperlyConfigured
()
return
vlan
class
VxlanCreate
(
LoginRequiredMixin
,
FormView
):
form_class
=
VxlanForm
template_name
=
'network/vxlan-create.html'
def
form_valid
(
self
,
form
):
obj
=
form
.
save
(
commit
=
False
)
obj
.
vlan
=
self
.
get_default_vlan
()
try
:
obj
.
full_clean
()
obj
.
save
()
obj
.
set_level
(
obj
.
owner
,
'owner'
)
self
.
object
=
obj
except
Exception
as
e
:
msg
=
_
(
'Unexpected error occured. '
'Please try again or contact administrator!'
)
messages
.
error
(
self
.
request
,
msg
)
logger
.
exception
(
e
)
return
redirect
(
self
.
get_success_url
())
def
form_invalid
(
self
,
form
):
# When multiple client get same VNI value
if
'vni'
in
form
.
errors
.
as_data
():
messages
.
error
(
self
.
request
,
_
(
'Cannot create virtual network.'
' Please try again.'
))
return
redirect
(
'network.vxlan-create'
)
return
super
(
VxlanCreate
,
self
)
.
form_invalid
(
form
)
def
_generate_vni
(
self
):
if
Vxlan
.
objects
.
count
()
==
settings
.
USERNET_MAX
:
msg
=
_
(
'Cannot find unused VNI value. '
'Please contact administrator!'
)
messages
.
error
(
self
.
request
,
msg
)
logger
.
error
(
msg
)
else
:
full_range
=
set
(
range
(
0
,
settings
.
USERNET_MAX
))
used_values
=
{
vni
[
0
]
for
vni
in
Vxlan
.
objects
.
values_list
(
'vni'
)}
free_values
=
full_range
-
used_values
return
random
.
choice
(
list
(
free_values
))
network_created
=
openstack_api
.
neutron
.
network_create
(
self
.
request
,
name
=
form
.
cleaned_data
[
'name'
])
return
redirect
(
reverse_lazy
(
'network.vxlan'
,
kwargs
=
{
'pk'
:
network_created
.
id
}))
class
VxlanDelete
(
LoginRequiredMixin
,
DeleteView
):
#TODO: check user
model
=
Vlan
...
...
circle/openstack_api/nova.py
View file @
fda9c192
...
...
@@ -508,7 +508,7 @@ def keypair_get(request, name):
def
server_create
(
request
,
name
,
image
,
flavor
,
key_name
=
None
,
user_data
=
None
,
security_groups
=
None
,
block_device_mapping
=
None
,
block_device_mapping_v2
=
None
,
nics
=
"
auto
"
,
block_device_mapping_v2
=
None
,
nics
=
"
none
"
,
availability_zone
=
None
,
instance_count
=
1
,
admin_pass
=
None
,
disk_config
=
None
,
config_drive
=
None
,
meta
=
None
,
scheduler_hints
=
None
,
description
=
None
):
...
...
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