def query_dn(self, dn, hierarchy=False, need_response=False): """ Finds an object using it's distinguished name. Args: dn (str): distinguished name of the object to be queried for. hierarchy(bool): True/False, get all objects in hierarchy if True need_response(bool): True/False, return the response xml node, instead of parsed objects Returns: managedobject or None by default\n managedobject list if hierarchy=True\n externalmethod object if need_response=True\n Example: obj = handle.lookup_by_dn("fabric/lan/net-100")\n obj = handle.lookup_by_dn("fabric/lan/net-100", hierarchy=True)\n obj = handle.lookup_by_dn("fabric/lan/net-100", need_response=True)\n obj = handle.lookup_by_dn("fabric/lan/net-100", hierarchy=True, need_response=True)\n """ from ucsbasetype import DnSet, Dn from ucsmethodfactory import config_resolve_dns if not dn: raise ValueError("Provide dn.") dn_set = DnSet() dn_obj = Dn() dn_obj.value = dn dn_set.child_add(dn_obj) elem = config_resolve_dns(cookie=self.cookie, in_dns=dn_set, in_hierarchical=hierarchy) response = self.post_elem(elem) if response.error_code != 0: raise UcsException(response.error_code, response.error_descr) if need_response: return response if hierarchy: out_mo_list = ucscoreutils.extract_molist_from_method_response( response, hierarchy) return out_mo_list mo = None if len(response.out_configs.child) > 0: mo = response.out_configs.child[0] return mo
def query_dns(self, *dns): """ Queries multiple obects from the server based of a comma separated list of their distinguised names. Args: dns (comma separated strings): distinguished names to be queried for Returns: Dictionary {dn1: object, dn2: object2} Example: obj = handle.lookup_by_dns("fabric/lan/net-100", "fabric/lan/net-101") """ from ucsbasetype import DnSet, Dn from ucsmethodfactory import config_resolve_dns if not dns: raise ValueError("Provide Comma Separated string of Dns") dn_list = [dn.strip() for dn in dns] dn_dict = {} for dn_ in dn_list: dn_dict[dn_] = None dn_set = DnSet() for dn_ in dn_dict: dn_obj = Dn() dn_obj.value = dn_ dn_set.child_add(dn_obj) elem = config_resolve_dns(cookie=self.cookie, in_dns=dn_set) response = self.post_elem(elem) if response.error_code != 0: raise UcsException(response.error_code, response.error_descr) for out_mo in response.out_configs.child: dn_dict[out_mo.dn] = out_mo return dn_dict
def commit(self): """ Commit the buffer to the server. Pushes all the configuration changes so far to the server. Configuration could be added to the commit buffer using add_mo(), set_mo(), remove_mo() prior to making a handle.commit() Args: None Returns: None Example: handle.commit()\n """ from ucsbasetype import ConfigMap, Dn, DnSet, Pair from ucsmethodfactory import config_resolve_dns from ucsmethodfactory import config_conf_mos refresh_dict = {} mo_dict = self.__to_commit if not mo_dict: log.debug("No Mo to be Committed") return None config_map = ConfigMap() for mo_dn in mo_dict: mo = mo_dict[mo_dn] child_list = mo.child while len(child_list) > 0: current_child_list = child_list child_list = [] for child_mo in current_child_list: if child_mo.is_dirty(): refresh_dict[child_mo.dn] = child_mo child_list.extend(child_mo.child) pair = Pair() pair.key = mo_dn pair.child_add(mo_dict[mo_dn]) config_map.child_add(pair) elem = config_conf_mos(self.cookie, config_map, False) response = self.post_elem(elem) if response.error_code != 0: raise UcsException(response.error_code, response.error_descr) for pair_ in response.out_configs.child: for out_mo in pair_.child: out_mo.sync_mo(mo_dict[out_mo.dn]) if refresh_dict: dn_set = DnSet() for dn_ in refresh_dict: dn_obj = Dn() dn_obj.value = dn_ dn_set.child_add(dn_obj) elem = config_resolve_dns(cookie=self.cookie, in_dns=dn_set) response = self.post_elem(elem) if response.error_code != 0: raise UcsException(response.error_code, response.error_descr) for out_mo in response.out_configs.child: out_mo.sync_mo(refresh_dict[out_mo.dn]) self.__to_commit = {}