@@ -103,6 +103,17 @@ def get_payload_from_parameters(params):
103
103
parameter = "version"
104
104
105
105
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
+
106
117
return payload
107
118
108
119
@@ -323,7 +334,30 @@ def api_call(module, api_call_object):
323
334
# get the position in integer format
324
335
def get_number_from_position (payload , connection , version ):
325
336
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
327
361
else :
328
362
return None
329
363
@@ -428,8 +462,9 @@ def is_equals_with_all_params(payload, connection, version, api_call_object, is_
428
462
payload_for_show = extract_payload_with_some_params (payload , ['name' , 'uid' , 'layer' ])
429
463
code , response = send_request (connection , version , 'show-' + api_call_object , payload_for_show )
430
464
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 ():
433
468
return False
434
469
435
470
# here the action is equals, so check the position param
@@ -542,15 +577,20 @@ def install_policy(connection, policy_package, targets):
542
577
connection .send_request ('/web_api/install-policy' , payload )
543
578
544
579
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 ):
546
581
rule ['layer' ] = module_args ['layer' ]
547
582
if 'details_level' in module_args .keys ():
548
583
rule ['details_level' ] = module_args ['details_level' ]
549
584
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
551
590
position = position + 1
591
+ below_rule_name = rule ['name' ]
552
592
553
- return rule , position
593
+ return rule , position , below_rule_name
554
594
555
595
556
596
def check_if_to_publish_for_action (result , module_args ):
0 commit comments