From 87aa82267360ff96a0c84d0252ac254f1077f5db Mon Sep 17 00:00:00 2001
From: "th.l" <thl-cmk@outlook.com>
Date: Tue, 7 Sep 2021 22:04:36 +0200
Subject: [PATCH] update project

---
 agent_based/checkpoint_vsx_system.py         | 270 +++++++++++++++++++
 checkpoint_vsx_system.mkp                    | Bin 0 -> 4944 bytes
 packages/checkpoint_vsx_system               |  21 ++
 web/plugins/metrics/checkpoint_vsx_system.py | 135 ++++++++++
 web/plugins/wato/checkpoint_vsx_system.py    | 128 +++++++++
 5 files changed, 554 insertions(+)
 create mode 100644 agent_based/checkpoint_vsx_system.py
 create mode 100644 checkpoint_vsx_system.mkp
 create mode 100644 packages/checkpoint_vsx_system
 create mode 100644 web/plugins/metrics/checkpoint_vsx_system.py
 create mode 100644 web/plugins/wato/checkpoint_vsx_system.py

diff --git a/agent_based/checkpoint_vsx_system.py b/agent_based/checkpoint_vsx_system.py
new file mode 100644
index 0000000..d7281d4
--- /dev/null
+++ b/agent_based/checkpoint_vsx_system.py
@@ -0,0 +1,270 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+#
+# License: GNU General Public License v2
+#
+# Author: thl-cmk[at]outlook[dot]com
+# URL   : https://thl-cmk.hopto.org
+# Date  : 2017-17-05
+#
+# Check Point vsx Cluster status
+#
+# Monitor status of virtual systems in Check Point vsx/vsls cluster
+#
+# 2018-08-03: changed snmp scan function
+# 2018-08-13: code cleanup, add metrics
+# 2020-06-08: changed snmp-scan function
+# 2021-09-06: rewritten for CMK 2.0
+# 2021-09-07: added WATO for check and discovery function
+#             renamed from checkpoint_vsx to checkpoint_vsx_system
+#
+# snmpwalk sample
+#
+# .1.3.6.1.4.1.2620.1.16.22.1.1.1.3.0 = Gauge32: 2
+# .1.3.6.1.4.1.2620.1.16.22.1.1.2.3.0 = Gauge32: 2
+# .1.3.6.1.4.1.2620.1.16.22.1.1.3.3.0 = STRING: "HRI"
+# .1.3.6.1.4.1.2620.1.16.22.1.1.4.3.0 = STRING: "Virtual System"
+# .1.3.6.1.4.1.2620.1.16.22.1.1.5.3.0 = STRING: "10.140.1.3"
+# .1.3.6.1.4.1.2620.1.16.22.1.1.6.3.0 = STRING: "Standard"
+# .1.3.6.1.4.1.2620.1.16.22.1.1.7.3.0 = STRING: "Active"
+# .1.3.6.1.4.1.2620.1.16.22.1.1.8.3.0 = STRING: "Trust established"
+# .1.3.6.1.4.1.2620.1.16.22.1.1.9.3.0 = STRING: "Standby"
+# .1.3.6.1.4.1.2620.1.16.22.1.1.10.3.0 = Gauge32: 0
+#
+# .1.3.6.1.4.1.2620.1.16.23.1.1.2.3.0 = Gauge32: 40
+# .1.3.6.1.4.1.2620.1.16.23.1.1.3.3.0 = Gauge32: 864
+# .1.3.6.1.4.1.2620.1.16.23.1.1.4.3.0 = Gauge32: 14900
+# .1.3.6.1.4.1.2620.1.16.23.1.1.5.3.0 = STRING: "69459"
+# .1.3.6.1.4.1.2620.1.16.23.1.1.6.3.0 = STRING: "2405"
+# .1.3.6.1.4.1.2620.1.16.23.1.1.7.3.0 = STRING: "67054"
+# .1.3.6.1.4.1.2620.1.16.23.1.1.8.3.0 = STRING: "0"
+# .1.3.6.1.4.1.2620.1.16.23.1.1.9.3.0 = STRING: "4228862"
+# .1.3.6.1.4.1.2620.1.16.23.1.1.10.3.0 = STRING: "72445"
+# .1.3.6.1.4.1.2620.1.16.23.1.1.11.3.0 = STRING: "0"
+# .1.3.6.1.4.1.2620.1.16.23.1.1.12.3.0 = STRING: "7074"
+# .1.3.6.1.4.1.2620.1.16.23.1.1.13.3.0 = INTEGER: 0
+#
+import time
+from dataclasses import dataclass
+from typing import List, Dict, Optional, Tuple
+
+from cmk.base.plugins.agent_based.agent_based_api.v1 import (
+    register,
+    Service,
+    Result,
+    State,
+    SNMPTree,
+    all_of,
+    startswith,
+    any_of,
+    equals,
+    Metric,
+    get_value_store,
+    get_rate,
+    GetRateError,
+    check_levels,
+)
+from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import (
+    DiscoveryResult,
+    CheckResult,
+    StringTable,
+)
+
+
+@dataclass
+class CheckpointVsx:
+    vsxStatusVSId: str
+    vsxStatusVsType: str
+    vsxStatusMainIP: str
+    vsxStatusPolicyName: str
+    vsxStatusVsPolicyType: str
+    vsxStatusSicTrustState: str
+    vsxStatusHAState: str
+    vsxStatusVSWeight: str
+    vsxCountersConnNum: int
+    vsxCountersConnPeakNum: int
+    vsxCountersConnTableLimit: int
+    metrics_rate: List[Tuple[str, int]]
+
+
+def parse_checkpoint_vsx_system(string_table: StringTable) -> Optional[Dict[str, CheckpointVsx]]:
+    vsx_systems = {}
+    for entry in string_table:
+        try:
+            vsxStatusVSId, vsxStatusVsName, vsxStatusVsType, vsxStatusMainIP, vsxStatusPolicyName, \
+            vsxStatusVsPolicyType, vsxStatusSicTrustState, vsxStatusHAState, vsxStatusVSWeight, vsxCountersConnNum, \
+            vsxCountersConnPeakNum, vsxCountersConnTableLimit, vsxCountersPackets, vsxCountersDroppedTotal, \
+            vsxCountersAcceptedTotal, vsxCountersRejectedTotal, vsxCountersBytesAcceptedTotal, \
+            vsxCountersBytesDroppedTotal, vsxCountersBytesRejectedTotal, vsxCountersLoggedTotal = entry
+        except ValueError:
+            return
+        vsx_systems[vsxStatusVsName] = CheckpointVsx(
+            vsxStatusVSId=vsxStatusVSId,
+            vsxStatusVsType=vsxStatusVsType,
+            vsxStatusMainIP=vsxStatusMainIP,
+            vsxStatusPolicyName=vsxStatusPolicyName,
+            vsxStatusVsPolicyType=vsxStatusVsPolicyType,
+            vsxStatusSicTrustState=vsxStatusSicTrustState,
+            vsxStatusHAState=vsxStatusHAState,
+            vsxStatusVSWeight=vsxStatusVSWeight,
+            vsxCountersConnNum=int(vsxCountersConnNum),
+            vsxCountersConnPeakNum=int(vsxCountersConnPeakNum),
+            vsxCountersConnTableLimit=int(vsxCountersConnTableLimit),
+            metrics_rate=[
+                ('packets_processed', int(vsxCountersPackets)),
+                ('packets_dropped', int(vsxCountersDroppedTotal)),
+                ('packets_accepted', int(vsxCountersAcceptedTotal)),
+                ('packets_rejected', int(vsxCountersRejectedTotal)),
+                ('bytes_accepted', int(vsxCountersBytesAcceptedTotal)),
+                ('bytes_dropped', int(vsxCountersBytesDroppedTotal)),
+                ('bytes_rejected', int(vsxCountersBytesRejectedTotal)),
+                ('loggs_send', int(vsxCountersLoggedTotal)),
+            ],
+        )
+    return vsx_systems
+
+
+def discovery_checkpoint_vsx_system(params, section: Dict[str, CheckpointVsx]) -> DiscoveryResult:
+    for key in section.keys():
+        if section[key].vsxStatusVsType.lower() in params['vs_type']:
+            yield Service(
+                item=key,
+                parameters={'policyname': section[key].vsxStatusPolicyName, 'ha_state': section[key].vsxStatusHAState}
+            )
+
+
+def check_checkpoint_vsx_system(item, params, section: Dict[str, CheckpointVsx]) -> CheckResult:
+    try:
+        vsx = section[item]
+    except KeyError:
+        yield Result(state=State.UNKNOWN, notice='Item not found in SNMP data')
+        return
+
+    if not vsx.vsxStatusSicTrustState.lower() in ['trust established']:
+        yield Result(state=State(params['state_sic_not_established']), notice='SIC not established')
+
+    if vsx.vsxStatusVsType.lower() in ['virtual system', 'vsx gateway']:
+        yield Result(state=State.OK, notice=f'System name: {item}')
+        yield Result(state=State.OK, summary=f'Main IP: {vsx.vsxStatusMainIP}')
+        yield Result(state=State.OK, summary=f'VS ID: {vsx.vsxStatusVSId}', details='Virtual system ID:')
+        yield Result(state=State.OK, notice=f'System type: {vsx.vsxStatusVsType}')
+
+        if not vsx.vsxStatusHAState.lower() in ['active', 'standby']:
+            yield Result(state=State(params['state_ha_not_act_stb']), summary=f'H/A Status: {vsx.vsxStatusHAState}')
+        else:
+            yield Result(state=State.OK, summary=f'H/A Status: {vsx.vsxStatusHAState}')
+
+        if not vsx.vsxStatusVsPolicyType.lower() in ['active']:
+            yield Result(state=State(params['state_policy_not_installed']), notice='No policy installed')
+
+        if params['policyname'] != vsx.vsxStatusPolicyName:  # policy changed
+            yield Result(
+                state=State(params['state_policy_changed']),
+                notice=f'Policy name changed: expected {params["policyname"]}, found {vsx.vsxStatusPolicyName}'
+            )
+
+        if params['ha_state'] != vsx.vsxStatusHAState:  # H/A state changed
+            yield Result(
+                state=State(params['state_ha_changed']),
+                notice=f'State changed: expected/found {params["ha_state"]}/{vsx.vsxStatusHAState}'
+            )
+
+        yield Result(state=State.OK, notice=f'SIC status: {vsx.vsxStatusSicTrustState}')
+        yield Result(state=State.OK, notice=f'Weight: {vsx.vsxStatusVSWeight}')
+        yield Result(state=State.OK, notice=f'Policy name: {vsx.vsxStatusPolicyName}')
+        yield Result(state=State.OK, notice=f'Policy type: {vsx.vsxStatusVsPolicyType}')
+
+        # metrics rate
+        now_time = time.time()
+        value_store = get_value_store()
+        metrics_prefix = 'checkpoint_vsx_'
+
+        for key, value in vsx.metrics_rate:
+            try:
+                value = get_rate(value_store, f'{metrics_prefix}{key}', now_time, int(value), raise_overflow=True)
+            except GetRateError:
+                value = 0
+            yield Metric(name=f'checkpoint_vsx_{key}', value=value, boundaries=(0, None))
+
+        # metrics count
+        yield from check_levels(
+            value=vsx.vsxCountersConnNum,
+            metric_name=f'{metrics_prefix}connections',
+            levels_upper=params.get('levels_upper_absolute'),
+            levels_lower=params.get('levels_lower_absolute'),
+            label='Connections',
+            render_func=lambda v: f'{v:.0f}',
+            boundaries=(0, None),
+        )
+
+        yield Metric(value=vsx.vsxCountersConnPeakNum, name=f'{metrics_prefix}connections_peak')
+        if vsx.vsxCountersConnTableLimit > 0:
+            yield Metric(value=vsx.vsxCountersConnTableLimit, name=f'{metrics_prefix}connections_limit')
+    else:
+        yield Result(state=State.OK, notice=f'System name: {item}')
+        yield Result(state=State.OK, summary=f'Virtual system ID: {vsx.vsxStatusVSId}')
+        yield Result(state=State.OK, summary=f'System Type: {vsx.vsxStatusVsType}')
+        yield Result(state=State.OK, summary=f'SIC status: {vsx.vsxStatusSicTrustState}')
+
+
+register.snmp_section(
+    name='checkpoint_vsx_system',
+    parse_function=parse_checkpoint_vsx_system,
+    supersedes=[
+        'checkpoint_vsx',
+        'checkpoint_vsx_connections',
+        'checkpoint_vsx_traffic',
+        'checkpoint_vsx_packets',
+        'checkpoint_vsx_status',
+    ],
+    fetch=SNMPTree(
+        base='.1.3.6.1.4.1.2620.1.16',  # CHECKPOINT-MIB::vsx
+        oids=[
+            '22.1.1.1',   # vsxStatusVSId
+            '22.1.1.3',  # vsxStatusVsName
+            '22.1.1.4',  # vsxStatusVsType
+            '22.1.1.5',  # vsxStatusMainIP
+            '22.1.1.6',  # vsxStatusPolicyName
+            '22.1.1.7',  # vsxStatusVsPolicyType
+            '22.1.1.8',  # vsxStatusSicTrustState
+            '22.1.1.9',  # vsxStatusHAState
+            '22.1.1.10',  # vsxStatusVSWeight
+            '23.1.1.2',  # vsxCountersConnNum
+            '23.1.1.3',  # vsxCountersConnPeakNum
+            '23.1.1.4',  # vsxCountersConnTableLimit
+            '23.1.1.5',  # vsxCountersPackets
+            '23.1.1.6',  # vsxCountersDroppedTotal
+            '23.1.1.7',  # vsxCountersAcceptedTotal
+            '23.1.1.8',  # vsxCountersRejectedTotal
+            '23.1.1.9',  # vsxCountersBytesAcceptedTotal
+            '23.1.1.10',  # vsxCountersBytesDroppedTotal
+            '23.1.1.11',  # vsxCountersBytesRejectedTotal
+            '23.1.1.12',  # vsxCountersLoggedTotal
+        ]),
+    detect=any_of(
+        startswith('.1.3.6.1.2.1.1.2.0', '.1.3.6.1.4.1.2620'),
+        all_of(
+            equals('.1.3.6.1.2.1.1.2.0', '.1.3.6.1.4.1.8072.3.2.10'),
+            equals('.1.3.6.1.4.1.2620.1.6.1.0', 'SVN Foundation'),
+        )
+    )
+)
+
+register.check_plugin(
+    name='checkpoint_vsx_system',
+    service_name='VSX System %s',
+    discovery_function=discovery_checkpoint_vsx_system,
+    discovery_default_parameters={
+        'vs_type': ['virtual system', 'vsx gateway']
+    },
+    discovery_ruleset_name='discovery_checkpoint_vsx_system',
+    check_function=check_checkpoint_vsx_system,
+    check_default_parameters={
+        'state_sic_not_established': 2,
+        'state_ha_not_act_stb': 2,
+        'state_policy_not_installed': 2,
+        'state_policy_changed': 1,
+        'state_ha_changed': 1,
+    },
+    check_ruleset_name='checkpoint_vsx_system',
+)
diff --git a/checkpoint_vsx_system.mkp b/checkpoint_vsx_system.mkp
new file mode 100644
index 0000000000000000000000000000000000000000..3c075169a0fa0d03a55ecb9bac73eeecb311d558
GIT binary patch
literal 4944
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
YcKRQ4{r^#y|KHb|?^CLAhH!BH56>u{CjbBd

literal 0
HcmV?d00001

diff --git a/packages/checkpoint_vsx_system b/packages/checkpoint_vsx_system
new file mode 100644
index 0000000..3558a34
--- /dev/null
+++ b/packages/checkpoint_vsx_system
@@ -0,0 +1,21 @@
+{'author': 'Th.L. (thl-cmk[at]outlook[dot]com)',
+ 'description': 'Monitor status of virtual systems in Check Point vsx/vsls '
+                'cluster.\n'
+                '\n'
+                ' - creates one check for every virtual system. \n'
+                ' - check goes critical if virtual system status is not '
+                "'Active' or 'Standby'\n"
+                ' - longoutput gives details for each virtual system.\n'
+                ' - monitors VSX virtual system counters '
+                '(connections/packets/bytes/logs).\n',
+ 'download_url': 'https://thl-cmk.hopto.org',
+ 'files': {'agent_based': ['checkpoint_vsx_system.py'],
+           'web': ['plugins/metrics/checkpoint_vsx_system.py',
+                   'plugins/wato/checkpoint_vsx_system.py']},
+ 'name': 'checkpoint_vsx_system',
+ 'num_files': 3,
+ 'title': 'Check Point VSX system status and counter',
+ 'version': '20210907.v.0.3a',
+ 'version.min_required': '2.0.0',
+ 'version.packaged': '2021.07.14',
+ 'version.usable_until': None}
\ No newline at end of file
diff --git a/web/plugins/metrics/checkpoint_vsx_system.py b/web/plugins/metrics/checkpoint_vsx_system.py
new file mode 100644
index 0000000..1cc2923
--- /dev/null
+++ b/web/plugins/metrics/checkpoint_vsx_system.py
@@ -0,0 +1,135 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+#
+# License: GNU General Public License v2
+#
+# Author: thl-cmk[at]outlook[dot]com
+# URL   : https://thl-cmk.hopto.org
+# Date  : 2018-03-13
+#
+# Check Point VSX status metrics plugin
+# checkpoint_vsx
+#
+from cmk.gui.i18n import _
+
+from cmk.gui.plugins.metrics import (
+    metric_info,
+    graph_info,
+    perfometer_info,
+)
+
+metric_info['checkpoint_vsx_connections'] = {
+    'title': _('Connections active'),
+    'unit': 'count',
+    'color': '26/a',
+}
+metric_info['checkpoint_vsx_connections_peak'] = {
+    'title': _('Connections peak'),
+    'unit': 'count',
+    'color': '21/a',
+}
+metric_info['checkpoint_vsx_connections_limit'] = {
+    'title': _('Connections limit'),
+    'unit': 'count',
+    'color': '31/a',
+}
+
+metric_info['checkpoint_vsx_packets_processed'] = {
+    'title': _('Packets processed'),
+    'unit': '1/s',
+    'color': '12/a',
+}
+metric_info['checkpoint_vsx_packets_dropped'] = {
+    'title': _('Packets dropped'),
+    'unit': '1/s',
+    'color': '22/a',
+}
+metric_info['checkpoint_vsx_packets_accepted'] = {
+    'title': _('Packets accepted'),
+    'unit': '1/s',
+    'color': '32/a',
+}
+metric_info['checkpoint_vsx_packets_rejected'] = {
+    'title': _('Packets rejected'),
+    'unit': '1/s',
+    'color': '42/a',
+}
+
+metric_info['checkpoint_vsx_bytes_accepted'] = {
+    'title': _('Bytes accepted'),
+    'unit': 'bytes/s',
+    'color': '13/a',
+}
+metric_info['checkpoint_vsx_bytes_dropped'] = {
+    'title': _('Bytes dropped'),
+    'unit': 'bytes/s',
+    'color': '23/a',
+}
+metric_info['checkpoint_vsx_bytes_rejected'] = {
+    'title': _('Bytes rejected'),
+    'unit': 'bytes/s',
+    'color': '33/a',
+}
+
+metric_info['checkpoint_vsx_loggs_send'] = {
+    'title': _('Loggs send'),
+    'unit': '1/s',
+    'color': '14/a',
+}
+
+graph_info['checkpoint_vsx_connections'] = {
+    'title': _('Check Point VSX: Connections'),
+    'metrics': [
+        ('checkpoint_vsx_connections_limit', 'line'),
+        ('checkpoint_vsx_connections_peak', 'line'),
+        ('checkpoint_vsx_connections', 'area'),
+    ],
+    'scalars': [
+        ('checkpoint_vsx_connections:crit', _('crit')),
+        ('checkpoint_vsx_connections:warn', _('warn')),
+    ],
+    'optional_metrics': [
+        'checkpoint_vsx_connections_limit'
+    ],
+}
+
+graph_info['checkpoint_vsx_packets'] = {
+    'title': _('Check Point VSX: Packets'),
+    'metrics': [
+        ('checkpoint_vsx_packets_rejected', 'line'),
+        ('checkpoint_vsx_packets_dropped', 'line'),
+        ('checkpoint_vsx_packets_accepted', 'line'),
+        ('checkpoint_vsx_packets_processed', 'line'),
+    ]
+}
+
+graph_info['checkpoint_vsx_bytes'] = {
+    'title': _('Check Point VSX: Bytes'),
+    'metrics': [
+        ('checkpoint_vsx_bytes_rejected', 'line'),
+        ('checkpoint_vsx_bytes_dropped', 'line'),
+        ('checkpoint_vsx_bytes_accepted', 'line'),
+    ]
+}
+
+graph_info['checkpoint_vsx_logges_send'] = {
+    'title': _('Check Point VSX: Logs'),
+    'metrics': [
+        ('checkpoint_vsx_loggs_send', 'line'),
+    ]
+}
+
+perfometer_info.append(('stacked', [
+    {
+        'type': 'logarithmic',
+        'metric': 'checkpoint_vsx_connections',
+        'half_value': 50000.0,
+        'exponent': 2,
+    },
+    {
+        'type': 'logarithmic',
+        'metric': 'checkpoint_vsx_packets_processed',
+        'half_value': 50000.0,
+        'exponent': 2,
+    },
+]))
diff --git a/web/plugins/wato/checkpoint_vsx_system.py b/web/plugins/wato/checkpoint_vsx_system.py
new file mode 100644
index 0000000..b3625b8
--- /dev/null
+++ b/web/plugins/wato/checkpoint_vsx_system.py
@@ -0,0 +1,128 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+#
+# License: GNU General Public License v2
+#
+# Author: thl-cmk[at]outlook[dot]com
+# URL   : https://thl-cmk.hopto.org
+# Date  : 2021-09-07
+#
+from cmk.gui.i18n import _
+from cmk.gui.valuespec import (
+    Dictionary,
+    TextAscii,
+    Tuple,
+    Integer,
+    MonitoringState,
+    Transform,
+    ListChoice,
+)
+
+from cmk.gui.plugins.wato import (
+    CheckParameterRulespecWithItem,
+    rulespec_registry,
+    RulespecGroupCheckParametersNetworking,
+    RulespecGroupCheckParametersDiscovery,
+    HostRulespec,
+)
+
+
+def _parameter_valuespec_checkpoint_vsx_system():
+    return Transform(
+        Dictionary(
+            elements=[
+                ('levels_upper_absolute',
+                 Tuple(
+                     title=_('Maximum number of firewall connections'),
+                     help=_('This rule sets upper limits to the current number of connections through '
+                            'a Checkpoint firewall.'),
+                     elements=[
+                         Integer(title=_('Warning at'), minvalue=0, unit=_('connections')),
+                         Integer(title=_('Critical at'), minvalue=0, unit=_('connections')),
+                     ])),
+                ('levels_lower_absolute',
+                 Tuple(
+                     title=_('Minimum number of firewall connections'),
+                     help=_('This rule sets lower limits to the current number of connections through '
+                            'a Checkpoint firewall.'),
+                     elements=[
+                         Integer(title=_('Warning blow'), minvalue=0, unit=_('connections')),
+                         Integer(title=_('Critical below'), minvalue=0, unit=_('connections')),
+                     ])),
+                ('state_sic_not_established',
+                 MonitoringState(
+                     title=_('State if SIC is not established'),
+                     help=_('Monitoring state if SIC is not established'),
+                     default_value=2,
+                 )),
+                ('state_ha_not_act_stb',
+                 MonitoringState(
+                     title=_('State if H/A state not active/standby'),
+                     help=_('Monitoring state if H/A state not active or standby'),
+                     default_value=2,
+                 )),
+                ('state_policy_not_installed',
+                 MonitoringState(
+                     title=_('State if no policy is installed'),
+                     help=_('Monitoring state if no policy is installed'),
+                     default_value=2,
+                 )),
+                ('state_policy_changed',
+                 MonitoringState(
+                     title=_('State on policy name change'),
+                     help=_('Monitoring status on policy name change'),
+                     default_value=1,
+                 )),
+                ('state_ha_changed',
+                 MonitoringState(
+                     title=_('State on H/A state change'),
+                     help=_('Monitoring status on H/A state change'),
+                     default_value=1,
+                 )),
+            ],
+        ))
+
+
+rulespec_registry.register(
+    CheckParameterRulespecWithItem(
+        check_group_name='checkpoint_vsx_system',
+        group=RulespecGroupCheckParametersNetworking,
+        match_type='dict',
+        parameter_valuespec=_parameter_valuespec_checkpoint_vsx_system,
+        title=lambda: _('Check Point VSX system'),
+        item_spec=lambda: TextAscii(title=_('VSX System name'), ),
+    ))
+
+
+def _valuespec_discovery_checkpoint_vsx_system():
+    _vs_types = [
+        ('virtual system', 'Virtual system'),
+        ('vsx gateway', 'VSX gateway'),
+        ('virtual switch', 'Virtual switch'),
+        ('virtual router', 'Virtual router'),
+    ]
+    return Transform(
+        Dictionary(
+            title=_('Check Point VSX system'),
+            elements=[
+                ('vs_type',
+                 ListChoice(
+                     title=_('VS types to discover'),
+                     help=_('Virtual system types to discover'),
+                     choices=_vs_types,
+                     default_value=[
+                         'virtual system',
+                         'vsx gateway',
+                     ],
+                 )),
+            ],
+        ))
+
+
+rulespec_registry.register(
+    HostRulespec(
+        group=RulespecGroupCheckParametersDiscovery,
+        match_type='dict',
+        name='discovery_checkpoint_vsx_system',
+        valuespec=_valuespec_discovery_checkpoint_vsx_system,
+    ))
-- 
GitLab