Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
Fukász Rómeó Ervin
/
cloud
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
53fedb73
authored
Nov 25, 2014
by
Kálmán Viktor
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
occi: networkinterface describe, create, delete
parent
0ab76a05
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
88 additions
and
17 deletions
+88
-17
circle/occi/occi.py
+35
-10
circle/occi/templates/occi/ipnetworkinterface.html
+3
-0
circle/occi/templates/occi/network.html
+1
-1
circle/occi/templates/occi/networkinterface.html
+4
-1
circle/occi/urls.py
+3
-2
circle/occi/views.py
+42
-3
No files found.
circle/occi/occi.py
View file @
53fedb73
...
@@ -533,7 +533,7 @@ class Network(Resource):
...
@@ -533,7 +533,7 @@ class Network(Resource):
def
__init__
(
self
,
vlan
=
None
,
data
=
None
):
def
__init__
(
self
,
vlan
=
None
,
data
=
None
):
self
.
attrs
=
{}
self
.
attrs
=
{}
if
vlan
:
if
vlan
:
self
.
location
=
"/network
2
/
%
d/"
%
(
vlan
.
vid
)
self
.
location
=
"/network/
%
d/"
%
(
vlan
.
vid
)
self
.
vlan
=
vlan
self
.
vlan
=
vlan
self
.
init_attrs
()
self
.
init_attrs
()
...
@@ -608,19 +608,20 @@ class NetworkInterface(Link):
...
@@ -608,19 +608,20 @@ class NetworkInterface(Link):
self
.
vlan
=
vlan
self
.
vlan
=
vlan
self
.
attrs
=
{}
self
.
attrs
=
{}
self
.
attrs
[
'occi.core.id'
]
=
"vm_
%
d_vlan_
%
d"
%
(
instance
.
pk
,
vlan
.
vid
)
self
.
attrs
[
'occi.core.id'
]
=
"vm_
%
d_network_
%
d"
%
(
instance
.
pk
,
vlan
.
vid
)
self
.
attrs
[
'occi.core.target'
]
=
Network
(
vlan
)
.
render_location
()
self
.
attrs
[
'occi.core.target'
]
=
Network
(
vlan
)
.
render_location
()
self
.
attrs
[
'occi.core.source'
]
=
Compute
(
instance
)
.
render_location
()
self
.
attrs
[
'occi.core.source'
]
=
Compute
(
instance
)
.
render_location
()
interface
=
Interface
.
objects
.
get
(
vlan
=
vlan
,
instance
=
instance
)
interface
=
Interface
.
objects
.
get
(
vlan
=
vlan
,
instance
=
instance
)
# via networkinterface
# via networkinterface
self
.
attrs
[
'occi.networkinterface.mac'
]
=
unicode
(
interface
.
host
.
mac
)
self
.
attrs
[
'occi.networkinterface.mac'
]
=
unicode
(
interface
.
mac
)
self
.
attrs
[
'occi.networkinterface.interface'
]
=
self
.
_get_interface
()
self
.
attrs
[
'occi.networkinterface.interface'
]
=
self
.
_get_interface
()
self
.
attrs
[
'occi.core.state'
]
=
"active"
self
.
attrs
[
'occi.core.state'
]
=
"active"
# via ipnetworkinterface mixin
# via ipnetworkinterface mixin
self
.
attrs
[
'occi.networkinterface.address'
]
=
unicode
(
self
.
attrs
[
'occi.networkinterface.address'
]
=
unicode
(
interface
.
host
.
ipv4
)
interface
.
host
.
ipv4
)
if
interface
.
host
else
"-"
self
.
attrs
[
'occi.networkinterface.gateway'
]
=
unicode
(
self
.
attrs
[
'occi.networkinterface.gateway'
]
=
unicode
(
interface
.
vlan
.
network4
.
ip
)
interface
.
vlan
.
network4
.
ip
)
self
.
attrs
[
'occi.networkinterface.allocation'
]
=
"dynamic"
self
.
attrs
[
'occi.networkinterface.allocation'
]
=
"dynamic"
...
@@ -647,14 +648,14 @@ class NetworkInterface(Link):
...
@@ -647,14 +648,14 @@ class NetworkInterface(Link):
# TODO user
# TODO user
user
=
User
.
objects
.
get
(
username
=
"test"
)
user
=
User
.
objects
.
get
(
username
=
"test"
)
g
=
re
.
match
(
occi_attribute_link_regex
%
"
vlan
"
,
target
)
g
=
re
.
match
(
occi_attribute_link_regex
%
"
network
"
,
target
)
vlan_vid
=
g
.
group
(
"id"
)
vlan_vid
=
g
.
group
(
"id"
)
g
=
re
.
match
(
occi_attribute_link_regex
%
"vm"
,
source
)
g
=
re
.
match
(
occi_attribute_link_regex
%
"vm"
,
source
)
vm_pk
=
g
.
group
(
"id"
)
vm_pk
=
g
.
group
(
"id"
)
try
:
try
:
vm
=
Instance
.
objects
.
filter
(
destroyed_at
=
None
)
.
get
(
pk
=
vm_pk
)
vm
=
Instance
.
objects
.
filter
(
destroyed_at
=
None
)
.
get
(
pk
=
vm_pk
)
vlan
=
Vlan
.
objects
.
filter
(
destroyed
=
None
)
.
get
(
vid
=
vlan_vid
)
vlan
=
Vlan
.
objects
.
get
(
vid
=
vlan_vid
)
except
(
Instance
.
DoesNotExist
,
Vlan
.
DoesNotExist
):
except
(
Instance
.
DoesNotExist
,
Vlan
.
DoesNotExist
):
return
None
return
None
...
@@ -663,13 +664,13 @@ class NetworkInterface(Link):
...
@@ -663,13 +664,13 @@ class NetworkInterface(Link):
except
:
except
:
pass
pass
cls
.
location
=
"
%
slink/networkinterface/vm_
%
s_
vlan
_
%
s"
%
(
cls
.
location
=
"
%
slink/networkinterface/vm_
%
s_
network
_
%
s"
%
(
OCCI_ADDR
,
vm_pk
,
vlan_vid
)
OCCI_ADDR
,
vm_pk
,
vlan_vid
)
return
cls
return
cls
def
render_location
(
self
):
def
render_location
(
self
):
return
"/link/networkinterface/vm_
%
d_
vlan
_
%
d"
%
(
self
.
instance
.
pk
,
return
"/link/networkinterface/vm_
%
d_
network
_
%
d"
%
(
self
.
instance
.
pk
,
self
.
vlan
.
vid
)
self
.
vlan
.
vid
)
def
render_as_link
(
self
):
def
render_as_link
(
self
):
kind
=
NETWORK_INTERFACE_KIND
kind
=
NETWORK_INTERFACE_KIND
...
@@ -683,9 +684,11 @@ class NetworkInterface(Link):
...
@@ -683,9 +684,11 @@ class NetworkInterface(Link):
def
render_as_category
(
self
):
def
render_as_category
(
self
):
kind
=
NETWORK_INTERFACE_KIND
kind
=
NETWORK_INTERFACE_KIND
mixins
=
[
IPNetworkInterface
()]
return
render_to_string
(
"occi/networkinterface.html"
,
{
return
render_to_string
(
"occi/networkinterface.html"
,
{
'kind'
:
kind
,
'kind'
:
kind
,
'mixins'
:
mixins
,
'attrs'
:
self
.
attrs
,
'attrs'
:
self
.
attrs
,
})
})
...
@@ -698,6 +701,28 @@ class NetworkInterface(Link):
...
@@ -698,6 +701,28 @@ class NetworkInterface(Link):
self
.
instance
.
remove_interface
(
user
=
user
,
interface
=
interface
)
self
.
instance
.
remove_interface
(
user
=
user
,
interface
=
interface
)
class
IPNetworkInterface
(
Mixin
):
def
__init__
(
self
):
self
.
term
=
"ipnetworkinterface"
self
.
title
=
"ipnnetwork interface mixin"
self
.
scheme
=
(
"http://schemas.ogf.org/occi/infrastructure/"
"networkinterface#"
)
self
.
location
=
"/mixin/ipnetworkinterface/"
def
render_location
(
self
):
return
self
.
location
def
render_body
(
self
):
return
render_to_string
(
"occi/ipnetworkinterface.html"
,
{
'term'
:
self
.
term
,
'scheme'
:
self
.
scheme
,
'location'
:
self
.
location
,
'class'
:
"mixin"
,
'title'
:
self
.
title
,
})
"""predefined stuffs
"""predefined stuffs
...
@@ -893,6 +918,6 @@ IPNETWORK_INTERFACE_MIXIN = Kind(
...
@@ -893,6 +918,6 @@ IPNETWORK_INTERFACE_MIXIN = Kind(
scheme
=
"http://schemas.ogf.org/occi/infrastructure/networkinterface#"
,
scheme
=
"http://schemas.ogf.org/occi/infrastructure/networkinterface#"
,
class_
=
"mixin"
,
class_
=
"mixin"
,
title
=
"ipnetwork"
,
title
=
"ipnetwork"
,
location
=
"/mixin/ipnetwork/"
,
location
=
"/mixin/ipnetwork
interface
/"
,
attributes
=
IPNETWORK_ATTRS
,
attributes
=
IPNETWORK_ATTRS
,
)
)
circle/occi/templates/occi/ipnetworkinterface.html
0 → 100644
View file @
53fedb73
{% spaceless %}
Category: {{ term }}; scheme="{{ scheme }}"; class="{{ class }}"; title="{{ title }}"; location="{{ location }}";
{% endspaceless %}
circle/occi/templates/occi/network.html
View file @
53fedb73
Category:
compute
; scheme="{{ kind.scheme }}"; class="{{ kind.class }}";
Category:
network
; scheme="{{ kind.scheme }}"; class="{{ kind.class }}";
{% for m in mixins %}
{% for m in mixins %}
{{ m.render_body }}
{{ m.render_body }}
{% endfor %}
{% endfor %}
...
...
circle/occi/templates/occi/networkinterface.html
View file @
53fedb73
Category: networkinterface; scheme="{{ kind.scheme }}"; class="{{ kind.class }}";
Category: compute; scheme="{{ kind.scheme }}"; class="{{ kind.class }}";
{% for m in mixins %}
{{ m.render_body }}
{% endfor %}
{% for k, v in attrs.items %}
{% for k, v in attrs.items %}
X-OCCI-Attribute: {{ k }}={% if v.isdigit == False or k == "occi.core.id" %}"{{ v }}"{% else %}{{ v }}{% endif %}
X-OCCI-Attribute: {{ k }}={% if v.isdigit == False or k == "occi.core.id" %}"{{ v }}"{% else %}{{ v }}{% endif %}
{% endfor %}
{% endfor %}
circle/occi/urls.py
View file @
53fedb73
...
@@ -40,9 +40,10 @@ urlpatterns = patterns(
...
@@ -40,9 +40,10 @@ urlpatterns = patterns(
StorageLinkInterface
.
as_view
(),
name
=
"occi.storagelink"
),
StorageLinkInterface
.
as_view
(),
name
=
"occi.storagelink"
),
url
(
r'^network2/?$'
,
NetworkInterfaceView
.
as_view
(),
),
url
(
r'^network2/?$'
,
NetworkInterfaceView
.
as_view
(),
),
url
(
r'^network
2
/(?P<vid>\d+)/?$'
,
VlanInterface
.
as_view
(),
),
url
(
r'^network/(?P<vid>\d+)/?$'
,
VlanInterface
.
as_view
(),
),
url
(
r'^link/networkinterface/$'
,
CIRCLEInterface
.
as_view
()),
url
(
r'^link/networkinterface/$'
,
CIRCLEInterface
.
as_view
()),
url
(
r'^link/networkinterface/vm(?P<vm_pk>\d+)_vlan(?P<vlan_vid>\d+)/?$'
,
url
(
r'^link/networkinterface/'
'vm_(?P<vm_pk>
\
d+)_network_(?P<vlan_vid>
\
d+)/?$'
,
CIRCLEInterface
.
as_view
(),
name
=
"occi.networkinterface"
),
CIRCLEInterface
.
as_view
(),
name
=
"occi.networkinterface"
),
)
)
circle/occi/views.py
View file @
53fedb73
...
@@ -12,7 +12,7 @@ from .occi import (
...
@@ -12,7 +12,7 @@ from .occi import (
Compute
,
Compute
,
Storage
,
Storage
,
Network
,
Network
,
#
NetworkInterface,
NetworkInterface
,
OsTemplate
,
OsTemplate
,
StorageLink
,
StorageLink
,
COMPUTE_KIND
,
COMPUTE_KIND
,
...
@@ -284,5 +284,44 @@ class VlanInterface(CSRFExemptMixin, DetailView):
...
@@ -284,5 +284,44 @@ class VlanInterface(CSRFExemptMixin, DetailView):
pass
pass
class
CIRCLEInterface
(
CSRFExemptMixin
,
View
):
class
CIRCLEInterface
(
CSRFExemptMixin
,
OCCIPostDataAsListMixin
,
View
):
pass
def
get_vm_and_vlan
(
self
):
vlan_vid
=
self
.
kwargs
[
'vlan_vid'
]
vm
=
get_object_or_404
(
Instance
.
objects
.
filter
(
destroyed_at
=
None
),
pk
=
self
.
kwargs
[
'vm_pk'
])
vlan
=
get_object_or_404
(
Vlan
,
vid
=
vlan_vid
)
return
vm
,
vlan
def
get
(
self
,
request
,
*
args
,
**
kwargs
):
vm
,
vlan
=
self
.
get_vm_and_vlan
()
ni
=
NetworkInterface
(
instance
=
vm
,
vlan
=
vlan
)
return
HttpResponse
(
ni
.
render_as_category
(),
content_type
=
"text/plain"
,
)
def
post
(
self
,
request
,
*
args
,
**
kwargs
):
# we don't support actions for networkinterfaces
# (they don't even exist in the model)
if
request
.
GET
.
get
(
"action"
):
return
HttpResponse
(
""
,
status
=
500
)
data
=
self
.
get_post_data
(
request
)
sl
=
NetworkInterface
.
create_object
(
data
=
data
)
if
sl
:
response
=
HttpResponse
(
"X-OCCI-Location:
%
s"
%
sl
.
location
,
status
=
201
,
content_type
=
"text/plain"
,
)
return
response
else
:
return
HttpResponse
(
"VM or Network does not exist."
,
status
=
500
)
def
delete
(
self
,
request
,
*
args
,
**
kwargs
):
vm
,
vlan
=
self
.
get_vm_and_vlan
()
ni
=
NetworkInterface
(
instance
=
vm
,
vlan
=
vlan
)
ni
.
delete
()
return
HttpResponse
(
""
)
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