aboutsummaryrefslogtreecommitdiffstats
path: root/Testcases/vnc_api/gen/vnc_ifmap_client_gen.py
diff options
context:
space:
mode:
Diffstat (limited to 'Testcases/vnc_api/gen/vnc_ifmap_client_gen.py')
-rw-r--r--Testcases/vnc_api/gen/vnc_ifmap_client_gen.py10533
1 files changed, 0 insertions, 10533 deletions
diff --git a/Testcases/vnc_api/gen/vnc_ifmap_client_gen.py b/Testcases/vnc_api/gen/vnc_ifmap_client_gen.py
deleted file mode 100644
index c07130d..0000000
--- a/Testcases/vnc_api/gen/vnc_ifmap_client_gen.py
+++ /dev/null
@@ -1,10533 +0,0 @@
-
-# AUTO-GENERATED file from IFMapApiGenerator. Do Not Edit!
-
-import re
-import json
-import cStringIO
-from lxml import etree
-
-from cfgm_common.ifmap.client import client, namespaces
-from cfgm_common.ifmap.request import NewSessionRequest, RenewSessionRequest
-from cfgm_common.ifmap.request import EndSessionRequest, PublishRequest
-from cfgm_common.ifmap.request import SearchRequest, SubscribeRequest, PurgeRequest, PollRequest
-from cfgm_common.ifmap.id import IPAddress, MACAddress, Device, AccessRequest, Identity, CustomIdentity
-from cfgm_common.ifmap.operations import PublishUpdateOperation, PublishNotifyOperation
-from cfgm_common.ifmap.operations import PublishDeleteOperation, SubscribeUpdateOperation, SubscribeDeleteOperation
-from cfgm_common.ifmap.util import attr, link_ids
-from cfgm_common.ifmap.response import Response, newSessionResult
-from cfgm_common.ifmap.metadata import Metadata
-
-import cfgm_common.imid
-import cfgm_common.exceptions
-from cfgm_common.imid import escape
-from resource_xsd import *
-
-class VncIfmapClientGen(object):
- def __init__(self):
- self._parent_metas = {}
- self._parent_metas['domain'] = {}
- self._parent_metas['domain']['project'] = 'domain-project'
- self._parent_metas['domain']['namespace'] = 'domain-namespace'
- self._parent_metas['domain']['service-template'] = 'domain-service-template'
- self._parent_metas['domain']['virtual-DNS'] = 'domain-virtual-DNS'
- self._parent_metas['global-vrouter-config'] = {}
- self._parent_metas['instance-ip'] = {}
- self._parent_metas['network-policy'] = {}
- self._parent_metas['loadbalancer-pool'] = {}
- self._parent_metas['loadbalancer-pool']['loadbalancer-member'] = 'loadbalancer-pool-loadbalancer-member'
- self._parent_metas['virtual-DNS-record'] = {}
- self._parent_metas['route-target'] = {}
- self._parent_metas['floating-ip'] = {}
- self._parent_metas['floating-ip-pool'] = {}
- self._parent_metas['floating-ip-pool']['floating-ip'] = 'floating-ip-pool-floating-ip'
- self._parent_metas['physical-router'] = {}
- self._parent_metas['physical-router']['physical-interface'] = 'physical-router-physical-interface'
- self._parent_metas['physical-router']['logical-interface'] = 'physical-router-logical-interface'
- self._parent_metas['bgp-router'] = {}
- self._parent_metas['virtual-router'] = {}
- self._parent_metas['config-root'] = {}
- self._parent_metas['config-root']['global-system-config'] = 'config-root-global-system-config'
- self._parent_metas['config-root']['domain'] = 'config-root-domain'
- self._parent_metas['subnet'] = {}
- self._parent_metas['global-system-config'] = {}
- self._parent_metas['global-system-config']['global-vrouter-config'] = 'global-system-config-global-vrouter-config'
- self._parent_metas['global-system-config']['physical-router'] = 'global-system-config-physical-router'
- self._parent_metas['global-system-config']['virtual-router'] = 'global-system-config-virtual-router'
- self._parent_metas['global-system-config']['config-node'] = 'global-system-config-config-node'
- self._parent_metas['global-system-config']['analytics-node'] = 'global-system-config-analytics-node'
- self._parent_metas['global-system-config']['database-node'] = 'global-system-config-database-node'
- self._parent_metas['global-system-config']['service-appliance-set'] = 'global-system-config-service-appliance-set'
- self._parent_metas['service-appliance'] = {}
- self._parent_metas['service-instance'] = {}
- self._parent_metas['namespace'] = {}
- self._parent_metas['logical-interface'] = {}
- self._parent_metas['route-table'] = {}
- self._parent_metas['physical-interface'] = {}
- self._parent_metas['physical-interface']['logical-interface'] = 'physical-interface-logical-interface'
- self._parent_metas['access-control-list'] = {}
- self._parent_metas['analytics-node'] = {}
- self._parent_metas['virtual-DNS'] = {}
- self._parent_metas['virtual-DNS']['virtual-DNS-record'] = 'virtual-DNS-virtual-DNS-record'
- self._parent_metas['customer-attachment'] = {}
- self._parent_metas['service-appliance-set'] = {}
- self._parent_metas['service-appliance-set']['service-appliance'] = 'service-appliance-set-service-appliance'
- self._parent_metas['config-node'] = {}
- self._parent_metas['qos-queue'] = {}
- self._parent_metas['virtual-machine'] = {}
- self._parent_metas['virtual-machine']['virtual-machine-interface'] = 'virtual-machine-virtual-machine-interface'
- self._parent_metas['interface-route-table'] = {}
- self._parent_metas['service-template'] = {}
- self._parent_metas['virtual-ip'] = {}
- self._parent_metas['loadbalancer-member'] = {}
- self._parent_metas['security-group'] = {}
- self._parent_metas['security-group']['access-control-list'] = 'security-group-access-control-list'
- self._parent_metas['provider-attachment'] = {}
- self._parent_metas['virtual-machine-interface'] = {}
- self._parent_metas['loadbalancer-healthmonitor'] = {}
- self._parent_metas['virtual-network'] = {}
- self._parent_metas['virtual-network']['access-control-list'] = 'virtual-network-access-control-list'
- self._parent_metas['virtual-network']['floating-ip-pool'] = 'virtual-network-floating-ip-pool'
- self._parent_metas['virtual-network']['routing-instance'] = 'virtual-network-routing-instance'
- self._parent_metas['project'] = {}
- self._parent_metas['project']['security-group'] = 'project-security-group'
- self._parent_metas['project']['virtual-network'] = 'project-virtual-network'
- self._parent_metas['project']['qos-queue'] = 'project-qos-queue'
- self._parent_metas['project']['qos-forwarding-class'] = 'project-qos-forwarding-class'
- self._parent_metas['project']['network-ipam'] = 'project-network-ipam'
- self._parent_metas['project']['network-policy'] = 'project-network-policy'
- self._parent_metas['project']['virtual-machine-interface'] = 'project-virtual-machine-interface'
- self._parent_metas['project']['service-instance'] = 'project-service-instance'
- self._parent_metas['project']['route-table'] = 'project-route-table'
- self._parent_metas['project']['interface-route-table'] = 'project-interface-route-table'
- self._parent_metas['project']['logical-router'] = 'project-logical-router'
- self._parent_metas['project']['loadbalancer-pool'] = 'project-loadbalancer-pool'
- self._parent_metas['project']['loadbalancer-healthmonitor'] = 'project-loadbalancer-healthmonitor'
- self._parent_metas['project']['virtual-ip'] = 'project-virtual-ip'
- self._parent_metas['qos-forwarding-class'] = {}
- self._parent_metas['database-node'] = {}
- self._parent_metas['routing-instance'] = {}
- self._parent_metas['routing-instance']['bgp-router'] = 'instance-bgp-router'
- self._parent_metas['network-ipam'] = {}
- self._parent_metas['logical-router'] = {}
- #end __init__
-
- def _ifmap_domain_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.domain_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_domain_alloc
-
- def _ifmap_domain_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('domain_limits', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['domain_limits']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- DomainLimitsType(**field).exportChildren(buf, level = 1, name_ = 'domain-limits', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'domain-limits', pretty_print = False)
- domain_limits_xml = buf.getvalue()
- buf.close()
- meta = Metadata('domain-limits' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = domain_limits_xml)
-
- if (existing_metas and 'domain-limits' in existing_metas and
- str(existing_metas['domain-limits'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('api_access_list', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['api_access_list']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- ApiAccessListType(**field).exportChildren(buf, level = 1, name_ = 'api-access-list', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'api-access-list', pretty_print = False)
- api_access_list_xml = buf.getvalue()
- buf.close()
- meta = Metadata('api-access-list' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = api_access_list_xml)
-
- if (existing_metas and 'api-access-list' in existing_metas and
- str(existing_metas['api-access-list'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('project_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'project'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- domain_project_xml = ''
- meta = Metadata('domain-project' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = domain_project_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('namespace_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'namespace'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- domain_namespace_xml = ''
- meta = Metadata('domain-namespace' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = domain_namespace_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('service_template_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'service-template'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- domain_service_template_xml = ''
- meta = Metadata('domain-service-template' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = domain_service_template_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('virtual_DNS_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'virtual-DNS'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- domain_virtual_DNS_xml = ''
- meta = Metadata('domain-virtual-DNS' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = domain_virtual_DNS_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_domain_set
-
- def _ifmap_domain_create(self, obj_ids, obj_dict):
- if not 'parent_type' in obj_dict:
- # parent is config-root
- parent_type = 'config-root'
- parent_imid = 'contrail:config-root:root'
- else:
- parent_type = obj_dict['parent_type']
- parent_imid = obj_ids.get('parent_imid', None)
-
- # Parent Link Meta
- update = {}
- parent_link_meta = self._parent_metas[parent_type]['domain']
- meta = Metadata(parent_link_meta, '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
- self._update_id_pair_meta(update, obj_ids['imid'], meta)
- self._publish_update(parent_imid, update)
-
- (ok, result) = self._ifmap_domain_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_domain_create
-
-
- def _ifmap_domain_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'domain-limits', u'api-access-list', u'id-perms', u'display-name', u'domain-project', u'domain-namespace', u'domain-service-template', u'domain-virtual-DNS']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_domain_read_to_meta_index
-
- def _ifmap_domain_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_domain_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['domain-limits', 'api-access-list', 'id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_domain_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_domain_update
-
- def _ifmap_domain_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_domain_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_domain_delete
-
- def _ifmap_global_vrouter_config_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.global_vrouter_config_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_global_vrouter_config_alloc
-
- def _ifmap_global_vrouter_config_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('linklocal_services', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['linklocal_services']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- LinklocalServicesTypes(**field).exportChildren(buf, level = 1, name_ = 'linklocal-services', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'linklocal-services', pretty_print = False)
- linklocal_services_xml = buf.getvalue()
- buf.close()
- meta = Metadata('linklocal-services' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = linklocal_services_xml)
-
- if (existing_metas and 'linklocal-services' in existing_metas and
- str(existing_metas['linklocal-services'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('encapsulation_priorities', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['encapsulation_priorities']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- EncapsulationPrioritiesType(**field).exportChildren(buf, level = 1, name_ = 'encapsulation-priorities', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'encapsulation-priorities', pretty_print = False)
- encapsulation_priorities_xml = buf.getvalue()
- buf.close()
- meta = Metadata('encapsulation-priorities' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = encapsulation_priorities_xml)
-
- if (existing_metas and 'encapsulation-priorities' in existing_metas and
- str(existing_metas['encapsulation-priorities'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('vxlan_network_identifier_mode', None)
- if field is not None:
- norm_str = escape(str(obj_dict['vxlan_network_identifier_mode']))
- meta = Metadata('vxlan-network-identifier-mode', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'vxlan-network-identifier-mode' in existing_metas and
- str(existing_metas['vxlan-network-identifier-mode'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_global_vrouter_config_set
-
- def _ifmap_global_vrouter_config_create(self, obj_ids, obj_dict):
- if not 'parent_type' in obj_dict:
- # parent is config-root
- parent_type = 'config-root'
- parent_imid = 'contrail:config-root:root'
- else:
- parent_type = obj_dict['parent_type']
- parent_imid = obj_ids.get('parent_imid', None)
-
- # Parent Link Meta
- update = {}
- parent_link_meta = self._parent_metas[parent_type]['global-vrouter-config']
- meta = Metadata(parent_link_meta, '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
- self._update_id_pair_meta(update, obj_ids['imid'], meta)
- self._publish_update(parent_imid, update)
-
- (ok, result) = self._ifmap_global_vrouter_config_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_global_vrouter_config_create
-
-
- def _ifmap_global_vrouter_config_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'linklocal-services', u'encapsulation-priorities', u'vxlan-network-identifier-mode', u'id-perms', u'display-name']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_global-vrouter-config_read_to_meta_index
-
- def _ifmap_global_vrouter_config_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_global_vrouter_config_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['linklocal-services', 'encapsulation-priorities', 'vxlan-network-identifier-mode', 'id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_global_vrouter_config_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_global_vrouter_config_update
-
- def _ifmap_global_vrouter_config_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_global_vrouter_config_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_global_vrouter_config_delete
-
- def _ifmap_instance_ip_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.instance_ip_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_instance_ip_alloc
-
- def _ifmap_instance_ip_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('instance_ip_address', None)
- if field is not None:
- norm_str = escape(str(obj_dict['instance_ip_address']))
- meta = Metadata('instance-ip-address', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'instance-ip-address' in existing_metas and
- str(existing_metas['instance-ip-address'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('instance_ip_family', None)
- if field is not None:
- norm_str = escape(str(obj_dict['instance_ip_family']))
- meta = Metadata('instance-ip-family', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'instance-ip-family' in existing_metas and
- str(existing_metas['instance-ip-family'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('instance_ip_mode', None)
- if field is not None:
- norm_str = escape(str(obj_dict['instance_ip_mode']))
- meta = Metadata('instance-ip-mode', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'instance-ip-mode' in existing_metas and
- str(existing_metas['instance-ip-mode'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('subnet_uuid', None)
- if field is not None:
- norm_str = escape(str(obj_dict['subnet_uuid']))
- meta = Metadata('subnet-uuid', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'subnet-uuid' in existing_metas and
- str(existing_metas['subnet-uuid'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('virtual_network_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'virtual-network'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- instance_ip_virtual_network_xml = ''
- meta = Metadata('instance-ip-virtual-network' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = instance_ip_virtual_network_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('virtual_machine_interface_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'virtual-machine-interface'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- instance_ip_virtual_machine_interface_xml = ''
- meta = Metadata('instance-ip-virtual-machine-interface' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = instance_ip_virtual_machine_interface_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_instance_ip_set
-
- def _ifmap_instance_ip_create(self, obj_ids, obj_dict):
- (ok, result) = self._ifmap_instance_ip_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_instance_ip_create
-
-
- def _ifmap_instance_ip_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'instance-ip-virtual-network', u'instance-ip-virtual-machine-interface', u'instance-ip-address', u'instance-ip-family', u'instance-ip-mode', u'subnet-uuid', u'id-perms', u'display-name']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_instance-ip_read_to_meta_index
-
- def _ifmap_instance_ip_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_instance_ip_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['instance-ip-address', 'instance-ip-family', 'instance-ip-mode', 'subnet-uuid', 'id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {'instance-ip-virtual-network': 'virtual-network',
- 'instance-ip-virtual-machine-interface': 'virtual-machine-interface'}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_instance_ip_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_instance_ip_update
-
- def _ifmap_instance_ip_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_instance_ip_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_instance_ip_delete
-
- def _ifmap_network_policy_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.network_policy_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_network_policy_alloc
-
- def _ifmap_network_policy_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('network_policy_entries', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['network_policy_entries']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- PolicyEntriesType(**field).exportChildren(buf, level = 1, name_ = 'network-policy-entries', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'network-policy-entries', pretty_print = False)
- network_policy_entries_xml = buf.getvalue()
- buf.close()
- meta = Metadata('network-policy-entries' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = network_policy_entries_xml)
-
- if (existing_metas and 'network-policy-entries' in existing_metas and
- str(existing_metas['network-policy-entries'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_network_policy_set
-
- def _ifmap_network_policy_create(self, obj_ids, obj_dict):
- if not 'parent_type' in obj_dict:
- # parent is config-root
- parent_type = 'config-root'
- parent_imid = 'contrail:config-root:root'
- else:
- parent_type = obj_dict['parent_type']
- parent_imid = obj_ids.get('parent_imid', None)
-
- # Parent Link Meta
- update = {}
- parent_link_meta = self._parent_metas[parent_type]['network-policy']
- meta = Metadata(parent_link_meta, '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
- self._update_id_pair_meta(update, obj_ids['imid'], meta)
- self._publish_update(parent_imid, update)
-
- (ok, result) = self._ifmap_network_policy_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_network_policy_create
-
-
- def _ifmap_network_policy_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'virtual-network-network-policy', u'network-policy-entries', u'id-perms', u'display-name']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_network-policy_read_to_meta_index
-
- def _ifmap_network_policy_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_network_policy_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['network-policy-entries', 'id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_network_policy_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_network_policy_update
-
- def _ifmap_network_policy_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_network_policy_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_network_policy_delete
-
- def _ifmap_loadbalancer_pool_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.loadbalancer_pool_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_loadbalancer_pool_alloc
-
- def _ifmap_loadbalancer_pool_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('loadbalancer_pool_properties', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['loadbalancer_pool_properties']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- LoadbalancerPoolType(**field).exportChildren(buf, level = 1, name_ = 'loadbalancer-pool-properties', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'loadbalancer-pool-properties', pretty_print = False)
- loadbalancer_pool_properties_xml = buf.getvalue()
- buf.close()
- meta = Metadata('loadbalancer-pool-properties' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = loadbalancer_pool_properties_xml)
-
- if (existing_metas and 'loadbalancer-pool-properties' in existing_metas and
- str(existing_metas['loadbalancer-pool-properties'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('loadbalancer_pool_provider', None)
- if field is not None:
- norm_str = escape(str(obj_dict['loadbalancer_pool_provider']))
- meta = Metadata('loadbalancer-pool-provider', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'loadbalancer-pool-provider' in existing_metas and
- str(existing_metas['loadbalancer-pool-provider'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('service_instance_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'service-instance'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- loadbalancer_pool_service_instance_xml = ''
- meta = Metadata('loadbalancer-pool-service-instance' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = loadbalancer_pool_service_instance_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('virtual_machine_interface_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'virtual-machine-interface'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- loadbalancer_pool_virtual_machine_interface_xml = ''
- meta = Metadata('loadbalancer-pool-virtual-machine-interface' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = loadbalancer_pool_virtual_machine_interface_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('service_appliance_set_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'service-appliance-set'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- loadbalancer_pool_service_appliance_set_xml = ''
- meta = Metadata('loadbalancer-pool-service-appliance-set' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = loadbalancer_pool_service_appliance_set_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('loadbalancer_member_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'loadbalancer-member'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- loadbalancer_pool_loadbalancer_member_xml = ''
- meta = Metadata('loadbalancer-pool-loadbalancer-member' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = loadbalancer_pool_loadbalancer_member_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('loadbalancer_healthmonitor_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'loadbalancer-healthmonitor'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- loadbalancer_pool_loadbalancer_healthmonitor_xml = ''
- meta = Metadata('loadbalancer-pool-loadbalancer-healthmonitor' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = loadbalancer_pool_loadbalancer_healthmonitor_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_loadbalancer_pool_set
-
- def _ifmap_loadbalancer_pool_create(self, obj_ids, obj_dict):
- if not 'parent_type' in obj_dict:
- # parent is config-root
- parent_type = 'config-root'
- parent_imid = 'contrail:config-root:root'
- else:
- parent_type = obj_dict['parent_type']
- parent_imid = obj_ids.get('parent_imid', None)
-
- # Parent Link Meta
- update = {}
- parent_link_meta = self._parent_metas[parent_type]['loadbalancer-pool']
- meta = Metadata(parent_link_meta, '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
- self._update_id_pair_meta(update, obj_ids['imid'], meta)
- self._publish_update(parent_imid, update)
-
- (ok, result) = self._ifmap_loadbalancer_pool_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_loadbalancer_pool_create
-
-
- def _ifmap_loadbalancer_pool_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'loadbalancer-pool-service-instance', u'loadbalancer-pool-virtual-machine-interface', u'loadbalancer-pool-service-appliance-set', u'loadbalancer-pool-loadbalancer-healthmonitor', u'virtual-ip-loadbalancer-pool', u'loadbalancer-pool-properties', u'loadbalancer-pool-provider', u'id-perms', u'display-name', u'loadbalancer-pool-loadbalancer-member']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_loadbalancer-pool_read_to_meta_index
-
- def _ifmap_loadbalancer_pool_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_loadbalancer_pool_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['loadbalancer-pool-properties', 'loadbalancer-pool-provider', 'id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {'loadbalancer-pool-service-instance': 'service-instance',
- 'loadbalancer-pool-virtual-machine-interface': 'virtual-machine-interface',
- 'loadbalancer-pool-service-appliance-set': 'service-appliance-set',
- 'loadbalancer-pool-loadbalancer-healthmonitor': 'loadbalancer-healthmonitor'}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_loadbalancer_pool_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_loadbalancer_pool_update
-
- def _ifmap_loadbalancer_pool_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_loadbalancer_pool_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_loadbalancer_pool_delete
-
- def _ifmap_virtual_DNS_record_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.virtual_DNS_record_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_virtual_DNS_record_alloc
-
- def _ifmap_virtual_DNS_record_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('virtual_DNS_record_data', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['virtual_DNS_record_data']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- VirtualDnsRecordType(**field).exportChildren(buf, level = 1, name_ = 'virtual-DNS-record-data', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'virtual-DNS-record-data', pretty_print = False)
- virtual_DNS_record_data_xml = buf.getvalue()
- buf.close()
- meta = Metadata('virtual-DNS-record-data' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = virtual_DNS_record_data_xml)
-
- if (existing_metas and 'virtual-DNS-record-data' in existing_metas and
- str(existing_metas['virtual-DNS-record-data'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_virtual_DNS_record_set
-
- def _ifmap_virtual_DNS_record_create(self, obj_ids, obj_dict):
- if not 'parent_type' in obj_dict:
- # parent is config-root
- parent_type = 'config-root'
- parent_imid = 'contrail:config-root:root'
- else:
- parent_type = obj_dict['parent_type']
- parent_imid = obj_ids.get('parent_imid', None)
-
- # Parent Link Meta
- update = {}
- parent_link_meta = self._parent_metas[parent_type]['virtual-DNS-record']
- meta = Metadata(parent_link_meta, '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
- self._update_id_pair_meta(update, obj_ids['imid'], meta)
- self._publish_update(parent_imid, update)
-
- (ok, result) = self._ifmap_virtual_DNS_record_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_virtual_DNS_record_create
-
-
- def _ifmap_virtual_DNS_record_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'virtual-DNS-record-data', u'id-perms', u'display-name']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_virtual-DNS-record_read_to_meta_index
-
- def _ifmap_virtual_DNS_record_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_virtual_DNS_record_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['virtual-DNS-record-data', 'id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_virtual_DNS_record_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_virtual_DNS_record_update
-
- def _ifmap_virtual_DNS_record_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_virtual_DNS_record_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_virtual_DNS_record_delete
-
- def _ifmap_route_target_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.route_target_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_route_target_alloc
-
- def _ifmap_route_target_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_route_target_set
-
- def _ifmap_route_target_create(self, obj_ids, obj_dict):
- (ok, result) = self._ifmap_route_target_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_route_target_create
-
-
- def _ifmap_route_target_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'logical-router-target', u'instance-target', u'id-perms', u'display-name']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_route-target_read_to_meta_index
-
- def _ifmap_route_target_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_route_target_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_route_target_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_route_target_update
-
- def _ifmap_route_target_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_route_target_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_route_target_delete
-
- def _ifmap_floating_ip_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.floating_ip_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_floating_ip_alloc
-
- def _ifmap_floating_ip_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('floating_ip_address', None)
- if field is not None:
- norm_str = escape(str(obj_dict['floating_ip_address']))
- meta = Metadata('floating-ip-address', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'floating-ip-address' in existing_metas and
- str(existing_metas['floating-ip-address'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('floating_ip_is_virtual_ip', None)
- if field is not None:
- norm_str = escape(str(obj_dict['floating_ip_is_virtual_ip']))
- meta = Metadata('floating-ip-is-virtual-ip', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'floating-ip-is-virtual-ip' in existing_metas and
- str(existing_metas['floating-ip-is-virtual-ip'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('floating_ip_fixed_ip_address', None)
- if field is not None:
- norm_str = escape(str(obj_dict['floating_ip_fixed_ip_address']))
- meta = Metadata('floating-ip-fixed-ip-address', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'floating-ip-fixed-ip-address' in existing_metas and
- str(existing_metas['floating-ip-fixed-ip-address'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('floating_ip_address_family', None)
- if field is not None:
- norm_str = escape(str(obj_dict['floating_ip_address_family']))
- meta = Metadata('floating-ip-address-family', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'floating-ip-address-family' in existing_metas and
- str(existing_metas['floating-ip-address-family'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('project_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'project'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- floating_ip_project_xml = ''
- meta = Metadata('floating-ip-project' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = floating_ip_project_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('virtual_machine_interface_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'virtual-machine-interface'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- floating_ip_virtual_machine_interface_xml = ''
- meta = Metadata('floating-ip-virtual-machine-interface' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = floating_ip_virtual_machine_interface_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_floating_ip_set
-
- def _ifmap_floating_ip_create(self, obj_ids, obj_dict):
- if not 'parent_type' in obj_dict:
- # parent is config-root
- parent_type = 'config-root'
- parent_imid = 'contrail:config-root:root'
- else:
- parent_type = obj_dict['parent_type']
- parent_imid = obj_ids.get('parent_imid', None)
-
- # Parent Link Meta
- update = {}
- parent_link_meta = self._parent_metas[parent_type]['floating-ip']
- meta = Metadata(parent_link_meta, '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
- self._update_id_pair_meta(update, obj_ids['imid'], meta)
- self._publish_update(parent_imid, update)
-
- (ok, result) = self._ifmap_floating_ip_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_floating_ip_create
-
-
- def _ifmap_floating_ip_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'floating-ip-project', u'floating-ip-virtual-machine-interface', u'customer-attachment-floating-ip', u'floating-ip-address', u'floating-ip-is-virtual-ip', u'floating-ip-fixed-ip-address', u'floating-ip-address-family', u'id-perms', u'display-name']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_floating-ip_read_to_meta_index
-
- def _ifmap_floating_ip_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_floating_ip_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['floating-ip-address', 'floating-ip-is-virtual-ip', 'floating-ip-fixed-ip-address', 'floating-ip-address-family', 'id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {'floating-ip-project': 'project',
- 'floating-ip-virtual-machine-interface': 'virtual-machine-interface'}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_floating_ip_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_floating_ip_update
-
- def _ifmap_floating_ip_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_floating_ip_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_floating_ip_delete
-
- def _ifmap_floating_ip_pool_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.floating_ip_pool_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_floating_ip_pool_alloc
-
- def _ifmap_floating_ip_pool_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('floating_ip_pool_prefixes', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['floating_ip_pool_prefixes']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- FloatingIpPoolType(**field).exportChildren(buf, level = 1, name_ = 'floating-ip-pool-prefixes', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'floating-ip-pool-prefixes', pretty_print = False)
- floating_ip_pool_prefixes_xml = buf.getvalue()
- buf.close()
- meta = Metadata('floating-ip-pool-prefixes' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = floating_ip_pool_prefixes_xml)
-
- if (existing_metas and 'floating-ip-pool-prefixes' in existing_metas and
- str(existing_metas['floating-ip-pool-prefixes'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('floating_ip_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'floating-ip'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- floating_ip_pool_floating_ip_xml = ''
- meta = Metadata('floating-ip-pool-floating-ip' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = floating_ip_pool_floating_ip_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_floating_ip_pool_set
-
- def _ifmap_floating_ip_pool_create(self, obj_ids, obj_dict):
- if not 'parent_type' in obj_dict:
- # parent is config-root
- parent_type = 'config-root'
- parent_imid = 'contrail:config-root:root'
- else:
- parent_type = obj_dict['parent_type']
- parent_imid = obj_ids.get('parent_imid', None)
-
- # Parent Link Meta
- update = {}
- parent_link_meta = self._parent_metas[parent_type]['floating-ip-pool']
- meta = Metadata(parent_link_meta, '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
- self._update_id_pair_meta(update, obj_ids['imid'], meta)
- self._publish_update(parent_imid, update)
-
- (ok, result) = self._ifmap_floating_ip_pool_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_floating_ip_pool_create
-
-
- def _ifmap_floating_ip_pool_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'project-floating-ip-pool', u'floating-ip-pool-prefixes', u'id-perms', u'display-name', u'floating-ip-pool-floating-ip']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_floating-ip-pool_read_to_meta_index
-
- def _ifmap_floating_ip_pool_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_floating_ip_pool_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['floating-ip-pool-prefixes', 'id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_floating_ip_pool_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_floating_ip_pool_update
-
- def _ifmap_floating_ip_pool_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_floating_ip_pool_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_floating_ip_pool_delete
-
- def _ifmap_physical_router_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.physical_router_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_physical_router_alloc
-
- def _ifmap_physical_router_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('physical_router_management_ip', None)
- if field is not None:
- norm_str = escape(str(obj_dict['physical_router_management_ip']))
- meta = Metadata('physical-router-management-ip', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'physical-router-management-ip' in existing_metas and
- str(existing_metas['physical-router-management-ip'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('physical_router_dataplane_ip', None)
- if field is not None:
- norm_str = escape(str(obj_dict['physical_router_dataplane_ip']))
- meta = Metadata('physical-router-dataplane-ip', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'physical-router-dataplane-ip' in existing_metas and
- str(existing_metas['physical-router-dataplane-ip'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('physical_router_vendor_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['physical_router_vendor_name']))
- meta = Metadata('physical-router-vendor-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'physical-router-vendor-name' in existing_metas and
- str(existing_metas['physical-router-vendor-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('physical_router_product_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['physical_router_product_name']))
- meta = Metadata('physical-router-product-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'physical-router-product-name' in existing_metas and
- str(existing_metas['physical-router-product-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('physical_router_vnc_managed', None)
- if field is not None:
- norm_str = escape(str(obj_dict['physical_router_vnc_managed']))
- meta = Metadata('physical-router-vnc-managed', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'physical-router-vnc-managed' in existing_metas and
- str(existing_metas['physical-router-vnc-managed'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('physical_router_user_credentials', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['physical_router_user_credentials']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- UserCredentials(**field).exportChildren(buf, level = 1, name_ = 'physical-router-user-credentials', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'physical-router-user-credentials', pretty_print = False)
- physical_router_user_credentials_xml = buf.getvalue()
- buf.close()
- meta = Metadata('physical-router-user-credentials' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = physical_router_user_credentials_xml)
-
- if (existing_metas and 'physical-router-user-credentials' in existing_metas and
- str(existing_metas['physical-router-user-credentials'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('physical_router_snmp_credentials', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['physical_router_snmp_credentials']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- SNMPCredentials(**field).exportChildren(buf, level = 1, name_ = 'physical-router-snmp-credentials', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'physical-router-snmp-credentials', pretty_print = False)
- physical_router_snmp_credentials_xml = buf.getvalue()
- buf.close()
- meta = Metadata('physical-router-snmp-credentials' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = physical_router_snmp_credentials_xml)
-
- if (existing_metas and 'physical-router-snmp-credentials' in existing_metas and
- str(existing_metas['physical-router-snmp-credentials'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('physical_router_junos_service_ports', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['physical_router_junos_service_ports']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- JunosServicePorts(**field).exportChildren(buf, level = 1, name_ = 'physical-router-junos-service-ports', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'physical-router-junos-service-ports', pretty_print = False)
- physical_router_junos_service_ports_xml = buf.getvalue()
- buf.close()
- meta = Metadata('physical-router-junos-service-ports' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = physical_router_junos_service_ports_xml)
-
- if (existing_metas and 'physical-router-junos-service-ports' in existing_metas and
- str(existing_metas['physical-router-junos-service-ports'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('virtual_router_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'virtual-router'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- physical_router_virtual_router_xml = ''
- meta = Metadata('physical-router-virtual-router' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = physical_router_virtual_router_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('bgp_router_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'bgp-router'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- physical_router_bgp_router_xml = ''
- meta = Metadata('physical-router-bgp-router' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = physical_router_bgp_router_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('virtual_network_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'virtual-network'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- physical_router_virtual_network_xml = ''
- meta = Metadata('physical-router-virtual-network' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = physical_router_virtual_network_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('physical_interface_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'physical-interface'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- physical_router_physical_interface_xml = ''
- meta = Metadata('physical-router-physical-interface' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = physical_router_physical_interface_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('logical_interface_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'logical-interface'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- physical_router_logical_interface_xml = ''
- meta = Metadata('physical-router-logical-interface' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = physical_router_logical_interface_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_physical_router_set
-
- def _ifmap_physical_router_create(self, obj_ids, obj_dict):
- if not 'parent_type' in obj_dict:
- # parent is config-root
- parent_type = 'config-root'
- parent_imid = 'contrail:config-root:root'
- else:
- parent_type = obj_dict['parent_type']
- parent_imid = obj_ids.get('parent_imid', None)
-
- # Parent Link Meta
- update = {}
- parent_link_meta = self._parent_metas[parent_type]['physical-router']
- meta = Metadata(parent_link_meta, '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
- self._update_id_pair_meta(update, obj_ids['imid'], meta)
- self._publish_update(parent_imid, update)
-
- (ok, result) = self._ifmap_physical_router_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_physical_router_create
-
-
- def _ifmap_physical_router_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'physical-router-virtual-router', u'physical-router-bgp-router', u'physical-router-virtual-network', u'physical-router-management-ip', u'physical-router-dataplane-ip', u'physical-router-vendor-name', u'physical-router-product-name', u'physical-router-vnc-managed', u'physical-router-user-credentials', u'physical-router-snmp-credentials', u'physical-router-junos-service-ports', u'id-perms', u'display-name', u'physical-router-physical-interface', u'physical-router-logical-interface']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_physical-router_read_to_meta_index
-
- def _ifmap_physical_router_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_physical_router_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['physical-router-management-ip', 'physical-router-dataplane-ip', 'physical-router-vendor-name', 'physical-router-product-name', 'physical-router-vnc-managed', 'physical-router-user-credentials', 'physical-router-snmp-credentials', 'physical-router-junos-service-ports', 'id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {'physical-router-virtual-router': 'virtual-router',
- 'physical-router-bgp-router': 'bgp-router',
- 'physical-router-virtual-network': 'virtual-network'}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_physical_router_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_physical_router_update
-
- def _ifmap_physical_router_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_physical_router_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_physical_router_delete
-
- def _ifmap_bgp_router_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.bgp_router_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_bgp_router_alloc
-
- def _ifmap_bgp_router_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('bgp_router_parameters', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['bgp_router_parameters']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- BgpRouterParams(**field).exportChildren(buf, level = 1, name_ = 'bgp-router-parameters', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'bgp-router-parameters', pretty_print = False)
- bgp_router_parameters_xml = buf.getvalue()
- buf.close()
- meta = Metadata('bgp-router-parameters' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = bgp_router_parameters_xml)
-
- if (existing_metas and 'bgp-router-parameters' in existing_metas and
- str(existing_metas['bgp-router-parameters'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('bgp_router_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'bgp-router'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- bgp_peering_xml = ''
- ref_data = ref['attr']
- if ref_data:
- buf = cStringIO.StringIO()
- BgpPeeringAttributes(**ref_data).exportChildren(buf, level = 1, name_ = 'bgp-peering', pretty_print = False)
- bgp_peering_xml = bgp_peering_xml + buf.getvalue()
- buf.close()
- meta = Metadata('bgp-peering' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = bgp_peering_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_bgp_router_set
-
- def _ifmap_bgp_router_create(self, obj_ids, obj_dict):
- if not 'parent_type' in obj_dict:
- # parent is config-root
- parent_type = 'config-root'
- parent_imid = 'contrail:config-root:root'
- else:
- parent_type = obj_dict['parent_type']
- parent_imid = obj_ids.get('parent_imid', None)
-
- # Parent Link Meta
- update = {}
- parent_link_meta = self._parent_metas[parent_type]['bgp-router']
- meta = Metadata(parent_link_meta, '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
- self._update_id_pair_meta(update, obj_ids['imid'], meta)
- self._publish_update(parent_imid, update)
-
- (ok, result) = self._ifmap_bgp_router_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_bgp_router_create
-
-
- def _ifmap_bgp_router_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'bgp-peering', u'global-system-config-bgp-router', u'physical-router-bgp-router', u'virtual-router-bgp-router', u'bgp-peering', u'bgp-router-parameters', u'id-perms', u'display-name']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_bgp-router_read_to_meta_index
-
- def _ifmap_bgp_router_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_bgp_router_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['bgp-router-parameters', 'id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {'bgp-peering': 'bgp-router'}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_bgp_router_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_bgp_router_update
-
- def _ifmap_bgp_router_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_bgp_router_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_bgp_router_delete
-
- def _ifmap_virtual_router_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.virtual_router_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_virtual_router_alloc
-
- def _ifmap_virtual_router_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('virtual_router_type', None)
- if field is not None:
- norm_str = escape(str(obj_dict['virtual_router_type']))
- meta = Metadata('virtual-router-type', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'virtual-router-type' in existing_metas and
- str(existing_metas['virtual-router-type'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('virtual_router_ip_address', None)
- if field is not None:
- norm_str = escape(str(obj_dict['virtual_router_ip_address']))
- meta = Metadata('virtual-router-ip-address', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'virtual-router-ip-address' in existing_metas and
- str(existing_metas['virtual-router-ip-address'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('bgp_router_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'bgp-router'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- virtual_router_bgp_router_xml = ''
- meta = Metadata('virtual-router-bgp-router' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = virtual_router_bgp_router_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('virtual_machine_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'virtual-machine'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- virtual_router_virtual_machine_xml = ''
- meta = Metadata('virtual-router-virtual-machine' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = virtual_router_virtual_machine_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_virtual_router_set
-
- def _ifmap_virtual_router_create(self, obj_ids, obj_dict):
- if not 'parent_type' in obj_dict:
- # parent is config-root
- parent_type = 'config-root'
- parent_imid = 'contrail:config-root:root'
- else:
- parent_type = obj_dict['parent_type']
- parent_imid = obj_ids.get('parent_imid', None)
-
- # Parent Link Meta
- update = {}
- parent_link_meta = self._parent_metas[parent_type]['virtual-router']
- meta = Metadata(parent_link_meta, '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
- self._update_id_pair_meta(update, obj_ids['imid'], meta)
- self._publish_update(parent_imid, update)
-
- (ok, result) = self._ifmap_virtual_router_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_virtual_router_create
-
-
- def _ifmap_virtual_router_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'virtual-router-bgp-router', u'virtual-router-virtual-machine', u'physical-router-virtual-router', u'provider-attachment-virtual-router', u'virtual-router-type', u'virtual-router-ip-address', u'id-perms', u'display-name']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_virtual-router_read_to_meta_index
-
- def _ifmap_virtual_router_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_virtual_router_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['virtual-router-type', 'virtual-router-ip-address', 'id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {'virtual-router-bgp-router': 'bgp-router',
- 'virtual-router-virtual-machine': 'virtual-machine'}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_virtual_router_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_virtual_router_update
-
- def _ifmap_virtual_router_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_virtual_router_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_virtual_router_delete
-
- def _ifmap_config_root_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.config_root_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_config_root_alloc
-
- def _ifmap_config_root_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('global_system_config_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'global-system-config'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- config_root_global_system_config_xml = ''
- meta = Metadata('config-root-global-system-config' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = config_root_global_system_config_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('domain_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'domain'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- config_root_domain_xml = ''
- meta = Metadata('config-root-domain' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = config_root_domain_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_config_root_set
-
- def _ifmap_config_root_create(self, obj_ids, obj_dict):
- (ok, result) = self._ifmap_config_root_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_config_root_create
-
-
- def _ifmap_config_root_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'id-perms', u'display-name', u'config-root-global-system-config', u'config-root-domain']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_config-root_read_to_meta_index
-
- def _ifmap_config_root_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_config_root_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_config_root_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_config_root_update
-
- def _ifmap_config_root_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_config_root_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_config_root_delete
-
- def _ifmap_subnet_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.subnet_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_subnet_alloc
-
- def _ifmap_subnet_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('subnet_ip_prefix', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['subnet_ip_prefix']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- SubnetType(**field).exportChildren(buf, level = 1, name_ = 'subnet-ip-prefix', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'subnet-ip-prefix', pretty_print = False)
- subnet_ip_prefix_xml = buf.getvalue()
- buf.close()
- meta = Metadata('subnet-ip-prefix' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = subnet_ip_prefix_xml)
-
- if (existing_metas and 'subnet-ip-prefix' in existing_metas and
- str(existing_metas['subnet-ip-prefix'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('virtual_machine_interface_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'virtual-machine-interface'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- subnet_virtual_machine_interface_xml = ''
- meta = Metadata('subnet-virtual-machine-interface' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = subnet_virtual_machine_interface_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_subnet_set
-
- def _ifmap_subnet_create(self, obj_ids, obj_dict):
- (ok, result) = self._ifmap_subnet_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_subnet_create
-
-
- def _ifmap_subnet_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'subnet-virtual-machine-interface', u'subnet-ip-prefix', u'id-perms', u'display-name']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_subnet_read_to_meta_index
-
- def _ifmap_subnet_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_subnet_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['subnet-ip-prefix', 'id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {'subnet-virtual-machine-interface': 'virtual-machine-interface'}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_subnet_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_subnet_update
-
- def _ifmap_subnet_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_subnet_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_subnet_delete
-
- def _ifmap_global_system_config_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.global_system_config_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_global_system_config_alloc
-
- def _ifmap_global_system_config_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('autonomous_system', None)
- if field is not None:
- norm_str = escape(str(obj_dict['autonomous_system']))
- meta = Metadata('autonomous-system', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'autonomous-system' in existing_metas and
- str(existing_metas['autonomous-system'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('config_version', None)
- if field is not None:
- norm_str = escape(str(obj_dict['config_version']))
- meta = Metadata('config-version', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'config-version' in existing_metas and
- str(existing_metas['config-version'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('plugin_tuning', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['plugin_tuning']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- PluginProperties(**field).exportChildren(buf, level = 1, name_ = 'plugin-tuning', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'plugin-tuning', pretty_print = False)
- plugin_tuning_xml = buf.getvalue()
- buf.close()
- meta = Metadata('plugin-tuning' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = plugin_tuning_xml)
-
- if (existing_metas and 'plugin-tuning' in existing_metas and
- str(existing_metas['plugin-tuning'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('ibgp_auto_mesh', None)
- if field is not None:
- norm_str = escape(str(obj_dict['ibgp_auto_mesh']))
- meta = Metadata('ibgp-auto-mesh', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'ibgp-auto-mesh' in existing_metas and
- str(existing_metas['ibgp-auto-mesh'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('ip_fabric_subnets', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['ip_fabric_subnets']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- SubnetListType(**field).exportChildren(buf, level = 1, name_ = 'ip-fabric-subnets', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'ip-fabric-subnets', pretty_print = False)
- ip_fabric_subnets_xml = buf.getvalue()
- buf.close()
- meta = Metadata('ip-fabric-subnets' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = ip_fabric_subnets_xml)
-
- if (existing_metas and 'ip-fabric-subnets' in existing_metas and
- str(existing_metas['ip-fabric-subnets'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('bgp_router_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'bgp-router'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- global_system_config_bgp_router_xml = ''
- meta = Metadata('global-system-config-bgp-router' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = global_system_config_bgp_router_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('global_vrouter_config_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'global-vrouter-config'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- global_system_config_global_vrouter_config_xml = ''
- meta = Metadata('global-system-config-global-vrouter-config' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = global_system_config_global_vrouter_config_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('physical_router_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'physical-router'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- global_system_config_physical_router_xml = ''
- meta = Metadata('global-system-config-physical-router' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = global_system_config_physical_router_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('virtual_router_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'virtual-router'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- global_system_config_virtual_router_xml = ''
- meta = Metadata('global-system-config-virtual-router' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = global_system_config_virtual_router_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('config_node_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'config-node'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- global_system_config_config_node_xml = ''
- meta = Metadata('global-system-config-config-node' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = global_system_config_config_node_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('analytics_node_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'analytics-node'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- global_system_config_analytics_node_xml = ''
- meta = Metadata('global-system-config-analytics-node' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = global_system_config_analytics_node_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('database_node_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'database-node'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- global_system_config_database_node_xml = ''
- meta = Metadata('global-system-config-database-node' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = global_system_config_database_node_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('service_appliance_set_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'service-appliance-set'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- global_system_config_service_appliance_set_xml = ''
- meta = Metadata('global-system-config-service-appliance-set' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = global_system_config_service_appliance_set_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_global_system_config_set
-
- def _ifmap_global_system_config_create(self, obj_ids, obj_dict):
- if not 'parent_type' in obj_dict:
- # parent is config-root
- parent_type = 'config-root'
- parent_imid = 'contrail:config-root:root'
- else:
- parent_type = obj_dict['parent_type']
- parent_imid = obj_ids.get('parent_imid', None)
-
- # Parent Link Meta
- update = {}
- parent_link_meta = self._parent_metas[parent_type]['global-system-config']
- meta = Metadata(parent_link_meta, '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
- self._update_id_pair_meta(update, obj_ids['imid'], meta)
- self._publish_update(parent_imid, update)
-
- (ok, result) = self._ifmap_global_system_config_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_global_system_config_create
-
-
- def _ifmap_global_system_config_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'global-system-config-bgp-router', u'autonomous-system', u'config-version', u'plugin-tuning', u'ibgp-auto-mesh', u'ip-fabric-subnets', u'id-perms', u'display-name', u'global-system-config-global-vrouter-config', u'global-system-config-physical-router', u'global-system-config-virtual-router', u'global-system-config-config-node', u'global-system-config-analytics-node', u'global-system-config-database-node', u'global-system-config-service-appliance-set']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_global-system-config_read_to_meta_index
-
- def _ifmap_global_system_config_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_global_system_config_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['autonomous-system', 'config-version', 'plugin-tuning', 'ibgp-auto-mesh', 'ip-fabric-subnets', 'id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {'global-system-config-bgp-router': 'bgp-router'}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_global_system_config_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_global_system_config_update
-
- def _ifmap_global_system_config_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_global_system_config_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_global_system_config_delete
-
- def _ifmap_service_appliance_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.service_appliance_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_service_appliance_alloc
-
- def _ifmap_service_appliance_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('service_appliance_user_credentials', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['service_appliance_user_credentials']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- UserCredentials(**field).exportChildren(buf, level = 1, name_ = 'service-appliance-user-credentials', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'service-appliance-user-credentials', pretty_print = False)
- service_appliance_user_credentials_xml = buf.getvalue()
- buf.close()
- meta = Metadata('service-appliance-user-credentials' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = service_appliance_user_credentials_xml)
-
- if (existing_metas and 'service-appliance-user-credentials' in existing_metas and
- str(existing_metas['service-appliance-user-credentials'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('service_appliance_ip_address', None)
- if field is not None:
- norm_str = escape(str(obj_dict['service_appliance_ip_address']))
- meta = Metadata('service-appliance-ip-address', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'service-appliance-ip-address' in existing_metas and
- str(existing_metas['service-appliance-ip-address'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('service_appliance_properties', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['service_appliance_properties']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- KeyValuePairs(**field).exportChildren(buf, level = 1, name_ = 'service-appliance-properties', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'service-appliance-properties', pretty_print = False)
- service_appliance_properties_xml = buf.getvalue()
- buf.close()
- meta = Metadata('service-appliance-properties' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = service_appliance_properties_xml)
-
- if (existing_metas and 'service-appliance-properties' in existing_metas and
- str(existing_metas['service-appliance-properties'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_service_appliance_set
-
- def _ifmap_service_appliance_create(self, obj_ids, obj_dict):
- if not 'parent_type' in obj_dict:
- # parent is config-root
- parent_type = 'config-root'
- parent_imid = 'contrail:config-root:root'
- else:
- parent_type = obj_dict['parent_type']
- parent_imid = obj_ids.get('parent_imid', None)
-
- # Parent Link Meta
- update = {}
- parent_link_meta = self._parent_metas[parent_type]['service-appliance']
- meta = Metadata(parent_link_meta, '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
- self._update_id_pair_meta(update, obj_ids['imid'], meta)
- self._publish_update(parent_imid, update)
-
- (ok, result) = self._ifmap_service_appliance_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_service_appliance_create
-
-
- def _ifmap_service_appliance_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'service-appliance-user-credentials', u'service-appliance-ip-address', u'service-appliance-properties', u'id-perms', u'display-name']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_service-appliance_read_to_meta_index
-
- def _ifmap_service_appliance_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_service_appliance_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['service-appliance-user-credentials', 'service-appliance-ip-address', 'service-appliance-properties', 'id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_service_appliance_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_service_appliance_update
-
- def _ifmap_service_appliance_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_service_appliance_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_service_appliance_delete
-
- def _ifmap_service_instance_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.service_instance_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_service_instance_alloc
-
- def _ifmap_service_instance_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('service_instance_properties', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['service_instance_properties']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- ServiceInstanceType(**field).exportChildren(buf, level = 1, name_ = 'service-instance-properties', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'service-instance-properties', pretty_print = False)
- service_instance_properties_xml = buf.getvalue()
- buf.close()
- meta = Metadata('service-instance-properties' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = service_instance_properties_xml)
-
- if (existing_metas and 'service-instance-properties' in existing_metas and
- str(existing_metas['service-instance-properties'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('service_template_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'service-template'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- service_instance_service_template_xml = ''
- meta = Metadata('service-instance-service-template' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = service_instance_service_template_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_service_instance_set
-
- def _ifmap_service_instance_create(self, obj_ids, obj_dict):
- if not 'parent_type' in obj_dict:
- # parent is config-root
- parent_type = 'config-root'
- parent_imid = 'contrail:config-root:root'
- else:
- parent_type = obj_dict['parent_type']
- parent_imid = obj_ids.get('parent_imid', None)
-
- # Parent Link Meta
- update = {}
- parent_link_meta = self._parent_metas[parent_type]['service-instance']
- meta = Metadata(parent_link_meta, '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
- self._update_id_pair_meta(update, obj_ids['imid'], meta)
- self._publish_update(parent_imid, update)
-
- (ok, result) = self._ifmap_service_instance_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_service_instance_create
-
-
- def _ifmap_service_instance_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'service-instance-service-template', u'virtual-machine-service-instance', u'logical-router-service-instance', u'loadbalancer-pool-service-instance', u'service-instance-properties', u'id-perms', u'display-name']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_service-instance_read_to_meta_index
-
- def _ifmap_service_instance_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_service_instance_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['service-instance-properties', 'id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {'service-instance-service-template': 'service-template'}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_service_instance_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_service_instance_update
-
- def _ifmap_service_instance_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_service_instance_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_service_instance_delete
-
- def _ifmap_namespace_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.namespace_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_namespace_alloc
-
- def _ifmap_namespace_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('namespace_cidr', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['namespace_cidr']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- SubnetType(**field).exportChildren(buf, level = 1, name_ = 'namespace-cidr', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'namespace-cidr', pretty_print = False)
- namespace_cidr_xml = buf.getvalue()
- buf.close()
- meta = Metadata('namespace-cidr' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = namespace_cidr_xml)
-
- if (existing_metas and 'namespace-cidr' in existing_metas and
- str(existing_metas['namespace-cidr'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_namespace_set
-
- def _ifmap_namespace_create(self, obj_ids, obj_dict):
- if not 'parent_type' in obj_dict:
- # parent is config-root
- parent_type = 'config-root'
- parent_imid = 'contrail:config-root:root'
- else:
- parent_type = obj_dict['parent_type']
- parent_imid = obj_ids.get('parent_imid', None)
-
- # Parent Link Meta
- update = {}
- parent_link_meta = self._parent_metas[parent_type]['namespace']
- meta = Metadata(parent_link_meta, '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
- self._update_id_pair_meta(update, obj_ids['imid'], meta)
- self._publish_update(parent_imid, update)
-
- (ok, result) = self._ifmap_namespace_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_namespace_create
-
-
- def _ifmap_namespace_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'project-namespace', u'namespace-cidr', u'id-perms', u'display-name']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_namespace_read_to_meta_index
-
- def _ifmap_namespace_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_namespace_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['namespace-cidr', 'id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_namespace_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_namespace_update
-
- def _ifmap_namespace_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_namespace_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_namespace_delete
-
- def _ifmap_logical_interface_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.logical_interface_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_logical_interface_alloc
-
- def _ifmap_logical_interface_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('logical_interface_vlan_tag', None)
- if field is not None:
- norm_str = escape(str(obj_dict['logical_interface_vlan_tag']))
- meta = Metadata('logical-interface-vlan-tag', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'logical-interface-vlan-tag' in existing_metas and
- str(existing_metas['logical-interface-vlan-tag'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('logical_interface_type', None)
- if field is not None:
- norm_str = escape(str(obj_dict['logical_interface_type']))
- meta = Metadata('logical-interface-type', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'logical-interface-type' in existing_metas and
- str(existing_metas['logical-interface-type'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('virtual_machine_interface_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'virtual-machine-interface'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- logical_interface_virtual_machine_interface_xml = ''
- meta = Metadata('logical-interface-virtual-machine-interface' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = logical_interface_virtual_machine_interface_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_logical_interface_set
-
- def _ifmap_logical_interface_create(self, obj_ids, obj_dict):
- if not 'parent_type' in obj_dict:
- # parent is config-root
- parent_type = 'config-root'
- parent_imid = 'contrail:config-root:root'
- else:
- parent_type = obj_dict['parent_type']
- parent_imid = obj_ids.get('parent_imid', None)
-
- # Parent Link Meta
- update = {}
- parent_link_meta = self._parent_metas[parent_type]['logical-interface']
- meta = Metadata(parent_link_meta, '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
- self._update_id_pair_meta(update, obj_ids['imid'], meta)
- self._publish_update(parent_imid, update)
-
- (ok, result) = self._ifmap_logical_interface_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_logical_interface_create
-
-
- def _ifmap_logical_interface_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'logical-interface-virtual-machine-interface', u'logical-interface-vlan-tag', u'logical-interface-type', u'id-perms', u'display-name']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_logical-interface_read_to_meta_index
-
- def _ifmap_logical_interface_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_logical_interface_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['logical-interface-vlan-tag', 'logical-interface-type', 'id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {'logical-interface-virtual-machine-interface': 'virtual-machine-interface'}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_logical_interface_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_logical_interface_update
-
- def _ifmap_logical_interface_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_logical_interface_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_logical_interface_delete
-
- def _ifmap_route_table_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.route_table_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_route_table_alloc
-
- def _ifmap_route_table_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('routes', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['routes']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- RouteTableType(**field).exportChildren(buf, level = 1, name_ = 'routes', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'routes', pretty_print = False)
- routes_xml = buf.getvalue()
- buf.close()
- meta = Metadata('routes' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = routes_xml)
-
- if (existing_metas and 'routes' in existing_metas and
- str(existing_metas['routes'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_route_table_set
-
- def _ifmap_route_table_create(self, obj_ids, obj_dict):
- if not 'parent_type' in obj_dict:
- # parent is config-root
- parent_type = 'config-root'
- parent_imid = 'contrail:config-root:root'
- else:
- parent_type = obj_dict['parent_type']
- parent_imid = obj_ids.get('parent_imid', None)
-
- # Parent Link Meta
- update = {}
- parent_link_meta = self._parent_metas[parent_type]['route-table']
- meta = Metadata(parent_link_meta, '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
- self._update_id_pair_meta(update, obj_ids['imid'], meta)
- self._publish_update(parent_imid, update)
-
- (ok, result) = self._ifmap_route_table_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_route_table_create
-
-
- def _ifmap_route_table_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'virtual-network-route-table', u'routes', u'id-perms', u'display-name']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_route-table_read_to_meta_index
-
- def _ifmap_route_table_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_route_table_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['routes', 'id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_route_table_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_route_table_update
-
- def _ifmap_route_table_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_route_table_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_route_table_delete
-
- def _ifmap_physical_interface_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.physical_interface_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_physical_interface_alloc
-
- def _ifmap_physical_interface_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('logical_interface_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'logical-interface'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- physical_interface_logical_interface_xml = ''
- meta = Metadata('physical-interface-logical-interface' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = physical_interface_logical_interface_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_physical_interface_set
-
- def _ifmap_physical_interface_create(self, obj_ids, obj_dict):
- if not 'parent_type' in obj_dict:
- # parent is config-root
- parent_type = 'config-root'
- parent_imid = 'contrail:config-root:root'
- else:
- parent_type = obj_dict['parent_type']
- parent_imid = obj_ids.get('parent_imid', None)
-
- # Parent Link Meta
- update = {}
- parent_link_meta = self._parent_metas[parent_type]['physical-interface']
- meta = Metadata(parent_link_meta, '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
- self._update_id_pair_meta(update, obj_ids['imid'], meta)
- self._publish_update(parent_imid, update)
-
- (ok, result) = self._ifmap_physical_interface_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_physical_interface_create
-
-
- def _ifmap_physical_interface_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'id-perms', u'display-name', u'physical-interface-logical-interface']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_physical-interface_read_to_meta_index
-
- def _ifmap_physical_interface_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_physical_interface_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_physical_interface_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_physical_interface_update
-
- def _ifmap_physical_interface_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_physical_interface_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_physical_interface_delete
-
- def _ifmap_access_control_list_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.access_control_list_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_access_control_list_alloc
-
- def _ifmap_access_control_list_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('access_control_list_entries', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['access_control_list_entries']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- AclEntriesType(**field).exportChildren(buf, level = 1, name_ = 'access-control-list-entries', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'access-control-list-entries', pretty_print = False)
- access_control_list_entries_xml = buf.getvalue()
- buf.close()
- meta = Metadata('access-control-list-entries' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = access_control_list_entries_xml)
-
- if (existing_metas and 'access-control-list-entries' in existing_metas and
- str(existing_metas['access-control-list-entries'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_access_control_list_set
-
- def _ifmap_access_control_list_create(self, obj_ids, obj_dict):
- if not 'parent_type' in obj_dict:
- # parent is config-root
- parent_type = 'config-root'
- parent_imid = 'contrail:config-root:root'
- else:
- parent_type = obj_dict['parent_type']
- parent_imid = obj_ids.get('parent_imid', None)
-
- # Parent Link Meta
- update = {}
- parent_link_meta = self._parent_metas[parent_type]['access-control-list']
- meta = Metadata(parent_link_meta, '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
- self._update_id_pair_meta(update, obj_ids['imid'], meta)
- self._publish_update(parent_imid, update)
-
- (ok, result) = self._ifmap_access_control_list_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_access_control_list_create
-
-
- def _ifmap_access_control_list_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'access-control-list-entries', u'id-perms', u'display-name']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_access-control-list_read_to_meta_index
-
- def _ifmap_access_control_list_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_access_control_list_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['access-control-list-entries', 'id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_access_control_list_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_access_control_list_update
-
- def _ifmap_access_control_list_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_access_control_list_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_access_control_list_delete
-
- def _ifmap_analytics_node_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.analytics_node_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_analytics_node_alloc
-
- def _ifmap_analytics_node_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('analytics_node_ip_address', None)
- if field is not None:
- norm_str = escape(str(obj_dict['analytics_node_ip_address']))
- meta = Metadata('analytics-node-ip-address', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'analytics-node-ip-address' in existing_metas and
- str(existing_metas['analytics-node-ip-address'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_analytics_node_set
-
- def _ifmap_analytics_node_create(self, obj_ids, obj_dict):
- if not 'parent_type' in obj_dict:
- # parent is config-root
- parent_type = 'config-root'
- parent_imid = 'contrail:config-root:root'
- else:
- parent_type = obj_dict['parent_type']
- parent_imid = obj_ids.get('parent_imid', None)
-
- # Parent Link Meta
- update = {}
- parent_link_meta = self._parent_metas[parent_type]['analytics-node']
- meta = Metadata(parent_link_meta, '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
- self._update_id_pair_meta(update, obj_ids['imid'], meta)
- self._publish_update(parent_imid, update)
-
- (ok, result) = self._ifmap_analytics_node_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_analytics_node_create
-
-
- def _ifmap_analytics_node_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'analytics-node-ip-address', u'id-perms', u'display-name']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_analytics-node_read_to_meta_index
-
- def _ifmap_analytics_node_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_analytics_node_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['analytics-node-ip-address', 'id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_analytics_node_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_analytics_node_update
-
- def _ifmap_analytics_node_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_analytics_node_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_analytics_node_delete
-
- def _ifmap_virtual_DNS_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.virtual_DNS_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_virtual_DNS_alloc
-
- def _ifmap_virtual_DNS_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('virtual_DNS_data', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['virtual_DNS_data']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- VirtualDnsType(**field).exportChildren(buf, level = 1, name_ = 'virtual-DNS-data', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'virtual-DNS-data', pretty_print = False)
- virtual_DNS_data_xml = buf.getvalue()
- buf.close()
- meta = Metadata('virtual-DNS-data' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = virtual_DNS_data_xml)
-
- if (existing_metas and 'virtual-DNS-data' in existing_metas and
- str(existing_metas['virtual-DNS-data'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('virtual_DNS_record_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'virtual-DNS-record'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- virtual_DNS_virtual_DNS_record_xml = ''
- meta = Metadata('virtual-DNS-virtual-DNS-record' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = virtual_DNS_virtual_DNS_record_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_virtual_DNS_set
-
- def _ifmap_virtual_DNS_create(self, obj_ids, obj_dict):
- if not 'parent_type' in obj_dict:
- # parent is config-root
- parent_type = 'config-root'
- parent_imid = 'contrail:config-root:root'
- else:
- parent_type = obj_dict['parent_type']
- parent_imid = obj_ids.get('parent_imid', None)
-
- # Parent Link Meta
- update = {}
- parent_link_meta = self._parent_metas[parent_type]['virtual-DNS']
- meta = Metadata(parent_link_meta, '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
- self._update_id_pair_meta(update, obj_ids['imid'], meta)
- self._publish_update(parent_imid, update)
-
- (ok, result) = self._ifmap_virtual_DNS_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_virtual_DNS_create
-
-
- def _ifmap_virtual_DNS_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'network-ipam-virtual-DNS', u'virtual-DNS-data', u'id-perms', u'display-name', u'virtual-DNS-virtual-DNS-record']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_virtual-DNS_read_to_meta_index
-
- def _ifmap_virtual_DNS_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_virtual_DNS_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['virtual-DNS-data', 'id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_virtual_DNS_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_virtual_DNS_update
-
- def _ifmap_virtual_DNS_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_virtual_DNS_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_virtual_DNS_delete
-
- def _ifmap_customer_attachment_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.customer_attachment_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_customer_attachment_alloc
-
- def _ifmap_customer_attachment_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('attachment_address', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['attachment_address']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- AttachmentAddressType(**field).exportChildren(buf, level = 1, name_ = 'attachment-address', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'attachment-address', pretty_print = False)
- attachment_address_xml = buf.getvalue()
- buf.close()
- meta = Metadata('attachment-address' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = attachment_address_xml)
-
- if (existing_metas and 'attachment-address' in existing_metas and
- str(existing_metas['attachment-address'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('virtual_machine_interface_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'virtual-machine-interface'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- customer_attachment_virtual_machine_interface_xml = ''
- meta = Metadata('customer-attachment-virtual-machine-interface' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = customer_attachment_virtual_machine_interface_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('floating_ip_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'floating-ip'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- customer_attachment_floating_ip_xml = ''
- meta = Metadata('customer-attachment-floating-ip' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = customer_attachment_floating_ip_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('routing_instance_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'routing-instance'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- binding_xml = ''
- ref_data = ref['attr']
- if ref_data:
- buf = cStringIO.StringIO()
- BindingType(**ref_data).exportChildren(buf, level = 1, name_ = 'binding', pretty_print = False)
- binding_xml = binding_xml + buf.getvalue()
- buf.close()
- meta = Metadata('binding' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = binding_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('provider_attachment_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'provider-attachment'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- attachment_info_xml = ''
- ref_data = ref['attr']
- if ref_data:
- buf = cStringIO.StringIO()
- AttachmentInfoType(**ref_data).exportChildren(buf, level = 1, name_ = 'attachment-info', pretty_print = False)
- attachment_info_xml = attachment_info_xml + buf.getvalue()
- buf.close()
- meta = Metadata('attachment-info' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = attachment_info_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_customer_attachment_set
-
- def _ifmap_customer_attachment_create(self, obj_ids, obj_dict):
- (ok, result) = self._ifmap_customer_attachment_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_customer_attachment_create
-
-
- def _ifmap_customer_attachment_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'customer-attachment-virtual-machine-interface', u'customer-attachment-floating-ip', u'attachment-address', u'id-perms', u'display-name', u'binding', u'attachment-info']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_customer-attachment_read_to_meta_index
-
- def _ifmap_customer_attachment_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_customer_attachment_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['attachment-address', 'id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {'customer-attachment-virtual-machine-interface': 'virtual-machine-interface',
- 'customer-attachment-floating-ip': 'floating-ip'}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_customer_attachment_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_customer_attachment_update
-
- def _ifmap_customer_attachment_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_customer_attachment_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_customer_attachment_delete
-
- def _ifmap_service_appliance_set_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.service_appliance_set_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_service_appliance_set_alloc
-
- def _ifmap_service_appliance_set_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('service_appliance_set_properties', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['service_appliance_set_properties']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- KeyValuePairs(**field).exportChildren(buf, level = 1, name_ = 'service-appliance-set-properties', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'service-appliance-set-properties', pretty_print = False)
- service_appliance_set_properties_xml = buf.getvalue()
- buf.close()
- meta = Metadata('service-appliance-set-properties' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = service_appliance_set_properties_xml)
-
- if (existing_metas and 'service-appliance-set-properties' in existing_metas and
- str(existing_metas['service-appliance-set-properties'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('service_appliance_driver', None)
- if field is not None:
- norm_str = escape(str(obj_dict['service_appliance_driver']))
- meta = Metadata('service-appliance-driver', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'service-appliance-driver' in existing_metas and
- str(existing_metas['service-appliance-driver'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('service_appliance_ha_mode', None)
- if field is not None:
- norm_str = escape(str(obj_dict['service_appliance_ha_mode']))
- meta = Metadata('service-appliance-ha-mode', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'service-appliance-ha-mode' in existing_metas and
- str(existing_metas['service-appliance-ha-mode'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('service_appliance_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'service-appliance'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- service_appliance_set_service_appliance_xml = ''
- meta = Metadata('service-appliance-set-service-appliance' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = service_appliance_set_service_appliance_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_service_appliance_set_set
-
- def _ifmap_service_appliance_set_create(self, obj_ids, obj_dict):
- if not 'parent_type' in obj_dict:
- # parent is config-root
- parent_type = 'config-root'
- parent_imid = 'contrail:config-root:root'
- else:
- parent_type = obj_dict['parent_type']
- parent_imid = obj_ids.get('parent_imid', None)
-
- # Parent Link Meta
- update = {}
- parent_link_meta = self._parent_metas[parent_type]['service-appliance-set']
- meta = Metadata(parent_link_meta, '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
- self._update_id_pair_meta(update, obj_ids['imid'], meta)
- self._publish_update(parent_imid, update)
-
- (ok, result) = self._ifmap_service_appliance_set_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_service_appliance_set_create
-
-
- def _ifmap_service_appliance_set_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'loadbalancer-pool-service-appliance-set', u'service-appliance-set-properties', u'service-appliance-driver', u'service-appliance-ha-mode', u'id-perms', u'display-name', u'service-appliance-set-service-appliance']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_service-appliance-set_read_to_meta_index
-
- def _ifmap_service_appliance_set_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_service_appliance_set_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['service-appliance-set-properties', 'service-appliance-driver', 'service-appliance-ha-mode', 'id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_service_appliance_set_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_service_appliance_set_update
-
- def _ifmap_service_appliance_set_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_service_appliance_set_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_service_appliance_set_delete
-
- def _ifmap_config_node_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.config_node_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_config_node_alloc
-
- def _ifmap_config_node_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('config_node_ip_address', None)
- if field is not None:
- norm_str = escape(str(obj_dict['config_node_ip_address']))
- meta = Metadata('config-node-ip-address', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'config-node-ip-address' in existing_metas and
- str(existing_metas['config-node-ip-address'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_config_node_set
-
- def _ifmap_config_node_create(self, obj_ids, obj_dict):
- if not 'parent_type' in obj_dict:
- # parent is config-root
- parent_type = 'config-root'
- parent_imid = 'contrail:config-root:root'
- else:
- parent_type = obj_dict['parent_type']
- parent_imid = obj_ids.get('parent_imid', None)
-
- # Parent Link Meta
- update = {}
- parent_link_meta = self._parent_metas[parent_type]['config-node']
- meta = Metadata(parent_link_meta, '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
- self._update_id_pair_meta(update, obj_ids['imid'], meta)
- self._publish_update(parent_imid, update)
-
- (ok, result) = self._ifmap_config_node_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_config_node_create
-
-
- def _ifmap_config_node_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'config-node-ip-address', u'id-perms', u'display-name']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_config-node_read_to_meta_index
-
- def _ifmap_config_node_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_config_node_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['config-node-ip-address', 'id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_config_node_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_config_node_update
-
- def _ifmap_config_node_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_config_node_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_config_node_delete
-
- def _ifmap_qos_queue_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.qos_queue_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_qos_queue_alloc
-
- def _ifmap_qos_queue_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('min_bandwidth', None)
- if field is not None:
- norm_str = escape(str(obj_dict['min_bandwidth']))
- meta = Metadata('min-bandwidth', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'min-bandwidth' in existing_metas and
- str(existing_metas['min-bandwidth'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('max_bandwidth', None)
- if field is not None:
- norm_str = escape(str(obj_dict['max_bandwidth']))
- meta = Metadata('max-bandwidth', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'max-bandwidth' in existing_metas and
- str(existing_metas['max-bandwidth'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_qos_queue_set
-
- def _ifmap_qos_queue_create(self, obj_ids, obj_dict):
- if not 'parent_type' in obj_dict:
- # parent is config-root
- parent_type = 'config-root'
- parent_imid = 'contrail:config-root:root'
- else:
- parent_type = obj_dict['parent_type']
- parent_imid = obj_ids.get('parent_imid', None)
-
- # Parent Link Meta
- update = {}
- parent_link_meta = self._parent_metas[parent_type]['qos-queue']
- meta = Metadata(parent_link_meta, '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
- self._update_id_pair_meta(update, obj_ids['imid'], meta)
- self._publish_update(parent_imid, update)
-
- (ok, result) = self._ifmap_qos_queue_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_qos_queue_create
-
-
- def _ifmap_qos_queue_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'qos-forwarding-class-qos-queue', u'min-bandwidth', u'max-bandwidth', u'id-perms', u'display-name']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_qos-queue_read_to_meta_index
-
- def _ifmap_qos_queue_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_qos_queue_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['min-bandwidth', 'max-bandwidth', 'id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_qos_queue_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_qos_queue_update
-
- def _ifmap_qos_queue_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_qos_queue_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_qos_queue_delete
-
- def _ifmap_virtual_machine_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.virtual_machine_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_virtual_machine_alloc
-
- def _ifmap_virtual_machine_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('virtual_machine_interface_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'virtual-machine-interface'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- virtual_machine_virtual_machine_interface_xml = ''
- meta = Metadata('virtual-machine-virtual-machine-interface' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = virtual_machine_virtual_machine_interface_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('service_instance_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'service-instance'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- virtual_machine_service_instance_xml = ''
- meta = Metadata('virtual-machine-service-instance' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = virtual_machine_service_instance_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_virtual_machine_set
-
- def _ifmap_virtual_machine_create(self, obj_ids, obj_dict):
- (ok, result) = self._ifmap_virtual_machine_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_virtual_machine_create
-
-
- def _ifmap_virtual_machine_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'virtual-machine-service-instance', u'virtual-machine-interface-virtual-machine', u'virtual-router-virtual-machine', u'id-perms', u'display-name', u'virtual-machine-virtual-machine-interface']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_virtual-machine_read_to_meta_index
-
- def _ifmap_virtual_machine_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_virtual_machine_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {'virtual-machine-service-instance': 'service-instance'}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_virtual_machine_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_virtual_machine_update
-
- def _ifmap_virtual_machine_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_virtual_machine_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_virtual_machine_delete
-
- def _ifmap_interface_route_table_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.interface_route_table_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_interface_route_table_alloc
-
- def _ifmap_interface_route_table_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('interface_route_table_routes', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['interface_route_table_routes']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- RouteTableType(**field).exportChildren(buf, level = 1, name_ = 'interface-route-table-routes', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'interface-route-table-routes', pretty_print = False)
- interface_route_table_routes_xml = buf.getvalue()
- buf.close()
- meta = Metadata('interface-route-table-routes' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = interface_route_table_routes_xml)
-
- if (existing_metas and 'interface-route-table-routes' in existing_metas and
- str(existing_metas['interface-route-table-routes'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_interface_route_table_set
-
- def _ifmap_interface_route_table_create(self, obj_ids, obj_dict):
- if not 'parent_type' in obj_dict:
- # parent is config-root
- parent_type = 'config-root'
- parent_imid = 'contrail:config-root:root'
- else:
- parent_type = obj_dict['parent_type']
- parent_imid = obj_ids.get('parent_imid', None)
-
- # Parent Link Meta
- update = {}
- parent_link_meta = self._parent_metas[parent_type]['interface-route-table']
- meta = Metadata(parent_link_meta, '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
- self._update_id_pair_meta(update, obj_ids['imid'], meta)
- self._publish_update(parent_imid, update)
-
- (ok, result) = self._ifmap_interface_route_table_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_interface_route_table_create
-
-
- def _ifmap_interface_route_table_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'virtual-machine-interface-route-table', u'interface-route-table-routes', u'id-perms', u'display-name']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_interface-route-table_read_to_meta_index
-
- def _ifmap_interface_route_table_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_interface_route_table_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['interface-route-table-routes', 'id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_interface_route_table_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_interface_route_table_update
-
- def _ifmap_interface_route_table_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_interface_route_table_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_interface_route_table_delete
-
- def _ifmap_service_template_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.service_template_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_service_template_alloc
-
- def _ifmap_service_template_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('service_template_properties', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['service_template_properties']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- ServiceTemplateType(**field).exportChildren(buf, level = 1, name_ = 'service-template-properties', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'service-template-properties', pretty_print = False)
- service_template_properties_xml = buf.getvalue()
- buf.close()
- meta = Metadata('service-template-properties' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = service_template_properties_xml)
-
- if (existing_metas and 'service-template-properties' in existing_metas and
- str(existing_metas['service-template-properties'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_service_template_set
-
- def _ifmap_service_template_create(self, obj_ids, obj_dict):
- if not 'parent_type' in obj_dict:
- # parent is config-root
- parent_type = 'config-root'
- parent_imid = 'contrail:config-root:root'
- else:
- parent_type = obj_dict['parent_type']
- parent_imid = obj_ids.get('parent_imid', None)
-
- # Parent Link Meta
- update = {}
- parent_link_meta = self._parent_metas[parent_type]['service-template']
- meta = Metadata(parent_link_meta, '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
- self._update_id_pair_meta(update, obj_ids['imid'], meta)
- self._publish_update(parent_imid, update)
-
- (ok, result) = self._ifmap_service_template_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_service_template_create
-
-
- def _ifmap_service_template_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'service-instance-service-template', u'service-template-properties', u'id-perms', u'display-name']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_service-template_read_to_meta_index
-
- def _ifmap_service_template_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_service_template_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['service-template-properties', 'id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_service_template_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_service_template_update
-
- def _ifmap_service_template_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_service_template_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_service_template_delete
-
- def _ifmap_virtual_ip_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.virtual_ip_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_virtual_ip_alloc
-
- def _ifmap_virtual_ip_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('virtual_ip_properties', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['virtual_ip_properties']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- VirtualIpType(**field).exportChildren(buf, level = 1, name_ = 'virtual-ip-properties', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'virtual-ip-properties', pretty_print = False)
- virtual_ip_properties_xml = buf.getvalue()
- buf.close()
- meta = Metadata('virtual-ip-properties' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = virtual_ip_properties_xml)
-
- if (existing_metas and 'virtual-ip-properties' in existing_metas and
- str(existing_metas['virtual-ip-properties'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('loadbalancer_pool_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'loadbalancer-pool'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- virtual_ip_loadbalancer_pool_xml = ''
- meta = Metadata('virtual-ip-loadbalancer-pool' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = virtual_ip_loadbalancer_pool_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('virtual_machine_interface_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'virtual-machine-interface'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- virtual_ip_virtual_machine_interface_xml = ''
- meta = Metadata('virtual-ip-virtual-machine-interface' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = virtual_ip_virtual_machine_interface_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_virtual_ip_set
-
- def _ifmap_virtual_ip_create(self, obj_ids, obj_dict):
- if not 'parent_type' in obj_dict:
- # parent is config-root
- parent_type = 'config-root'
- parent_imid = 'contrail:config-root:root'
- else:
- parent_type = obj_dict['parent_type']
- parent_imid = obj_ids.get('parent_imid', None)
-
- # Parent Link Meta
- update = {}
- parent_link_meta = self._parent_metas[parent_type]['virtual-ip']
- meta = Metadata(parent_link_meta, '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
- self._update_id_pair_meta(update, obj_ids['imid'], meta)
- self._publish_update(parent_imid, update)
-
- (ok, result) = self._ifmap_virtual_ip_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_virtual_ip_create
-
-
- def _ifmap_virtual_ip_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'virtual-ip-loadbalancer-pool', u'virtual-ip-virtual-machine-interface', u'virtual-ip-properties', u'id-perms', u'display-name']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_virtual-ip_read_to_meta_index
-
- def _ifmap_virtual_ip_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_virtual_ip_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['virtual-ip-properties', 'id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {'virtual-ip-loadbalancer-pool': 'loadbalancer-pool',
- 'virtual-ip-virtual-machine-interface': 'virtual-machine-interface'}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_virtual_ip_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_virtual_ip_update
-
- def _ifmap_virtual_ip_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_virtual_ip_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_virtual_ip_delete
-
- def _ifmap_loadbalancer_member_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.loadbalancer_member_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_loadbalancer_member_alloc
-
- def _ifmap_loadbalancer_member_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('loadbalancer_member_properties', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['loadbalancer_member_properties']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- LoadbalancerMemberType(**field).exportChildren(buf, level = 1, name_ = 'loadbalancer-member-properties', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'loadbalancer-member-properties', pretty_print = False)
- loadbalancer_member_properties_xml = buf.getvalue()
- buf.close()
- meta = Metadata('loadbalancer-member-properties' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = loadbalancer_member_properties_xml)
-
- if (existing_metas and 'loadbalancer-member-properties' in existing_metas and
- str(existing_metas['loadbalancer-member-properties'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_loadbalancer_member_set
-
- def _ifmap_loadbalancer_member_create(self, obj_ids, obj_dict):
- if not 'parent_type' in obj_dict:
- # parent is config-root
- parent_type = 'config-root'
- parent_imid = 'contrail:config-root:root'
- else:
- parent_type = obj_dict['parent_type']
- parent_imid = obj_ids.get('parent_imid', None)
-
- # Parent Link Meta
- update = {}
- parent_link_meta = self._parent_metas[parent_type]['loadbalancer-member']
- meta = Metadata(parent_link_meta, '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
- self._update_id_pair_meta(update, obj_ids['imid'], meta)
- self._publish_update(parent_imid, update)
-
- (ok, result) = self._ifmap_loadbalancer_member_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_loadbalancer_member_create
-
-
- def _ifmap_loadbalancer_member_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'loadbalancer-member-properties', u'id-perms', u'display-name']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_loadbalancer-member_read_to_meta_index
-
- def _ifmap_loadbalancer_member_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_loadbalancer_member_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['loadbalancer-member-properties', 'id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_loadbalancer_member_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_loadbalancer_member_update
-
- def _ifmap_loadbalancer_member_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_loadbalancer_member_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_loadbalancer_member_delete
-
- def _ifmap_security_group_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.security_group_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_security_group_alloc
-
- def _ifmap_security_group_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('security_group_id', None)
- if field is not None:
- norm_str = escape(str(obj_dict['security_group_id']))
- meta = Metadata('security-group-id', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'security-group-id' in existing_metas and
- str(existing_metas['security-group-id'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('configured_security_group_id', None)
- if field is not None:
- norm_str = escape(str(obj_dict['configured_security_group_id']))
- meta = Metadata('configured-security-group-id', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'configured-security-group-id' in existing_metas and
- str(existing_metas['configured-security-group-id'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('security_group_entries', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['security_group_entries']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- PolicyEntriesType(**field).exportChildren(buf, level = 1, name_ = 'security-group-entries', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'security-group-entries', pretty_print = False)
- security_group_entries_xml = buf.getvalue()
- buf.close()
- meta = Metadata('security-group-entries' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = security_group_entries_xml)
-
- if (existing_metas and 'security-group-entries' in existing_metas and
- str(existing_metas['security-group-entries'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('access_control_list_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'access-control-list'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- security_group_access_control_list_xml = ''
- meta = Metadata('security-group-access-control-list' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = security_group_access_control_list_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_security_group_set
-
- def _ifmap_security_group_create(self, obj_ids, obj_dict):
- if not 'parent_type' in obj_dict:
- # parent is config-root
- parent_type = 'config-root'
- parent_imid = 'contrail:config-root:root'
- else:
- parent_type = obj_dict['parent_type']
- parent_imid = obj_ids.get('parent_imid', None)
-
- # Parent Link Meta
- update = {}
- parent_link_meta = self._parent_metas[parent_type]['security-group']
- meta = Metadata(parent_link_meta, '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
- self._update_id_pair_meta(update, obj_ids['imid'], meta)
- self._publish_update(parent_imid, update)
-
- (ok, result) = self._ifmap_security_group_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_security_group_create
-
-
- def _ifmap_security_group_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'virtual-machine-interface-security-group', u'security-group-id', u'configured-security-group-id', u'security-group-entries', u'id-perms', u'display-name', u'security-group-access-control-list']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_security-group_read_to_meta_index
-
- def _ifmap_security_group_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_security_group_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['security-group-id', 'configured-security-group-id', 'security-group-entries', 'id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_security_group_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_security_group_update
-
- def _ifmap_security_group_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_security_group_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_security_group_delete
-
- def _ifmap_provider_attachment_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.provider_attachment_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_provider_attachment_alloc
-
- def _ifmap_provider_attachment_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('virtual_router_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'virtual-router'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- provider_attachment_virtual_router_xml = ''
- meta = Metadata('provider-attachment-virtual-router' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = provider_attachment_virtual_router_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_provider_attachment_set
-
- def _ifmap_provider_attachment_create(self, obj_ids, obj_dict):
- (ok, result) = self._ifmap_provider_attachment_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_provider_attachment_create
-
-
- def _ifmap_provider_attachment_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'provider-attachment-virtual-router', u'id-perms', u'display-name']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_provider-attachment_read_to_meta_index
-
- def _ifmap_provider_attachment_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_provider_attachment_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {'provider-attachment-virtual-router': 'virtual-router'}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_provider_attachment_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_provider_attachment_update
-
- def _ifmap_provider_attachment_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_provider_attachment_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_provider_attachment_delete
-
- def _ifmap_virtual_machine_interface_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.virtual_machine_interface_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_virtual_machine_interface_alloc
-
- def _ifmap_virtual_machine_interface_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('virtual_machine_interface_mac_addresses', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['virtual_machine_interface_mac_addresses']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- MacAddressesType(**field).exportChildren(buf, level = 1, name_ = 'virtual-machine-interface-mac-addresses', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'virtual-machine-interface-mac-addresses', pretty_print = False)
- virtual_machine_interface_mac_addresses_xml = buf.getvalue()
- buf.close()
- meta = Metadata('virtual-machine-interface-mac-addresses' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = virtual_machine_interface_mac_addresses_xml)
-
- if (existing_metas and 'virtual-machine-interface-mac-addresses' in existing_metas and
- str(existing_metas['virtual-machine-interface-mac-addresses'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('virtual_machine_interface_dhcp_option_list', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['virtual_machine_interface_dhcp_option_list']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- DhcpOptionsListType(**field).exportChildren(buf, level = 1, name_ = 'virtual-machine-interface-dhcp-option-list', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'virtual-machine-interface-dhcp-option-list', pretty_print = False)
- virtual_machine_interface_dhcp_option_list_xml = buf.getvalue()
- buf.close()
- meta = Metadata('virtual-machine-interface-dhcp-option-list' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = virtual_machine_interface_dhcp_option_list_xml)
-
- if (existing_metas and 'virtual-machine-interface-dhcp-option-list' in existing_metas and
- str(existing_metas['virtual-machine-interface-dhcp-option-list'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('virtual_machine_interface_host_routes', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['virtual_machine_interface_host_routes']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- RouteTableType(**field).exportChildren(buf, level = 1, name_ = 'virtual-machine-interface-host-routes', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'virtual-machine-interface-host-routes', pretty_print = False)
- virtual_machine_interface_host_routes_xml = buf.getvalue()
- buf.close()
- meta = Metadata('virtual-machine-interface-host-routes' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = virtual_machine_interface_host_routes_xml)
-
- if (existing_metas and 'virtual-machine-interface-host-routes' in existing_metas and
- str(existing_metas['virtual-machine-interface-host-routes'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('virtual_machine_interface_allowed_address_pairs', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['virtual_machine_interface_allowed_address_pairs']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- AllowedAddressPairs(**field).exportChildren(buf, level = 1, name_ = 'virtual-machine-interface-allowed-address-pairs', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'virtual-machine-interface-allowed-address-pairs', pretty_print = False)
- virtual_machine_interface_allowed_address_pairs_xml = buf.getvalue()
- buf.close()
- meta = Metadata('virtual-machine-interface-allowed-address-pairs' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = virtual_machine_interface_allowed_address_pairs_xml)
-
- if (existing_metas and 'virtual-machine-interface-allowed-address-pairs' in existing_metas and
- str(existing_metas['virtual-machine-interface-allowed-address-pairs'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('vrf_assign_table', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['vrf_assign_table']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- VrfAssignTableType(**field).exportChildren(buf, level = 1, name_ = 'vrf-assign-table', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'vrf-assign-table', pretty_print = False)
- vrf_assign_table_xml = buf.getvalue()
- buf.close()
- meta = Metadata('vrf-assign-table' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = vrf_assign_table_xml)
-
- if (existing_metas and 'vrf-assign-table' in existing_metas and
- str(existing_metas['vrf-assign-table'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('virtual_machine_interface_device_owner', None)
- if field is not None:
- norm_str = escape(str(obj_dict['virtual_machine_interface_device_owner']))
- meta = Metadata('virtual-machine-interface-device-owner', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'virtual-machine-interface-device-owner' in existing_metas and
- str(existing_metas['virtual-machine-interface-device-owner'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('virtual_machine_interface_properties', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['virtual_machine_interface_properties']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- VirtualMachineInterfacePropertiesType(**field).exportChildren(buf, level = 1, name_ = 'virtual-machine-interface-properties', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'virtual-machine-interface-properties', pretty_print = False)
- virtual_machine_interface_properties_xml = buf.getvalue()
- buf.close()
- meta = Metadata('virtual-machine-interface-properties' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = virtual_machine_interface_properties_xml)
-
- if (existing_metas and 'virtual-machine-interface-properties' in existing_metas and
- str(existing_metas['virtual-machine-interface-properties'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('qos_forwarding_class_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'qos-forwarding-class'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- virtual_machine_interface_qos_forwarding_class_xml = ''
- meta = Metadata('virtual-machine-interface-qos-forwarding-class' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = virtual_machine_interface_qos_forwarding_class_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('security_group_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'security-group'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- virtual_machine_interface_security_group_xml = ''
- meta = Metadata('virtual-machine-interface-security-group' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = virtual_machine_interface_security_group_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('virtual_machine_interface_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'virtual-machine-interface'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- virtual_machine_interface_sub_interface_xml = ''
- meta = Metadata('virtual-machine-interface-sub-interface' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = virtual_machine_interface_sub_interface_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('virtual_machine_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'virtual-machine'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- virtual_machine_interface_virtual_machine_xml = ''
- meta = Metadata('virtual-machine-interface-virtual-machine' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = virtual_machine_interface_virtual_machine_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('virtual_network_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'virtual-network'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- virtual_machine_interface_virtual_network_xml = ''
- meta = Metadata('virtual-machine-interface-virtual-network' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = virtual_machine_interface_virtual_network_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('routing_instance_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'routing-instance'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- virtual_machine_interface_routing_instance_xml = ''
- ref_data = ref['attr']
- if ref_data:
- buf = cStringIO.StringIO()
- PolicyBasedForwardingRuleType(**ref_data).exportChildren(buf, level = 1, name_ = 'virtual-machine-interface-routing-instance', pretty_print = False)
- virtual_machine_interface_routing_instance_xml = virtual_machine_interface_routing_instance_xml + buf.getvalue()
- buf.close()
- meta = Metadata('virtual-machine-interface-routing-instance' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = virtual_machine_interface_routing_instance_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('interface_route_table_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'interface-route-table'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- virtual_machine_interface_route_table_xml = ''
- meta = Metadata('virtual-machine-interface-route-table' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = virtual_machine_interface_route_table_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_virtual_machine_interface_set
-
- def _ifmap_virtual_machine_interface_create(self, obj_ids, obj_dict):
- if not 'parent_type' in obj_dict:
- # parent is config-root
- parent_type = 'config-root'
- parent_imid = 'contrail:config-root:root'
- else:
- parent_type = obj_dict['parent_type']
- parent_imid = obj_ids.get('parent_imid', None)
-
- # Parent Link Meta
- update = {}
- parent_link_meta = self._parent_metas[parent_type]['virtual-machine-interface']
- meta = Metadata(parent_link_meta, '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
- self._update_id_pair_meta(update, obj_ids['imid'], meta)
- self._publish_update(parent_imid, update)
-
- (ok, result) = self._ifmap_virtual_machine_interface_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_virtual_machine_interface_create
-
-
- def _ifmap_virtual_machine_interface_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'virtual-machine-interface-qos-forwarding-class', u'virtual-machine-interface-security-group', u'virtual-machine-interface-sub-interface', u'virtual-machine-interface-virtual-machine', u'virtual-machine-interface-virtual-network', u'virtual-machine-interface-routing-instance', u'virtual-machine-interface-route-table', u'virtual-machine-interface-sub-interface', u'instance-ip-virtual-machine-interface', u'subnet-virtual-machine-interface', u'floating-ip-virtual-machine-interface', u'logical-interface-virtual-machine-interface', u'customer-attachment-virtual-machine-interface', u'logical-router-interface', u'loadbalancer-pool-virtual-machine-interface', u'virtual-ip-virtual-machine-interface', u'virtual-machine-interface-mac-addresses', u'virtual-machine-interface-dhcp-option-list', u'virtual-machine-interface-host-routes', u'virtual-machine-interface-allowed-address-pairs', u'vrf-assign-table', u'virtual-machine-interface-device-owner', u'virtual-machine-interface-properties', u'id-perms', u'display-name']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_virtual-machine-interface_read_to_meta_index
-
- def _ifmap_virtual_machine_interface_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_virtual_machine_interface_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['virtual-machine-interface-mac-addresses', 'virtual-machine-interface-dhcp-option-list', 'virtual-machine-interface-host-routes', 'virtual-machine-interface-allowed-address-pairs', 'vrf-assign-table', 'virtual-machine-interface-device-owner', 'virtual-machine-interface-properties', 'id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {'virtual-machine-interface-qos-forwarding-class': 'qos-forwarding-class',
- 'virtual-machine-interface-security-group': 'security-group',
- 'virtual-machine-interface-sub-interface': 'virtual-machine-interface',
- 'virtual-machine-interface-virtual-machine': 'virtual-machine',
- 'virtual-machine-interface-virtual-network': 'virtual-network',
- 'virtual-machine-interface-routing-instance': 'routing-instance',
- 'virtual-machine-interface-route-table': 'interface-route-table'}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_virtual_machine_interface_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_virtual_machine_interface_update
-
- def _ifmap_virtual_machine_interface_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_virtual_machine_interface_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_virtual_machine_interface_delete
-
- def _ifmap_loadbalancer_healthmonitor_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.loadbalancer_healthmonitor_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_loadbalancer_healthmonitor_alloc
-
- def _ifmap_loadbalancer_healthmonitor_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('loadbalancer_healthmonitor_properties', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['loadbalancer_healthmonitor_properties']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- LoadbalancerHealthmonitorType(**field).exportChildren(buf, level = 1, name_ = 'loadbalancer-healthmonitor-properties', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'loadbalancer-healthmonitor-properties', pretty_print = False)
- loadbalancer_healthmonitor_properties_xml = buf.getvalue()
- buf.close()
- meta = Metadata('loadbalancer-healthmonitor-properties' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = loadbalancer_healthmonitor_properties_xml)
-
- if (existing_metas and 'loadbalancer-healthmonitor-properties' in existing_metas and
- str(existing_metas['loadbalancer-healthmonitor-properties'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_loadbalancer_healthmonitor_set
-
- def _ifmap_loadbalancer_healthmonitor_create(self, obj_ids, obj_dict):
- if not 'parent_type' in obj_dict:
- # parent is config-root
- parent_type = 'config-root'
- parent_imid = 'contrail:config-root:root'
- else:
- parent_type = obj_dict['parent_type']
- parent_imid = obj_ids.get('parent_imid', None)
-
- # Parent Link Meta
- update = {}
- parent_link_meta = self._parent_metas[parent_type]['loadbalancer-healthmonitor']
- meta = Metadata(parent_link_meta, '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
- self._update_id_pair_meta(update, obj_ids['imid'], meta)
- self._publish_update(parent_imid, update)
-
- (ok, result) = self._ifmap_loadbalancer_healthmonitor_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_loadbalancer_healthmonitor_create
-
-
- def _ifmap_loadbalancer_healthmonitor_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'loadbalancer-pool-loadbalancer-healthmonitor', u'loadbalancer-healthmonitor-properties', u'id-perms', u'display-name']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_loadbalancer-healthmonitor_read_to_meta_index
-
- def _ifmap_loadbalancer_healthmonitor_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_loadbalancer_healthmonitor_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['loadbalancer-healthmonitor-properties', 'id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_loadbalancer_healthmonitor_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_loadbalancer_healthmonitor_update
-
- def _ifmap_loadbalancer_healthmonitor_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_loadbalancer_healthmonitor_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_loadbalancer_healthmonitor_delete
-
- def _ifmap_virtual_network_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.virtual_network_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_virtual_network_alloc
-
- def _ifmap_virtual_network_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('virtual_network_properties', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['virtual_network_properties']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- VirtualNetworkType(**field).exportChildren(buf, level = 1, name_ = 'virtual-network-properties', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'virtual-network-properties', pretty_print = False)
- virtual_network_properties_xml = buf.getvalue()
- buf.close()
- meta = Metadata('virtual-network-properties' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = virtual_network_properties_xml)
-
- if (existing_metas and 'virtual-network-properties' in existing_metas and
- str(existing_metas['virtual-network-properties'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('virtual_network_network_id', None)
- if field is not None:
- norm_str = escape(str(obj_dict['virtual_network_network_id']))
- meta = Metadata('virtual-network-network-id', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'virtual-network-network-id' in existing_metas and
- str(existing_metas['virtual-network-network-id'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('route_target_list', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['route_target_list']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- RouteTargetList(**field).exportChildren(buf, level = 1, name_ = 'route-target-list', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'route-target-list', pretty_print = False)
- route_target_list_xml = buf.getvalue()
- buf.close()
- meta = Metadata('route-target-list' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = route_target_list_xml)
-
- if (existing_metas and 'route-target-list' in existing_metas and
- str(existing_metas['route-target-list'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('router_external', None)
- if field is not None:
- norm_str = escape(str(obj_dict['router_external']))
- meta = Metadata('router-external', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'router-external' in existing_metas and
- str(existing_metas['router-external'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('is_shared', None)
- if field is not None:
- norm_str = escape(str(obj_dict['is_shared']))
- meta = Metadata('is-shared', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'is-shared' in existing_metas and
- str(existing_metas['is-shared'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('external_ipam', None)
- if field is not None:
- norm_str = escape(str(obj_dict['external_ipam']))
- meta = Metadata('external-ipam', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'external-ipam' in existing_metas and
- str(existing_metas['external-ipam'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('flood_unknown_unicast', None)
- if field is not None:
- norm_str = escape(str(obj_dict['flood_unknown_unicast']))
- meta = Metadata('flood-unknown-unicast', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'flood-unknown-unicast' in existing_metas and
- str(existing_metas['flood-unknown-unicast'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('qos_forwarding_class_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'qos-forwarding-class'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- virtual_network_qos_forwarding_class_xml = ''
- meta = Metadata('virtual-network-qos-forwarding-class' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = virtual_network_qos_forwarding_class_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('network_ipam_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'network-ipam'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- virtual_network_network_ipam_xml = ''
- ref_data = ref['attr']
- if ref_data:
- buf = cStringIO.StringIO()
- VnSubnetsType(**ref_data).exportChildren(buf, level = 1, name_ = 'virtual-network-network-ipam', pretty_print = False)
- virtual_network_network_ipam_xml = virtual_network_network_ipam_xml + buf.getvalue()
- buf.close()
- meta = Metadata('virtual-network-network-ipam' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = virtual_network_network_ipam_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('network_policy_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'network-policy'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- virtual_network_network_policy_xml = ''
- ref_data = ref['attr']
- if ref_data:
- buf = cStringIO.StringIO()
- VirtualNetworkPolicyType(**ref_data).exportChildren(buf, level = 1, name_ = 'virtual-network-network-policy', pretty_print = False)
- virtual_network_network_policy_xml = virtual_network_network_policy_xml + buf.getvalue()
- buf.close()
- meta = Metadata('virtual-network-network-policy' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = virtual_network_network_policy_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('access_control_list_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'access-control-list'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- virtual_network_access_control_list_xml = ''
- meta = Metadata('virtual-network-access-control-list' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = virtual_network_access_control_list_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('floating_ip_pool_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'floating-ip-pool'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- virtual_network_floating_ip_pool_xml = ''
- meta = Metadata('virtual-network-floating-ip-pool' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = virtual_network_floating_ip_pool_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('routing_instance_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'routing-instance'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- virtual_network_routing_instance_xml = ''
- meta = Metadata('virtual-network-routing-instance' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = virtual_network_routing_instance_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('route_table_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'route-table'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- virtual_network_route_table_xml = ''
- meta = Metadata('virtual-network-route-table' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = virtual_network_route_table_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_virtual_network_set
-
- def _ifmap_virtual_network_create(self, obj_ids, obj_dict):
- if not 'parent_type' in obj_dict:
- # parent is config-root
- parent_type = 'config-root'
- parent_imid = 'contrail:config-root:root'
- else:
- parent_type = obj_dict['parent_type']
- parent_imid = obj_ids.get('parent_imid', None)
-
- # Parent Link Meta
- update = {}
- parent_link_meta = self._parent_metas[parent_type]['virtual-network']
- meta = Metadata(parent_link_meta, '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
- self._update_id_pair_meta(update, obj_ids['imid'], meta)
- self._publish_update(parent_imid, update)
-
- (ok, result) = self._ifmap_virtual_network_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_virtual_network_create
-
-
- def _ifmap_virtual_network_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'virtual-network-qos-forwarding-class', u'virtual-network-network-ipam', u'virtual-network-network-policy', u'virtual-network-route-table', u'virtual-machine-interface-virtual-network', u'instance-ip-virtual-network', u'physical-router-virtual-network', u'logical-router-gateway', u'virtual-network-properties', u'virtual-network-network-id', u'route-target-list', u'router-external', u'is-shared', u'external-ipam', u'flood-unknown-unicast', u'id-perms', u'display-name', u'virtual-network-access-control-list', u'virtual-network-floating-ip-pool', u'virtual-network-routing-instance']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_virtual-network_read_to_meta_index
-
- def _ifmap_virtual_network_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_virtual_network_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['virtual-network-properties', 'virtual-network-network-id', 'route-target-list', 'router-external', 'is-shared', 'external-ipam', 'flood-unknown-unicast', 'id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {'virtual-network-qos-forwarding-class': 'qos-forwarding-class',
- 'virtual-network-network-ipam': 'network-ipam',
- 'virtual-network-network-policy': 'network-policy',
- 'virtual-network-route-table': 'route-table'}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_virtual_network_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_virtual_network_update
-
- def _ifmap_virtual_network_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_virtual_network_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_virtual_network_delete
-
- def _ifmap_project_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.project_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_project_alloc
-
- def _ifmap_project_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('quota', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['quota']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- QuotaType(**field).exportChildren(buf, level = 1, name_ = 'quota', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'quota', pretty_print = False)
- quota_xml = buf.getvalue()
- buf.close()
- meta = Metadata('quota' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = quota_xml)
-
- if (existing_metas and 'quota' in existing_metas and
- str(existing_metas['quota'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('namespace_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'namespace'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- project_namespace_xml = ''
- ref_data = ref['attr']
- if ref_data:
- buf = cStringIO.StringIO()
- SubnetType(**ref_data).exportChildren(buf, level = 1, name_ = 'project-namespace', pretty_print = False)
- project_namespace_xml = project_namespace_xml + buf.getvalue()
- buf.close()
- meta = Metadata('project-namespace' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = project_namespace_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('security_group_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'security-group'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- project_security_group_xml = ''
- meta = Metadata('project-security-group' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = project_security_group_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('virtual_network_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'virtual-network'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- project_virtual_network_xml = ''
- meta = Metadata('project-virtual-network' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = project_virtual_network_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('qos_queue_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'qos-queue'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- project_qos_queue_xml = ''
- meta = Metadata('project-qos-queue' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = project_qos_queue_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('qos_forwarding_class_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'qos-forwarding-class'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- project_qos_forwarding_class_xml = ''
- meta = Metadata('project-qos-forwarding-class' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = project_qos_forwarding_class_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('network_ipam_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'network-ipam'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- project_network_ipam_xml = ''
- meta = Metadata('project-network-ipam' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = project_network_ipam_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('network_policy_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'network-policy'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- project_network_policy_xml = ''
- meta = Metadata('project-network-policy' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = project_network_policy_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('virtual_machine_interface_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'virtual-machine-interface'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- project_virtual_machine_interface_xml = ''
- meta = Metadata('project-virtual-machine-interface' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = project_virtual_machine_interface_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('floating_ip_pool_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'floating-ip-pool'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- project_floating_ip_pool_xml = ''
- meta = Metadata('project-floating-ip-pool' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = project_floating_ip_pool_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('service_instance_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'service-instance'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- project_service_instance_xml = ''
- meta = Metadata('project-service-instance' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = project_service_instance_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('route_table_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'route-table'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- project_route_table_xml = ''
- meta = Metadata('project-route-table' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = project_route_table_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('interface_route_table_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'interface-route-table'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- project_interface_route_table_xml = ''
- meta = Metadata('project-interface-route-table' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = project_interface_route_table_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('logical_router_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'logical-router'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- project_logical_router_xml = ''
- meta = Metadata('project-logical-router' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = project_logical_router_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('loadbalancer_pool_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'loadbalancer-pool'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- project_loadbalancer_pool_xml = ''
- meta = Metadata('project-loadbalancer-pool' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = project_loadbalancer_pool_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('loadbalancer_healthmonitor_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'loadbalancer-healthmonitor'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- project_loadbalancer_healthmonitor_xml = ''
- meta = Metadata('project-loadbalancer-healthmonitor' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = project_loadbalancer_healthmonitor_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('virtual_ip_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'virtual-ip'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- project_virtual_ip_xml = ''
- meta = Metadata('project-virtual-ip' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = project_virtual_ip_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_project_set
-
- def _ifmap_project_create(self, obj_ids, obj_dict):
- if not 'parent_type' in obj_dict:
- # parent is config-root
- parent_type = 'config-root'
- parent_imid = 'contrail:config-root:root'
- else:
- parent_type = obj_dict['parent_type']
- parent_imid = obj_ids.get('parent_imid', None)
-
- # Parent Link Meta
- update = {}
- parent_link_meta = self._parent_metas[parent_type]['project']
- meta = Metadata(parent_link_meta, '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
- self._update_id_pair_meta(update, obj_ids['imid'], meta)
- self._publish_update(parent_imid, update)
-
- (ok, result) = self._ifmap_project_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_project_create
-
-
- def _ifmap_project_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'project-namespace', u'project-floating-ip-pool', u'floating-ip-project', u'quota', u'id-perms', u'display-name', u'project-security-group', u'project-virtual-network', u'project-qos-queue', u'project-qos-forwarding-class', u'project-network-ipam', u'project-network-policy', u'project-virtual-machine-interface', u'project-service-instance', u'project-route-table', u'project-interface-route-table', u'project-logical-router', u'project-loadbalancer-pool', u'project-loadbalancer-healthmonitor', u'project-virtual-ip']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_project_read_to_meta_index
-
- def _ifmap_project_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_project_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['quota', 'id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {'project-namespace': 'namespace',
- 'project-floating-ip-pool': 'floating-ip-pool'}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_project_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_project_update
-
- def _ifmap_project_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_project_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_project_delete
-
- def _ifmap_qos_forwarding_class_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.qos_forwarding_class_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_qos_forwarding_class_alloc
-
- def _ifmap_qos_forwarding_class_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('dscp', None)
- if field is not None:
- norm_str = escape(str(obj_dict['dscp']))
- meta = Metadata('dscp', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'dscp' in existing_metas and
- str(existing_metas['dscp'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('trusted', None)
- if field is not None:
- norm_str = escape(str(obj_dict['trusted']))
- meta = Metadata('trusted', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'trusted' in existing_metas and
- str(existing_metas['trusted'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('qos_queue_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'qos-queue'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- qos_forwarding_class_qos_queue_xml = ''
- meta = Metadata('qos-forwarding-class-qos-queue' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = qos_forwarding_class_qos_queue_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_qos_forwarding_class_set
-
- def _ifmap_qos_forwarding_class_create(self, obj_ids, obj_dict):
- if not 'parent_type' in obj_dict:
- # parent is config-root
- parent_type = 'config-root'
- parent_imid = 'contrail:config-root:root'
- else:
- parent_type = obj_dict['parent_type']
- parent_imid = obj_ids.get('parent_imid', None)
-
- # Parent Link Meta
- update = {}
- parent_link_meta = self._parent_metas[parent_type]['qos-forwarding-class']
- meta = Metadata(parent_link_meta, '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
- self._update_id_pair_meta(update, obj_ids['imid'], meta)
- self._publish_update(parent_imid, update)
-
- (ok, result) = self._ifmap_qos_forwarding_class_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_qos_forwarding_class_create
-
-
- def _ifmap_qos_forwarding_class_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'qos-forwarding-class-qos-queue', u'virtual-network-qos-forwarding-class', u'virtual-machine-interface-qos-forwarding-class', u'dscp', u'trusted', u'id-perms', u'display-name']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_qos-forwarding-class_read_to_meta_index
-
- def _ifmap_qos_forwarding_class_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_qos_forwarding_class_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['dscp', 'trusted', 'id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {'qos-forwarding-class-qos-queue': 'qos-queue'}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_qos_forwarding_class_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_qos_forwarding_class_update
-
- def _ifmap_qos_forwarding_class_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_qos_forwarding_class_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_qos_forwarding_class_delete
-
- def _ifmap_database_node_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.database_node_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_database_node_alloc
-
- def _ifmap_database_node_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('database_node_ip_address', None)
- if field is not None:
- norm_str = escape(str(obj_dict['database_node_ip_address']))
- meta = Metadata('database-node-ip-address', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'database-node-ip-address' in existing_metas and
- str(existing_metas['database-node-ip-address'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_database_node_set
-
- def _ifmap_database_node_create(self, obj_ids, obj_dict):
- if not 'parent_type' in obj_dict:
- # parent is config-root
- parent_type = 'config-root'
- parent_imid = 'contrail:config-root:root'
- else:
- parent_type = obj_dict['parent_type']
- parent_imid = obj_ids.get('parent_imid', None)
-
- # Parent Link Meta
- update = {}
- parent_link_meta = self._parent_metas[parent_type]['database-node']
- meta = Metadata(parent_link_meta, '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
- self._update_id_pair_meta(update, obj_ids['imid'], meta)
- self._publish_update(parent_imid, update)
-
- (ok, result) = self._ifmap_database_node_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_database_node_create
-
-
- def _ifmap_database_node_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'database-node-ip-address', u'id-perms', u'display-name']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_database-node_read_to_meta_index
-
- def _ifmap_database_node_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_database_node_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['database-node-ip-address', 'id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_database_node_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_database_node_update
-
- def _ifmap_database_node_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_database_node_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_database_node_delete
-
- def _ifmap_routing_instance_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.routing_instance_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_routing_instance_alloc
-
- def _ifmap_routing_instance_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('service_chain_information', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['service_chain_information']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- ServiceChainInfo(**field).exportChildren(buf, level = 1, name_ = 'service-chain-information', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'service-chain-information', pretty_print = False)
- service_chain_information_xml = buf.getvalue()
- buf.close()
- meta = Metadata('service-chain-information' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = service_chain_information_xml)
-
- if (existing_metas and 'service-chain-information' in existing_metas and
- str(existing_metas['service-chain-information'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('routing_instance_is_default', None)
- if field is not None:
- norm_str = escape(str(obj_dict['routing_instance_is_default']))
- meta = Metadata('routing-instance-is-default', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'routing-instance-is-default' in existing_metas and
- str(existing_metas['routing-instance-is-default'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('static_route_entries', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['static_route_entries']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- StaticRouteEntriesType(**field).exportChildren(buf, level = 1, name_ = 'static-route-entries', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'static-route-entries', pretty_print = False)
- static_route_entries_xml = buf.getvalue()
- buf.close()
- meta = Metadata('static-route-entries' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = static_route_entries_xml)
-
- if (existing_metas and 'static-route-entries' in existing_metas and
- str(existing_metas['static-route-entries'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('default_ce_protocol', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['default_ce_protocol']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- DefaultProtocolType(**field).exportChildren(buf, level = 1, name_ = 'default-ce-protocol', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'default-ce-protocol', pretty_print = False)
- default_ce_protocol_xml = buf.getvalue()
- buf.close()
- meta = Metadata('default-ce-protocol' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = default_ce_protocol_xml)
-
- if (existing_metas and 'default-ce-protocol' in existing_metas and
- str(existing_metas['default-ce-protocol'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('bgp_router_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'bgp-router'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- instance_bgp_router_xml = ''
- meta = Metadata('instance-bgp-router' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = instance_bgp_router_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('routing_instance_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'routing-instance'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- connection_xml = ''
- ref_data = ref['attr']
- if ref_data:
- buf = cStringIO.StringIO()
- ConnectionType(**ref_data).exportChildren(buf, level = 1, name_ = 'connection', pretty_print = False)
- connection_xml = connection_xml + buf.getvalue()
- buf.close()
- meta = Metadata('connection' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = connection_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('route_target_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'route-target'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- instance_target_xml = ''
- ref_data = ref['attr']
- if ref_data:
- buf = cStringIO.StringIO()
- InstanceTargetType(**ref_data).exportChildren(buf, level = 1, name_ = 'instance-target', pretty_print = False)
- instance_target_xml = instance_target_xml + buf.getvalue()
- buf.close()
- meta = Metadata('instance-target' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = instance_target_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_routing_instance_set
-
- def _ifmap_routing_instance_create(self, obj_ids, obj_dict):
- if not 'parent_type' in obj_dict:
- # parent is config-root
- parent_type = 'config-root'
- parent_imid = 'contrail:config-root:root'
- else:
- parent_type = obj_dict['parent_type']
- parent_imid = obj_ids.get('parent_imid', None)
-
- # Parent Link Meta
- update = {}
- parent_link_meta = self._parent_metas[parent_type]['routing-instance']
- meta = Metadata(parent_link_meta, '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
- self._update_id_pair_meta(update, obj_ids['imid'], meta)
- self._publish_update(parent_imid, update)
-
- (ok, result) = self._ifmap_routing_instance_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_routing_instance_create
-
-
- def _ifmap_routing_instance_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'connection', u'instance-target', u'virtual-machine-interface-routing-instance', u'connection', u'service-chain-information', u'routing-instance-is-default', u'static-route-entries', u'default-ce-protocol', u'id-perms', u'display-name', u'instance-bgp-router']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_routing-instance_read_to_meta_index
-
- def _ifmap_routing_instance_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_routing_instance_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['service-chain-information', 'routing-instance-is-default', 'static-route-entries', 'default-ce-protocol', 'id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {'connection': 'routing-instance',
- 'instance-target': 'route-target'}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_routing_instance_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_routing_instance_update
-
- def _ifmap_routing_instance_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_routing_instance_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_routing_instance_delete
-
- def _ifmap_network_ipam_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.network_ipam_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_network_ipam_alloc
-
- def _ifmap_network_ipam_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('network_ipam_mgmt', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['network_ipam_mgmt']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IpamType(**field).exportChildren(buf, level = 1, name_ = 'network-ipam-mgmt', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'network-ipam-mgmt', pretty_print = False)
- network_ipam_mgmt_xml = buf.getvalue()
- buf.close()
- meta = Metadata('network-ipam-mgmt' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = network_ipam_mgmt_xml)
-
- if (existing_metas and 'network-ipam-mgmt' in existing_metas and
- str(existing_metas['network-ipam-mgmt'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('virtual_DNS_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'virtual-DNS'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- network_ipam_virtual_DNS_xml = ''
- meta = Metadata('network-ipam-virtual-DNS' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = network_ipam_virtual_DNS_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_network_ipam_set
-
- def _ifmap_network_ipam_create(self, obj_ids, obj_dict):
- if not 'parent_type' in obj_dict:
- # parent is config-root
- parent_type = 'config-root'
- parent_imid = 'contrail:config-root:root'
- else:
- parent_type = obj_dict['parent_type']
- parent_imid = obj_ids.get('parent_imid', None)
-
- # Parent Link Meta
- update = {}
- parent_link_meta = self._parent_metas[parent_type]['network-ipam']
- meta = Metadata(parent_link_meta, '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
- self._update_id_pair_meta(update, obj_ids['imid'], meta)
- self._publish_update(parent_imid, update)
-
- (ok, result) = self._ifmap_network_ipam_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_network_ipam_create
-
-
- def _ifmap_network_ipam_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'network-ipam-virtual-DNS', u'virtual-network-network-ipam', u'network-ipam-mgmt', u'id-perms', u'display-name']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_network-ipam_read_to_meta_index
-
- def _ifmap_network_ipam_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_network_ipam_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['network-ipam-mgmt', 'id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {'network-ipam-virtual-DNS': 'virtual-DNS'}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_network_ipam_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_network_ipam_update
-
- def _ifmap_network_ipam_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_network_ipam_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_network_ipam_delete
-
- def _ifmap_logical_router_alloc(self, parent_type, fq_name):
- imid = self._imid_handler
- (my_imid, parent_imid) = \
- imid.logical_router_alloc_ifmap_id(parent_type, fq_name)
- if my_imid is None or parent_imid is None:
- return (False, (my_imid, parent_imid))
- return (True, (my_imid, parent_imid))
- #end _ifmap_logical_router_alloc
-
- def _ifmap_logical_router_set(self, my_imid, existing_metas, obj_dict):
- # Properties Meta
- update = {}
- field = obj_dict.get('id_perms', None)
- if field is not None:
- # construct object of xsd-type and get its xml repr
- field = obj_dict['id_perms']
- buf = cStringIO.StringIO()
- # perms might be inserted at server as obj.
- # obj construction diff from dict construction.
- if isinstance(field, dict):
- IdPermsType(**field).exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- else: # object
- field.exportChildren(buf, level = 1, name_ = 'id-perms', pretty_print = False)
- id_perms_xml = buf.getvalue()
- buf.close()
- meta = Metadata('id-perms' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = id_perms_xml)
-
- if (existing_metas and 'id-perms' in existing_metas and
- str(existing_metas['id-perms'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- field = obj_dict.get('display_name', None)
- if field is not None:
- norm_str = escape(str(obj_dict['display_name']))
- meta = Metadata('display-name', norm_str,
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
-
- if (existing_metas and 'display-name' in existing_metas and
- str(existing_metas['display-name'][0]['meta']) == str(meta)):
- # no change
- pass
- else:
- self._update_id_self_meta(update, meta)
-
- # Ref Link Metas
- imid = self._imid_handler
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('virtual_machine_interface_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'virtual-machine-interface'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- logical_router_interface_xml = ''
- meta = Metadata('logical-router-interface' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = logical_router_interface_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('route_target_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'route-target'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- logical_router_target_xml = ''
- meta = Metadata('logical-router-target' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = logical_router_target_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('virtual_network_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'virtual-network'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- logical_router_gateway_xml = ''
- meta = Metadata('logical-router-gateway' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = logical_router_gateway_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
- # construct object of xsd-type and get its xml repr
- refs = obj_dict.get('service_instance_refs', None)
- if refs:
- for ref in refs:
- ref_fq_name = ref['to']
- obj_type = 'service-instance'
- to_imid = cfgm_common.imid.get_ifmap_id_from_fq_name(obj_type, ref_fq_name)
- logical_router_service_instance_xml = ''
- meta = Metadata('logical-router-service-instance' , '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail',
- elements = logical_router_service_instance_xml)
- self._update_id_pair_meta(update, to_imid, meta)
-
-
- self._publish_update(my_imid, update)
- return (True, '')
- #end _ifmap_logical_router_set
-
- def _ifmap_logical_router_create(self, obj_ids, obj_dict):
- if not 'parent_type' in obj_dict:
- # parent is config-root
- parent_type = 'config-root'
- parent_imid = 'contrail:config-root:root'
- else:
- parent_type = obj_dict['parent_type']
- parent_imid = obj_ids.get('parent_imid', None)
-
- # Parent Link Meta
- update = {}
- parent_link_meta = self._parent_metas[parent_type]['logical-router']
- meta = Metadata(parent_link_meta, '',
- {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail')
- self._update_id_pair_meta(update, obj_ids['imid'], meta)
- self._publish_update(parent_imid, update)
-
- (ok, result) = self._ifmap_logical_router_set(obj_ids['imid'], None, obj_dict)
- return (ok, result)
- #end _ifmap_logical_router_create
-
-
- def _ifmap_logical_router_read_to_meta_index(self, ifmap_id, field_names = None):
- # field_names = None means all fields will be read
- imid = self._imid_handler
- start_id = str(Identity(name = ifmap_id, type = 'other',
- other_type = 'extended'))
- # if id-perms missing, identity doesn't exist
-
- all_metas = [u'logical-router-interface', u'logical-router-target', u'logical-router-gateway', u'logical-router-service-instance', u'id-perms', u'display-name']
- if not field_names:
- metas_to_read = all_metas
- else: # read only requested fields
- metas_to_read = set(all_metas) & set(field_names.keys())
-
- # metas is a dict where key is meta-name and val is list of dict
- # of form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}]
- metas = {}
- for meta_name in metas_to_read:
- if meta_name in self._id_to_metas[ifmap_id]:
- metas[meta_name] = self._id_to_metas[ifmap_id][meta_name]
- return metas
- #end _ifmap_logical-router_read_to_meta_index
-
- def _ifmap_logical_router_update(self, ifmap_id, new_obj_dict):
- # read in refs from ifmap to determine which ones become inactive after update
- existing_metas = self._ifmap_logical_router_read_to_meta_index(ifmap_id)
-
- # remove properties that are no longer active
- props = ['id-perms', 'display-name']
- for prop in props:
- prop_m = prop.replace('-', '_')
- if prop in existing_metas and prop_m not in new_obj_dict:
- self._delete_id_self_meta(ifmap_id, 'contrail:'+prop)
- # remove refs that are no longer active
- delete_list = []
- refs = {'logical-router-interface': 'virtual-machine-interface',
- 'logical-router-target': 'route-target',
- 'logical-router-gateway': 'virtual-network',
- 'logical-router-service-instance': 'service-instance'}
- for meta, to_name in refs.items():
- old_set = set([m['id'] for m in existing_metas.get(meta, [])])
- new_set = set()
- to_name_m = to_name.replace('-', '_')
- for ref in new_obj_dict.get(to_name_m+'_refs', []):
- to_imid = self.fq_name_to_ifmap_id(to_name, ref['to'])
- new_set.add(to_imid)
-
- for inact_ref in old_set - new_set:
- delete_list.append((inact_ref, 'contrail:'+meta))
-
- if delete_list:
- self._delete_id_pair_meta_list(ifmap_id, delete_list)
-
- (ok, result) = self._ifmap_logical_router_set(ifmap_id, existing_metas, new_obj_dict)
- return (ok, result)
- #end _ifmap_logical_router_update
-
- def _ifmap_logical_router_delete(self, obj_ids):
- ifmap_id = obj_ids['imid']
- parent_imid = obj_ids.get('parent_imid', None)
- existing_metas = self._ifmap_logical_router_read_to_meta_index(ifmap_id)
- meta_list = []
- for meta_name, meta_infos in existing_metas.items():
- for meta_info in meta_infos:
- ref_imid = meta_info.get('id')
- if ref_imid is None:
- continue
- meta_list.append((ref_imid, 'contrail:'+meta_name))
-
- if parent_imid:
- # Remove link from parent
- meta_list.append((parent_imid, None))
-
- if meta_list:
- self._delete_id_pair_meta_list(ifmap_id, meta_list)
-
- # Remove all property metadata associated with this ident
- self._delete_id_self_meta(ifmap_id, None)
-
- return (True, '')
- #end _ifmap_logical_router_delete
-
-#end class VncIfmapClientGen
-
-class ImidGen(object):
- def domain_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:domain:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end domain_alloc_ifmap_id
-
- def global_vrouter_config_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:global-vrouter-config:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end global_vrouter_config_alloc_ifmap_id
-
- def instance_ip_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:instance-ip:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end instance_ip_alloc_ifmap_id
-
- def network_policy_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:network-policy:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end network_policy_alloc_ifmap_id
-
- def loadbalancer_pool_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:loadbalancer-pool:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end loadbalancer_pool_alloc_ifmap_id
-
- def virtual_DNS_record_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:virtual-DNS-record:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end virtual_DNS_record_alloc_ifmap_id
-
- def route_target_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:route-target:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end route_target_alloc_ifmap_id
-
- def floating_ip_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:floating-ip:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end floating_ip_alloc_ifmap_id
-
- def floating_ip_pool_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:floating-ip-pool:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end floating_ip_pool_alloc_ifmap_id
-
- def physical_router_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:physical-router:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end physical_router_alloc_ifmap_id
-
- def bgp_router_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:bgp-router:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end bgp_router_alloc_ifmap_id
-
- def virtual_router_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:virtual-router:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end virtual_router_alloc_ifmap_id
-
- def config_root_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:config-root:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end config_root_alloc_ifmap_id
-
- def subnet_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:subnet:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end subnet_alloc_ifmap_id
-
- def global_system_config_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:global-system-config:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end global_system_config_alloc_ifmap_id
-
- def service_appliance_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:service-appliance:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end service_appliance_alloc_ifmap_id
-
- def service_instance_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:service-instance:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end service_instance_alloc_ifmap_id
-
- def namespace_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:namespace:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end namespace_alloc_ifmap_id
-
- def logical_interface_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:logical-interface:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end logical_interface_alloc_ifmap_id
-
- def route_table_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:route-table:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end route_table_alloc_ifmap_id
-
- def physical_interface_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:physical-interface:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end physical_interface_alloc_ifmap_id
-
- def access_control_list_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:access-control-list:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end access_control_list_alloc_ifmap_id
-
- def analytics_node_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:analytics-node:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end analytics_node_alloc_ifmap_id
-
- def virtual_DNS_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:virtual-DNS:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end virtual_DNS_alloc_ifmap_id
-
- def customer_attachment_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:customer-attachment:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end customer_attachment_alloc_ifmap_id
-
- def service_appliance_set_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:service-appliance-set:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end service_appliance_set_alloc_ifmap_id
-
- def config_node_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:config-node:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end config_node_alloc_ifmap_id
-
- def qos_queue_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:qos-queue:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end qos_queue_alloc_ifmap_id
-
- def virtual_machine_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:virtual-machine:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end virtual_machine_alloc_ifmap_id
-
- def interface_route_table_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:interface-route-table:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end interface_route_table_alloc_ifmap_id
-
- def service_template_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:service-template:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end service_template_alloc_ifmap_id
-
- def virtual_ip_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:virtual-ip:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end virtual_ip_alloc_ifmap_id
-
- def loadbalancer_member_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:loadbalancer-member:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end loadbalancer_member_alloc_ifmap_id
-
- def security_group_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:security-group:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end security_group_alloc_ifmap_id
-
- def provider_attachment_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:provider-attachment:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end provider_attachment_alloc_ifmap_id
-
- def virtual_machine_interface_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:virtual-machine-interface:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end virtual_machine_interface_alloc_ifmap_id
-
- def loadbalancer_healthmonitor_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:loadbalancer-healthmonitor:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end loadbalancer_healthmonitor_alloc_ifmap_id
-
- def virtual_network_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:virtual-network:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end virtual_network_alloc_ifmap_id
-
- def project_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:project:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end project_alloc_ifmap_id
-
- def qos_forwarding_class_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:qos-forwarding-class:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end qos_forwarding_class_alloc_ifmap_id
-
- def database_node_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:database-node:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end database_node_alloc_ifmap_id
-
- def routing_instance_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:routing-instance:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end routing_instance_alloc_ifmap_id
-
- def network_ipam_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:network-ipam:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end network_ipam_alloc_ifmap_id
-
- def logical_router_alloc_ifmap_id(self, parent_type, fq_name):
- my_fqn = ':'.join(fq_name)
- parent_fqn = ':'.join(fq_name[:-1])
-
- my_imid = 'contrail:logical-router:' + my_fqn
- if parent_fqn:
- if parent_type is None:
- return (None, None)
- parent_imid = 'contrail:' + parent_type + ':' + parent_fqn
- else: # parent is config-root
- parent_imid = 'contrail:config-root:root'
-
- # Normalize/escape special chars
- my_imid = escape(my_imid)
- parent_imid = escape(parent_imid)
-
- return (my_imid, parent_imid)
- #end logical_router_alloc_ifmap_id
-
-
-link_name_to_xsd_type = {
- "project-namespace":"SubnetType",
- "connection":"ConnectionType",
- "bgp-peering":"BgpPeeringAttributes",
- "virtual-machine-interface-routing-instance":"PolicyBasedForwardingRuleType",
- "virtual-network-network-policy":"VirtualNetworkPolicyType",
- "instance-target":"InstanceTargetType",
- "virtual-network-network-ipam":"VnSubnetsType"
-}
-