Skip to content

Commit 4cb218f

Browse files
authored
bug fixes and param support (#78)
* Update version parameter name in simple-cluster * Remove uid param from publish module * Support 'top' and 'bottom' in position param * Add state param
1 parent afb9d2c commit 4cb218f

File tree

7 files changed

+70
-64
lines changed

7 files changed

+70
-64
lines changed

plugins/module_utils/checkpoint.py

Lines changed: 51 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -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
448446
def 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

plugins/modules/cp_mgmt_access_rule.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
type: str
4242
position:
4343
description:
44-
- Position in the rulebase.
44+
- Position in the rulebase. The use of values "top" and "bottom" may not be idempotent.
4545
type: str
4646
position_by_rule:
4747
description:

plugins/modules/cp_mgmt_access_rules.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,14 @@
251251
description:
252252
- Apply changes ignoring errors. You won't be able to publish such a changes. If ignore-warnings flag was omitted - warnings will also be ignored.
253253
type: bool
254+
state:
255+
description:
256+
- State of the access rule (present or absent). Defaults to present.
257+
type: str
258+
default: present
259+
choices:
260+
- 'present'
261+
- 'absent'
254262
details_level:
255263
description:
256264
- The level of detail for some of the fields in the response can vary from showing only the UID value of the object to a fully detailed
@@ -345,7 +353,9 @@ def main():
345353
comments=dict(type='str'),
346354
details_level=dict(type='str', choices=['uid', 'standard', 'full']),
347355
ignore_warnings=dict(type='bool'),
348-
ignore_errors=dict(type='bool')
356+
ignore_errors=dict(type='bool'),
357+
state=dict(type='str', choices=['present', 'absent'], default='present')
358+
349359
)),
350360
layer=dict(type='str', required=True),
351361
details_level=dict(type='str', choices=['uid', 'standard', 'full'])
@@ -360,4 +370,4 @@ def main():
360370

361371

362372
if __name__ == '__main__':
363-
main()
373+
main()

plugins/modules/cp_mgmt_publish.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,7 @@
3434
- All operations are performed over Web Services API.
3535
version_added: "1.0.0"
3636
author: "Or Soffer (@chkp-orso)"
37-
options:
38-
uid:
39-
description:
40-
- Session unique identifier. Specify it to publish a different session than the one you currently use.
41-
type: str
37+
options: {}
4238
extends_documentation_fragment: check_point.mgmt.checkpoint_commands
4339
"""
4440

@@ -60,7 +56,6 @@
6056

6157
def main():
6258
argument_spec = dict(
63-
uid=dict(type='str')
6459
)
6560
argument_spec.update(checkpoint_argument_spec_for_commands)
6661

plugins/modules/cp_mgmt_simple_cluster.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -660,7 +660,7 @@
660660
description:
661661
- Controls portal access settings for interfaces that are part of a VPN Encryption Domain.
662662
type: bool
663-
version:
663+
cluster_version:
664664
description:
665665
- Cluster platform version.
666666
type: str
@@ -1002,7 +1002,7 @@
10021002
name: cluster1
10031003
os_name: Gaia
10041004
state: present
1005-
version: R80.30
1005+
cluster_version: R80.30
10061006
10071007
- name: set-simple-cluster
10081008
cp_mgmt_simple_cluster:
@@ -1200,7 +1200,7 @@ def main():
12001200
))
12011201
))
12021202
)),
1203-
version=dict(type='str'),
1203+
cluster_version=dict(type='str'),
12041204
vpn=dict(type='bool'),
12051205
vpn_settings=dict(type='dict', options=dict(
12061206
authentication=dict(type='dict', options=dict(

plugins/modules/cp_mgmt_threat_exception.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
required: True
4343
position:
4444
description:
45-
- Position in the rulebase.
45+
- Position in the rulebase. The use of values "top" and "bottom" may not be idempotent.
4646
type: str
4747
exception_group_uid:
4848
description:

plugins/modules/cp_mgmt_threat_rule.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
options:
3838
position:
3939
description:
40-
- Position in the rulebase.
40+
- Position in the rulebase. The use of values "top" and "bottom" may not be idempotent.
4141
type: str
4242
layer:
4343
description:

0 commit comments

Comments
 (0)