@@ -103,6 +103,17 @@ def get_payload_from_parameters(params):
103103 parameter = "version"
104104
105105 payload [parameter .replace ("_" , "-" )] = parameter_value
106+
107+ # action module "access_rules" - convert position_by_rule to position
108+ if parameter == "position_by_rule" :
109+ if 'below' in params ['position_by_rule' ].keys () and params ['position_by_rule' ]['below' ]:
110+ position = {'position' : {'below' : params ['position_by_rule' ]['below' ]}}
111+ payload .update (position )
112+ elif 'above' in params ['position_by_rule' ].keys () and params ['position_by_rule' ]['above' ]:
113+ position = {'position' : {'above' : params ['position_by_rule' ]['above' ]}}
114+ payload .update (position )
115+ del payload ['position-by-rule' ]
116+
106117 return payload
107118
108119
@@ -323,7 +334,30 @@ def api_call(module, api_call_object):
323334# get the position in integer format
324335def get_number_from_position (payload , connection , version ):
325336 if 'position' in payload :
326- position = payload ['position' ]
337+ if type (payload ['position' ]) is not dict :
338+ position = payload ['position' ]
339+ else :
340+ position = None
341+ payload_for_show_access_rulebase = {'name' : payload ['layer' ]}
342+ code , response = send_request (connection , version , 'show-access-rulebase' , payload_for_show_access_rulebase )
343+ rulebase = response ['rulebase' ]
344+ for rules in rulebase :
345+ if 'rulebase' in rules :
346+ rules = rules ['rulebase' ]
347+ for rule in rules :
348+ if 'below' in payload ['position' ].keys () and rule ['name' ] == payload ['position' ]['below' ]:
349+ position = int (rule ['rule-number' ]) + 1
350+ return position
351+ elif 'above' in payload ['position' ].keys () and rule ['name' ] == payload ['position' ]['above' ]:
352+ position = max (int (rule ['rule-number' ]) - 1 , 1 )
353+ return position
354+ elif 'below' in payload ['position' ].keys () and rules ['name' ] == payload ['position' ]['below' ]:
355+ position = int (rules ['rule-number' ]) + 1
356+ return position
357+ elif 'above' in payload ['position' ].keys () and rules ['name' ] == payload ['position' ]['above' ]:
358+ position = max (int (rules ['rule-number' ]) - 1 , 1 )
359+ return position
360+ return position
327361 else :
328362 return None
329363
@@ -428,8 +462,9 @@ def is_equals_with_all_params(payload, connection, version, api_call_object, is_
428462 payload_for_show = extract_payload_with_some_params (payload , ['name' , 'uid' , 'layer' ])
429463 code , response = send_request (connection , version , 'show-' + api_call_object , payload_for_show )
430464 exist_action = response ['action' ]['name' ]
431- if exist_action != payload ['action' ]:
432- if payload ['action' ] != 'Apply Layer' or exist_action != 'Inner Layer' :
465+ if exist_action .lower () != payload ['action' ].lower ():
466+ if payload ['action' ].lower () != 'Apply Layer' .lower () or \
467+ exist_action .lower () != 'Inner Layer' .lower ():
433468 return False
434469
435470 # here the action is equals, so check the position param
@@ -542,15 +577,20 @@ def install_policy(connection, policy_package, targets):
542577 connection .send_request ('/web_api/install-policy' , payload )
543578
544579
545- def prepare_rule_params_for_execute_module (rule , module_args , position ):
580+ def prepare_rule_params_for_execute_module (rule , module_args , position , below_rule_name ):
546581 rule ['layer' ] = module_args ['layer' ]
547582 if 'details_level' in module_args .keys ():
548583 rule ['details_level' ] = module_args ['details_level' ]
549584 if 'state' not in rule .keys () or ('state' in rule .keys () and rule ['state' ] != 'absent' ):
550- rule ['position' ] = position
585+ if below_rule_name :
586+ position_by_rule = {'position_by_rule' : {'below' : below_rule_name }}
587+ rule .update (position_by_rule )
588+ else :
589+ rule ['position' ] = position
551590 position = position + 1
591+ below_rule_name = rule ['name' ]
552592
553- return rule , position
593+ return rule , position , below_rule_name
554594
555595
556596def check_if_to_publish_for_action (result , module_args ):
0 commit comments