Skip to content

Commit 82c200f

Browse files
authored
Merge branch 'CheckPointSW:master' into loopback_interface
2 parents 5c45f3c + 72ad792 commit 82c200f

File tree

2 files changed

+80
-5
lines changed

2 files changed

+80
-5
lines changed

README.md

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,3 +153,40 @@ See [COPYING](https://www.gnu.org/licenses/gpl-3.0.txt) to see the full text.
153153
## Supported Python versions
154154

155155
- Modules and plugins require Python 2.7 or newer
156+
157+
158+
# Check Point Ansible Proxy Integration
159+
160+
## Overview
161+
162+
This feature integrating the Proxy API for Check Point Security Gateways through the Management Server. The Proxy API enables the Management Server to forward API requests to designated gateways, eliminating the need to address each gateway individually.
163+
164+
165+
![image](https://github.com/nilsujma-dev/Check-Point-Ansible-Proxy-Integration/assets/114651180/0a9dc69f-2a64-4511-bb95-01e28f0049af)
166+
167+
168+
169+
## Integration Process
170+
171+
### Step 1: Options Selected
172+
173+
1. **Source Code:**
174+
175+
The revised code introduces a significant enhancement – the 'target gateway' option. This addition allows the specification of a designated gateway to receive API requests, leveraging the Management Server's Proxy API feature. This modification expands the module's capabilities, aligning with advanced network management requirements and enabling more precise API interactions.
176+
177+
## How to Use
178+
179+
1. Edit the `hosts` so that it will contain a new section similar to this one:
180+
```
181+
[check_point_mgmt]
182+
mgmt_proxy enabled=True
183+
```
184+
2. in the playbook add this var under each task:
185+
```
186+
vars:
187+
ansible_checkpoint_target: <target_gatway>
188+
```
189+
3. in `hosts` change ansible_user and ansible_password to management credintials
190+
3. Follow the standard Ansible playbook execution process with the enhanced Check Point Ansible Collection.
191+
192+

plugins/httpapi/checkpoint.py

Lines changed: 43 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,14 @@
1313
description:
1414
- This HttpApi plugin provides methods to connect to Checkpoint
1515
devices over a HTTP(S)-based api.
16-
version_added: "1.0.0"
16+
version_added: "2.8.0"
1717
options:
18+
cptarget:
19+
type: str
20+
description:
21+
- target gateway
22+
vars:
23+
- name: ansible_checkpoint_target
1824
domain:
1925
type: str
2026
description:
@@ -30,6 +36,8 @@
3036
from ansible.module_utils.six.moves.urllib.error import HTTPError
3137
from ansible.plugins.httpapi import HttpApiBase
3238
from ansible.module_utils.connection import ConnectionError
39+
from ansible.parsing.dataloader import DataLoader
40+
from ansible.inventory.manager import InventoryManager
3341

3442
BASE_HEADERS = {
3543
'Content-Type': 'application/json',
@@ -38,29 +46,59 @@
3846

3947

4048
class HttpApi(HttpApiBase):
49+
def __init__(self, connection):
50+
super(HttpApi, self).__init__(connection)
51+
self.connection = connection
52+
self.mgmt_proxy_enabled = False
53+
54+
loader = DataLoader()
55+
# Initialize InventoryManager
56+
inventory = InventoryManager(loader=loader, sources=['/etc/ansible/hosts'])
57+
# Get host
58+
host = inventory.get_host('mgmt_proxy')
59+
# Get variable
60+
try:
61+
proxy_enabled = host.vars['enabled']
62+
if proxy_enabled == True:
63+
self.mgmt_proxy_enabled = True
64+
except Exception as e:
65+
pass
66+
67+
4168
def login(self, username, password):
69+
payload = {}
70+
url = '/gaia_api/login'
4271
if username and password:
4372
payload = {'user': username, 'password': password}
44-
url = '/gaia_api/login'
45-
response, response_data = self.send_request(url, payload)
4673
else:
4774
raise AnsibleConnectionFailure('Username and password are required for login')
75+
if self.mgmt_proxy_enabled == True:
76+
url = '/web_api/login'
77+
response, response_data = self.send_request(url, payload)
4878

4979
try:
5080
self.connection._auth = {'X-chkp-sid': response_data['sid']}
5181
except KeyError:
5282
raise ConnectionError(
53-
'Server returned response without token info during connection authentication: %s' % response)
83+
'Server returned response without token info during connection authentication: %s' % response_data)
5484

5585
def logout(self):
5686
url = '/gaia_api/logout'
57-
87+
if self.mgmt_proxy_enabled == True:
88+
url = '/web_api/logout'
5889
response, dummy = self.send_request(url, None)
5990

6091
def get_session_uid(self):
6192
return self.connection._session_uid
6293

6394
def send_request(self, path, body_params):
95+
# we only replace gaia_ip/ with web_api/gaia-api/ if target is set and path contains for gaia_ip/
96+
cp_api_target = self.get_option('cptarget')
97+
if 'gaia_api/' in path: # Avoid login/logut requests in case of web_api
98+
if self.mgmt_proxy_enabled == True:
99+
if cp_api_target != None:
100+
body_params['target'] = cp_api_target
101+
path = path.replace("gaia_api/", "web_api/gaia-api/")
64102
data = json.dumps(body_params) if body_params else '{}'
65103

66104
try:

0 commit comments

Comments
 (0)