Skip to content

Commit 6f4b5cd

Browse files
Merge pull request #48 from chkp-shirango/master
Adding a new module "access-rules"
2 parents 5ba3c6f + 51afbb0 commit 6f4b5cd

File tree

5 files changed

+464
-0
lines changed

5 files changed

+464
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ Modules
9191
* `cp_mgmt_access_role` – Manages access-role objects on Check Point over Web Services API
9292
* `cp_mgmt_access_role_facts` – Get access-role objects facts on Check Point over Web Services API
9393
* `cp_mgmt_access_rule` – Manages access-rule objects on Check Point over Web Services API
94+
* `cp_mgmt_access_rules` – Manages a list of access rules objects on Check Point over Web Services API
9495
* `cp_mgmt_access_rule_facts` – Get access-rule objects facts on Check Point over Web Services API
9596
* `cp_mgmt_address_range` – Manages address-range objects on Check Point over Web Services API
9697
* `cp_mgmt_address_range_facts` – Get address-range objects facts on Check Point over Web Services API
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
from __future__ import (absolute_import, division, print_function)
2+
3+
__metaclass__ = type
4+
5+
6+
from ansible.errors import AnsibleActionFail
7+
from ansible.plugins.action import ActionBase
8+
from ansible_collections.check_point.mgmt.plugins.module_utils.checkpoint import \
9+
prepare_rule_params_for_execute_module, check_if_to_publish_for_action
10+
11+
12+
class ActionModule(ActionBase):
13+
14+
def run(self, tmp=None, task_vars=None):
15+
16+
module = super(ActionModule, self).run(tmp, task_vars)
17+
18+
result = self._execute_module(module_name='check_point.mgmt.cp_mgmt_access_rules', module_args=self._task.args,
19+
task_vars=task_vars, tmp=tmp)
20+
21+
if 'msg' in result.keys():
22+
raise AnsibleActionFail(result['msg'])
23+
24+
module_args = self._task.args
25+
26+
fields = {'position', 'layer', 'auto_publish_session'}
27+
rules_list = module_args['rules']
28+
for rule in rules_list:
29+
for field in fields:
30+
if field in rule.keys():
31+
raise AnsibleActionFail('Unsupported parameter ' + field + ' for rule')
32+
# check_fields_for_rule_action_module(module_args)
33+
rules_list = self._task.args['rules']
34+
position = 1
35+
36+
for rule in rules_list:
37+
rule, position = prepare_rule_params_for_execute_module(rule=rule, module_args=module_args,
38+
position=position)
39+
result['rule: ' + rule['name']] = self._execute_module(module_name='check_point.mgmt.cp_mgmt_access_rule',
40+
module_args=rule,
41+
task_vars=task_vars, tmp=tmp, wrap_async=False)
42+
if 'changed' in result['rule: ' + rule['name']].keys() and \
43+
result['rule: ' + rule['name']]['changed'] is True:
44+
result['changed'] = True
45+
if 'failed' in result['rule: ' + rule['name']].keys() and result['rule: ' + rule['name']]['failed'] is True:
46+
temp = result['rule: ' + rule['name']].copy()
47+
result = {}
48+
result['rule: ' + rule['name']] = temp
49+
result['failed'] = True
50+
result['discard:'] = self._execute_module(module_name='check_point.mgmt.cp_mgmt_discard',
51+
module_args={}, task_vars=task_vars, tmp=tmp)
52+
break
53+
if check_if_to_publish_for_action(result, module_args):
54+
result['publish:'] = self._execute_module(module_name='check_point.mgmt.cp_mgmt_publish', module_args={},
55+
task_vars=task_vars, tmp=tmp)
56+
57+
return result
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# -*- coding: utf-8 -*-
2+
3+
# Copyright: (c) 2019, Or Soffer <[email protected]>
4+
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
5+
6+
from __future__ import (absolute_import, division, print_function)
7+
__metaclass__ = type
8+
9+
10+
class ModuleDocFragment(object):
11+
12+
# Standard files documentation fragment
13+
DOCUMENTATION = r'''
14+
options:
15+
auto_publish_session:
16+
description:
17+
- Publish the current session if changes have been performed
18+
after task completes.
19+
type: bool
20+
wait_for_task_timeout:
21+
description:
22+
- How many minutes to wait until throwing a timeout error.
23+
type: int
24+
default: 30
25+
version:
26+
description:
27+
- Version of checkpoint. If not given one, the latest version taken.
28+
type: str
29+
'''

plugins/module_utils/checkpoint.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,12 @@
3434

3535
from ansible.module_utils.connection import Connection
3636

37+
checkpoint_argument_spec_for_action_module = dict(
38+
auto_publish_session=dict(type='bool'),
39+
wait_for_task_timeout=dict(type='int', default=30),
40+
version=dict(type='str')
41+
)
42+
3743
checkpoint_argument_spec_for_objects = dict(
3844
auto_publish_session=dict(type='bool'),
3945
wait_for_task=dict(type='bool', default=True),
@@ -504,3 +510,21 @@ def install_policy(connection, policy_package, targets):
504510
'targets': targets}
505511

506512
connection.send_request('/web_api/install-policy', payload)
513+
514+
515+
def prepare_rule_params_for_execute_module(rule, module_args, position):
516+
rule['layer'] = module_args['layer']
517+
if 'details_level' in module_args.keys():
518+
rule['details_level'] = module_args['details_level']
519+
if 'state' not in rule.keys() or ('state' in rule.keys() and rule['state'] != 'absent'):
520+
rule['position'] = position
521+
position = position + 1
522+
523+
return rule, position
524+
525+
526+
def check_if_to_publish_for_action(result, module_args):
527+
to_publish = ('auto_publish_session' in module_args.keys() and module_args['auto_publish_session']) and \
528+
('changed' in result.keys() and result['changed'] is True) and ('failed' not in result.keys() or
529+
result['failed'] is False)
530+
return to_publish

0 commit comments

Comments
 (0)