def _read_entities(provider, get_config=True, source=Datastore.running): session = provider.get_session() root_schema = session.get_root_schema() if get_config: read_rpc = root_schema.create_rpc("ietf-netconf:get-config") source_str = "running" if source == Datastore.candidate: source_str = "candidate" elif source == Datastore.startup: source_str = "startup" elif source != Datastore.running: raise YServiceError("Wrong datastore source value '{}'".format(source)) read_rpc.get_input_node().create_datanode("source/"+source_str); else: read_rpc = root_schema.create_rpc("ietf-netconf:get") data_nodes = read_rpc(session) config = Config() for node in data_nodes.get_children(): try: config.append(_datanode_to_entity(node)) except YModelError as err: log = logging.getLogger('ydk') log.error(err.message) return config
def test_access_config_by_item_no(self): runner = ysanity.Runner() native = ysanity.Native() config = Config([runner, native]) self.assertEqual(format(config[0]), "ydk.models.ydktest.ydktest_sanity.Runner") self.assertEqual(format(config[1]), "ydk.models.ydktest.ydktest_sanity.Native") config.clear()
def test_access_config_by_iter(self): runner = ysanity.Runner() native = ysanity.Native() config = Config(runner, native) for entity in config: print(entity) self.assertEqual(len(config), 2) config.clear()
def test_access_config_by_key(self): runner = ysanity.Runner() native = ysanity.Native() config = Config(runner, native) for key in config.keys(): if key=='ydktest-sanity:runner': self.assertEqual(config[key].path(), 'ydktest-sanity:runner') else: self.assertEqual(config[key].path(), 'ydktest-sanity:native') config.clear()
def test_config_add_del(self): runner = ysanity.Runner() native = ysanity.Native() config = Config() config.append(runner) self.assertEqual(len(config), 1) self.assertEqual( format(config), "Entities in Config: ['ydk.models.ydktest.ydktest_sanity.Runner']") config.append(native) self.assertEqual(len(config), 2) self.assertEqual(config.has_key(runner.path()), True) self.assertEqual( format(config), "Entities in Config: ['ydk.models.ydktest.ydktest_sanity.Runner', 'ydk.models.ydktest.ydktest_sanity.Native']" ) del config[native.path()] self.assertEqual(len(config), 1) self.assertEqual(config.has_key(native.path()), False) del config[runner] self.assertEqual(len(config), 0)
def test_init_delete(self): runner = ysanity.Runner() native = ysanity.Native() anydata = Config(runner) deleted = anydata.pop(0) self.assertEqual(deleted.__class__.__name__, "Runner") anydata = Config() anydata.append([runner, native]) deleted = anydata.pop('ydktest-sanity:native') self.assertEqual(len(anydata), 1) self.assertEqual(deleted.__class__.__name__, "Native") deleted = anydata.pop('ydktest-sanity:native') self.assertEqual(deleted, None) deleted = anydata.pop(runner) self.assertEqual(deleted.__class__.__name__, "Runner")
def get(self, provider, read_filter, operation='CONFIG'): if provider is None: raise _YServiceError("Service Provider cannot be None") if read_filter is None: raise _YServiceError("Get filter cannot be None") filters = read_filter if isinstance(read_filter, EntityCollection): filters = read_filter.entities() with _handle_error(): result = self._gs.get(provider, filters, operation) if isinstance(read_filter, EntityCollection): result = Config(result) return result
def read_config(self, provider, read_filter=None): if provider is None: raise YServiceError("provider cannot be None") if read_filter is None: with _handle_error(): return _read_entities(provider) filters = read_filter if isinstance(read_filter, EntityCollection): filters = read_filter.entities() with _handle_error(): read_entity = self._crud.read_config(provider, filters) if isinstance(read_filter, EntityCollection): read_entity = Config(read_entity) return read_entity
def get_config(self, provider, source=Datastore.running, read_filter=None): if None in (provider, source): raise _YServiceError("provider and source cannot be None") if read_filter is None: with _handle_error(): return _read_entities(provider, True, source) filters = read_filter if isinstance(read_filter, EntityCollection): filters = read_filter.entities() with _handle_error(): result = self._ns.get_config(provider, source, filters) if isinstance(read_filter, EntityCollection): result = Config(result) return result
def get(self, provider, read_filter=None): if provider is None: raise _YServiceError("provider cannot be None") if read_filter is None: with _handle_error(): return _read_entities(provider, get_config=False) filters = read_filter if isinstance(read_filter, EntityCollection): filters = read_filter.entities() with _handle_error(): result = self._ns.get(provider, filters) if isinstance(read_filter, EntityCollection): result = Config(result) return result
def test_crud_read_collection(self): crud = CRUDService() # Build configuration of multiple objects create_list = Config() native = ysanity.Native() native.hostname = 'NativeHost' native.version = '0.1.0' create_list.append(native) bgp = openconfig.Bgp() bgp.global_.config.as_ = 65001 bgp.global_.config.router_id = "1.2.3.4" create_list.append(bgp) create_list = Config([native, bgp]) # Configure device result = crud.create(self.ncc, create_list) self.assertEqual(result, True) # Read configuration read_filter = Filter([ysanity.Native(), openconfig.Bgp()]) read_config = crud.read(self.ncc, read_filter) self.assertEqual(isinstance(read_config, Config), True) self.assertEqual(len(read_config), 2) # Print configuration codec_service = CodecService() codec_provider = CodecServiceProvider() codec_provider.encoding = EncodingFormat.XML for entity in read_config: xml = codec_service.encode(codec_provider, entity) print('\n===== Printing entity: {}'.format(entity)) print(xml) # Delete configuration result = crud.delete(self.ncc, create_list) self.assertEqual(result, True)
def test_edit_get_config_collection(self): runner = ysanity.Runner() runner.two.number = 2 runner.two.name = 'runner-two-name' native = ysanity.Native() native.hostname = 'NewHostName' native.version = '0.1.0a' edit_config = Config([runner, native]) op = self.netconf_service.edit_config(self.ncc, Datastore.candidate, edit_config) self.assertEqual(True, op) get_filter = Filter([ysanity.Runner(), ysanity.Native()]) config = self.netconf_service.get_config(self.ncc, Datastore.candidate, get_filter) self.assertEqual(edit_config, config) op = self.netconf_service.discard_changes(self.ncc)
def get_config(self, provider, source=Datastore.running, read_filter=None): if None in (provider, source): raise _YServiceError("provider and source cannot be None") if read_filter is None: with _handle_error(): return _read_entities(provider, True, source) filters = read_filter if isinstance(read_filter, EntityCollection): filters = read_filter.entities() top_filters = _get_top_level_entity(filters, provider.get_session().get_root_schema()) with _handle_error(): top_result = self._ns.get_config(provider, source, top_filters) result = _get_child_entity_from_top(top_result, filters) if isinstance(read_filter, EntityCollection): result = Config(result) return result
def read_config(self, provider, read_filter=None): if provider is None: raise YServiceError("provider cannot be None") if read_filter is None: with _handle_error(): return _read_entities(provider) filters = read_filter if isinstance(read_filter, EntityCollection): filters = read_filter.entities() top_filters = _get_top_level_entity(filters, provider.get_session().get_root_schema()) with _handle_error(): read_top_entity = self._crud.read_config(provider, top_filters) read_entity = _get_child_entity_from_top(read_top_entity, filters) if isinstance(read_filter, EntityCollection): read_entity = Config(read_entity) return read_entity
def get(self, provider, read_filter=None): if provider is None: raise _YServiceError("provider cannot be None") if read_filter is None: with _handle_error(): return _read_entities(provider, get_config=False) filters = read_filter if isinstance(read_filter, EntityCollection): filters = read_filter.entities() top_filters = _get_top_level_entity(filters, provider.get_session().get_root_schema()) with _handle_error(): top_result = self._ns.get(provider, top_filters) result = _get_child_entity_from_top(top_result, filters) if isinstance(read_filter, EntityCollection): result = Config(result) return result
def test_gnmi_service_set_get_multiple(self): # Create interface and BGP configuration ifc = build_int_config() ifc.yfilter = YFilter.replace bgp = build_bgp_config() bgp.yfilter = YFilter.replace reply = self.gs.set(self.provider, Config(ifc, bgp)) # Get and print interface and BGP configuration ifc_filter = openconfig_interfaces.Interfaces() bgp_filter = openconfig_bgp.Bgp() response = self.gs.get(self.provider, Filter(ifc_filter, bgp_filter), "CONFIG") self.assertIsNotNone(response) self.assertEqual(response.__len__(), 2) #for entity in response: # print_entity(entity, self.schema) # Delete interface and BGP configuration ifc.yfilter = YFilter.delete bgp.yfilter = YFilter.delete reply = self.gs.set(self.provider, [ifc, bgp])
def _ns_get(provider, source, read_filter, ns_call): is_config = (source is not None) if read_filter is None: with _handle_error(): return _read_entities(provider, get_config=is_config) filters = read_filter if isinstance(read_filter, EntityCollection): filters = read_filter.entities() _set_nontop_entity_filter(filters, YFilter.read) top_filters = _get_top_level_entity(filters, provider.get_session().get_root_schema()) with _handle_error(): if is_config: top_result = ns_call(provider, source, top_filters) else: top_result = ns_call(provider, top_filters) result = _get_child_entity_from_top(top_result, filters) if isinstance(read_filter, EntityCollection): result = Config(result) return result
def get(self, provider, read_filter, operation='CONFIG'): if provider is None: raise _YServiceError("Service Provider cannot be None") if read_filter is None: raise _YServiceError("Get filter cannot be None") filters = read_filter if isinstance(read_filter, EntityCollection): filters = read_filter.entities() _set_nontop_entity_filter(filters, YFilter.read) top_filters = _get_top_level_entity( filters, provider.get_session().get_root_schema()) with _handle_error(): top_result = self._gs.get(provider, top_filters, operation) result = _get_child_entity_from_top(top_result, filters) if isinstance(read_filter, EntityCollection): result = Config(result) return result
def _crud_read(provider, read_filter, is_config, crud_call): if provider is None: raise YServiceError("provider cannot be None") if read_filter is None: with _handle_error(): return _read_entities(provider, get_config=is_config) filters = read_filter if isinstance(read_filter, EntityCollection): filters = read_filter.entities() _set_nontop_entity_filter(filters, YFilter.read) top_filters = _get_top_level_entity( filters, provider.get_session().get_root_schema()) with _handle_error(): read_top_entity = crud_call(provider, top_filters) read_entity = _get_child_entity_from_top(read_top_entity, filters) if isinstance(read_filter, EntityCollection): read_entity = Config(read_entity) return read_entity