cmdbsyncer 4.3.4__tar.gz → 4.4.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/PKG-INFO +37 -36
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/README.md +36 -35
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/__init__.py +11 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/api/syncer.py +123 -4
- cmdbsyncer-4.4.0/application/buildinfo.txt +1 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/changelog/v4.3.md +27 -0
- cmdbsyncer-4.4.0/application/changelog/v4.4.md +47 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/config.py +12 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/docu_links.py +1 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/helpers/get_account.py +38 -4
- cmdbsyncer-4.4.0/application/helpers/import_hostnames.py +110 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/helpers/inventory.py +38 -27
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/helpers/local_config_presets.py +11 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/helpers/plugins.py +8 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/helpers/syncer_jinja.py +79 -10
- cmdbsyncer-4.4.0/application/helpers/timezone.py +97 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/mcp_server.py +1 -1
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/models/account.py +9 -2
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/models/host.py +83 -231
- cmdbsyncer-4.4.0/application/models/host_create_time.py +31 -0
- cmdbsyncer-4.4.0/application/models/host_labels.py +222 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/module_registry.py +24 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/modules/plugin.py +194 -15
- cmdbsyncer-4.4.0/application/modules/rule/list_source.py +277 -0
- cmdbsyncer-4.4.0/application/modules/rule/list_source_views.py +259 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/modules/rule/match.py +71 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/modules/rule/models.py +70 -2
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/modules/rule/rule.py +135 -4
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/modules/rule/views.py +2 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/modules/search_parser.py +136 -13
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/ansible/__init__.py +8 -10
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/ansible/admin_views.py +21 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/ansible/inventory.py +20 -1
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/ansible/models.py +9 -3
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/ansible/playbook_rules.py +46 -23
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/ansible/runner.py +63 -1
- cmdbsyncer-4.4.0/application/plugins/ansible/tests/__init__.py +1 -0
- cmdbsyncer-4.4.0/application/plugins/ansible/tests/test_runner_ssh_env.py +86 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/ansible/views.py +24 -12
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/bmc_remedy/bmc_remedy.py +6 -9
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/__init__.py +22 -2
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/admin_views.py +25 -1
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/bi.py +12 -22
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/cmk2.py +16 -2
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/cmk_rules.py +300 -38
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/data_quality.py +1 -1
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/dcd.py +63 -22
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/downtimes.py +32 -4
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/groups.py +21 -85
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/helpers.py +67 -1
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/import_v2.py +5 -11
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/inits.py +36 -2
- cmdbsyncer-4.4.0/application/plugins/checkmk/list_source.py +59 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/models.py +27 -36
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/notification_rules.py +66 -49
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/syncer.py +365 -29
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/tags.py +90 -41
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/tests/test_cmk2.py +36 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/tests/test_cmk_rules.py +260 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/tests/test_dcd.py +123 -1
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/tests/test_downtimes.py +38 -1
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/tests/test_import_v2.py +5 -5
- cmdbsyncer-4.4.0/application/plugins/checkmk/tests/test_list_source.py +329 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/tests/test_notification_rules.py +248 -14
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/tests/test_syncer.py +311 -3
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/tests/test_tags.py +84 -51
- cmdbsyncer-4.4.0/application/plugins/checkmk/tests/test_user_generation.py +632 -0
- cmdbsyncer-4.4.0/application/plugins/checkmk/user_generation.py +399 -0
- cmdbsyncer-4.4.0/application/plugins/checkmk/user_models.py +105 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/users.py +26 -17
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/views.py +469 -92
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/cisco_dna/syncer.py +9 -8
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/csv/csv.py +11 -19
- cmdbsyncer-4.4.0/application/plugins/eda/__init__.py +75 -0
- cmdbsyncer-4.4.0/application/plugins/eda/admin_views.py +32 -0
- cmdbsyncer-4.4.0/application/plugins/eda/models.py +151 -0
- cmdbsyncer-4.4.0/application/plugins/eda/plugin.json +23 -0
- cmdbsyncer-4.4.0/application/plugins/eda/repeats.py +182 -0
- cmdbsyncer-4.4.0/application/plugins/eda/rules.py +70 -0
- cmdbsyncer-4.4.0/application/plugins/eda/sender.py +180 -0
- cmdbsyncer-4.4.0/application/plugins/eda/tests/__init__.py +1 -0
- cmdbsyncer-4.4.0/application/plugins/eda/tests/test_eda.py +183 -0
- cmdbsyncer-4.4.0/application/plugins/eda/tests/test_repeats.py +203 -0
- cmdbsyncer-4.4.0/application/plugins/eda/views.py +261 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/idoit/__init__.py +1 -1
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/idoit/models.py +5 -2
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/idoit/rules.py +4 -6
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/idoit/syncer.py +27 -26
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/idoit/views.py +10 -1
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/jdisc/devices.py +8 -15
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/jira/jira.py +5 -7
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/jira_cloud/export.py +20 -10
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/jira_cloud/jira_cloud.py +3 -6
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/jira_cloud/models.py +5 -2
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/jira_cloud/views.py +11 -1
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/ldap/ldap.py +141 -16
- cmdbsyncer-4.4.0/application/plugins/ldap/plugin.json +38 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/ldap/views.py +10 -3
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/maintenance/__init__.py +4 -2
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/mysql/mysql.py +12 -21
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/netbox/__init__.py +60 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/netbox/admin_views.py +5 -3
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/netbox/dataflow.py +4 -8
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/netbox/devices.py +46 -35
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/netbox/interfaces.py +101 -76
- cmdbsyncer-4.4.0/application/plugins/netbox/ips.py +157 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/netbox/models.py +42 -11
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/netbox/netbox.py +3 -7
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/netbox/views.py +43 -2
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/netbox/virtualmachines.py +47 -35
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/prtg/prtg.py +4 -8
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/pyodbc/pyodbc.py +9 -21
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/rest/rest.py +6 -17
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/rules/rule_definitions.py +6 -1
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/servicenow/syncer.py +23 -23
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/servicenow/tests/test_table_request.py +60 -11
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/vmware/custom_attributes.py +22 -11
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/vmware/models.py +5 -2
- cmdbsyncer-4.4.0/application/plugins/vmware/views.py +24 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/yml/yml.py +6 -17
- cmdbsyncer-4.4.0/application/templates/_timezone.html +28 -0
- cmdbsyncer-4.4.0/application/templates/admin/checkmk_list_rule_debug.html +84 -0
- cmdbsyncer-4.4.0/application/templates/admin/checkmk_user_generation_preview.html +225 -0
- cmdbsyncer-4.4.0/application/templates/admin/checkmk_user_generation_rule_list.html +15 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/data_quality.html +2 -2
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/host_inventory_tree.html +2 -2
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/host_list.html +2 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/host_timeline.html +2 -2
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/ldap_search.html +39 -4
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/master.html +12 -2
- cmdbsyncer-4.4.0/application/templates/admin/model/_list_source_preview.html +190 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/model/checkmk_rule_mngmt_create.html +1 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/model/checkmk_rule_mngmt_edit.html +1 -0
- cmdbsyncer-4.4.0/application/templates/admin/model/list_source_create.html +8 -0
- cmdbsyncer-4.4.0/application/templates/admin/model/list_source_edit.html +8 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/object_list.html +2 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/api_tokens.html +3 -3
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/base.html +1 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/debug_host.html +14 -6
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/views/account.py +22 -4
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/views/cron.py +6 -1
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/views/host.py +218 -170
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/views/host_filters.py +6 -2
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/views/host_renderers.py +7 -2
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/cmdbsyncer.egg-info/PKG-INFO +37 -36
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/cmdbsyncer.egg-info/SOURCES.txt +46 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/pyproject.toml +1 -1
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/syncerapi/v1/__init__.py +1 -0
- cmdbsyncer-4.4.0/tests/test_ansible_cmk_roles.py +282 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/tests/test_api.py +52 -0
- cmdbsyncer-4.4.0/tests/test_eda_web_smoke.py +124 -0
- cmdbsyncer-4.4.0/tests/test_host_create_time.py +91 -0
- cmdbsyncer-4.4.0/tests/test_host_roundtrip_smoke.py +501 -0
- cmdbsyncer-4.4.0/tests/test_import_hostnames.py +362 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/tests/test_jinja_get_list.py +12 -0
- cmdbsyncer-4.4.0/tests/test_ldap_search_filter.py +59 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/tests/test_logging_config.py +17 -8
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/tests/test_plugin.py +158 -1
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/tests/test_rule.py +157 -0
- cmdbsyncer-4.4.0/tests/test_rule_list_rows.py +265 -0
- cmdbsyncer-4.4.0/tests/test_rule_list_source.py +243 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/tests/test_rule_match.py +193 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/tests/test_search_parser.py +136 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/tests/test_security_fixes.py +7 -0
- cmdbsyncer-4.4.0/tests/test_timezone.py +121 -0
- cmdbsyncer-4.4.0/tests/test_web_account_password_chars.py +137 -0
- cmdbsyncer-4.4.0/tests/test_web_account_password_deferred_save.py +183 -0
- cmdbsyncer-4.4.0/tests/test_web_ansible_account_inventory.py +107 -0
- cmdbsyncer-4.4.0/tests/test_web_debug_pages.py +120 -0
- cmdbsyncer-4.4.0/tests/test_web_list_source.py +123 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/tests/test_web_requests_smoke.py +60 -0
- cmdbsyncer-4.3.4/application/buildinfo.txt +0 -1
- cmdbsyncer-4.3.4/application/plugins/ldap/plugin.json +0 -24
- cmdbsyncer-4.3.4/application/plugins/netbox/ips.py +0 -112
- cmdbsyncer-4.3.4/application/plugins/vmware/views.py +0 -15
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/LICENSE +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/_version.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/api/__init__.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/api/inventory.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/api/objects.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/api/rules.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/api/views.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/auth/views.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/changelog/.pages +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/changelog/v3.10.md +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/changelog/v3.11.md +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/changelog/v3.12.md +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/changelog/v3.5.md +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/changelog/v3.7.md +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/changelog/v3.8.md +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/changelog/v3.9.md +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/changelog/v4.0.md +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/changelog/v4.1.md +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/changelog/v4.2.md +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/cli.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/enterprise.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/helpers/__init__.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/helpers/audit.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/helpers/cron.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/helpers/db_analysis.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/helpers/host_maintenance.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/helpers/label_hash.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/helpers/label_history.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/helpers/local_config_file.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/helpers/mongo_keys.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/helpers/notification_channels.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/helpers/notification_dispatch.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/helpers/retention.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/helpers/sates.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/helpers/sql.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/helpers/stale_indexes.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/helpers/tablib_formater.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/helpers/tests/__init__.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/helpers/tests/test_sql.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/models/__init__.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/models/config.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/models/cron.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/models/field_approval.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/models/forms.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/models/host_cleanup.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/models/host_inventory_tree.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/models/host_label_event.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/models/host_templates.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/models/notification_channel.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/models/notification_rule.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/models/notification_state.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/models/project.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/models/saved_search.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/models/states.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/models/user.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/modules/__init__.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/modules/custom_attributes/models.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/modules/custom_attributes/rules.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/modules/custom_attributes/views.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/modules/debug.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/modules/email.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/modules/inventory/__init__.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/modules/log/command_output.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/modules/log/log.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/modules/log/models.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/modules/log/views.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/modules/rule/__init__.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/modules/rule/filter.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/modules/rule/rewrite.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/modules/statefile.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/notices/strict_certificate_verification.txt +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/__init__.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/ansible/plugin.json +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/ansible/rules.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/ansible/seed.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/ansible/site_syncer.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/bmc_remedy/__init__.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/bmc_remedy/plugin.json +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/folder_attributes.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/import_v1.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/inventorize.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/passwords.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/plugin.json +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/poolfolder.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/rule_analysis_runner.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/rule_passwords.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/rules.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/rulesets_catalog.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/sitepool.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/sites.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/tests/__init__.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/tests/test_assign_template.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/tests/test_bi.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/tests/test_cmk_conditions.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/tests/test_data_quality.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/tests/test_groups.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/tests/test_helpers.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/tests/test_import_v1.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/tests/test_inventorize.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/tests/test_passwords.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/tests/test_poolfolder.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/tests/test_rule_analysis_runner.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/tests/test_rule_passwords.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/tests/test_rules.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/tests/test_sitepool.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/tests/test_sites.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/checkmk/tests/test_users.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/cisco_dna/__init__.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/cisco_dna/plugin.json +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/cron.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/csv/__init__.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/csv/plugin.json +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/file_requests.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/idoit/admin_views.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/idoit/plugin.json +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/jdisc/__init__.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/jdisc/applications.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/jdisc/executables.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/jdisc/jdisc.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/jdisc/plugin.json +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/jira/__init__.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/jira/plugin.json +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/jira_cloud/__init__.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/jira_cloud/admin_views.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/jira_cloud/plugin.json +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/jira_cloud/rules.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/jira_cloud/schema_sync.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/jira_cloud/tests/__init__.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/jira_cloud/tests/test_attribute_value.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/json/__init__.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/json/json.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/json/plugin.json +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/ldap/__init__.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/ldap/admin_views.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/maintenance/db_commands.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/maintenance/plugin.json +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/maintenance/tests/__init__.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/maintenance/tests/test_delete_all_hosts.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/maintenance/tests/test_delete_inventory.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/mssql/__init__.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/mssql/plugin.json +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/mysql/__init__.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/mysql/plugin.json +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/netbox/cluster.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/netbox/contacts.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/netbox/networks.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/netbox/plugin.json +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/netbox/prefixes.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/netbox/rules.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/netbox/tests/__init__.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/netbox/tests/test_import_filter.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/netbox/utils.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/prtg/__init__.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/prtg/plugin.json +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/pyodbc/__init__.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/pyodbc/plugin.json +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/rest/__init__.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/rest/plugin.json +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/rules/__init__.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/rules/admin_views.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/rules/autorules.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/rules/models.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/rules/plugin.json +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/rules/rule_import_export.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/rules/views.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/servicenow/__init__.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/servicenow/admin_views.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/servicenow/plugin.json +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/servicenow/tests/__init__.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/servicenow/views.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/syncer_shell.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/vmware/__init__.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/vmware/admin_views.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/vmware/plugin.json +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/vmware/rules.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/vmware/vmware.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/yml/__init__.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins/yml/plugin.json +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/plugins_cli.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/static/cmdbsyncer_mark.png +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/static/css/cmdbsyncer.css +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/static/favicon.png +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/static/js/Sortable.min.js +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/static/js/main.js +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/static/logo_white.png +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/static/vendor/README.md +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/static/vendor/ansible.svg +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/static/vendor/checkmk.svg +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/static/vendor/idoit.svg +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/static/vendor/jira.svg +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/static/vendor/netbox.svg +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/static/vendor/vmware.svg +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/_brand.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/_theme.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/_host_tabs.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/account_create.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/account_edit.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/account_field_help.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/account_pick_type.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/ansible_playbook_run.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/ansible_project_detail.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/ansible_rule_list.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/ansible_run_details.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/assign_project_form.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/bulk_label_form.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/changelog_archive.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/checkmk_data_quality.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/checkmk_rule_mngmt_list.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/checkmk_rule_optimization.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/checkmk_settings_list.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/checkmk_test_folder_scope.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/copy_as_new_form.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/data_quality_lowercase_preview.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/file/list.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/file/modals/form.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/first_steps.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/host_csv_import_preview.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/host_details.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/host_edit.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/host_relations_graph.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/index.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/local_config_editor.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/model/_action_picker.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/model/_folder_builder.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/model/_notification_plugin_picker.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/model/_ruleset_autocomplete.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/model/checkmk_notification_rule_create.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/model/checkmk_notification_rule_edit.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/model/checkmk_rule_create.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/model/checkmk_rule_edit.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/model/clone_confirm.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/model/inline_list_base.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/module_overview.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/project_edit.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/project_import.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/project_import_cmk.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/project_list.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/project_overview.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/servicenow_query.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/set_account_form.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/set_cmk_version_form.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/admin/set_template_form.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/change_password.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/csrf_error.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/debug.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/email/newuser.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/email/notification.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/email/resetpassword.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/formular.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/license_info.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/login.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/logout_confirm.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/request_password.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/set_2fa.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/templates/set_theme.html +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/themes/dracula.css +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/themes/gruvbox-dark.css +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/themes/gruvbox-light.css +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/themes/nord.css +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/themes_registry.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/views/_form_fields.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/views/_form_sections.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/views/account_select.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/views/config.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/views/data_quality.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/views/default.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/views/field_approval.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/views/fileadmin.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/views/first_steps.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/views/host_inventory_grid.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/views/host_widgets.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/views/license.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/views/menu_links.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/views/module_overview.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/views/notification_channel.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/views/notification_rule.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/views/project.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/views/saved_search.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/views/template_select.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/application/views/user.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/cmdbsyncer.egg-info/dependency_links.txt +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/cmdbsyncer.egg-info/entry_points.txt +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/cmdbsyncer.egg-info/requires.txt +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/cmdbsyncer.egg-info/top_level.txt +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/requirements-ansible-windows.txt +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/requirements-ansible.txt +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/requirements-extras.txt +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/requirements.txt +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/setup.cfg +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/syncerapi/__init__.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/syncerapi/v1/core/__init__.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/syncerapi/v1/inventory/__init__.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/syncerapi/v1/rest/__init__.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/tests/test_account_macro.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/tests/test_api_csrf_invariant.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/tests/test_config_dir.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/tests/test_cron_missing_account.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/tests/test_csrf_config.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/tests/test_data_quality_duplicates.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/tests/test_default_view.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/tests/test_disabled_row_style.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/tests/test_enterprise_quiet.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/tests/test_folder_builder_js.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/tests/test_global_account_presets.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/tests/test_host_cleanup.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/tests/test_host_label_edit.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/tests/test_host_template_filter.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/tests/test_host_template_resync.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/tests/test_jinja_hash.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/tests/test_label_history.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/tests/test_local_config_presets.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/tests/test_model_indexes.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/tests/test_mongo_keys.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/tests/test_plugin_ssti.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/tests/test_plugins_cli.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/tests/test_regex_condition_limits.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/tests/test_rule_export_templates.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/tests/test_rule_filename_detect.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/tests/test_rule_import_override.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/tests/test_rule_registry_complete.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/tests/test_stale_indexes.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/tests/test_template_merge_fields.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/tests/test_user_scope_smoke.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/tests/test_view_permission_flags.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/tests/test_web_boot_smoke.py +0 -0
- {cmdbsyncer-4.3.4 → cmdbsyncer-4.4.0}/tests/test_webhook_token_hash.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cmdbsyncer
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.4.0
|
|
4
4
|
Summary: Rule-based modular synchronizer for Checkmk, Netbox, Ansible, I-DOIT, Jira CMDB and 15+ other CMDB/monitoring systems
|
|
5
5
|
Author-email: Kuhn & Ruess GmbH <info@kuhn-ruess.de>
|
|
6
6
|
Maintainer-email: Bastian Kuhn <mail@bastian-kuhn.de>
|
|
@@ -102,31 +102,24 @@ CMDBsyncer is a powerful, web-based tool designed to solve the complex challenge
|
|
|
102
102
|
|
|
103
103
|
## ⚡ Quick Start
|
|
104
104
|
|
|
105
|
-
|
|
105
|
+
Every release is published as a container image — nothing to clone, nothing to build:
|
|
106
106
|
|
|
107
107
|
```bash
|
|
108
|
-
#
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
# For production: check out the last released version.
|
|
113
|
-
# For testing the bleeding edge: stay on main.
|
|
114
|
-
git checkout stable
|
|
115
|
-
|
|
116
|
-
# Start the application
|
|
117
|
-
./helper up
|
|
118
|
-
|
|
119
|
-
# Access the container
|
|
120
|
-
./helper shell
|
|
108
|
+
# Fetch the compose file and start CMDBsyncer together with its MongoDB
|
|
109
|
+
curl -O https://raw.githubusercontent.com/kuhn-ruess/cmdbsyncer/main/docker-compose.registry.yml
|
|
110
|
+
docker compose -f docker-compose.registry.yml up -d
|
|
121
111
|
|
|
122
112
|
# Create your first user
|
|
123
|
-
|
|
113
|
+
docker compose -f docker-compose.registry.yml exec api \
|
|
114
|
+
./cmdbsyncer sys create_user 'your-email@example.com'
|
|
124
115
|
|
|
125
|
-
#
|
|
126
|
-
# Open http://your-host:5003 in your browser
|
|
116
|
+
# Open http://your-host:8080 in your browser
|
|
127
117
|
```
|
|
128
118
|
|
|
129
|
-
|
|
119
|
+
The compose file tracks `latest`. Replace the tag with `4.3.3` to pin a release
|
|
120
|
+
or with `4.3` to stay on a minor line; the images cover `linux/amd64` and
|
|
121
|
+
`linux/arm64`. Full walkthrough — configuration volume, upgrades, reverse proxy
|
|
122
|
+
— in [Installation with Docker](https://docs.cmdbsyncer.de/installation/setup_docker/).
|
|
130
123
|
|
|
131
124
|
## 📸 Screenshots
|
|
132
125
|
|
|
@@ -257,35 +250,43 @@ This runs a development version that you can use to test everything.
|
|
|
257
250
|
|
|
258
251
|
### Production Installation
|
|
259
252
|
|
|
260
|
-
1. **
|
|
253
|
+
1. **Fetch the compose file**
|
|
261
254
|
```bash
|
|
262
|
-
|
|
263
|
-
cd cmdbsyncer
|
|
264
|
-
|
|
265
|
-
# Use the stable branch (last released version) for production:
|
|
266
|
-
git checkout stable
|
|
267
|
-
# …or pin to a specific release tag for reproducible deployments:
|
|
268
|
-
# git checkout v3.12.12
|
|
255
|
+
curl -O https://raw.githubusercontent.com/kuhn-ruess/cmdbsyncer/main/docker-compose.registry.yml
|
|
269
256
|
```
|
|
270
|
-
See [RELEASE.md](RELEASE.md) for the full branching/versioning policy.
|
|
271
257
|
|
|
272
|
-
2. **
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
```
|
|
258
|
+
2. **Pick a version**
|
|
259
|
+
|
|
260
|
+
Edit the `image:` line. `ghcr.io/kuhn-ruess/cmdbsyncer:latest` follows every
|
|
261
|
+
release, `:4.3.3` pins one, `:4.3` stays on a minor line.
|
|
262
|
+
See [RELEASE.md](RELEASE.md) for the full branching/versioning policy.
|
|
278
263
|
|
|
279
264
|
3. **Start the application**
|
|
280
265
|
```bash
|
|
281
|
-
docker-compose up -d
|
|
266
|
+
docker compose -f docker-compose.registry.yml up -d
|
|
282
267
|
```
|
|
283
268
|
|
|
284
269
|
4. **Create admin user**
|
|
285
270
|
```bash
|
|
286
|
-
|
|
271
|
+
docker compose -f docker-compose.registry.yml exec api \
|
|
272
|
+
./cmdbsyncer sys create_user 'admin@your-domain.com'
|
|
287
273
|
```
|
|
288
274
|
|
|
275
|
+
The `config` volume in that file holds `local_config.py`, and with it the key
|
|
276
|
+
every stored account password is encrypted with. Keep it across upgrades and
|
|
277
|
+
back it up together with the database.
|
|
278
|
+
|
|
279
|
+
#### Building the image yourself
|
|
280
|
+
|
|
281
|
+
For a fork, a custom base image or a preinstalled plugin:
|
|
282
|
+
|
|
283
|
+
```bash
|
|
284
|
+
git clone https://github.com/kuhn-ruess/cmdbsyncer.git
|
|
285
|
+
cd cmdbsyncer
|
|
286
|
+
git checkout lts/3.12 # or a release tag: git checkout v4.3.3
|
|
287
|
+
docker compose up -d
|
|
288
|
+
```
|
|
289
|
+
|
|
289
290
|
### Development Installation
|
|
290
291
|
|
|
291
292
|
For development and testing purposes:
|
|
@@ -34,31 +34,24 @@ CMDBsyncer is a powerful, web-based tool designed to solve the complex challenge
|
|
|
34
34
|
|
|
35
35
|
## ⚡ Quick Start
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
Every release is published as a container image — nothing to clone, nothing to build:
|
|
38
38
|
|
|
39
39
|
```bash
|
|
40
|
-
#
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
# For production: check out the last released version.
|
|
45
|
-
# For testing the bleeding edge: stay on main.
|
|
46
|
-
git checkout stable
|
|
47
|
-
|
|
48
|
-
# Start the application
|
|
49
|
-
./helper up
|
|
50
|
-
|
|
51
|
-
# Access the container
|
|
52
|
-
./helper shell
|
|
40
|
+
# Fetch the compose file and start CMDBsyncer together with its MongoDB
|
|
41
|
+
curl -O https://raw.githubusercontent.com/kuhn-ruess/cmdbsyncer/main/docker-compose.registry.yml
|
|
42
|
+
docker compose -f docker-compose.registry.yml up -d
|
|
53
43
|
|
|
54
44
|
# Create your first user
|
|
55
|
-
|
|
45
|
+
docker compose -f docker-compose.registry.yml exec api \
|
|
46
|
+
./cmdbsyncer sys create_user 'your-email@example.com'
|
|
56
47
|
|
|
57
|
-
#
|
|
58
|
-
# Open http://your-host:5003 in your browser
|
|
48
|
+
# Open http://your-host:8080 in your browser
|
|
59
49
|
```
|
|
60
50
|
|
|
61
|
-
|
|
51
|
+
The compose file tracks `latest`. Replace the tag with `4.3.3` to pin a release
|
|
52
|
+
or with `4.3` to stay on a minor line; the images cover `linux/amd64` and
|
|
53
|
+
`linux/arm64`. Full walkthrough — configuration volume, upgrades, reverse proxy
|
|
54
|
+
— in [Installation with Docker](https://docs.cmdbsyncer.de/installation/setup_docker/).
|
|
62
55
|
|
|
63
56
|
## 📸 Screenshots
|
|
64
57
|
|
|
@@ -189,35 +182,43 @@ This runs a development version that you can use to test everything.
|
|
|
189
182
|
|
|
190
183
|
### Production Installation
|
|
191
184
|
|
|
192
|
-
1. **
|
|
185
|
+
1. **Fetch the compose file**
|
|
193
186
|
```bash
|
|
194
|
-
|
|
195
|
-
cd cmdbsyncer
|
|
196
|
-
|
|
197
|
-
# Use the stable branch (last released version) for production:
|
|
198
|
-
git checkout stable
|
|
199
|
-
# …or pin to a specific release tag for reproducible deployments:
|
|
200
|
-
# git checkout v3.12.12
|
|
187
|
+
curl -O https://raw.githubusercontent.com/kuhn-ruess/cmdbsyncer/main/docker-compose.registry.yml
|
|
201
188
|
```
|
|
202
|
-
See [RELEASE.md](RELEASE.md) for the full branching/versioning policy.
|
|
203
189
|
|
|
204
|
-
2. **
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
```
|
|
190
|
+
2. **Pick a version**
|
|
191
|
+
|
|
192
|
+
Edit the `image:` line. `ghcr.io/kuhn-ruess/cmdbsyncer:latest` follows every
|
|
193
|
+
release, `:4.3.3` pins one, `:4.3` stays on a minor line.
|
|
194
|
+
See [RELEASE.md](RELEASE.md) for the full branching/versioning policy.
|
|
210
195
|
|
|
211
196
|
3. **Start the application**
|
|
212
197
|
```bash
|
|
213
|
-
docker-compose up -d
|
|
198
|
+
docker compose -f docker-compose.registry.yml up -d
|
|
214
199
|
```
|
|
215
200
|
|
|
216
201
|
4. **Create admin user**
|
|
217
202
|
```bash
|
|
218
|
-
|
|
203
|
+
docker compose -f docker-compose.registry.yml exec api \
|
|
204
|
+
./cmdbsyncer sys create_user 'admin@your-domain.com'
|
|
219
205
|
```
|
|
220
206
|
|
|
207
|
+
The `config` volume in that file holds `local_config.py`, and with it the key
|
|
208
|
+
every stored account password is encrypted with. Keep it across upgrades and
|
|
209
|
+
back it up together with the database.
|
|
210
|
+
|
|
211
|
+
#### Building the image yourself
|
|
212
|
+
|
|
213
|
+
For a fork, a custom base image or a preinstalled plugin:
|
|
214
|
+
|
|
215
|
+
```bash
|
|
216
|
+
git clone https://github.com/kuhn-ruess/cmdbsyncer.git
|
|
217
|
+
cd cmdbsyncer
|
|
218
|
+
git checkout lts/3.12 # or a release tag: git checkout v4.3.3
|
|
219
|
+
docker compose up -d
|
|
220
|
+
```
|
|
221
|
+
|
|
221
222
|
### Development Installation
|
|
222
223
|
|
|
223
224
|
For development and testing purposes:
|
|
@@ -467,6 +467,17 @@ if not CLI_MODE:
|
|
|
467
467
|
insecure = False
|
|
468
468
|
return {'show_https_warning': insecure}
|
|
469
469
|
|
|
470
|
+
@app.template_filter('localtime')
|
|
471
|
+
def _localtime(value, fmt='%Y-%m-%d %H:%M:%S'):
|
|
472
|
+
"""
|
|
473
|
+
Render a stored (UTC) timestamp in the timezone of the browser
|
|
474
|
+
that asked for the page: ``{{ job.last_start|localtime }}``.
|
|
475
|
+
Storage stays UTC everywhere — this is presentation only.
|
|
476
|
+
"""
|
|
477
|
+
# pylint: disable=import-outside-toplevel
|
|
478
|
+
from application.helpers.timezone import format_local
|
|
479
|
+
return format_local(value, fmt)
|
|
480
|
+
|
|
470
481
|
bootstrap = Bootstrap(app)
|
|
471
482
|
|
|
472
483
|
login_manager = LoginManager()
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
"""
|
|
2
2
|
Syncer API.
|
|
3
3
|
|
|
4
|
-
Read-only access to log entries, cron status, host counters,
|
|
5
|
-
webhook trigger for cron
|
|
4
|
+
Read-only access to log entries, cron status, host counters, the
|
|
5
|
+
repeated Event Driven Ansible events, plus a webhook trigger for cron
|
|
6
|
+
groups. Authenticated via ``@require_token``;
|
|
6
7
|
a user with ``api_roles = ['syncer']`` (or ``'all'``) can call this
|
|
7
8
|
namespace. The ``/cron/trigger/<group>`` route additionally accepts an
|
|
8
9
|
``X-Webhook-Token`` header tied to the CronGroup, so external systems
|
|
@@ -14,12 +15,16 @@ from flask import request
|
|
|
14
15
|
from flask_restx import Namespace, Resource, fields
|
|
15
16
|
|
|
16
17
|
from application import log
|
|
17
|
-
from application.api import
|
|
18
|
+
from application.api import (
|
|
19
|
+
api_scope_active, hostnames_in_scope, get_api_account_scope,
|
|
20
|
+
require_token, scope_host_query,
|
|
21
|
+
)
|
|
18
22
|
from application.enterprise import run_hook as _ent_run_hook
|
|
19
23
|
from application.helpers.audit import audit
|
|
20
24
|
from application.modules.log.models import LogEntry
|
|
21
25
|
from application.models.host import Host
|
|
22
26
|
from application.models.cron import CronStats, CronGroup
|
|
27
|
+
from application.plugins.eda.repeats import DEFAULT_OFFENDER_LIMIT, collect_summary
|
|
23
28
|
|
|
24
29
|
API = Namespace(
|
|
25
30
|
'syncer',
|
|
@@ -98,6 +103,62 @@ HOSTS_STATS = API.model('hosts_stats', {
|
|
|
98
103
|
description='Hosts whose ``last_import_seen`` is older than 24h'),
|
|
99
104
|
})
|
|
100
105
|
|
|
106
|
+
EDA_COUNTS = {
|
|
107
|
+
'events_24h': fields.Integer(description='Events sent (or tried) in '
|
|
108
|
+
'the last 24 hours'),
|
|
109
|
+
'failed_24h': fields.Integer(description='Of those, the ones the event '
|
|
110
|
+
'stream did not accept'),
|
|
111
|
+
'pending': fields.Integer(description='Open streaks below the '
|
|
112
|
+
'threshold: sent, host still '
|
|
113
|
+
'matches'),
|
|
114
|
+
'repeating': fields.Integer(description='Open streaks at or above the '
|
|
115
|
+
'threshold: sent again and '
|
|
116
|
+
'again without effect'),
|
|
117
|
+
'repeating_hosts': fields.Integer(description='Distinct hosts with a '
|
|
118
|
+
'repeating event'),
|
|
119
|
+
'failing': fields.Integer(description='Open streaks whose last send '
|
|
120
|
+
'failed'),
|
|
121
|
+
'max_sends': fields.Integer(description='Most sends of one open streak'),
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
EDA_ACCOUNT = API.model('eda_account', {
|
|
125
|
+
'account': fields.String(description='EDA account the events go to'),
|
|
126
|
+
**EDA_COUNTS,
|
|
127
|
+
})
|
|
128
|
+
|
|
129
|
+
EDA_OFFENDER = API.model('eda_offender', {
|
|
130
|
+
'account': fields.String(),
|
|
131
|
+
'hostname': fields.String(),
|
|
132
|
+
'event': fields.String(description='Event name as sent'),
|
|
133
|
+
'rule': fields.String(description='Name of the Event Rule'),
|
|
134
|
+
'rule_id': fields.String(),
|
|
135
|
+
'sends': fields.Integer(description='Sends since the host matches'),
|
|
136
|
+
'failures': fields.Integer(description='Of those, failed sends'),
|
|
137
|
+
'threshold': fields.Integer(description='Threshold the streak was '
|
|
138
|
+
'measured against'),
|
|
139
|
+
'first_sent': fields.String(example='2026-10-10 06:00:00'),
|
|
140
|
+
'last_sent': fields.String(example='2026-10-13 06:00:00'),
|
|
141
|
+
'last_status': fields.String(example='success',
|
|
142
|
+
description='success or failure'),
|
|
143
|
+
'last_http_status': fields.Integer(),
|
|
144
|
+
})
|
|
145
|
+
|
|
146
|
+
EDA_SUMMARY = API.model('eda_summary', {
|
|
147
|
+
**EDA_COUNTS,
|
|
148
|
+
'min_sends': fields.Integer(description='Threshold override of the '
|
|
149
|
+
'request, null = per account'),
|
|
150
|
+
'accounts': fields.List(fields.Nested(EDA_ACCOUNT)),
|
|
151
|
+
'offenders': fields.List(fields.Nested(EDA_OFFENDER),
|
|
152
|
+
description='Repeating streaks, most sends '
|
|
153
|
+
'first'),
|
|
154
|
+
'offenders_truncated': fields.Boolean(description='True when the '
|
|
155
|
+
'limit cut the list'),
|
|
156
|
+
})
|
|
157
|
+
|
|
158
|
+
EDA_RESPONSE = API.model('eda_response', {
|
|
159
|
+
'result': fields.Nested(EDA_SUMMARY),
|
|
160
|
+
})
|
|
161
|
+
|
|
101
162
|
ERROR = API.model('error', {
|
|
102
163
|
'error': fields.String(description='Human-readable error message'),
|
|
103
164
|
})
|
|
@@ -371,7 +432,7 @@ class SyncerHostsApi(Resource):
|
|
|
371
432
|
@require_token
|
|
372
433
|
def get(self):
|
|
373
434
|
"""Return totals plus a 24-hour staleness counter."""
|
|
374
|
-
ago_24h = datetime.
|
|
435
|
+
ago_24h = datetime.utcnow() - timedelta(hours=24)
|
|
375
436
|
# Restricted API users only see counters for the hosts they may
|
|
376
437
|
# reach — their accounts, carrying their templates.
|
|
377
438
|
return {
|
|
@@ -385,3 +446,61 @@ class SyncerHostsApi(Resource):
|
|
|
385
446
|
last_import_seen__lt=ago_24h,
|
|
386
447
|
)).count(),
|
|
387
448
|
}, 200
|
|
449
|
+
|
|
450
|
+
|
|
451
|
+
def _int_arg(name, default, minimum):
|
|
452
|
+
"""An integer query argument, None when it is not valid."""
|
|
453
|
+
value = request.args.get(name)
|
|
454
|
+
if value in (None, ''):
|
|
455
|
+
return default
|
|
456
|
+
try:
|
|
457
|
+
number = int(value)
|
|
458
|
+
except ValueError:
|
|
459
|
+
return None
|
|
460
|
+
return number if number >= minimum else None
|
|
461
|
+
|
|
462
|
+
|
|
463
|
+
def _eda_hostname_filter():
|
|
464
|
+
"""Hosts a restricted API user may see, None when unrestricted."""
|
|
465
|
+
if not api_scope_active():
|
|
466
|
+
return None
|
|
467
|
+
scope = get_api_account_scope()
|
|
468
|
+
|
|
469
|
+
def allowed(hostnames):
|
|
470
|
+
return hostnames_in_scope(hostnames, scope)
|
|
471
|
+
return allowed
|
|
472
|
+
|
|
473
|
+
|
|
474
|
+
@API.route('/eda')
|
|
475
|
+
class SyncerEdaApi(Resource):
|
|
476
|
+
"""Event Driven Ansible: events sent again and again without effect."""
|
|
477
|
+
|
|
478
|
+
@API.doc(security=['basicAuth', 'apiToken'], params={
|
|
479
|
+
'account': 'Only this EDA account',
|
|
480
|
+
'min_sends': 'Count a streak as repeating from this many sends on, '
|
|
481
|
+
'instead of the repeat_threshold of each account',
|
|
482
|
+
'limit': f'Most offenders listed (default {DEFAULT_OFFENDER_LIMIT})',
|
|
483
|
+
})
|
|
484
|
+
@API.response(200, 'Counters and repeating events.', EDA_RESPONSE)
|
|
485
|
+
@API.response(400, 'Invalid query argument', ERROR)
|
|
486
|
+
@API.response(401, 'Authentication failed', ERROR)
|
|
487
|
+
@require_token
|
|
488
|
+
def get(self):
|
|
489
|
+
"""Return how many events repeat without effect, and which.
|
|
490
|
+
|
|
491
|
+
A streak starts when a host matches an Event Rule and counts
|
|
492
|
+
every send of that event. It ends (resolved) on the first run in
|
|
493
|
+
which the host no longer gives the event. A streak that is still
|
|
494
|
+
open after ``repeat_threshold`` sends (account field, default 3)
|
|
495
|
+
is repeating.
|
|
496
|
+
"""
|
|
497
|
+
min_sends = _int_arg('min_sends', None, 1)
|
|
498
|
+
limit = _int_arg('limit', DEFAULT_OFFENDER_LIMIT, 0)
|
|
499
|
+
if (request.args.get('min_sends') and min_sends is None) or limit is None:
|
|
500
|
+
return {'error': 'min_sends must be >= 1, limit >= 0'}, 400
|
|
501
|
+
return {
|
|
502
|
+
'result': collect_summary(
|
|
503
|
+
account=request.args.get('account') or None,
|
|
504
|
+
min_sends=min_sends, limit=limit,
|
|
505
|
+
hostname_filter=_eda_hostname_filter()),
|
|
506
|
+
}, 200
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
BUILD_DATE=2026-10-13T09:07:44Z
|
|
@@ -1,5 +1,32 @@
|
|
|
1
1
|
# Version 4.3
|
|
2
2
|
|
|
3
|
+
## Unreleased
|
|
4
|
+
- FIX: A new account password also takes effect when the change waits for an approval: after the approval the account kept its old password, and until then the new one was stored unencrypted
|
|
5
|
+
- FIX: An account value used through `{{ACCOUNT:name:field}}` now arrives exactly as stored, also when a password contains `{{`, `{%` or `{#`, which used to be read as a template and came out cut short or empty
|
|
6
|
+
- FIX: An Ansible variable reading an account through `{{ACCOUNT:<name>:<field>}}` gets the current value of the account in the inventory: after the account was created or changed, the inventory kept the value from before, or an empty one, until its cache was rebuilt
|
|
7
|
+
- FIX: Opening the debug page of a host no longer puts `********` into its Ansible inventory where a variable reads an account password through `{{ACCOUNT:<name>:password}}`; the debug page still hides the password
|
|
8
|
+
- FIX: The Checkmk notification rule export no longer overwrites the notification parameters chosen by hand in Checkmk — a rule with a custom plug-in whose parameter set had been switched was rewritten on every run and put back on the set holding the parameters of the syncer, and a changed rule could take over the Checkmk rule of an unchanged one sending to the same contact groups, so both swapped their settings; the parameters of a custom plug-in are now only used when the syncer creates a rule, afterwards they belong to Checkmk like those of a built-in plug-in
|
|
9
|
+
- FIX: A rule using `syncer_last_seen` or `syncer_last_sync` now gets the date the host page shows: both were only available on hosts an import had written them onto, so a rule that switches a host off after so many days without a sighting quietly fell back to its else value on every other host, and elsewhere was working with the date of the run before or, on a host the export had already cached, with the date that cache was built with
|
|
10
|
+
- FIX: Every host now records when it was created, whichever way it was created — so far only an import wrote that timestamp, so hosts added in the interface, copies and CSV imports had none
|
|
11
|
+
- FIX: Two Checkmk host tags carrying the same name no longer block the update of their whole tag group — Checkmk read them as a renamed tag and refused the change, so new tag values were never created and the host export kept failing on them
|
|
12
|
+
- FEAT: New option CMK_TAG_REPAIR lets Checkmk update the hosts and rules which use a changed tag group, for the case where Checkmk refuses the change and asks for that permission — the documentation says when that is safe and when it widens your rules
|
|
13
|
+
- FEAT: New option CMK_BULK_FALLBACK_SINGLE sends the hosts of a failed bulk request to Checkmk one by one, so a single rejected host no longer takes its whole batch down with it
|
|
14
|
+
- FIX: An own LDAP filter in the directory search now replaces the search filter of the account instead of being added to it, so a filter looking for something else than the imported hosts finds it; the account's filter can be switched back on with the box below the search field
|
|
15
|
+
- FIX: `./cmdbsyncer` commands start right away instead of setting up the Ansible default project first, which had every call open a database connection before it began — a command now starts in about a second where it waited half a minute on a slow or unreachable database
|
|
16
|
+
- FIX: Host timestamps are now written in UTC everywhere, so the "not seen for X days" cleanup, the stale marking and the API timestamps agree with each other on servers that do not run in UTC
|
|
17
|
+
- FIX: An import source delivering a hostname that is not text now reports a readable error instead of a traceback
|
|
18
|
+
- FIX: Inventorize runs only write a host to the database when an attribute really changed, which noticeably speeds up large Netbox inventories
|
|
19
|
+
- FIX: A database problem while looking up CMDB templates is written to the log instead of silently looking like "no template matched"
|
|
20
|
+
|
|
21
|
+
## Version 4.3.5
|
|
22
|
+
- FIX: Inventorize applied `rewrite_hostname` twice for CSV, JSON, REST, YML, MySQL, ODBC, JDisc and LDAP accounts, so a template that appends something to the name, a domain for example, missed the host the import had created
|
|
23
|
+
- FIX: When Checkmk applies a bulk host update or create only in part ("Some actions failed"), the log now names each skipped host with the reason Checkmk gives, in one entry, instead of only the host names. A host is also no longer edited several times per export, so the Checkmk audit log no longer fills up with "Nothing was changed" entries, and a host whose attribute was removed is no longer reported as faulty although the removal worked. A bulk update request carries as many hosts as CMK_BULK_UPDATE_OPERATIONS allows, so this needs no more requests than before
|
|
24
|
+
- FIX: A Move to Folder rule whose folder option has no value for a host (it renders to False, True or None, for example a city the host does not have) no longer writes that into the Checkmk folder: Checkmk 2.5 then failed to list any folder and every export stopped with "Mismatch between endpoint and internal data format". The option is left out with a warning naming folder and attribute, a value like this already in a folder is removed, and when Checkmk can no longer list its folders the export continues and repairs the folders its rules manage
|
|
25
|
+
- FIX: A playbook run with an SSH password no longer fails on every host with "Invalid/incorrect password" when the application runs as the web server user — ssh was trying to write its known_hosts into that user's home directory, which is not writable; each run now keeps its known_hosts with its other temporary files, and a run that still hits this says so in the log instead of blaming the password
|
|
26
|
+
- FIX: A Checkmk rule that Checkmk refuses to update is left in place instead of being deleted — a value the target rejects (for example a password store reference written in a format a newer Checkmk no longer accepts) made the export delete the rule and then fail to recreate it, so the rule was gone after every run
|
|
27
|
+
- FEAT: The Checkmk rule export can be tried out before it runs: `export_rules --dry-run` reads the site and prints every rule it would create, update and delete, with the value it would write and the reason behind every deletion, and sends nothing to Checkmk
|
|
28
|
+
- FIX: `--debug` on the Checkmk rule export now shows the full error of a failed run, the same as the other export commands do, instead of only the difference behind each deletion
|
|
29
|
+
|
|
3
30
|
## Version 4.3.4
|
|
4
31
|
- FIX: A user the directory created can now log in — a successful directory bind ended in a server error for anybody who has no local password, which is every user created on first login
|
|
5
32
|
- FIX: A directory login that fails records what went wrong, so an unreachable server, a service account with the wrong password and a group mapping naming a role that does not exist can be told apart in Settings → Log
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Version 4.4
|
|
2
|
+
|
|
3
|
+
## Version 4.4.0
|
|
4
|
+
|
|
5
|
+
### Setup
|
|
6
|
+
- FEAT: New account option "http_proxy" sends every HTTP request of that account through a proxy — for a target system like ServiceNow that is only reachable through the corporate proxy; `direct` sends a single account past a proxy the environment sets for everything else
|
|
7
|
+
|
|
8
|
+
### Interface
|
|
9
|
+
- FEAT: The times the interface shows for hosts — created, last seen, last synced, the host timeline, the inventory trees, the data quality page and the API token list — are converted to the timezone of the computer you are reading them on, while they stay stored in UTC; cron and log timestamps are unchanged, they are written in the server's own time
|
|
10
|
+
|
|
11
|
+
### Hosts & Objects
|
|
12
|
+
- FEAT: One imported record can create several hosts: a `rewrite_hostname` template that renders a list, for example `{{ [HOSTNAME, HOSTNAME | replace('SRV01', 'RTR01')] }}`, imports one host per entry, each with all attributes of the record; every importer handles it the same way, and a template that renders a plain name works exactly as before
|
|
13
|
+
- FEAT: The host and object search finds entries by the day they were created: `created:today`, `created:yesterday` or `created:2026-09-22`, and `created:>=2026-09-01` together with `created:<=2026-09-07` for a range; the day is the one on your own clock — hosts that were created before the syncer recorded a creation time are matched by the day their entry was written to the database
|
|
14
|
+
- FEAT: CMDB objects can be debugged like hosts: the bug icon in the object list opens the same debug page with the object's attributes, matching rules and outcomes, and the new target "Netbox Objects" shows the IP address, prefix, interface, contact and dataflow rules that apply to a host or object
|
|
15
|
+
|
|
16
|
+
### Rules
|
|
17
|
+
- FEAT: Rules can take a pasted list (CSV, semicolon or tab separated, e.g. copied from a spreadsheet) as their input instead of the hosts: switch the new Rule source to "From a pasted list", and the first line of the list names the columns, which become variables for the outcomes; the rule renders its outcomes once per row instead of once per host, and the form shows the column variables (a click inserts one into the field you were editing), the first rows and every problem with its line while you paste. Available for the Checkmk Setup Rules (rows that only differ in the service name are joined into one Checkmk rule), DCD rules, BI rules and aggregations, notification rules and downtimes, the i-doit custom attributes, the Jira export rules, the Netbox devices, virtual machines, clusters, prefixes, interfaces, IP addresses, contacts and Dataflow fields, the VMware custom attributes, the Ansible custom variables and the Ansible playbook fire rules; where a row stands for one object (an i-doit or Jira object, a Netbox device, the device or virtual machine of Netbox interfaces, an inventory host, the host of a downtime or of a playbook run), its `hostname` or `name` column names it
|
|
18
|
+
- FEAT: Two new condition types, Older Than and Newer Than, compare the value of an attribute holding a date against the clock — they are offered as a value match only, because a hostname and an attribute name are never a date — so a rule can be limited to the hosts that were not seen for longer than a given age (2d, 12h, 30m, 1w or a plain number of days) — and, the other way round, to the ones seen since; the same thing needed a Jinja expression before
|
|
19
|
+
- FIX: A rule working with the date a host was last seen is no longer answered out of the export cache, so a host switched off after days without a sighting is switched on again as soon as it is back instead of keeping the state it was given while it was missing; only the rule sets that work with a date are affected, every other one stays cached and exports as fast as before
|
|
20
|
+
- FIX: "Foreach Value in List" now also accepts an attribute name ending in *, so hosts carrying their groups in several attributes — one per team, each a comma separated list — are read as one list instead of yielding nothing
|
|
21
|
+
|
|
22
|
+
### Checkmk
|
|
23
|
+
- FIX: Checkmk downtimes with a duration are no longer set again on every run, and the Duration field reads host attributes like every other field of a downtime
|
|
24
|
+
- FIX: The folder of a Checkmk DCD creation rule now renders its Jinja variables (a host attribute or a column of the pasted list), and one connection Checkmk refuses no longer keeps the others of the same export from being created
|
|
25
|
+
|
|
26
|
+
### Checkmk - Setup Rules
|
|
27
|
+
- FEAT: The Checkmk rule export calculates its rules about three times faster, so a big inventory spends far less time in "Loop over Hosts and collect distinct rules"
|
|
28
|
+
- FEAT: Every Checkmk Setup Rule has a debug page, reached by its bug icon in the rule list: for a rule built from a pasted list it shows every row with the number of rules it produced and the Checkmk rules the export would send, without contacting Checkmk; for a rule built per host it opens the host debug page with that rule preselected
|
|
29
|
+
|
|
30
|
+
### Checkmk - User Generation
|
|
31
|
+
- FEAT: Checkmk users can be generated from host attributes — one user per LDAP group the hosts carry, named after the group and given the mail address that group has in the directory; a new rule under Checkmk says which attributes hold the group names, and existing users created by hand are never overwritten
|
|
32
|
+
- FEAT: The Checkmk user generation can rewrite a group name before it is looked up, for hosts that carry it in a different shape than the directory uses — a prefix dropped, a domain cut off; a value the rewrite empties is skipped instead of creating a user from whatever the search filter alone finds
|
|
33
|
+
- FEAT: The fields of a generated Checkmk user can name the group both ways: {{name}} as it was searched in the directory and {{original_name}} as the host carried it before the rewrite
|
|
34
|
+
- FEAT: Checkmk roles and contact groups of a generated user are Jinja too, so a group can say which ones it deserves — an entry that renders to nothing is dropped and one that renders to several names becomes all of them
|
|
35
|
+
- FEAT: New page "Preview Generated Users" under Checkmk shows what the generation rules would make of the hosts you have right now — which groups were found, what the directory returned for them and which Checkmk user each one becomes, without writing anything
|
|
36
|
+
- FEAT: The Checkmk user generation can be debugged from the command line: `--debug` shows which subtree, filter and attribute the group lookup used and which groups the directory did not return, and `--search-filter` tries another group filter out without anybody editing the rules first
|
|
37
|
+
|
|
38
|
+
### Event Driven Ansible
|
|
39
|
+
- FEAT: New module Event Driven Ansible: rules decide which hosts send which event to an Event Driven Ansible event stream or webhook, and the cronjob "EDA: Send Events" sends them, for example to start the TLS or bakery registration of a Checkmk agent that the Checkmk inventory reports as not registered; the same event is sent again only after a configurable number of hours, and every event sent is listed in the Event History
|
|
40
|
+
- FEAT: Event Driven Ansible shows under Repeated Events which hosts keep getting the same event without effect: every event counts its sends while the host still matches the rule, it counts as repeating from a threshold set on the account (default 3 sends) and as resolved as soon as the host no longer matches; the REST endpoint `/api/v1/syncer/eda` returns the counters and the repeating events for monitoring with Checkmk
|
|
41
|
+
|
|
42
|
+
### Ansible
|
|
43
|
+
- FEAT: The Checkmk agent and server playbooks take the new variable `cmk_agent_host_name` as the host name they report to Checkmk; it defaults to the inventory name, so a host can be known in Checkmk by its short name while Ansible connects to its FQDN, or the other way round
|
|
44
|
+
- FIX: The shipped Checkmk agent and server playbooks work with an automation secret that contains special characters such as €, ö, spaces, quotes, $ or backslashes, and no longer show the secret in the Ansible output
|
|
45
|
+
|
|
46
|
+
### LDAP
|
|
47
|
+
- FEAT: Every field of an LDAP account now explains in the form what it configures
|
|
@@ -365,10 +365,22 @@ class BaseConfig():
|
|
|
365
365
|
CMK_BULK_DELETE_OPERATIONS = 50
|
|
366
366
|
|
|
367
367
|
CMK_DONT_DELETE_TAGS = True
|
|
368
|
+
# Allow Checkmk to update hosts and rules which use a changed tag group.
|
|
369
|
+
# WARNING: Checkmk repairs a removed tag by deleting the condition from
|
|
370
|
+
# every rule which uses it. The rule stays, but without that condition it
|
|
371
|
+
# matches more hosts than before. Combined with CMK_DONT_DELETE_TAGS = False
|
|
372
|
+
# every value which disappears from the source can silently widen a rule.
|
|
373
|
+
# A renamed tag is uncritical, there the condition gets the new id.
|
|
374
|
+
CMK_TAG_REPAIR = False
|
|
368
375
|
|
|
369
376
|
CMK_BULK_UPDATE_HOSTS = True
|
|
370
377
|
CMK_BULK_UPDATE_OPERATIONS = 50
|
|
371
378
|
|
|
379
|
+
# Retry the hosts of a failed bulk request one by one, so that one broken
|
|
380
|
+
# host does not block its whole batch. Costs one request per host of a
|
|
381
|
+
# failed batch, therefore off by default.
|
|
382
|
+
CMK_BULK_FALLBACK_SINGLE = False
|
|
383
|
+
|
|
372
384
|
CMK_LOWERCASE_FOLDERNAMES = True
|
|
373
385
|
CMK_LOWERCASE_LABEL_VALUES = False
|
|
374
386
|
|
|
@@ -12,6 +12,7 @@ docu_links = {
|
|
|
12
12
|
'accounts' : 'https://docs.cmdbsyncer.de/basics/accounts/',
|
|
13
13
|
'cmk_inventory_attributes': 'https://docs.cmdbsyncer.de/checkmk/inventorize/',
|
|
14
14
|
'cmk_groups': 'https://docs.cmdbsyncer.de/checkmk/groups_management/',
|
|
15
|
+
'cmk_user_generation': 'https://docs.cmdbsyncer.de/checkmk/user_generation/',
|
|
15
16
|
'cmk_setup_rules': 'https://docs.cmdbsyncer.de/checkmk/rules_management/',
|
|
16
17
|
'cmk_hosttags': 'https://docs.cmdbsyncer.de/checkmk/create_hosttags/',
|
|
17
18
|
'cmk_password_store': 'https://docs.cmdbsyncer.de/checkmk/password_store/',
|
|
@@ -20,7 +20,18 @@ SECRET_ACCOUNT_FIELDS = ('password', 'password_crypted')
|
|
|
20
20
|
|
|
21
21
|
SECRET_PLACEHOLDER = '********'
|
|
22
22
|
|
|
23
|
-
_mask_secrets = ContextVar('mask_account_secrets', default=
|
|
23
|
+
_mask_secrets = ContextVar('mask_account_secrets', default=None)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class SecretMasking: # pylint: disable=too-few-public-methods
|
|
27
|
+
"""
|
|
28
|
+
State of one `mask_account_secrets` block. `used` turns True once a
|
|
29
|
+
secret was replaced by the placeholder, so the caller knows its
|
|
30
|
+
results hold placeholders instead of real values.
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
def __init__(self):
|
|
34
|
+
self.used = False
|
|
24
35
|
|
|
25
36
|
|
|
26
37
|
@contextmanager
|
|
@@ -34,10 +45,14 @@ def mask_account_secrets():
|
|
|
34
45
|
`checkmk`) could add a rule whose outcome is the macro, open the
|
|
35
46
|
debug page and read the password of *any* account — bypassing the
|
|
36
47
|
`account` role that guards the account views.
|
|
48
|
+
|
|
49
|
+
Yields a `SecretMasking`: whatever was computed inside the block and
|
|
50
|
+
cached for later runs carries the placeholder when its `used` is set.
|
|
37
51
|
"""
|
|
38
|
-
|
|
52
|
+
masking = SecretMasking()
|
|
53
|
+
token = _mask_secrets.set(masking)
|
|
39
54
|
try:
|
|
40
|
-
yield
|
|
55
|
+
yield masking
|
|
41
56
|
finally:
|
|
42
57
|
_mask_secrets.reset(token)
|
|
43
58
|
|
|
@@ -71,8 +86,25 @@ def clear_account_cache(*_args, **_kwargs):
|
|
|
71
86
|
_account_cache.clear()
|
|
72
87
|
|
|
73
88
|
|
|
89
|
+
def clear_host_caches(*_args, **_kwargs):
|
|
90
|
+
"""
|
|
91
|
+
Drop the per host outcome caches. Wired to Account save/delete.
|
|
92
|
+
|
|
93
|
+
Rule outcomes are cached with every {{ACCOUNT:...}} macro already
|
|
94
|
+
resolved, so the exports reading them (e.g. the Ansible inventory)
|
|
95
|
+
would keep serving what the account held when the cache was built,
|
|
96
|
+
or an empty value when it did not exist yet. Saving a rule drops
|
|
97
|
+
the caches for the same reason.
|
|
98
|
+
"""
|
|
99
|
+
# Imported here: the host model renders Jinja, which imports this module.
|
|
100
|
+
from application.models.host import Host # pylint: disable=import-outside-toplevel
|
|
101
|
+
Host.objects(cache__ne={}).update(set__cache={})
|
|
102
|
+
|
|
103
|
+
|
|
74
104
|
signals.post_save.connect(clear_account_cache, sender=Account)
|
|
75
105
|
signals.post_delete.connect(clear_account_cache, sender=Account)
|
|
106
|
+
signals.post_save.connect(clear_host_caches, sender=Account)
|
|
107
|
+
signals.post_delete.connect(clear_host_caches, sender=Account)
|
|
76
108
|
|
|
77
109
|
|
|
78
110
|
def _resolve_password(account):
|
|
@@ -164,7 +196,9 @@ def get_account_variable(macro):
|
|
|
164
196
|
inner = macro.strip().removeprefix('{{').removesuffix('}}')
|
|
165
197
|
_, account, var = (part.strip() for part in inner.split(':'))
|
|
166
198
|
value = get_account_by_name(account)[var]
|
|
167
|
-
|
|
199
|
+
masking = _mask_secrets.get()
|
|
200
|
+
if var in SECRET_ACCOUNT_FIELDS and masking is not None:
|
|
201
|
+
masking.used = True
|
|
168
202
|
return SECRET_PLACEHOLDER
|
|
169
203
|
return value
|
|
170
204
|
except (ValueError, KeyError, AccountNotFoundError) as exc:
|