cmdbsyncer 4.1.0.dev22__tar.gz → 4.1.2__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.1.0.dev22 → cmdbsyncer-4.1.2}/PKG-INFO +1 -1
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/__init__.py +7 -2
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/_version.py +34 -5
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/api/views.py +5 -2
- cmdbsyncer-4.1.2/application/buildinfo.txt +1 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/changelog/v4.1.md +18 -1
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/config.py +8 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/helpers/local_config_presets.py +5 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/models/host.py +4 -4
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/models/user.py +2 -2
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/rules/rule_definitions.py +1 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/admin/master.html +2 -2
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/views/field_approval.py +10 -6
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/cmdbsyncer.egg-info/PKG-INFO +1 -1
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/pyproject.toml +1 -1
- cmdbsyncer-4.1.0.dev22/application/buildinfo.txt +0 -1
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/LICENSE +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/README.md +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/api/__init__.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/api/inventory.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/api/objects.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/api/rules.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/api/syncer.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/auth/views.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/changelog/.pages +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/changelog/v3.10.md +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/changelog/v3.11.md +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/changelog/v3.12.md +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/changelog/v3.5.md +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/changelog/v3.7.md +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/changelog/v3.8.md +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/changelog/v3.9.md +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/changelog/v4.0.md +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/cli.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/docu_links.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/enterprise.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/helpers/__init__.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/helpers/audit.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/helpers/cron.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/helpers/get_account.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/helpers/inventory.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/helpers/local_config_file.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/helpers/mongo_keys.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/helpers/notification_channels.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/helpers/notification_dispatch.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/helpers/plugins.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/helpers/sates.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/helpers/sql.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/helpers/syncer_jinja.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/helpers/tablib_formater.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/helpers/tests/__init__.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/helpers/tests/test_sql.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/mcp_server.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/models/__init__.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/models/account.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/models/config.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/models/cron.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/models/field_approval.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/models/forms.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/models/host_inventory_tree.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/models/notification_channel.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/models/notification_rule.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/models/notification_state.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/models/saved_search.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/models/states.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/modules/__init__.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/modules/custom_attributes/models.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/modules/custom_attributes/rules.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/modules/custom_attributes/views.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/modules/debug.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/modules/email.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/modules/inventory/__init__.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/modules/log/log.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/modules/log/models.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/modules/log/views.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/modules/plugin.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/modules/rule/__init__.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/modules/rule/filter.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/modules/rule/match.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/modules/rule/models.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/modules/rule/rewrite.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/modules/rule/rule.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/modules/rule/views.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/modules/statefile.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/notices/strict_certificate_verification.txt +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/__init__.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/ansible/__init__.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/ansible/admin_views.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/ansible/inventory.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/ansible/models.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/ansible/playbook_rules.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/ansible/plugin.json +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/ansible/rules.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/ansible/runner.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/ansible/site_syncer.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/ansible/views.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/bmc_remedy/__init__.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/bmc_remedy/bmc_remedy.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/bmc_remedy/plugin.json +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/__init__.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/admin_views.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/bi.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/cmk2.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/cmk_rules.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/dcd.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/downtimes.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/groups.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/helpers.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/import_v1.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/import_v2.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/inits.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/inventorize.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/models.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/notification_rules.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/passwords.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/plugin.json +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/poolfolder.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/rules.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/sites.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/syncer.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/tags.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/tests/__init__.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/tests/test_bi.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/tests/test_cmk2.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/tests/test_cmk_rules.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/tests/test_dcd.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/tests/test_downtimes.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/tests/test_groups.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/tests/test_helpers.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/tests/test_import_v1.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/tests/test_import_v2.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/tests/test_inventorize.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/tests/test_notification_rules.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/tests/test_passwords.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/tests/test_poolfolder.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/tests/test_rules.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/tests/test_sites.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/tests/test_syncer.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/tests/test_tags.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/tests/test_users.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/users.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/views.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/cisco_dna/__init__.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/cisco_dna/plugin.json +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/cisco_dna/syncer.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/cron.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/csv/__init__.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/csv/csv.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/csv/plugin.json +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/file_requests.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/idoit/__init__.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/idoit/admin_views.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/idoit/models.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/idoit/plugin.json +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/idoit/rules.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/idoit/syncer.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/idoit/views.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/jdisc/__init__.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/jdisc/applications.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/jdisc/devices.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/jdisc/executables.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/jdisc/jdisc.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/jdisc/plugin.json +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/jira/__init__.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/jira/jira.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/jira/plugin.json +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/jira_cloud/__init__.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/jira_cloud/admin_views.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/jira_cloud/export.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/jira_cloud/jira_cloud.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/jira_cloud/models.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/jira_cloud/plugin.json +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/jira_cloud/rules.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/jira_cloud/schema_sync.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/jira_cloud/views.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/json/__init__.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/json/json.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/json/plugin.json +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/ldap/__init__.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/ldap/ldap.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/ldap/plugin.json +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/maintenance/__init__.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/maintenance/plugin.json +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/mssql/__init__.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/mssql/plugin.json +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/mysql/__init__.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/mysql/mysql.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/mysql/plugin.json +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/netbox/__init__.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/netbox/admin_views.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/netbox/cluster.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/netbox/contacts.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/netbox/dataflow.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/netbox/devices.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/netbox/interfaces.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/netbox/ips.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/netbox/models.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/netbox/netbox.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/netbox/networks.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/netbox/plugin.json +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/netbox/prefixes.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/netbox/rules.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/netbox/views.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/netbox/virtualmachines.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/prtg/__init__.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/prtg/plugin.json +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/prtg/prtg.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/pyodbc/__init__.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/pyodbc/plugin.json +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/pyodbc/pyodbc.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/rest/__init__.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/rest/plugin.json +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/rest/rest.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/rules/__init__.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/rules/admin_views.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/rules/autorules.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/rules/models.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/rules/plugin.json +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/rules/rule_import_export.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/rules/views.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/syncer_shell.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/vmware/__init__.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/vmware/admin_views.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/vmware/custom_attributes.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/vmware/models.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/vmware/plugin.json +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/vmware/rules.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/vmware/views.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/vmware/vmware.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/yml/__init__.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/yml/plugin.json +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/yml/yml.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins_cli.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/static/css/cmdbsyncer.css +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/static/js/main.js +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/static/logo_white.png +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/_brand.html +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/_theme.html +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/admin/_host_tabs.html +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/admin/account_pick_type.html +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/admin/ansible_playbook_run.html +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/admin/ansible_project_detail.html +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/admin/ansible_rule_list.html +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/admin/bulk_label_form.html +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/admin/changelog_archive.html +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/admin/checkmk_rule_mngmt_list.html +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/admin/checkmk_settings_list.html +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/admin/copy_as_new_form.html +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/admin/data_quality.html +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/admin/file/list.html +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/admin/file/modals/form.html +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/admin/host_details.html +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/admin/host_edit.html +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/admin/host_inventory_tree.html +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/admin/host_list.html +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/admin/host_relations_graph.html +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/admin/host_timeline.html +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/admin/index.html +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/admin/local_config_editor.html +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/admin/model/clone_confirm.html +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/admin/model/inline_list_base.html +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/admin/object_list.html +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/admin/set_cmk_version_form.html +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/admin/set_template_form.html +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/base.html +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/change_password.html +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/debug.html +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/debug_host.html +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/email/newuser.html +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/email/notification.html +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/email/resetpassword.html +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/formular.html +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/license_info.html +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/login.html +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/logout_confirm.html +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/request_password.html +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/set_2fa.html +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/templates/set_theme.html +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/themes/dracula.css +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/themes/gruvbox-dark.css +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/themes/gruvbox-light.css +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/themes/nord.css +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/themes_registry.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/views/_form_fields.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/views/_form_sections.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/views/account.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/views/config.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/views/cron.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/views/data_quality.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/views/default.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/views/fileadmin.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/views/host.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/views/host_filters.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/views/host_renderers.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/views/host_widgets.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/views/license.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/views/notification_channel.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/views/notification_rule.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/views/saved_search.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/views/user.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/cmdbsyncer.egg-info/SOURCES.txt +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/cmdbsyncer.egg-info/dependency_links.txt +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/cmdbsyncer.egg-info/entry_points.txt +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/cmdbsyncer.egg-info/requires.txt +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/cmdbsyncer.egg-info/top_level.txt +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/requirements-ansible.txt +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/requirements-extras.txt +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/requirements.txt +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/setup.cfg +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/syncerapi/__init__.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/syncerapi/v1/__init__.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/syncerapi/v1/core/__init__.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/syncerapi/v1/inventory/__init__.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/syncerapi/v1/rest/__init__.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/tests/test_api.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/tests/test_api_csrf_invariant.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/tests/test_default_view.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/tests/test_mongo_keys.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/tests/test_plugin.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/tests/test_plugin_ssti.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/tests/test_plugins_cli.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/tests/test_rule.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/tests/test_rule_match.py +0 -0
- {cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/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.1.
|
|
3
|
+
Version: 4.1.2
|
|
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>
|
|
@@ -252,12 +252,16 @@ if not CLI_MODE:
|
|
|
252
252
|
"""
|
|
253
253
|
Feed the navbar badge in master.html. Runs on every admin
|
|
254
254
|
request, so it must be cheap and fail-soft — the count is a
|
|
255
|
-
nicety, not a correctness requirement.
|
|
255
|
+
nicety, not a correctness requirement. The workflow only
|
|
256
|
+
applies when the operator has nominated critical labels in
|
|
257
|
+
APPROVAL_REQUIRED_LABELS, so the badge stays hidden otherwise.
|
|
256
258
|
"""
|
|
257
259
|
# pylint: disable=import-outside-toplevel
|
|
258
260
|
from flask_login import current_user as _user
|
|
259
261
|
if not app.config.get('CMDB_MODE'):
|
|
260
262
|
return {'pending_approval_count': 0}
|
|
263
|
+
if not app.config.get('APPROVAL_REQUIRED_LABELS'):
|
|
264
|
+
return {'pending_approval_count': 0}
|
|
261
265
|
try:
|
|
262
266
|
if not _user.is_authenticated:
|
|
263
267
|
return {'pending_approval_count': 0}
|
|
@@ -557,7 +561,8 @@ def _register_web_layer(): # pylint: disable=too-many-locals,too-many-statement
|
|
|
557
561
|
admin.add_sub_category(name="Backups", parent_name="Settings")
|
|
558
562
|
from application.models.field_approval import FieldApproval
|
|
559
563
|
from application.views.field_approval import FieldApprovalView
|
|
560
|
-
admin.add_view(FieldApprovalView(FieldApproval,
|
|
564
|
+
admin.add_view(FieldApprovalView(FieldApproval,
|
|
565
|
+
name="Critical Label Approvals",
|
|
561
566
|
category="Settings",
|
|
562
567
|
menu_icon_type='fa',
|
|
563
568
|
menu_icon_value='fa-hourglass-half'))
|
|
@@ -94,13 +94,42 @@ def _has_unreleased_entries():
|
|
|
94
94
|
return bool(match and match.group(1).strip())
|
|
95
95
|
|
|
96
96
|
|
|
97
|
-
def
|
|
98
|
-
"""
|
|
97
|
+
def _installed_version():
|
|
98
|
+
"""The version recorded in installed-package metadata, or None.
|
|
99
|
+
|
|
100
|
+
`pyproject.toml` carries the authoritative pre-release counter
|
|
101
|
+
(``4.1.0.dev22`` etc.) but is gone after ``pip install``. The wheel's
|
|
102
|
+
dist-info keeps it, so ``importlib.metadata`` recovers the suffix on
|
|
103
|
+
both PyPI installs and editable installs. Source checkouts without
|
|
104
|
+
an installation just fall through to the changelog-derived version.
|
|
105
|
+
"""
|
|
106
|
+
try:
|
|
107
|
+
from importlib.metadata import ( # pylint: disable=import-outside-toplevel
|
|
108
|
+
PackageNotFoundError, version as _md_version,
|
|
109
|
+
)
|
|
110
|
+
return _md_version('cmdbsyncer')
|
|
111
|
+
except (PackageNotFoundError, ImportError, ModuleNotFoundError):
|
|
112
|
+
return None
|
|
99
113
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
114
|
+
|
|
115
|
+
def get_display_version():
|
|
116
|
+
"""Display form: ``4.0.0`` / ``4.0.0-dev22`` / ``3.12-LTS3``.
|
|
117
|
+
|
|
118
|
+
Resolution:
|
|
119
|
+
- LTS lines keep their ``-LTS`` suffix (PEP 440 stores it as ``+lts``).
|
|
120
|
+
- If the installed metadata carries a pre-release suffix (``.devN``,
|
|
121
|
+
``aN``, ``bN``, ``rcN``), surface it as ``-dev22`` / ``-rc1`` etc.
|
|
122
|
+
so users can tell which dev build they are on.
|
|
123
|
+
- Otherwise, while an ``## Unreleased`` section is still open in the
|
|
124
|
+
active changelog, append a bare ``-dev`` (source checkouts before
|
|
125
|
+
the next pre-release is cut).
|
|
103
126
|
"""
|
|
104
127
|
if '+lts' in __version__:
|
|
105
128
|
return __version__.replace('+lts', '-LTS')
|
|
129
|
+
installed = _installed_version()
|
|
130
|
+
if installed:
|
|
131
|
+
match = re.search(r'\.(dev\d+|a\d+|b\d+|rc\d+)$', installed)
|
|
132
|
+
if match:
|
|
133
|
+
base = installed[:match.start()]
|
|
134
|
+
return f'{base}-{match.group(1)}'
|
|
106
135
|
return f'{__version__}-dev' if _has_unreleased_entries() else __version__
|
|
@@ -14,9 +14,12 @@ API_BP = Blueprint('api', __name__)
|
|
|
14
14
|
|
|
15
15
|
# Rate-limit API auth failures per client IP. Only 401 responses deduct from
|
|
16
16
|
# the bucket, so legitimate high-volume API traffic is not throttled — only
|
|
17
|
-
# brute-force / credential-stuffing attempts are.
|
|
17
|
+
# brute-force / credential-stuffing attempts are. Uses its own bucket
|
|
18
|
+
# (API_RATE_LIMIT), independent of the much stricter form-login budget
|
|
19
|
+
# (AUTH_RATE_LIMIT, used by /auth) — otherwise a polling monitoring agent
|
|
20
|
+
# whose creds are momentarily wrong can lock the whole API for an hour.
|
|
18
21
|
limiter.limit(
|
|
19
|
-
lambda: app.config.get('
|
|
22
|
+
lambda: app.config.get('API_RATE_LIMIT', '30 per minute; 300 per hour'),
|
|
20
23
|
deduct_when=lambda response: response.status_code == 401,
|
|
21
24
|
)(API_BP)
|
|
22
25
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
BUILD_DATE=2026-05-18T12:46:22Z
|
|
@@ -1,6 +1,22 @@
|
|
|
1
1
|
# Version 4.1
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## Version 4.1.2
|
|
4
|
+
|
|
5
|
+
### Hosts
|
|
6
|
+
- FIX: Label names containing `.` or `$` are again run through the configured `REPLACERS` before the MongoDB-key check, so imports that relied on replacers to sanitize such names no longer fail
|
|
7
|
+
|
|
8
|
+
### Rules
|
|
9
|
+
- FIX: "Export all rules" now also includes cronjob groups, so a full rule export/import no longer silently drops the schedule configuration
|
|
10
|
+
|
|
11
|
+
### UI
|
|
12
|
+
- FIX: Settings menu entry "Approvals" renamed to "Critical Label Approvals" and only shown when `APPROVAL_REQUIRED_LABELS` is actually configured (was always visible in CMDB mode even when the workflow was inactive)
|
|
13
|
+
|
|
14
|
+
## Version 4.1.1
|
|
15
|
+
|
|
16
|
+
### API
|
|
17
|
+
- FIX: Separate `API_RATE_LIMIT` for `/api/v1` (default `30/min; 300/hour`) so a few 401s no longer lock out monitoring polling for the rest of the hour
|
|
18
|
+
|
|
19
|
+
## Version 4.1.0
|
|
4
20
|
|
|
5
21
|
### Ansible
|
|
6
22
|
- FEAT: Trigger Ansible playbook runs from the host UI with live output and per-host run history
|
|
@@ -107,6 +123,7 @@
|
|
|
107
123
|
- FIX: PyPI installs now ship every plugin's `plugin.json` (was only the `.py` files), and the user `plugins/` directory plus `disabled_plugins.json` next to `app.wsgi` are picked up correctly instead of being looked for inside `site-packages`
|
|
108
124
|
- FEAT: Offline installation bundle always ships base, extras and ansible Python dependencies plus the default Ansible playbook collection, and the bundled `install.sh` deploys the playbooks to `/opt/cmdbsyncer/ansible` (override via `ANSIBLE_TARGET`, skip with `SKIP_ANSIBLE=1`, replace existing target with `FORCE=1`)
|
|
109
125
|
- FEAT: New `make release-pre` target ships sequential pre-release builds (`.devN` / `aN` / `bN` / `rcN`) to PyPI without requiring a hand-edit before each upload; `tools/build_offline_bundle.sh --syncer-version 4.1.0.dev3 --enterprise-version 0.3.9.dev1` pins the offline bundle to those pre-releases so QA can test them on air-gapped systems
|
|
126
|
+
- FEAT: Header version display surfaces the installed pre-release counter — `4.1.0-dev22` / `4.1.0-rc1` etc. — instead of the bare `-dev` suffix, so operators can tell which build is running
|
|
110
127
|
|
|
111
128
|
### Refactor
|
|
112
129
|
- REFACTOR: `application/views/host.py` split into focused modules (widgets, filters, renderers)
|
|
@@ -196,6 +196,14 @@ class BaseConfig():
|
|
|
196
196
|
# Applied per client IP to the POST handler; GET (rendering the form) is
|
|
197
197
|
# not rate-limited.
|
|
198
198
|
AUTH_RATE_LIMIT = '3 per minute; 10 per hour'
|
|
199
|
+
# Rate limit for the /api/v1 namespace. Only 401 responses deduct from
|
|
200
|
+
# the bucket (see application/api/views.py), so legitimate polling
|
|
201
|
+
# never spends quota. Picked generous enough that a misconfigured
|
|
202
|
+
# monitoring agent producing repeated 401s does not lock out the whole
|
|
203
|
+
# API for the rest of the hour, while still throttling credential
|
|
204
|
+
# stuffing. Set tighter via local_config.py if your network is fully
|
|
205
|
+
# trusted, or looser if you have many polling clients.
|
|
206
|
+
API_RATE_LIMIT = '30 per minute; 300 per hour'
|
|
199
207
|
# Flask-Limiter storage backend. Default is in-process memory, which is
|
|
200
208
|
# fine for single-worker deployments. For multiple workers, set to
|
|
201
209
|
# e.g. 'redis://localhost:6379' or 'mongodb://localhost:27017/cmdb-api'.
|
|
@@ -158,6 +158,11 @@ PRESETS = [
|
|
|
158
158
|
'default': '3 per minute; 10 per hour',
|
|
159
159
|
'hint': 'Per-IP rate limit for login + password-reset POSTs '
|
|
160
160
|
'(Flask-Limiter syntax).'},
|
|
161
|
+
{'key': 'API_RATE_LIMIT', 'type': 'str',
|
|
162
|
+
'default': '30 per minute; 300 per hour',
|
|
163
|
+
'hint': 'Per-IP rate limit for /api/v1. Only 401 responses '
|
|
164
|
+
'count, so legitimate polling never spends quota. '
|
|
165
|
+
'Raise if your monitoring polls many endpoints.'},
|
|
161
166
|
{'key': 'RATELIMIT_STORAGE_URI', 'type': 'str',
|
|
162
167
|
'default': 'memory://',
|
|
163
168
|
'hint': 'Backend for rate-limit counters. Use redis:// or '
|
|
@@ -411,7 +411,6 @@ class Host(db.Document):
|
|
|
411
411
|
but checks first if needed and also sets
|
|
412
412
|
set_import_sync and import_seen as needed
|
|
413
413
|
"""
|
|
414
|
-
validate_mongo_keys(labels, "label")
|
|
415
414
|
if app.config['LABELS_ITERATE_FIRST_LEVEL']:
|
|
416
415
|
for key, value in list(labels.items()):
|
|
417
416
|
if isinstance(value, dict):
|
|
@@ -419,9 +418,10 @@ class Host(db.Document):
|
|
|
419
418
|
labels[f'{key}_{sub_key}'] = sub_value
|
|
420
419
|
del labels[key]
|
|
421
420
|
label_dict = dict(map(lambda kv: (self._fix_key(kv[0]), kv[1]), labels.items()))
|
|
422
|
-
#
|
|
423
|
-
#
|
|
424
|
-
#
|
|
421
|
+
# Validate only after _fix_key: REPLACERS are the intended way to
|
|
422
|
+
# turn `.`/`$` in incoming label names into MongoDB-safe keys, so
|
|
423
|
+
# the check must run on the post-replacer form. Anything still
|
|
424
|
+
# invalid here is rejected with a clear error.
|
|
425
425
|
validate_mongo_keys(label_dict, "label")
|
|
426
426
|
if self.get_labels() != label_dict:
|
|
427
427
|
self.set_import_sync()
|
|
@@ -16,8 +16,8 @@ roles = [
|
|
|
16
16
|
('host', "Hosts"),
|
|
17
17
|
('objects', "Objects"),
|
|
18
18
|
('hard_delete', "Permanently delete archived objects"),
|
|
19
|
-
('approval', "Approve or reject pending
|
|
20
|
-
('approval_bypass', "Skip the approval queue when editing critical
|
|
19
|
+
('approval', "Approve or reject pending critical-label changes"),
|
|
20
|
+
('approval_bypass', "Skip the approval queue when editing critical labels"),
|
|
21
21
|
('account', "Account Management"),
|
|
22
22
|
('log', "Log View"),
|
|
23
23
|
('global_attributes', "Global Attributes"),
|
|
@@ -44,6 +44,7 @@ rules = {
|
|
|
44
44
|
'vmware_custom_attributes': ('application.plugins.vmware.models', 'VMwareCustomAttributes'),
|
|
45
45
|
'vmware_rewrite_attributes': ('application.plugins.vmware.models', 'VMwareRewriteAttributes'),
|
|
46
46
|
'syncer_rule_automation': ('application.plugins.rules.models', 'SyncerRuleAutomation'),
|
|
47
|
+
'cron_groups': ('application.models.cron', 'CronGroup'),
|
|
47
48
|
}
|
|
48
49
|
|
|
49
50
|
|
|
@@ -361,11 +361,11 @@
|
|
|
361
361
|
{% if pending_approval_count and pending_approval_count > 0 %}
|
|
362
362
|
<li id='pending-approvals' class="nav-item">
|
|
363
363
|
<a href="{{ pending_approval_url }}" class="nav-link"
|
|
364
|
-
title="
|
|
364
|
+
title="Critical label changes waiting for approval">
|
|
365
365
|
<i class="fa fa-hourglass-half"></i>
|
|
366
366
|
<span class="badge badge-warning"
|
|
367
367
|
style="background:#f39c12;color:#000;">
|
|
368
|
-
{{ pending_approval_count }}
|
|
368
|
+
{{ pending_approval_count }} label approvals
|
|
369
369
|
</span>
|
|
370
370
|
</a>
|
|
371
371
|
</li>
|
|
@@ -39,10 +39,14 @@ class FieldApprovalView(ModelView): # pylint: disable=too-many-public-methods,t
|
|
|
39
39
|
column_filters = ('status', 'hostname', 'field_name', 'requested_by_email')
|
|
40
40
|
|
|
41
41
|
def is_accessible(self):
|
|
42
|
-
# The approval queue
|
|
43
|
-
#
|
|
42
|
+
# The approval queue only applies when the operator has nominated
|
|
43
|
+
# critical labels in APPROVAL_REQUIRED_LABELS; with the default
|
|
44
|
+
# empty list nothing can ever land in the queue, so hide the menu
|
|
45
|
+
# entry entirely. Also hidden outside CMDB mode.
|
|
44
46
|
if not app.config.get('CMDB_MODE'):
|
|
45
47
|
return False
|
|
48
|
+
if not app.config.get('APPROVAL_REQUIRED_LABELS'):
|
|
49
|
+
return False
|
|
46
50
|
return current_user.is_authenticated and (
|
|
47
51
|
current_user.global_admin
|
|
48
52
|
or current_user.has_right('approval')
|
|
@@ -56,8 +60,8 @@ class FieldApprovalView(ModelView): # pylint: disable=too-many-public-methods,t
|
|
|
56
60
|
def action_approve(self, ids):
|
|
57
61
|
"""Apply each pending change to its host and mark the row approved."""
|
|
58
62
|
if not self._can_decide():
|
|
59
|
-
flash('Approval requires the "Approve or reject pending
|
|
60
|
-
'changes" role.', 'error')
|
|
63
|
+
flash('Approval requires the "Approve or reject pending '
|
|
64
|
+
'critical-label changes" role.', 'error')
|
|
61
65
|
return redirect(request.referrer or url_for('.index_view'))
|
|
62
66
|
applied, skipped = 0, 0
|
|
63
67
|
for approval in FieldApproval.objects(id__in=ids, status='pending'):
|
|
@@ -95,8 +99,8 @@ class FieldApprovalView(ModelView): # pylint: disable=too-many-public-methods,t
|
|
|
95
99
|
def action_reject(self, ids):
|
|
96
100
|
"""Mark each pending change as rejected without touching the host."""
|
|
97
101
|
if not self._can_decide():
|
|
98
|
-
flash('Approval requires the "Approve or reject pending
|
|
99
|
-
'changes" role.', 'error')
|
|
102
|
+
flash('Approval requires the "Approve or reject pending '
|
|
103
|
+
'critical-label changes" role.', 'error')
|
|
100
104
|
return redirect(request.referrer or url_for('.index_view'))
|
|
101
105
|
rejected = 0
|
|
102
106
|
for approval in FieldApproval.objects(id__in=ids, status='pending'):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cmdbsyncer
|
|
3
|
-
Version: 4.1.
|
|
3
|
+
Version: 4.1.2
|
|
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>
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "cmdbsyncer"
|
|
7
|
-
version = "4.1.
|
|
7
|
+
version = "4.1.2"
|
|
8
8
|
description = "Rule-based modular synchronizer for Checkmk, Netbox, Ansible, I-DOIT, Jira CMDB and 15+ other CMDB/monitoring systems"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = { text = "MIT" }
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
BUILD_DATE=2026-05-13T08:07:31Z
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/notices/strict_certificate_verification.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/notification_rules.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/tests/test_cmk_rules.py
RENAMED
|
File without changes
|
|
File without changes
|
{cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/tests/test_downtimes.py
RENAMED
|
File without changes
|
{cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/tests/test_groups.py
RENAMED
|
File without changes
|
{cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/tests/test_helpers.py
RENAMED
|
File without changes
|
{cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/tests/test_import_v1.py
RENAMED
|
File without changes
|
{cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/tests/test_import_v2.py
RENAMED
|
File without changes
|
{cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/tests/test_inventorize.py
RENAMED
|
File without changes
|
|
File without changes
|
{cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/tests/test_passwords.py
RENAMED
|
File without changes
|
{cmdbsyncer-4.1.0.dev22 → cmdbsyncer-4.1.2}/application/plugins/checkmk/tests/test_poolfolder.py
RENAMED
|
File without changes
|