Skip to content

Commit 77614a3

Browse files
Merge pull request #56 from chkp-shirango/master
V2.2.2
2 parents 4d009ff + 81b354a commit 77614a3

File tree

3 files changed

+69
-8
lines changed

3 files changed

+69
-8
lines changed

plugins/action/cp_mgmt_access_rules.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,13 @@ def run(self, tmp=None, task_vars=None):
3232
# check_fields_for_rule_action_module(module_args)
3333
rules_list = self._task.args['rules']
3434
position = 1
35+
below_rule_name = None
3536

3637
for rule in rules_list:
37-
rule, position = prepare_rule_params_for_execute_module(rule=rule, module_args=module_args,
38-
position=position)
38+
rule, position, below_rule_name = prepare_rule_params_for_execute_module(rule=rule, module_args=module_args,
39+
position=position,
40+
below_rule_name=below_rule_name)
41+
3942
result['rule: ' + rule['name']] = self._execute_module(module_name='check_point.mgmt.cp_mgmt_access_rule',
4043
module_args=rule,
4144
task_vars=task_vars, tmp=tmp, wrap_async=False)

plugins/module_utils/checkpoint.py

Lines changed: 46 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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
324335
def 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

556596
def check_if_to_publish_for_action(result, module_args):

plugins/modules/cp_mgmt_access_rule.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,20 @@
4343
description:
4444
- Position in the rulebase.
4545
type: str
46+
position_by_rule:
47+
description:
48+
- Position in the rulebase.
49+
- Use of this field may not be idempotent.
50+
type: dict
51+
suboptions:
52+
below:
53+
description:
54+
- Add rule below specific rule identified by uid or name (limited to 500 rules).
55+
type: str
56+
above:
57+
description:
58+
- Add rule above specific rule identified by uid or name (limited to 500 rules).
59+
type: str
4660
name:
4761
description:
4862
- Object name.
@@ -285,6 +299,10 @@ def main():
285299
argument_spec = dict(
286300
layer=dict(type='str'),
287301
position=dict(type='str'),
302+
position_by_rule=dict(type='dict', options=dict(
303+
below=dict(type='str'),
304+
above=dict(type='str')
305+
)),
288306
name=dict(type='str', required=True),
289307
action=dict(type='str'),
290308
action_settings=dict(type='dict', options=dict(

0 commit comments

Comments
 (0)