def check_declarative_intent_params(self): failed_conditions = [] self._data_rate_meta.update([ ('interfaces', { 'xpath': 'infra-statistics/interfaces', 'tag': True }), ('interface', { 'xpath': 'infra-statistics/interfaces/interface', 'tag': True }), ('a:name', { 'xpath': 'infra-statistics/interfaces/interface/interface-name' }), ('cache', { 'xpath': 'infra-statistics/interfaces/interface/cache', 'tag': True }), ('data-rate', { 'xpath': 'infra-statistics/interfaces/interface/cache/data-rate', 'tag': True }), ('input-data-rate', { 'xpath': 'infra-statistics/interfaces/interface/cache/data-rate/input-data-rate', 'tag': True }), ('output-data-rate', { 'xpath': 'infra-statistics/interfaces/interface/cache/data-rate/output-data-rate', 'tag': True }), ]) self._line_state_meta.update([ ('data-nodes', { 'xpath': 'interface-properties/data-nodes', 'tag': True }), ('data-node', { 'xpath': 'interface-properties/data-nodes/data-node', 'tag': True }), ('system-view', { 'xpath': 'interface-properties/data-nodes/data-node/system-view', 'tag': True }), ('interfaces', { 'xpath': 'interface-properties/data-nodes/data-node/system-view/interfaces', 'tag': True }), ('interface', { 'xpath': 'interface-properties/data-nodes/data-node/system-view/interfaces/interface', 'tag': True }), ('a:name', { 'xpath': 'interface-properties/data-nodes/data-node/system-view/interfaces/interface/interface-name' }), ('line-state', { 'xpath': 'interface-properties/data-nodes/data-node/system-view/interfaces/interface/line-state', 'tag': True }), ]) _rate_filter = build_xml('infra-statistics', xmap=self._data_rate_meta, params=self._want, opcode="filter") out = get_oper(self._module, filter=_rate_filter) data_rate_list = etree_findall(out, 'interface') data_rate_map = dict() for item in data_rate_list: data_rate_map.update( {etree_find(item, 'interface-name').text: dict()}) data_rate_map[etree_find(item, 'interface-name').text].update({ 'input-data-rate': etree_find(item, 'input-data-rate').text, 'output-data-rate': etree_find(item, 'output-data-rate').text }) _line_state_filter = build_xml('interface-properties', xmap=self._line_state_meta, params=self._want, opcode="filter") out = get_oper(self._module, filter=_line_state_filter) line_state_list = etree_findall(out, 'interface') line_state_map = dict() for item in line_state_list: line_state_map.update({ etree_find(item, 'interface-name').text: etree_find(item, 'line-state').text }) for want_item in self._want: want_state = want_item.get('state') want_tx_rate = want_item.get('tx_rate') want_rx_rate = want_item.get('rx_rate') if want_state not in ( 'up', 'down') and not want_tx_rate and not want_rx_rate: continue if self._result['changed']: sleep(want_item['delay']) if want_state in ('up', 'down'): if want_state not in line_state_map[want_item['name']]: failed_conditions.append('state ' + 'eq({!s})'.format(want_state)) if want_tx_rate: if want_tx_rate != data_rate_map[ want_item['name']]['output-data-rate']: failed_conditions.append('tx_rate ' + want_tx_rate) if want_rx_rate: if want_rx_rate != data_rate_map[ want_item['name']]['input-data-rate']: failed_conditions.append('rx_rate ' + want_rx_rate) if failed_conditions: msg = 'One or more conditional statements have not been satisfied' self._module.fail_json(msg=msg, failed_conditions=failed_conditions)
def check_declarative_intent_params(self): failed_conditions = [] self._data_rate_meta.update([ ('interfaces', {'xpath': 'infra-statistics/interfaces', 'tag': True}), ('interface', {'xpath': 'infra-statistics/interfaces/interface', 'tag': True}), ('a:name', {'xpath': 'infra-statistics/interfaces/interface/interface-name'}), ('cache', {'xpath': 'infra-statistics/interfaces/interface/cache', 'tag': True}), ('data-rate', {'xpath': 'infra-statistics/interfaces/interface/cache/data-rate', 'tag': True}), ('input-data-rate', {'xpath': 'infra-statistics/interfaces/interface/cache/data-rate/input-data-rate', 'tag': True}), ('output-data-rate', {'xpath': 'infra-statistics/interfaces/interface/cache/data-rate/output-data-rate', 'tag': True}), ]) self._line_state_meta.update([ ('data-nodes', {'xpath': 'interface-properties/data-nodes', 'tag': True}), ('data-node', {'xpath': 'interface-properties/data-nodes/data-node', 'tag': True}), ('system-view', {'xpath': 'interface-properties/data-nodes/data-node/system-view', 'tag': True}), ('interfaces', {'xpath': 'interface-properties/data-nodes/data-node/system-view/interfaces', 'tag': True}), ('interface', {'xpath': 'interface-properties/data-nodes/data-node/system-view/interfaces/interface', 'tag': True}), ('a:name', {'xpath': 'interface-properties/data-nodes/data-node/system-view/interfaces/interface/interface-name'}), ('line-state', {'xpath': 'interface-properties/data-nodes/data-node/system-view/interfaces/interface/line-state', 'tag': True}), ]) _rate_filter = build_xml('infra-statistics', xmap=self._data_rate_meta, params=self._want, opcode="filter") out = get_oper(self._module, filter=_rate_filter) data_rate_list = etree_findall(out, 'interface') data_rate_map = dict() for item in data_rate_list: data_rate_map.update({etree_find(item, 'interface-name').text: dict()}) data_rate_map[etree_find(item, 'interface-name').text].update({'input-data-rate': etree_find(item, 'input-data-rate').text, 'output-data-rate': etree_find(item, 'output-data-rate').text}) _line_state_filter = build_xml('interface-properties', xmap=self._line_state_meta, params=self._want, opcode="filter") out = get_oper(self._module, filter=_line_state_filter) line_state_list = etree_findall(out, 'interface') line_state_map = dict() for item in line_state_list: line_state_map.update({etree_find(item, 'interface-name').text: etree_find(item, 'line-state').text}) for want_item in self._want: want_state = want_item.get('state') want_tx_rate = want_item.get('tx_rate') want_rx_rate = want_item.get('rx_rate') if want_state not in ('up', 'down') and not want_tx_rate and not want_rx_rate: continue if self._result['changed']: sleep(want_item['delay']) if want_state in ('up', 'down'): if want_state not in line_state_map[want_item['name']]: failed_conditions.append('state ' + 'eq({!s})'.format(want_state)) if want_tx_rate: if want_tx_rate != data_rate_map[want_item['name']]['output-data-rate']: failed_conditions.append('tx_rate ' + want_tx_rate) if want_rx_rate: if want_rx_rate != data_rate_map[want_item['name']]['input-data-rate']: failed_conditions.append('rx_rate ' + want_rx_rate) if failed_conditions: msg = 'One or more conditional statements have not been satisfied' self._module.fail_json(msg=msg, failed_conditions=failed_conditions)