From 8e653580a16a1115adb18824b93b3a65297ae96b Mon Sep 17 00:00:00 2001 From: "Th.L" <thl-cmk@outlook.com> Date: Thu, 18 Mar 2021 10:12:58 +0100 Subject: [PATCH] update project --- agent_based/inv_checkpoint_updates.py | 156 ++++++++++++++++++++ inv_checkpoint_updates.mkp | Bin 52 -> 2696 bytes packages/inv_checkpoint_updates | 4 +- web/plugins/views/inv_checkpoint_updates.py | 32 ++++ 4 files changed, 190 insertions(+), 2 deletions(-) create mode 100644 agent_based/inv_checkpoint_updates.py create mode 100644 web/plugins/views/inv_checkpoint_updates.py diff --git a/agent_based/inv_checkpoint_updates.py b/agent_based/inv_checkpoint_updates.py new file mode 100644 index 0000000..2774caa --- /dev/null +++ b/agent_based/inv_checkpoint_updates.py @@ -0,0 +1,156 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# +# Author: thl-cmk[at]outlook[dot]com / thl-cmk.hopto.org +# +# Check Point updates inventory +# +# 2016-06-29 : inventory Check Point Appliance +# 2018-03-05 : added Patches, Deployment Agent Build +# 2018-03-07 : added Licenses +# 2020-06-01 : cleanup, prepared for cmk1.7x, rename from inv_checkpoint_svn to checkpoint_inv_base +# 2020-11-27 : rewrite for CMK check API 1.0 (CMK 2.0) +# 2020-11-28 : added available updates +# 2021-02-08 : transfered license/support info to seperate plugin +# +# sample string_table +# [ +# [ +# ['Check_Point_SmartConsole_R80_40_jumbo_HF_B411_Win.tgz', 'HFA', 'Installed'], +# ['Check_Point_R80_40_JUMBO_HF_Bundle_T78_sk165456_FULL.tgz', 'Wrapper', 'Installed'], +# ['Check_Point_CPinfo_Bundle_R80_40_T53.tgz', 'HFA', 'Installed'] +# ], +# [ +# ['Check_Point_SmartConsole_R80_40_jumbo_HF_B411_Win.tgz', 'R80.40 SmartConsole Build 411', 'capability', 'Installed', '2020-09-30T00:00:00Z', 'Recommended', '2020-10-12T15:19:51Z'], +# ['Check_Point_R80_40_JUMBO_HF_Bundle_T78_sk165456_FULL.tgz', 'R80.40 Jumbo Hotfix Accumulator General Availability (Take 78)', 'jumbo', 'Installed', '2020-08-24T00:00:00Z', 'Recommended', '2020-10-12T15:36:58Z'], +# ['Check_Point_CPinfo_Bundle_R80_40_T53.tgz', 'Check Point CPinfo build 202 for R80.40', 'capability', 'Installed', '2020-01-26T00:00:00Z', 'Recommended', '2020-10-12T15:19:16Z'], +# ['Check_Point_SmartConsole_R80_40_jumbo_HF_B410_Win.tgz', 'Check Point SmartConsole R80.40 Jumbo Hotfix B410', 'capability', 'Available for Install', '2020-08-24T00:00:00Z', 'Not Recommended', '2020-09-08T16:33:07Z'], +# ['Check_Point_R80_40_JUMBO_HF_Bundle_T77_sk165456_FULL.tgz', 'Check_Point_R80_40_JUMBO_HF_Bundle_T77_sk165456_FULL.tgz', 'jumbo', 'Installed as part of', '1970-01-01T00:00:00Z', 'Not Recommended', '2020-09-07T19:06:50Z'], +# ['Check_Point_R81_T392_Fresh_Install_and_Upgrade.tgz', 'R81 Gaia Fresh Install and upgrade', 'major', 'Available for Download', '2020-10-22T00:00:00Z', 'Not Recommended', '1970-01-01T00:00:00Z'], +# ['Blink_image_1.1_Check_Point_R81_T392_SecurityManagement.tgz', '<b>[Latest] R81 Security Management for appliances </b>', 'major', 'Available for Download', '2020-10-22T00:00:00Z', 'Not Recommended', '1970-01-01T00:00:00Z'], +# ['Blink_image_1.1_Check_Point_R80.40_T294_JHF_T78_SecurityManagement.tgz', '<b>[Latest] R80.40 Security Management + JHF T78 for Appliances and Open Servers</b>', 'major', 'Available for Download', '2020-08-24T00:00:00Z', 'Not Recommended', '1970-01-01T00:00:00Z'], +# ['Check_Point_R80.40_T294_Fresh_Install_and_Upgrade.tgz', 'Check Point R80.40 Gaia Fresh Install and upgrade', 'major', 'Available for Download', '2020-01-27T00:00:00Z', 'Not Recommended', '1970-01-01T00:00:00Z'] +# ], +# ] +# + +from typing import List, NamedTuple + +from .agent_based_api.v1.type_defs import ( + StringTable, + InventoryResult, +) +from .agent_based_api.v1 import ( + register, + SNMPTree, + TableRow, + startswith, + all_of, + any_of, + equals, +) + + +class CheckpointUpdatesRecommended(NamedTuple): + name: str + type: str + status: list + + +class CheckpointUpdatesAvailable(NamedTuple): + filename: str + description: str + type: str + status: str + availablesince: str + recommended: str + installedat: str + + +class CheckpointUpdates(NamedTuple): + updatesrecommended: list + updatesavailable: list + + +def parse_checkpoint_updates(string_table: List[StringTable]) -> CheckpointUpdates: + section = CheckpointUpdates + section.updatesrecommended = list(string_table[0]) + section.updatesavailable = list(string_table[1]) + return section + + +def inventory_checkpoint_updates(section: CheckpointUpdates) -> InventoryResult: + path = ['software', 'check_point', 'updates'] + + for update in section.updatesrecommended: + update = CheckpointUpdatesRecommended(*update) + yield TableRow( + path=path, + key_columns={'file_name': update.name}, + inventory_columns={ + 'type': update.type, + 'status': update.status, + 'recommended': 'Recommended', + }, + ) + + for update in section.updatesavailable: + update = CheckpointUpdatesAvailable(*update) + + if not 'installed' in update.status.lower(): + installedat = 'N/A' + else: + installedat = update.installedat.replace('T', ' ').replace('Z', '') + + yield TableRow( + path=path, + key_columns={'file_name': update.filename}, + inventory_columns={ + 'description': update.description, + 'type': update.type, + 'status': update.status, + 'recommended': update.recommended, + 'available_since': update.availablesince[:10], + 'installed_at': installedat, + }, + ) + + +register.snmp_section( + name='inv_checkpoint_updates', + parse_function=parse_checkpoint_updates, + fetch=[ + SNMPTree( + base='.1.3.6.1.4.1.2620.1.6.20.8.1', # CHECKPOINT-MIB::updatesRecommendedEntry + oids=[ + '2', # updatesRecommendedName + '3', # updatesRecommendedType + '4', # updatesRecommendedStatus + ] + ), + SNMPTree( + base='.1.3.6.1.4.1.2620.1.6.20.10.1', # CHECKPOINT-MIB::availableUpdates + oids=[ + '2', # filename + '3', # description + '4', # type + '5', # status + '6', # available_since + '7', # recommended + '8', # installed_at + ] + ), + ], + 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.inventory_plugin( + name='inv_checkpoint_updates', + inventory_function=inventory_checkpoint_updates, +) diff --git a/inv_checkpoint_updates.mkp b/inv_checkpoint_updates.mkp index ac8b39ac43fa359887a463409326ed94445b7157..bdb077da3d2985b0239490bcd81942fb06dc9afd 100644 GIT binary patch delta 2677 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 S?Z_?`8=t-9dA2Avw*LYHhg97F delta 12 TcmeAWHDQ(S=HSSf$f^$j5-|e4 diff --git a/packages/inv_checkpoint_updates b/packages/inv_checkpoint_updates index bf1f0c0..469dd9e 100644 --- a/packages/inv_checkpoint_updates +++ b/packages/inv_checkpoint_updates @@ -4,8 +4,8 @@ '\n' '- 2021-02-08: initial release\n', 'download_url': 'https://thl-cmk.hopto.org', - 'files': {'agent_based': ['checkpoint_inv_updates.py'], - 'web': ['plugins/views/checkpoint_updates.py']}, + 'files': {'agent_based': ['inv_checkpoint_updates.py'], + 'web': ['plugins/views/inv_checkpoint_updates.py']}, 'name': 'inv_checkpoint_updates', 'num_files': 2, 'title': 'Check Point appliance avilable updates inventory plugin', diff --git a/web/plugins/views/inv_checkpoint_updates.py b/web/plugins/views/inv_checkpoint_updates.py new file mode 100644 index 0000000..8e5eb6f --- /dev/null +++ b/web/plugins/views/inv_checkpoint_updates.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +import cmk.gui.utils +from cmk.gui.plugins.views import ( + inventory_displayhints,) +from cmk.gui.i18n import _ + +inventory_displayhints.update({ + '.software.check_point.updates:': { + 'title': _('Updates'), + 'keyorder': [ + 'file_name', + 'type', + 'status', + 'recommended', + 'available_since', + 'installed_at', + 'description' + ], + 'view': 'invcheckpointupdates_of_host', + }, + }) + +from cmk.gui.plugins.views.inventory import declare_invtable_view + +declare_invtable_view( + 'invcheckpointupdates', + '.software.check_point.updates:', + _('Check Point updates'), + _('Check Point updates'), +) -- GitLab