git://git.onelab.eu
/
sfa.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
rspec.version.add_nodes take an extra arg to handle Request RSpec
[sfa.git]
/
sfa
/
rspecs
/
versions
/
sfav1.py
diff --git
a/sfa/rspecs/versions/sfav1.py
b/sfa/rspecs/versions/sfav1.py
index
406077a
..
fa5f9d4
100644
(file)
--- a/
sfa/rspecs/versions/sfav1.py
+++ b/
sfa/rspecs/versions/sfav1.py
@@
-3,20
+3,20
@@
from lxml import etree
from sfa.util.sfalogging import logger
from sfa.util.xrn import hrn_to_urn, urn_to_hrn
from sfa.util.sfalogging import logger
from sfa.util.xrn import hrn_to_urn, urn_to_hrn
-from sfa.util.plxrn import PlXrn
-from sfa.rspecs.baseversion import BaseVersion
+from sfa.rspecs.version import RSpecVersion
from sfa.rspecs.elements.element import Element
from sfa.rspecs.elements.versions.pgv2Link import PGv2Link
from sfa.rspecs.elements.versions.sfav1Node import SFAv1Node
from sfa.rspecs.elements.versions.sfav1Sliver import SFAv1Sliver
from sfa.rspecs.elements.element import Element
from sfa.rspecs.elements.versions.pgv2Link import PGv2Link
from sfa.rspecs.elements.versions.sfav1Node import SFAv1Node
from sfa.rspecs.elements.versions.sfav1Sliver import SFAv1Sliver
+from sfa.rspecs.elements.versions.sfav1Lease import SFAv1Lease
-class SFAv1(
Base
Version):
+class SFAv1(
RSpec
Version):
enabled = True
type = 'SFA'
content_type = '*'
version = '1'
enabled = True
type = 'SFA'
content_type = '*'
version = '1'
- schema =
None
- namespace =
None
+ schema =
''
+ namespace =
''
extensions = {}
namespaces = None
template = '<RSpec type="%s"></RSpec>' % type
extensions = {}
namespaces = None
template = '<RSpec type="%s"></RSpec>' % type
@@
-46,8
+46,8
@@
class SFAv1(BaseVersion):
def get_nodes_with_slivers(self):
return SFAv1Node.get_nodes_with_slivers(self.xml)
def get_nodes_with_slivers(self):
return SFAv1Node.get_nodes_with_slivers(self.xml)
- def add_nodes(self, nodes, network = None, no_dupes=False):
- SFAv1Node.add_nodes(self.xml, nodes)
+ def add_nodes(self, nodes, network = None, no_dupes=False
, rspec_content_type=None
):
+ SFAv1Node.add_nodes(self.xml, nodes
, rspec_content_type
)
def merge_node(self, source_node_tag, network, no_dupes=False):
if no_dupes and self.get_node_element(node['hostname']):
def merge_node(self, source_node_tag, network, no_dupes=False):
if no_dupes and self.get_node_element(node['hostname']):
@@
-93,6
+93,7
@@
class SFAv1(BaseVersion):
attributes = []
nodes_with_slivers = self.get_nodes_with_slivers()
for default_attribute in self.get_default_sliver_attributes(network):
attributes = []
nodes_with_slivers = self.get_nodes_with_slivers()
for default_attribute in self.get_default_sliver_attributes(network):
+ attribute = default_attribute.copy()
attribute['node_id'] = None
attributes.append(attribute)
for node in nodes_with_slivers:
attribute['node_id'] = None
attributes.append(attribute)
for node in nodes_with_slivers:
@@
-100,21
+101,24
@@
class SFAv1(BaseVersion):
sliver_attributes = self.get_sliver_attributes(nodename, network)
for sliver_attribute in sliver_attributes:
sliver_attribute['node_id'] = nodename
sliver_attributes = self.get_sliver_attributes(nodename, network)
for sliver_attribute in sliver_attributes:
sliver_attribute['node_id'] = nodename
- attributes.append(attribute)
+ attributes.append(
sliver_
attribute)
return attributes
return attributes
- def add_sliver_attribute(self,
hostname
, name, value, network=None):
- nodes = self.get_nodes({'component_id': '*%s*' %
hostname
})
- if no
t nodes
:
+ def add_sliver_attribute(self,
component_id
, name, value, network=None):
+ nodes = self.get_nodes({'component_id': '*%s*' %
component_id
})
+ if no
des is not None and isinstance(nodes, list) and len(nodes) > 0
:
node = nodes[0]
slivers = SFAv1Sliver.get_slivers(node)
if slivers:
sliver = slivers[0]
node = nodes[0]
slivers = SFAv1Sliver.get_slivers(node)
if slivers:
sliver = slivers[0]
- SFAv1Sliver.add_attribute(sliver, name, value)
+ SFAv1Sliver.add_sliver_attribute(sliver, name, value)
+ else:
+ # should this be an assert / raise an exception?
+ logger.error("WARNING: failed to find component_id %s" % component_id)
- def get_sliver_attributes(self,
hostname
, network=None):
- nodes = self.get_nodes({'component_id': '*%s*' %
hostname
})
+ def get_sliver_attributes(self,
component_id
, network=None):
+ nodes = self.get_nodes({'component_id': '*%s*' %
component_id
})
attribs = []
if nodes is not None and isinstance(nodes, list) and len(nodes) > 0:
node = nodes[0]
attribs = []
if nodes is not None and isinstance(nodes, list) and len(nodes) > 0:
node = nodes[0]
@@
-124,25
+128,30
@@
class SFAv1(BaseVersion):
attribs = SFAv1Sliver.get_sliver_attributes(sliver.element)
return attribs
attribs = SFAv1Sliver.get_sliver_attributes(sliver.element)
return attribs
- def remove_sliver_attribute(self,
hostname
, name, value, network=None):
- attribs = self.get_sliver_attributes(
hostname
)
+ def remove_sliver_attribute(self,
component_id
, name, value, network=None):
+ attribs = self.get_sliver_attributes(
component_id
)
for attrib in attribs:
if attrib['name'] == name and attrib['value'] == value:
for attrib in attribs:
if attrib['name'] == name and attrib['value'] == value:
- attrib.element.delete()
+ #attrib.element.delete()
+ parent = attrib.element.getparent()
+ parent.remove(attrib.element)
def add_default_sliver_attribute(self, name, value, network=None):
if network:
defaults = self.xml.xpath("//network[@name='%s']/sliver_defaults" % network)
else:
def add_default_sliver_attribute(self, name, value, network=None):
if network:
defaults = self.xml.xpath("//network[@name='%s']/sliver_defaults" % network)
else:
- defaults = self.xml.xpath("//sliver_defaults" % network)
- if not defaults :
- network_tag = self.xml.xpath("//network[@name='%s']" % network)
+ defaults = self.xml.xpath("//sliver_defaults")
+ if not defaults:
+ if network:
+ network_tag = self.xml.xpath("//network[@name='%s']" % network)
+ else:
+ network_tag = self.xml.xpath("//network")
if isinstance(network_tag, list):
network_tag = network_tag[0]
defaults = network_tag.add_element('sliver_defaults')
elif isinstance(defaults, list):
defaults = defaults[0]
if isinstance(network_tag, list):
network_tag = network_tag[0]
defaults = network_tag.add_element('sliver_defaults')
elif isinstance(defaults, list):
defaults = defaults[0]
- S
fa
v1Sliver.add_sliver_attribute(defaults, name, value)
+ S
FA
v1Sliver.add_sliver_attribute(defaults, name, value)
def get_default_sliver_attributes(self, network=None):
if network:
def get_default_sliver_attributes(self, network=None):
if network:
@@
-150,17
+159,15
@@
class SFAv1(BaseVersion):
else:
defaults = self.xml.xpath("//sliver_defaults")
if not defaults: return []
else:
defaults = self.xml.xpath("//sliver_defaults")
if not defaults: return []
- return S
fav1Sliver.get_sliver_attributes(defaults
)
+ return S
FAv1Sliver.get_sliver_attributes(defaults[0]
)
def remove_default_sliver_attribute(self, name, value, network=None):
def remove_default_sliver_attribute(self, name, value, network=None):
- if network:
- defaults = self.xml.xpath("//network[@name='%s']/sliver_defaults" % network)
- else:
- defaults = self.xml.xpath("//sliver_defaults" % network)
- attribs = Sfav1Sliver.get_sliver_attributes(defaults)
+ attribs = self.get_default_sliver_attributes(network)
for attrib in attribs:
if attrib['name'] == name and attrib['value'] == value:
for attrib in attribs:
if attrib['name'] == name and attrib['value'] == value:
- attrib.element.delete()
+ #attrib.element.delete()
+ parent = attrib.element.getparent()
+ parent.remove(attrib.element)
# Links
# Links
@@
-173,7
+180,7
@@
class SFAv1(BaseVersion):
def add_links(self, links):
networks = self.get_networks()
if len(networks) > 0:
def add_links(self, links):
networks = self.get_networks()
if len(networks) > 0:
- xml = networks[0]
+ xml = networks[0]
.element
else:
xml = self.xml
PGv2Link.add_links(xml, links)
else:
xml = self.xml
PGv2Link.add_links(xml, links)
@@
-188,6
+195,9
@@
class SFAv1(BaseVersion):
Merge contents for specified rspec with current rspec
"""
Merge contents for specified rspec with current rspec
"""
+ if not in_rspec:
+ return
+
from sfa.rspecs.rspec import RSpec
if isinstance(in_rspec, RSpec):
rspec = in_rspec
from sfa.rspecs.rspec import RSpec
if isinstance(in_rspec, RSpec):
rspec = in_rspec
@@
-207,6
+217,14
@@
class SFAv1(BaseVersion):
self.xml.append(network.element)
current_networks.append(current_network)
self.xml.append(network.element)
current_networks.append(current_network)
+ # Leases
+
+ def get_leases(self, filter=None):
+ return SFAv1Lease.get_leases(self.xml, filter)
+
+ def add_leases(self, leases, network = None, no_dupes=False):
+ SFAv1Lease.add_leases(self.xml, leases)
+
if __name__ == '__main__':
from sfa.rspecs.rspec import RSpec
from sfa.rspecs.rspec_elements import *
if __name__ == '__main__':
from sfa.rspecs.rspec import RSpec
from sfa.rspecs.rspec_elements import *