From 1485e9193321108142f6d5c8b3ccc993c4094a7b Mon Sep 17 00:00:00 2001 From: Jaykumar Chhatbar <45447272+JchhatbarInfoblox@users.noreply.github.com> Date: Thu, 29 Aug 2024 16:00:55 +0530 Subject: [PATCH] - [NPA-125] unable to configure dhcp options with combination of 'num' and 'name' field. (#250) --- plugins/module_utils/api.py | 26 ++++---------------------- 1 file changed, 4 insertions(+), 22 deletions(-) diff --git a/plugins/module_utils/api.py b/plugins/module_utils/api.py index ef9e15b2..a204136b 100644 --- a/plugins/module_utils/api.py +++ b/plugins/module_utils/api.py @@ -388,32 +388,14 @@ def run(self, ib_obj_type, ib_spec): # Iterate over each option and remove the 'num' key if current_object.get('options') or proposed_object.get('options'): - num_present, name_present = False, False if proposed_object.get('options'): - # get options from proposed_object and check if it should not have mix of 'name' and 'num' - for option in proposed_object['options']: - if 'num' in option: - num_present = True - elif 'name' in option: - name_present = True - if num_present and name_present: - raise Exception("options should not have mix of 'name' and 'num'") - - proposed_object['options'] = sorted(proposed_object['options'], key=lambda x: x['value']) + # remove use_options false from proposed_object + proposed_object['options'] = [option for option in proposed_object['options'] if option.get('use_option', True)] if current_object.get('options'): - for option in current_object['options']: - if num_present: - option.pop('name', None) - else: - option.pop('num', None) - # remove use_options false from current_object current_object['options'] = [option for option in current_object['options'] if option.get('use_option', True)] - # Assuming 'current_object' is the dictionary containing the 'options' list - current_object['options'] = sorted(current_object['options'], key=lambda x: x['value']) - if (ib_obj_type == NIOS_RANGE): if proposed_object.get('new_start_addr'): proposed_object['start_addr'] = proposed_object.get('new_start_addr') @@ -677,7 +659,7 @@ def compare_objects(self, current_object, proposed_object): # If the lists are of a different length the objects can not be # equal and False will be returned before comparing the lists items # this code part will work for members assignment - if key == 'members' and (len(proposed_item) != len(current_item)): + if key in ['members', 'options'] and (len(proposed_item) != len(current_item)): return False for subitem in proposed_item: @@ -686,7 +668,7 @@ def compare_objects(self, current_object, proposed_object): # If the lists are of a different length the objects and order of element mismatch # Ignore DHCP options while comparing due to extra num param is get response - if proposed_item != current_item: + if key == 'logic_filter_rules' and proposed_item != current_item: return False elif isinstance(proposed_item, dict):