@@ -112,7 +112,7 @@ def get_payload_from_parameters(params):
112112 payload [parameter .replace ("_" , "-" )] = payload_list
113113 else :
114114 # special handle for this param in order to avoid two params called "version"
115- if parameter == "gateway_version" :
115+ if parameter == "gateway_version" or parameter == "cluster_version" :
116116 parameter = "version"
117117
118118 payload [parameter .replace ("_" , "-" )] = parameter_value
@@ -358,53 +358,37 @@ def api_call(module, api_call_object):
358358
359359
360360# get the position in integer format
361- def get_number_from_position (payload , connection , version ):
362- if 'position' in payload :
363- if type (payload ['position' ]) is not dict :
364- position = payload ['position' ]
365- else :
366- position = None
367- payload_for_show_access_rulebase = {'name' : payload ['layer' ]}
368- code , response = send_request (connection , version , 'show-access-rulebase' , payload_for_show_access_rulebase )
369- rulebase = response ['rulebase' ]
370- for rules in rulebase :
371- if 'rulebase' in rules :
372- rules = rules ['rulebase' ]
373- for rule in rules :
374- if 'below' in payload ['position' ].keys () and rule ['name' ] == payload ['position' ]['below' ]:
375- position = int (rule ['rule-number' ]) + 1
376- return position
377- elif 'above' in payload ['position' ].keys () and rule ['name' ] == payload ['position' ]['above' ]:
378- position = max (int (rule ['rule-number' ]) - 1 , 1 )
379- return position
380- elif 'below' in payload ['position' ].keys () and rules ['name' ] == payload ['position' ]['below' ]:
381- position = int (rules ['rule-number' ]) + 1
382- return position
383- elif 'above' in payload ['position' ].keys () and rules ['name' ] == payload ['position' ]['above' ]:
384- position = max (int (rules ['rule-number' ]) - 1 , 1 )
385- return position
386- return position
361+ def get_number_from_position (payload , connection , version , show_rulebase_command ):
362+ if type (payload ['position' ]) is not dict :
363+ position = payload ['position' ]
364+ if position == 'top' :
365+ position = 1
366+ elif position == 'bottom' :
367+ payload_for_show_obj_rulebase = {'name' : payload ['layer' ], 'limit' : 0 }
368+ code , response = send_request (connection , version , show_rulebase_command , payload_for_show_obj_rulebase )
369+ position = response ['total' ]
387370 else :
388- return None
389-
390- # This code relevant if we will decide to support 'top' and 'bottom' in position
391-
392- # position_number = None
393- # # if position is not int, convert it to int. There are several cases: "top"
394- # if position == 'top':
395- # position_number = 1
396- # elif position == 'bottom':
397- # payload_for_show_access_rulebase = {'name': payload['layer'], 'limit': 0}
398- # code, response = send_request(connection, version, 'show-access-rulebase', payload_for_show_access_rulebase)
399- # position_number = response['total']
400- # elif isinstance(position, str):
401- # # here position is a number in format str (e.g. "5" and not 5)
402- # position_number = int(position)
403- # else:
404- # # here position suppose to be int
405- # position_number = position
406- #
407- # return position_number
371+ position = None
372+ payload_for_show_access_rulebase = {'name' : payload ['layer' ]}
373+ code , response = send_request (connection , version , 'show-access-rulebase' , payload_for_show_access_rulebase )
374+ rulebase = response ['rulebase' ]
375+ for rules in rulebase :
376+ if 'rulebase' in rules :
377+ rules = rules ['rulebase' ]
378+ for rule in rules :
379+ if 'below' in payload ['position' ].keys () and rule ['name' ] == payload ['position' ]['below' ]:
380+ position = int (rule ['rule-number' ]) + 1
381+ return position
382+ elif 'above' in payload ['position' ].keys () and rule ['name' ] == payload ['position' ]['above' ]:
383+ position = max (int (rule ['rule-number' ]) - 1 , 1 )
384+ return position
385+ elif 'below' in payload ['position' ].keys () and rules ['name' ] == payload ['position' ]['below' ]:
386+ position = int (rules ['rule-number' ]) + 1
387+ return position
388+ elif 'above' in payload ['position' ].keys () and rules ['name' ] == payload ['position' ]['above' ]:
389+ position = max (int (rules ['rule-number' ]) - 1 , 1 )
390+ return position
391+ return position
408392
409393 return int (position )
410394
@@ -444,14 +428,28 @@ def extract_rule_from_rulebase_response(response):
444428 return rule
445429
446430
431+ def get_relevant_show_rulebase_command (api_call_object ):
432+ if api_call_object == 'access-rule' :
433+ return 'show-access-rulebase'
434+ elif api_call_object == "threat-rule" :
435+ return 'show-threat-rulebase'
436+ elif api_call_object == "threat-exception" :
437+ return 'show-threat-rule-exception-rulebase'
438+ #uncomment code below when https & nat modules are added as crud modules
439+ # elif api_call_object == 'nat-rule':
440+ # return 'show-nat-rulebase'
441+ # elif api_call_object == 'https-rule':
442+ # return 'show-https-rulebase'
443+
444+
447445# is the param position (if the user inserted it) equals between the object and the user input
448446def is_equals_with_position_param (payload , connection , version , api_call_object ):
449- position_number = get_number_from_position (payload , connection , version )
450-
451447 # if there is no position param, then it's equals in vacuous truth
452- if position_number is None :
448+ if 'position' not in payload :
453449 return True
454450
451+ position_number = payload ['position' ]
452+
455453 rulebase_payload = build_rulebase_payload (api_call_object , payload , position_number )
456454 rulebase_command = build_rulebase_command (api_call_object )
457455
@@ -530,6 +528,9 @@ def api_call_for_rule(module, api_call_object):
530528
531529 if module .params ['state' ] == 'present' :
532530 if equals_code == 200 :
531+ if 'position' in payload :
532+ payload ['position' ] = get_number_from_position (payload , connection , version ,
533+ get_relevant_show_rulebase_command (api_call_object ))
533534 if equals_response ['equals' ]:
534535 if not is_equals_with_all_params (payload , connection , version , api_call_object , is_access_rule ):
535536 equals_response ['equals' ] = False
0 commit comments