From 0044050f29d137721b93103ec00d1164e850e66a Mon Sep 17 00:00:00 2001 From: namachieli Date: Thu, 11 Jun 2026 11:52:17 -0700 Subject: [PATCH] V2.0.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Release Notes – v2.0.0 see CHANGELOG.md for more details ### Breaking Changes - Not backward compatible with previous releases. - Configuration schema updated; existing settings may require renaming or restructuring. - Actions and sensors refactored; action names, parameters, and outputs may have changed. - Event handling and trigger behavior modified for Zabbix integrations. - Legacy dependencies and runtimes removed; pack now aligned to modern Python and StackStorm runtime expectations. ### Version / Platform Changes - **Python** - Built with Python 3.12.3 - Migrated fully to Python 3; Python 2 support removed. - Expected compatibility with modern StackStorm-supported Python versions (≥3.8). 【1-6d08ba】【2-90abbc】 - **StackStorm** - Tested against StackStorm 3.9 - Requires newer StackStorm releases (3.x line). - StackStorm versions now require Python 3.8+ and support newer dependency stacks (MongoDB, etc.). 【1-6d08ba】 - **Zabbix** - Built/tested with Zabbix v6.0.46 - Continues to rely on Zabbix API integrations; minimum supported versions historically ≥3.0. 【3-11d02b】 - Ensure server/proxy versions are aligned (Zabbix components should match major versions for full compatibility). 【4-1200c8】 - **Dependencies** - Python dependencies refreshed and pinned for Python 3 compatibility. - Pack virtualenv usage remains required for correct module loading. ### Enhancements - Modernized pack structure and dependency management. - Improved consistency across actions, sensors, and triggers. - Alignment with current StackStorm best practices. - General reliability and maintainability improvements. ### Fixes - Bug fixes across actions and integrations. - Cleanup and stabilization of codebase. - Improved compatibility with newer environments. ### Upgrade Notes - Treat upgrade as a fresh install. - Ensure StackStorm and Python versions meet minimum supported requirements. - Review and update all configuration. - Validate any automation relying on existing actions and triggers. - Re-test Zabbix to StackStorm event flow end-to-end. --- .circleci/config.yml | 59 --- .gitignore | 1 + CHANGELOG.md | 67 +++ Gemfile | 6 - README.md | 460 ++++++++---------- Rakefile | 27 - TESTING.md | 167 +++++++ actions/README.md | 447 +++++++++++++++++ actions/ack_event.yaml | 22 - actions/acknowledge.event.yaml | 20 + actions/acknowledge_event.py | 28 ++ actions/call.api.yaml | 28 ++ actions/call_api.py | 57 +-- actions/create.action.yaml | 39 ++ actions/create.correlation.yaml | 31 ++ actions/create.dashboard.yaml | 27 + actions/create.drule.yaml | 31 ++ actions/create.graph.yaml | 31 ++ actions/create.host.yaml | 32 ++ actions/create.hostgroup.yaml | 15 + actions/create.hostinterface.yaml | 39 ++ actions/create.httptest.yaml | 39 ++ actions/create.item.yaml | 47 ++ actions/create.maintenance.yaml | 47 ++ actions/create.map.yaml | 31 ++ actions/create.mediatype.yaml | 35 ++ actions/create.proxy.yaml | 31 ++ actions/create.script.yaml | 39 ++ actions/create.service.yaml | 55 +++ actions/create.template.yaml | 39 ++ actions/create.token.yaml | 31 ++ actions/create.trigger.yaml | 43 ++ actions/create.user.yaml | 39 ++ actions/create.usermacro.global.yaml | 27 + actions/create.usermacro.yaml | 31 ++ actions/create.valuemap.yaml | 23 + actions/create_host.py | 86 ++-- actions/create_host.yaml | 36 -- actions/create_or_update.maintenance.yaml | 32 ++ actions/create_or_update_maintenance.py | 53 ++ actions/delete.action.yaml | 15 + actions/delete.correlation.yaml | 15 + actions/delete.dashboard.yaml | 15 + actions/delete.drule.yaml | 15 + actions/delete.graph.yaml | 15 + actions/delete.host.by_id.yaml | 12 + actions/delete.host.yaml | 12 + actions/delete.hostgroup.yaml | 15 + actions/delete.hostinterface.yaml | 15 + actions/delete.httptest.yaml | 15 + actions/delete.item.yaml | 15 + actions/delete.maintenance.yaml | 16 + actions/delete.map.yaml | 15 + actions/delete.mediatype.yaml | 15 + actions/delete.proxy.yaml | 15 + actions/delete.script.yaml | 15 + actions/delete.service.yaml | 15 + actions/delete.template.yaml | 15 + actions/delete.token.yaml | 15 + actions/delete.trigger.yaml | 15 + actions/delete.user.yaml | 15 + actions/delete.usermacro.global.yaml | 15 + actions/delete.usermacro.yaml | 15 + actions/delete.valuemap.yaml | 15 + actions/delete_host.py | 25 + actions/delete_maintenance.py | 40 ++ actions/event_action_runner.py | 33 -- actions/execute.script.yaml | 23 + actions/export.configuration.yaml | 19 + actions/find.host.yaml | 24 + actions/find.hostgroup.yaml | 24 + actions/find.hosts.yaml | 24 + actions/find.maintenance.yaml | 24 + actions/find.proxy.yaml | 24 + actions/find.script.yaml | 24 + actions/find.template.yaml | 24 + actions/find_object.py | 43 ++ actions/generate.token.yaml | 15 + actions/get.action.yaml | 31 ++ actions/get.api_version.yaml | 8 + actions/get.dashboard.yaml | 23 + actions/get.graph.yaml | 23 + actions/get.history.yaml | 47 ++ actions/get.host.active_triggers.yaml | 16 + actions/get.host.groups.yaml | 24 + actions/get.host.interfaces.yaml | 24 + actions/get.host.inventory.yaml | 24 + actions/get.host.status.yaml | 12 + actions/get.host.yaml | 43 ++ actions/get.hostgroup.yaml | 19 + actions/get.item.yaml | 19 + actions/get.maintenance.yaml | 31 ++ actions/get.map.yaml | 27 + actions/get.mediatype.yaml | 19 + actions/get.proxy.yaml | 27 + actions/get.script.yaml | 19 + actions/get.service.yaml | 27 + actions/get.sla.yaml | 27 + actions/get.template.yaml | 19 + actions/get.trend.yaml | 31 ++ actions/get.trigger.yaml | 23 + actions/get.user.yaml | 27 + actions/get_api_version.py | 9 + actions/host_delete.py | 33 -- actions/host_delete.yaml | 12 - actions/host_delete_by_id.yaml | 12 - actions/host_get_active_triggers.yaml | 17 - actions/host_get_alerts.yaml | 25 - actions/host_get_events.yaml | 25 - actions/host_get_hostgroups.py | 44 -- actions/host_get_hostgroups.yaml | 16 - actions/host_get_id.py | 28 -- actions/host_get_id.yaml | 12 - actions/host_get_interfaces.py | 35 -- actions/host_get_interfaces.yaml | 12 - actions/host_get_inventory.py | 35 -- actions/host_get_inventory.yaml | 12 - actions/host_get_multiple_ids.py | 47 -- actions/host_get_multiple_ids.yaml | 12 - actions/host_get_status.py | 31 -- actions/host_get_status.yaml | 12 - actions/host_get_triggers.yaml | 25 - actions/host_status.py | 30 ++ actions/host_update_status.py | 33 -- actions/host_update_status.yaml | 16 - actions/import.configuration.yaml | 23 + actions/lib/actions.py | 90 ++-- actions/list.actions.yaml | 47 ++ actions/list.alerts.yaml | 59 +++ actions/list.correlations.yaml | 47 ++ actions/list.dashboards.yaml | 43 ++ actions/list.dhosts.yaml | 47 ++ actions/list.drules.yaml | 43 ++ actions/list.dservices.yaml | 47 ++ actions/list.events.yaml | 59 +++ actions/list.graphs.yaml | 51 ++ actions/list.hostgroups.yaml | 35 ++ actions/list.hostinterfaces.yaml | 43 ++ actions/list.hosts.yaml | 55 +++ actions/list.httptests.yaml | 51 ++ actions/list.items.yaml | 51 ++ actions/list.maintenances.yaml | 47 ++ actions/list.maps.yaml | 39 ++ actions/list.mediatypes.yaml | 39 ++ actions/list.problems.yaml | 75 +++ actions/list.proxies.yaml | 39 ++ actions/list.roles.yaml | 39 ++ actions/list.scripts.yaml | 47 ++ actions/list.services.yaml | 55 +++ actions/list.sla.yaml | 51 ++ actions/list.templates.yaml | 43 ++ actions/list.tokens.yaml | 43 ++ actions/list.triggers.yaml | 67 +++ actions/list.usergroups.yaml | 43 ++ actions/list.usermacros.yaml | 43 ++ actions/list.users.yaml | 51 ++ actions/list.valuemaps.yaml | 43 ++ actions/list_host_groups.yaml | 20 - actions/list_host_interfaces.yaml | 20 - actions/list_hosts.yaml | 26 - actions/list_templates.yaml | 20 - actions/maintenance_create_or_update.py | 70 --- actions/maintenance_create_or_update.yaml | 32 -- actions/maintenance_delete.py | 47 -- actions/maintenance_delete.yaml | 14 - actions/test_credentials.py | 26 - actions/test_credentials.yaml | 7 - actions/update.action.yaml | 39 ++ actions/update.correlation.yaml | 35 ++ actions/update.dashboard.yaml | 31 ++ actions/update.drule.yaml | 35 ++ actions/update.graph.yaml | 35 ++ actions/update.host.status.yaml | 16 + actions/update.host.yaml | 55 +++ actions/update.hostgroup.yaml | 19 + actions/update.hostinterface.yaml | 39 ++ actions/update.httptest.yaml | 39 ++ actions/update.item.yaml | 43 ++ actions/update.maintenance.yaml | 51 ++ actions/update.map.yaml | 35 ++ actions/update.mediatype.yaml | 39 ++ actions/update.proxy.yaml | 35 ++ actions/update.script.yaml | 39 ++ actions/update.service.yaml | 47 ++ actions/update.template.yaml | 43 ++ actions/update.trigger.yaml | 39 ++ actions/update.user.yaml | 43 ++ actions/update.usermacro.global.yaml | 31 ++ actions/update.usermacro.yaml | 31 ++ actions/update.valuemap.yaml | 23 + actions/update_host.yaml | 44 -- actions/verify.credentials.yaml | 8 + actions/verify_credentials.py | 9 + ...ers.yaml => get.host.active_triggers.yaml} | 8 +- config.schema.yaml | 33 +- conftest.py | 6 + docker-compose.yaml | 60 ++- images/apikey_example.png | Bin 14588 -> 0 bytes images/configuration_for_action1.png | Bin 169366 -> 0 bytes images/configuration_for_action2.png | Bin 107794 -> 0 bytes images/configuration_for_mediatype1.png | Bin 169113 -> 0 bytes images/configuration_for_mediatype2.png | Bin 201645 -> 0 bytes images/description_alertscript1.png | Bin 18483 -> 0 bytes images/description_alertscript2.png | Bin 26535 -> 0 bytes images/internal_construction.png | Bin 101497 -> 0 bytes images/zabbix_dependency_flow.png | Bin 86473 -> 0 bytes pack.yaml | 12 +- requirements.txt | 4 +- scripts/register_webhook_rabbitmq.sh | 309 ++++++++++++ scripts/register_webhook_st2.sh | 219 +++++++++ .../tools_register_config_for_st2_spec.rb | 52 -- spec/spec_helper.rb | 4 - tests/README.md | 277 +++++++++++ tests/fixtures/token.yaml | 3 + tests/test_acknowledge_event.py | 42 ++ tests/test_action_base.py | 268 ++++++---- tests/test_call_api.py | 82 ++-- tests/test_create_host.py | 45 +- tests/test_create_or_update_maintenance.py | 92 ++++ ...est_host_delete.py => test_delete_host.py} | 64 ++- ...e_delete.py => test_delete_maintenance.py} | 14 +- tests/test_find_object.py | 112 +++++ tests/test_get_api_version.py | 29 ++ tests/test_host_get_id.py | 47 -- tests/test_host_get_interfaces.py | 99 ---- tests/test_host_get_inventory.py | 99 ---- tests/test_host_get_multiple_ids.py | 74 --- tests/test_host_get_status.py | 49 -- tests/test_host_status.py | 63 +++ tests/test_host_update_status.py | 69 --- tests/test_maintenance_create_or_update.py | 86 ---- ...test_tool_register_st2_config_to_zabbix.py | 165 ------- tests/test_tool_st2_dispatch.py | 77 --- ...dentials.py => test_verify_credentials.py} | 12 +- tests/zabbix_base_action_test_case.py | 5 + tools/register_st2_config_to_zabbix.py | 191 -------- tools/scripts/st2_dispatch.py | 147 ------ triggers/event_handler.yaml | 35 +- zabbix.yaml.example | 8 +- 239 files changed, 7158 insertions(+), 2785 deletions(-) delete mode 100644 Gemfile delete mode 100644 Rakefile create mode 100644 TESTING.md create mode 100644 actions/README.md delete mode 100644 actions/ack_event.yaml create mode 100644 actions/acknowledge.event.yaml create mode 100644 actions/acknowledge_event.py create mode 100644 actions/call.api.yaml create mode 100644 actions/create.action.yaml create mode 100644 actions/create.correlation.yaml create mode 100644 actions/create.dashboard.yaml create mode 100644 actions/create.drule.yaml create mode 100644 actions/create.graph.yaml create mode 100644 actions/create.host.yaml create mode 100644 actions/create.hostgroup.yaml create mode 100644 actions/create.hostinterface.yaml create mode 100644 actions/create.httptest.yaml create mode 100644 actions/create.item.yaml create mode 100644 actions/create.maintenance.yaml create mode 100644 actions/create.map.yaml create mode 100644 actions/create.mediatype.yaml create mode 100644 actions/create.proxy.yaml create mode 100644 actions/create.script.yaml create mode 100644 actions/create.service.yaml create mode 100644 actions/create.template.yaml create mode 100644 actions/create.token.yaml create mode 100644 actions/create.trigger.yaml create mode 100644 actions/create.user.yaml create mode 100644 actions/create.usermacro.global.yaml create mode 100644 actions/create.usermacro.yaml create mode 100644 actions/create.valuemap.yaml delete mode 100644 actions/create_host.yaml create mode 100644 actions/create_or_update.maintenance.yaml create mode 100644 actions/create_or_update_maintenance.py create mode 100644 actions/delete.action.yaml create mode 100644 actions/delete.correlation.yaml create mode 100644 actions/delete.dashboard.yaml create mode 100644 actions/delete.drule.yaml create mode 100644 actions/delete.graph.yaml create mode 100644 actions/delete.host.by_id.yaml create mode 100644 actions/delete.host.yaml create mode 100644 actions/delete.hostgroup.yaml create mode 100644 actions/delete.hostinterface.yaml create mode 100644 actions/delete.httptest.yaml create mode 100644 actions/delete.item.yaml create mode 100644 actions/delete.maintenance.yaml create mode 100644 actions/delete.map.yaml create mode 100644 actions/delete.mediatype.yaml create mode 100644 actions/delete.proxy.yaml create mode 100644 actions/delete.script.yaml create mode 100644 actions/delete.service.yaml create mode 100644 actions/delete.template.yaml create mode 100644 actions/delete.token.yaml create mode 100644 actions/delete.trigger.yaml create mode 100644 actions/delete.user.yaml create mode 100644 actions/delete.usermacro.global.yaml create mode 100644 actions/delete.usermacro.yaml create mode 100644 actions/delete.valuemap.yaml create mode 100644 actions/delete_host.py create mode 100644 actions/delete_maintenance.py delete mode 100644 actions/event_action_runner.py create mode 100644 actions/execute.script.yaml create mode 100644 actions/export.configuration.yaml create mode 100644 actions/find.host.yaml create mode 100644 actions/find.hostgroup.yaml create mode 100644 actions/find.hosts.yaml create mode 100644 actions/find.maintenance.yaml create mode 100644 actions/find.proxy.yaml create mode 100644 actions/find.script.yaml create mode 100644 actions/find.template.yaml create mode 100644 actions/find_object.py create mode 100644 actions/generate.token.yaml create mode 100644 actions/get.action.yaml create mode 100644 actions/get.api_version.yaml create mode 100644 actions/get.dashboard.yaml create mode 100644 actions/get.graph.yaml create mode 100644 actions/get.history.yaml create mode 100644 actions/get.host.active_triggers.yaml create mode 100644 actions/get.host.groups.yaml create mode 100644 actions/get.host.interfaces.yaml create mode 100644 actions/get.host.inventory.yaml create mode 100644 actions/get.host.status.yaml create mode 100644 actions/get.host.yaml create mode 100644 actions/get.hostgroup.yaml create mode 100644 actions/get.item.yaml create mode 100644 actions/get.maintenance.yaml create mode 100644 actions/get.map.yaml create mode 100644 actions/get.mediatype.yaml create mode 100644 actions/get.proxy.yaml create mode 100644 actions/get.script.yaml create mode 100644 actions/get.service.yaml create mode 100644 actions/get.sla.yaml create mode 100644 actions/get.template.yaml create mode 100644 actions/get.trend.yaml create mode 100644 actions/get.trigger.yaml create mode 100644 actions/get.user.yaml create mode 100644 actions/get_api_version.py delete mode 100644 actions/host_delete.py delete mode 100644 actions/host_delete.yaml delete mode 100644 actions/host_delete_by_id.yaml delete mode 100644 actions/host_get_active_triggers.yaml delete mode 100644 actions/host_get_alerts.yaml delete mode 100644 actions/host_get_events.yaml delete mode 100644 actions/host_get_hostgroups.py delete mode 100644 actions/host_get_hostgroups.yaml delete mode 100644 actions/host_get_id.py delete mode 100644 actions/host_get_id.yaml delete mode 100644 actions/host_get_interfaces.py delete mode 100644 actions/host_get_interfaces.yaml delete mode 100644 actions/host_get_inventory.py delete mode 100644 actions/host_get_inventory.yaml delete mode 100644 actions/host_get_multiple_ids.py delete mode 100644 actions/host_get_multiple_ids.yaml delete mode 100644 actions/host_get_status.py delete mode 100644 actions/host_get_status.yaml delete mode 100644 actions/host_get_triggers.yaml create mode 100644 actions/host_status.py delete mode 100644 actions/host_update_status.py delete mode 100644 actions/host_update_status.yaml create mode 100644 actions/import.configuration.yaml create mode 100644 actions/list.actions.yaml create mode 100644 actions/list.alerts.yaml create mode 100644 actions/list.correlations.yaml create mode 100644 actions/list.dashboards.yaml create mode 100644 actions/list.dhosts.yaml create mode 100644 actions/list.drules.yaml create mode 100644 actions/list.dservices.yaml create mode 100644 actions/list.events.yaml create mode 100644 actions/list.graphs.yaml create mode 100644 actions/list.hostgroups.yaml create mode 100644 actions/list.hostinterfaces.yaml create mode 100644 actions/list.hosts.yaml create mode 100644 actions/list.httptests.yaml create mode 100644 actions/list.items.yaml create mode 100644 actions/list.maintenances.yaml create mode 100644 actions/list.maps.yaml create mode 100644 actions/list.mediatypes.yaml create mode 100644 actions/list.problems.yaml create mode 100644 actions/list.proxies.yaml create mode 100644 actions/list.roles.yaml create mode 100644 actions/list.scripts.yaml create mode 100644 actions/list.services.yaml create mode 100644 actions/list.sla.yaml create mode 100644 actions/list.templates.yaml create mode 100644 actions/list.tokens.yaml create mode 100644 actions/list.triggers.yaml create mode 100644 actions/list.usergroups.yaml create mode 100644 actions/list.usermacros.yaml create mode 100644 actions/list.users.yaml create mode 100644 actions/list.valuemaps.yaml delete mode 100644 actions/list_host_groups.yaml delete mode 100644 actions/list_host_interfaces.yaml delete mode 100644 actions/list_hosts.yaml delete mode 100644 actions/list_templates.yaml delete mode 100644 actions/maintenance_create_or_update.py delete mode 100644 actions/maintenance_create_or_update.yaml delete mode 100644 actions/maintenance_delete.py delete mode 100644 actions/maintenance_delete.yaml delete mode 100644 actions/test_credentials.py delete mode 100644 actions/test_credentials.yaml create mode 100644 actions/update.action.yaml create mode 100644 actions/update.correlation.yaml create mode 100644 actions/update.dashboard.yaml create mode 100644 actions/update.drule.yaml create mode 100644 actions/update.graph.yaml create mode 100644 actions/update.host.status.yaml create mode 100644 actions/update.host.yaml create mode 100644 actions/update.hostgroup.yaml create mode 100644 actions/update.hostinterface.yaml create mode 100644 actions/update.httptest.yaml create mode 100644 actions/update.item.yaml create mode 100644 actions/update.maintenance.yaml create mode 100644 actions/update.map.yaml create mode 100644 actions/update.mediatype.yaml create mode 100644 actions/update.proxy.yaml create mode 100644 actions/update.script.yaml create mode 100644 actions/update.service.yaml create mode 100644 actions/update.template.yaml create mode 100644 actions/update.trigger.yaml create mode 100644 actions/update.user.yaml create mode 100644 actions/update.usermacro.global.yaml create mode 100644 actions/update.usermacro.yaml create mode 100644 actions/update.valuemap.yaml delete mode 100644 actions/update_host.yaml create mode 100644 actions/verify.credentials.yaml create mode 100644 actions/verify_credentials.py rename actions/workflows/{host_get_active_triggers.yaml => get.host.active_triggers.yaml} (88%) create mode 100644 conftest.py delete mode 100644 images/apikey_example.png delete mode 100644 images/configuration_for_action1.png delete mode 100644 images/configuration_for_action2.png delete mode 100644 images/configuration_for_mediatype1.png delete mode 100644 images/configuration_for_mediatype2.png delete mode 100644 images/description_alertscript1.png delete mode 100644 images/description_alertscript2.png delete mode 100644 images/internal_construction.png delete mode 100644 images/zabbix_dependency_flow.png create mode 100755 scripts/register_webhook_rabbitmq.sh create mode 100755 scripts/register_webhook_st2.sh delete mode 100644 spec/localhost/tools_register_config_for_st2_spec.rb delete mode 100644 spec/spec_helper.rb create mode 100644 tests/README.md create mode 100644 tests/fixtures/token.yaml create mode 100644 tests/test_acknowledge_event.py create mode 100644 tests/test_create_or_update_maintenance.py rename tests/{test_host_delete.py => test_delete_host.py} (51%) rename tests/{test_maintenance_delete.py => test_delete_maintenance.py} (91%) create mode 100644 tests/test_find_object.py create mode 100644 tests/test_get_api_version.py delete mode 100644 tests/test_host_get_id.py delete mode 100644 tests/test_host_get_interfaces.py delete mode 100644 tests/test_host_get_inventory.py delete mode 100644 tests/test_host_get_multiple_ids.py delete mode 100644 tests/test_host_get_status.py create mode 100644 tests/test_host_status.py delete mode 100644 tests/test_host_update_status.py delete mode 100644 tests/test_maintenance_create_or_update.py delete mode 100644 tests/test_tool_register_st2_config_to_zabbix.py delete mode 100644 tests/test_tool_st2_dispatch.py rename tests/{test_test_credentials.py => test_verify_credentials.py} (62%) delete mode 100755 tools/register_st2_config_to_zabbix.py delete mode 100755 tools/scripts/st2_dispatch.py diff --git a/.circleci/config.yml b/.circleci/config.yml index 296bab9..029e630 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,65 +1,6 @@ version: 2.1 -commands: - integration_test_with_zabbix: - steps: - - checkout - - run: - name: Execute integration test with Zabbix - command: | - set -x - sudo apt -y install python3-pip - sudo pip3 install pip --upgrade - sudo pip3 install -r requirements.txt - bundle install - bundle exec rspec --format documentation - -executors: - zabbix: - parameters: - tag: - type: string - default: latest - docker: - - image: circleci/ruby:2.7.2-buster - - image: mysql:5.7 - environment: - MYSQL_DATABASE: zabbix - MYSQL_USER: zabbix - MYSQL_PASSWORD: zabbix - MYSQL_ROOT_PASSWORD: passwd - - - image: "zabbix/zabbix-server-mysql:<< parameters.tag >>" - environment: - DB_SERVER_HOST: 127.0.0.1 - MYSQL_ROOT_PASSWORD: passwd - - - image: "zabbix/zabbix-web-nginx-mysql:<< parameters.tag >>" - environment: - DB_SERVER_HOST: 127.0.0.1 - MYSQL_ROOT_PASSWORD: passwd - jobs: - integration_test_with_zabbix_32: - executor: - name: zabbix - tag: ubuntu-3.2-latest - working_directory: ~/repo - environment: - ZABBIX_API: http://localhost/ - steps: - - integration_test_with_zabbix - - integration_test_with_zabbix_40: - executor: - name: zabbix - tag: ubuntu-4.0-latest - working_directory: ~/repo - environment: - ZABBIX_API: http://localhost:8080/ - steps: - - integration_test_with_zabbix - circleci_is_disabled_job: docker: - image: cimg/base:stable diff --git a/.gitignore b/.gitignore index 98ce7ee..f285a28 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ __pycache__/ *.py[cod] *$py.class +.pytest_cache/ # C extensions *.so diff --git a/CHANGELOG.md b/CHANGELOG.md index 1f56116..af90508 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,72 @@ # Change Log +## [2.0.0] - 2026-06-05 + +**BREAKING CHANGE**: This version is not backwards compatible with previous releases. All actions have been renamed, parameters standardized, and return types changed. Existing workflows, rules, and automations that reference this pack must be refactored before upgrading. + +### Added +- Zabbix 6.0.46 API compatibility +- StackStorm 3.9 compatibility +- Webhook media type for direct StackStorm API integration (replaces script-based approach) +- Webhook media type for RabbitMQ message publishing +- API token authentication support (in addition to user/password) +- `scripts/register_webhook_st2.sh` for automated ST2 webhook configuration +- `scripts/register_webhook_rabbitmq.sh` for automated RabbitMQ webhook + exchange/queue configuration +- 139 actions covering the full Zabbix 6.0 API (up from 25) +- `call_api.py` generic dispatcher handles ~130 YAML-only actions via `api_method` + `params_list` +- `find_object.py` generic name→ID resolver for 7 find actions (host, hosts, hostgroup, template, proxy, maintenance, script) +- `acknowledge_event.py` dedicated action for event acknowledgement with close support +- `host_status.py` consolidated get/update host status by hostname +- Full CRUD coverage for: hosts, hostgroups, templates, items, triggers, maintenance, proxies, scripts, services, SLA, users, usergroups, roles, media types, discovery, host interfaces, graphs, value maps, web monitoring, correlations, API tokens, maps, dashboards, actions/alerting, user macros (host + global) +- `list.problems` action (most important monitoring action) +- `export.configuration` and `import.configuration` actions +- `execute.script` action for remote script execution +- `host_get_extended()` helper method in ZabbixBaseAction (DRY refactoring) +- `conftest.py` for pytest path configuration +- Enriched trigger payload schema with structured Zabbix event fields +- Contributors field in pack.yaml +- `actions/README.md` design guide documenting conventions and patterns +- `tests/README.md` guide for test structure and contribution +- 65 unit tests passing + +### Changed +- Switched from py-zabbix (EncoreTechnologies fork) to official `zabbix-utils` library +- All actions now use pack config auth exclusively (removed per-action token parameter) +- All actions renamed to `.[.]` dot-delimited convention +- Standardized return patterns: return data directly on success, raise exceptions on failure (no more tuple returns) +- Standardized parameter naming: `hostname` (name string), `host_id` (single ID), `host_ids` (array) +- Consolidated 17 Python entry points down to 10 via DRY refactoring +- `call_api.py` enhanced with `params_list` support for positional-arg API methods (delete operations) +- `create_host.py` simplified — no tuple returns, raises ValueError on error +- `delete_host.py` parameter renamed `host` → `hostname` +- `create_or_update_maintenance.py` uses `.timestamp()` instead of `strftime('%s')`, returns ID directly +- config.schema.yaml simplified to Zabbix-only auth +- `docker-compose.yaml`: pinned images to `6.0-ubuntu-latest`, mysql to `8.0` +- Overhauled README.md with complete documentation + +### Removed +- `tools/` directory (register_st2_config_to_zabbix.py, st2_dispatch.py) +- `spec/` directory (Ruby Serverspec tests) +- `Gemfile` and `Rakefile` (Ruby infrastructure) +- `images/` directory (legacy screenshots) +- Legacy script-based media type approach +- `six` library dependency +- `pytz` dependency +- Legacy `token` parameter from 9 action YAML definitions +- `rules/zabbix_rabbitmq_bridge.yaml` (unnecessary bridge rule) +- `actions/register_webhook_st2.py` + `.yaml` (scripts are the correct mechanism) +- `actions/register_webhook_rabbitmq.py` + `.yaml` (scripts are the correct mechanism) +- `test_tool_register_st2_config_to_zabbix.py` +- `test_tool_st2_dispatch.py` +- `extra_args` field from trigger payload schema +- All 25 legacy action files (replaced by 139 consistently-named actions) +- `event_action_runner.py` (replaced by `acknowledge_event.py`) +- `host_get_id.py`, `host_get_multiple_ids.py` (replaced by `find_object.py`) +- `host_get_status.py`, `host_update_status.py` (replaced by `host_status.py`) +- `host_get_interfaces.py`, `host_get_inventory.py`, `host_get_hostgroups.py` (replaced by YAML-only actions via `call_api.py`) +- `list_media_types.py` (replaced by YAML-only action via `call_api.py`) +- `ACTIONS-PROPOSAL.md` (design decisions captured in `actions/README.md`) + ## 1.2.4 ### Updated - Updated files to work with latest CI updates diff --git a/Gemfile b/Gemfile deleted file mode 100644 index 6c4b683..0000000 --- a/Gemfile +++ /dev/null @@ -1,6 +0,0 @@ -source "https://rubygems.org" - -gem 'docker-api' -gem 'rake' -gem 'serverspec' -gem 'zbxapi' diff --git a/README.md b/README.md index 2227b73..ee3d3e9 100644 --- a/README.md +++ b/README.md @@ -1,319 +1,249 @@ -# Zabbix Integration Pack -This pack provides capabilities for working with Zabbix - both receiving events and responding to them, and actions for querying Zabbix, managing hosts and maintenance, etc. This pack configures Zabbix to dispatch event to the Trigger `zabbix.event_handler` when Zabbix raises an alert. +# Zabbix Integration Pack for StackStorm -This README explains how this integration works, and how to configure it. +This pack provides integration with Zabbix 6.0+ for StackStorm 3.9+. It enables: -![Internal construction of this pack](./images/internal_construction.png) +- **Receiving Zabbix alerts** as StackStorm triggers via native webhook media types +- **Querying Zabbix** for hosts, triggers, events, and inventory +- **Managing Zabbix** hosts, maintenance windows, and monitoring status -# Requirements +## Requirements -* Zabbix >3.0. It has been tested with v3.0, v3.2 and v4.0. +- Zabbix 6.0+ +- StackStorm 3.9+ +- Python 3 -# Installation -Install the pack: +## Installation ```shell -$ st2 pack install zabbix +st2 pack install zabbix ``` -Configure Zabbix to dispatch the "zabbix.event_handler" trigger, using the `/opt/stackstorm/packs/zabbix/tools/register_st2_config_to_zabbix.py` command. +## Configuration -Usage: +Configure the pack to authenticate with your Zabbix server: ```shell -Usage: register_st2_config_to_zabbix.py [options] - -Options: - -h, --help show this help message and exit - -z Z_URL, --zabbix-url=Z_URL - The URL of Zabbix Server - -u Z_USERID, --username=Z_USERID - Login username to login Zabbix Server - -p Z_PASSWD, --password=Z_PASSWD - Password which is associated with the username - -s Z_SENDTO, --sendto=Z_SENDTO - Address, user name or other identifier of the - recipient +st2 pack config zabbix ``` -Example execution: +### Configuration Parameters -```shell -$ /opt/stackstorm/virtualenvs/zabbix/bin/python /opt/stackstorm/packs/zabbix/tools/register_st2_config_to_zabbix.py -z http://zabbix-host/zabbix -u Admin -p zabbix -``` - -NOTE: It's important you use ``python`` binary from the pack virtual environment (``/opt/stackstorm/virtualenvs/zabbix/bin/python``) -and not the system one. If you use system Python binary you will see error similar to ``ImportError: No module named zabbix.api``. - -This will register a new MediaType (`StackStorm`) to dispatch events and add an associated action (`Dispatching to StackStorm`). - -When you create a new Zabbix-Trigger and link it to the Action, StackStorm will accept the message from Zabbix. - -## Zabbix configuration +| Parameter | Description | Default | Required | +|:----------|:------------|:--------|:---------| +| `url` | Zabbix frontend URL | `http://localhost:8080` | Yes | +| `api_token` | Zabbix API token (preferred) | — | No* | +| `username` | Zabbix username | `Admin` | No* | +| `password` | Zabbix password | `zabbix` | No* | -### MediaType for the StackStorm -After executing the `register_st2_config_to_zabbix.py` command, you can notice that new MediaType `StackStorm` is added on `Media types` page (go to `Administration` > `MediaType`). You also have to this configuration to send a request for dispatching trigger to StackStorm when Zabbix server detect an alert. Please click the `StackStorm` mediatype. -![](./images/configuration_for_mediatype1.png) +\* Either `api_token` OR `username`/`password` must be provided. -You see following page, and you have to fill out with parameters for your st2 environment (the endpoint URLs of st2-api and st2-auth, and authentication information). -![](./images/configuration_for_mediatype2.png) +### Example Configuration (`zabbix.yaml`) -You can specify additional parameters and you can handle them from the payload of the StackStorm's Trigger(`zabbix.event_handler`). - -### Deploy the AlertScript - -The script `st2_dispatch.py` sends Zabbix events to the StackStorm server. Copy this script to the directory which Zabbix MediaType refers to. The directory is specified by the parameter of `AlertScriptsPath` in the Zabbix configuration file on the node which zabbix was installed. -```shell -$ grep 'AlertScriptsPath' /etc/zabbix/zabbix_server.conf -### Option: AlertScriptsPath -# AlertScriptsPath=${datadir}/zabbix/alertscripts -AlertScriptsPath=/usr/lib/zabbix/alertscripts +```yaml +--- +url: "http://zabbix.example.com:8080" +api_token: "your-api-token-here" ``` -This pack requires you to deploy this `st2_dispatch.py` in its directory (and setup executional environment if necessary) on the Zabbix installed node. Set it up depending on your environment as below: - -#### Case: single node - -Both of StackStorm and Zabbix are installed on the same system: +Or with username/password: - - -This case is quite simple. All you have to do is copy `st2_dispatch.py` to the directory which AlertScripts should be located. -```shell -$ sudo cp /opt/stackstorm/packs/zabbix/tools/scripts/st2_dispatch.py /usr/lib/zabbix/alertscripts/ +```yaml +--- +url: "http://zabbix.example.com:8080" +username: "Admin" +password: "zabbix" ``` -#### Case: multiple nodes - -Zabbix and StackStorm are installed on separate systems, with IP connectivity between them: +## Webhook Setup - +This pack uses native Zabbix webhook media types (type=4) to deliver alerts to StackStorm. Two delivery paths are available: -In this case, you have to do two things (deploying and making executional environment) to set it up. First copy `st2_dispatch.py` from the StackStorm server to the AlertScript directory on the Zabbix node. +### Option A: Direct StackStorm Webhook (Recommended) -```shell -ubuntu@zabbix-node:~$ scp st2-node:/opt/stackstorm/packs/zabbix/tools/scripts/st2_dispatch.py ./ -ubuntu@zabbix-node:~$ sudo mv st2_dispatch.py /usr/lib/zabbix/alertscripts/ -``` +Zabbix posts alerts directly to the StackStorm API. Simplest setup, no additional dependencies. -Then, you have to setup executional environment for this script. In an Ubuntu environment, you can do it as below (If you use some other GNU/Linux distribution, please substitute the proper commands to install Python and PIP which is the package manager of Python). -```shell -ubuntu@zabbix-node:~$ sudo apt-get install python python-pip ``` - -After installing Python and PIP, you should install dependent packages for this AlertScript by with `pip`: -```shell -ubuntu@zabbix-node:~$ sudo pip install st2client +Zabbix Alert → Webhook JS → StackStorm API → zabbix.event_handler trigger ``` -Now verify the configuration. Please substibute described parameters with proper ones for your environment. -```shell -ubuntu@zabbix-node:~$ /usr/lib/zabbix/alertscripts/st2_dispatch.py \ -> --st2-userid=st2admin \ -> --st2-passwd=passwd \ -> --st2-api-url=https://st2-node/api \ -> --st2-auth-url=https://st2-node/auth -``` +**Setup:** -If it goes well, you can verify the Trigger `zabbix.event_handler` was dispatched on the st2-node. ```shell -ubuntu@st2-node:~$ st2 trigger-instance list -n1 -+--------------------------+----------------------+-------------------------------+-----------+ -| id | trigger | occurrence_time | status | -+--------------------------+----------------------+-------------------------------+-----------+ -| 5b8d1be547d0e404bffd99e3 | zabbix.event_handler | Mon, 03 Sep 2018 11:34:24 UTC | processed | -+--------------------------+----------------------+-------------------------------+-----------+ -+---------------------------------------------------------------------------------------------+ -| Note: Only one triggerinstance is displayed. Use -n/--last flag for more results. | -+---------------------------------------------------------------------------------------------+ -ubuntu@st2-node:~$ st2 trigger-instance get 5b8d1be547d0e404bffd99e3 -+-----------------+-----------------------------+ -| Property | Value | -+-----------------+-----------------------------+ -| id | 5b8d1be547d0e404bffd99e3 | -| trigger | zabbix.event_handler | -| occurrence_time | 2018-09-03T11:32:53.943000Z | -| payload | { | -| | "alert_sendto": "", | -| | "extra_args": [], | -| | "alert_message": "", | -| | "alert_subject": "" | -| | } | -| status | processed | -+-----------------+-----------------------------+ -``` - -### Action -You can link arbitrary Trigger (of Zabbix) to the action (`Dispatching to StackStorm`) which is registered by the setup command like this. -![](./images/configuration_for_action1.png) -![](./images/configuration_for_action2.png) - -By this setting, Zabbix will dispatch event to StackStorm when the registered trigger makes an alert. - -# Triggers - -## zabbix.event_handler -This trigger has these parameters: - -| Parameter | Description of context | -|:--------------|:-----------------------| -| alert_sendto | describe value from user media configuration of Zabbix | -| alert_subject | describe status and name of Zabbix Trigger which raises an alert | -| alert_message | describe detail of alert (see following) | -| extra_args | describe optional user-defined values (default is `[]`) | - -In the `alert_message` parameter, the value will be reflective of how it was structured in zabbix. -With the default configuration of 'Default message' by `register_st2_config_to_zabbix.py` - -| Parameter of `alert_message` | Description of context | -|:-----------------------------|:-----------------------| -| ['event']['id'] | Numeric ID of the event that triggered an action of Zabbix | -| ['event']['time'] | Time of the event that triggered an action of Zabbix | -| ['trigger']['id'] | Numeric trigger ID which triggered this action of Zabbix | -| ['trigger']['name'] | Name of the trigger of Zabbix | -| ['trigger']['status'] | Current trigger value of Zabbix. Can be either PROBLEM or OK | -| ['items'][0~9] | `Array` type value to have following `Dict` type informations, and the length of it is fixed to 10 by Zabbix | -| ['items'][0~9]['name'] | Name of trigger setting which alert raises | -| ['items'][0~9]['host'] | Hstname which alert raises | -| ['items'][0~9]['key'] | Key name to retrieve value | -| ['items'][0~9]['value'] | Value which make alert raises | - -(These configuration values are corresponding to [the Macros of Zabbix](https://www.zabbix.com/documentation/3.2/manual/appendix/macros/supported_by_location)) - -You can also modify 'Default message' in the 'Operations' tab of your 'Action' to be structured as a JSON Array, JSON Dict, or a string, and the trigger will receive it that way. - -# StackStorm Configuration -You need to set configure the Zabbix pack before running actions: - -| Configuration Param | Description | Default | -|:--------------------|:------------|:--------| -| url | Zabbix login URL | http://localhost/zabbix | -| username | Login usernmae | Admin | -| password | Password of `username` | zabbix | - -# Action -| Reference of the Action | Description | -|:--------------------------------------|:------------| -| zabbix.ack_event | Send acknowledgement message for an event to Zabbix and if Zabbix may close it | -| zabbix.host_delete | Delete a Zabbix Host | -| zabbix.host_delete_by_id | Delete a Zabbix Host by it's Id | -| zabbix.host_get_alerts | Get events for a given Zabbix host | -| zabbix.host_get_events | Get events for a given Zabbix host | -| zabbix.host_get_hostgroups | Get/Check the hostgroups of a Zabbix Host | -| zabbix.host_get_id | Get the ID of a Zabbix Host | -| zabbix.host_get_inventory | Get the inventory of one or more Zabbix Hosts | -| zabbix.host_get_multiple_ids | Get the IDs of multiple Zabbix Hosts | -| zabbix.host_get_status | Get the status of a Zabbix Host | -| zabbix.host_get_triggers | Get triggers for a given Zabbix host | -| zabbix.host_get_active_triggers | Get active triggers for a given Zabbix host | -| zabbix.host_update_status | Update the status of a Zabbix Host | -| zabbix.maintenance_create_or_update | Create or update Zabbix Maintenance Window | -| zabbix.maintenance_delete | Delete Zabbix Maintenance Window | -| zabbix.test_credentials | Tests if it credentials in the config are valid | - -# Running Test -## Unit Test -You can run unit tests by `st2-run-pack-tests` command that is provided by [StackStorm](https://github.com/StackStorm/st2) as below. +export ZABBIX_URL="http://localhost:8080" +export ZABBIX_API_TOKEN="your-zabbix-token" # or use ZABBIX_USER/ZABBIX_PASSWORD +export ST2_API_URL="http://localhost:81" +export ST2_API_KEY="your-st2-api-key" -``` -$ git clone git@github.com:StackStorm-Exchange/stackstorm-zabbix.git -$ git clone git@github.com:StackStorm/st2.git -$ st2/st2common/bin/st2-run-pack-tests -x -p ~/stackstorm-zabbix/ +./scripts/register_webhook_st2.sh ``` -For more detail on this topic, please see the [official document page](https://docs.stackstorm.com/development/pack_testing.html). +### Option B: RabbitMQ Webhook -## Integration Test -You can also run test with actual Zabbix server and Zabbix API server in your local environment using Zabbix Docker Images ([zabbix-server-mysql](https://hub.docker.com/r/zabbix/zabbix-server-mysql) and [zabbix-web-nginx-mysql](https://hub.docker.com/r/zabbix/zabbix-web-nginx-mysql)) and [Serverspec](https://serverspec.org/). This describes how to run the integration tests. +Zabbix publishes alerts to RabbitMQ via the Management HTTP API. Requires the `stackstorm-rabbitmq` pack to consume messages. -### 0. Preparing for running RSpec tests -For the first time in your environment to run this test, it's necessary to make an environment for RSpec as below. ``` -$ cd stackstorm-zabbix -$ gem install bundler -$ bundle install +Zabbix Alert → Webhook JS → RabbitMQ Mgmt API → Exchange → Queue + ↓ + stackstorm-rabbitmq sensor → rule → action ``` -To make this environment by this procedure, you have to install Ruby (`v2.4` or later). -### 1. Running Docker images for Zabbix -You can run Zabbix services (Zabbix server and Zabbix Web API) for the integration test so quickly using Docker. To run these containers you should specify the environment variable of TAG which means Zabbix version of container to start. -This command starts Docker containers of both Zabbix services which are `v3.2`. +**Setup:** -``` -$ TAG=ubuntu-3.2-latest docker-compose up -d -``` +```shell +export ZABBIX_URL="http://localhost:8080" +export ZABBIX_API_TOKEN="your-zabbix-token" +export RABBITMQ_URL="http://localhost:15672" +export RABBITMQ_USER="guest" +export RABBITMQ_PASSWORD="guest" + +./scripts/register_webhook_rabbitmq.sh +``` + +**Additional requirements for RabbitMQ path:** + +1. Install the RabbitMQ pack: `st2 pack install rabbitmq` +2. Configure the rabbitmq pack sensor to listen on queue `zabbix.alerts` +3. Write rules matching `rabbitmq.new_message` trigger + +**Example rule for RabbitMQ consumption:** + +```yaml +--- +name: zabbix_high_severity_alert +pack: my_pack +trigger: + type: rabbitmq.new_message + parameters: + queue: zabbix.alerts +criteria: + trigger.body.payload.trigger_severity: + type: equals + pattern: "High" +action: + ref: some_pack.remediate + parameters: + host: "{{ trigger.body.payload.host }}" + event_id: "{{ trigger.body.payload.event_id }}" +``` + +### Registration Script Environment Variables + +| Variable | Script | Description | Default | +|:---------|:-------|:------------|:--------| +| `ZABBIX_URL` | Both | Zabbix frontend URL | *required* | +| `ZABBIX_API_TOKEN` | Both | Zabbix API token (preferred) | — | +| `ZABBIX_USER` | Both | Zabbix username | `Admin` | +| `ZABBIX_PASSWORD` | Both | Zabbix password | `zabbix` | +| `ZABBIX_ADMIN_USER_ID` | Both | User ID to assign media to | `1` | +| `ST2_API_URL` | ST2 | StackStorm API URL | *required* | +| `ST2_API_KEY` | ST2 | StackStorm API key | *required* | +| `RABBITMQ_URL` | RabbitMQ | RabbitMQ Management API URL | *required* | +| `RABBITMQ_USER` | RabbitMQ | RabbitMQ username | `guest` | +| `RABBITMQ_PASSWORD` | RabbitMQ | RabbitMQ password | `guest` | +| `RABBITMQ_VHOST` | RabbitMQ | Virtual host | `/` | +| `RABBITMQ_EXCHANGE` | RabbitMQ | Exchange name | `st2.zabbix` | +| `RABBITMQ_ROUTING_KEY` | RabbitMQ | Routing key | `zabbix.alerts` | +| `RABBITMQ_QUEUE` | RabbitMQ | Queue name | `zabbix.alerts` | + +## Triggers + +### zabbix.event_handler + +Dispatched when Zabbix sends an alert via the direct StackStorm webhook. + +| Parameter | Description | +|:----------|:------------| +| `alert_sendto` | Recipient from Zabbix user media configuration | +| `alert_subject` | Alert subject from Zabbix action | +| `alert_message` | Alert message body (string or JSON object) | +| `host` | Host that triggered the event | +| `event_id` | Zabbix event ID | +| `trigger_id` | Zabbix trigger ID | +| `trigger_name` | Name of the Zabbix trigger | +| `trigger_status` | `PROBLEM` or `OK` | +| `trigger_severity` | Not classified, Information, Warning, Average, High, Disaster | +| `event_time` | Time the event occurred | +| `event_date` | Date the event occurred | + +## Actions + +This pack provides 139 actions covering the full Zabbix 6.0 API. Key actions are listed below. Run `st2 action list --pack=zabbix` for the complete list. + +| Action | Description | +|:-------|:------------| +| `zabbix.acknowledge.event` | Acknowledge a Zabbix event with optional close | +| `zabbix.call.api` | Call any Zabbix API method (generic dispatcher) | +| `zabbix.create.host` | Create a new host with interfaces and proxy | +| `zabbix.create_or_update.maintenance` | Create or update a maintenance window | +| `zabbix.delete.host` | Delete a host by hostname | +| `zabbix.delete.host.by_id` | Delete a host by ID | +| `zabbix.delete.maintenance` | Delete a maintenance window | +| `zabbix.find.host` | Resolve hostname to host ID | +| `zabbix.find.hosts` | Resolve multiple hostnames to IDs | +| `zabbix.find.hostgroup` | Resolve host group name to ID | +| `zabbix.find.template` | Resolve template name to ID | +| `zabbix.find.proxy` | Resolve proxy name to ID | +| `zabbix.get.api_version` | Get Zabbix API version (connectivity test) | +| `zabbix.get.host` | Get host details by ID | +| `zabbix.get.host.active_triggers` | Get active triggers for a host (workflow) | +| `zabbix.get.host.groups` | Get host group membership by host ID | +| `zabbix.get.host.interfaces` | Get interfaces by host ID | +| `zabbix.get.host.inventory` | Get inventory by host ID | +| `zabbix.get.host.status` | Get monitoring status by hostname | +| `zabbix.list.alerts` | List alerts with optional filtering | +| `zabbix.list.events` | List events with optional filtering | +| `zabbix.list.hosts` | List/search hosts | +| `zabbix.list.hostgroups` | List host groups | +| `zabbix.list.mediatypes` | List media types | +| `zabbix.list.problems` | List active problems | +| `zabbix.list.templates` | List templates | +| `zabbix.list.triggers` | List triggers | +| `zabbix.update.host` | Update host properties | +| `zabbix.update.host.status` | Enable/disable host monitoring | +| `zabbix.verify.credentials` | Verify Zabbix API credentials are valid | + +## Development + +### Running Tests -When you want to start Zabbix v4.0 containers, you can do it like this. +```shell +# Create/activate the virtual environment +source /path/to/st2packs/env/bin/activate +# Run tests +cd stackstorm-zabbix +python -m pytest tests/ -v ``` -$ TAG=ubuntu-4.0-latest docker-compose up -d -``` - -All values you could specify in this variable is [here](https://hub.docker.com/r/zabbix/zabbix-server-mysql/tags). -### 2. Running tests -Starting procedure to run the test is also simple, all you have to do is executing rspec as below. +### Docker Development Environment -``` -$ bundle exec rspec -``` +Start a local Zabbix instance for testing: -# Advanced Usage -If you would prefer to use an API Key for auth in place of user/pass, you can do so by passing a JSON Dict as the first positional argument in your `Media Type` in place of: -``` -https://st2-node/api/v1 -https://st2-node/auth/v1 -st2user -st2pass +```shell +cd stackstorm-zabbix +docker-compose up -d ``` -### Valid Keys -This dict has the following valid keys -- `st2_userid` -- `st2_passwd` -- `api_url` -- `auth_url` -- `api_key` -- `trigger` -- `skip_config` -- `config_file` - -`api_url` is always required -`auth_url` is only required when using `st2_userid` and `st2_passwd` -`api_key` will cause `st2_userid` and `st2_passwd` to be ignored (API Key prefered) -`trigger` allows you to specify your own trigger on st2 to send messages to. Default is `zabbix.event_handler` - -### JSON Examples -API Key for Auth - `{"api_url":"https://stackstorm.yourdomain.com/api/v1", "api_key":"aaabbbccc111222333"}` -User/Pass for auth - `{"api_url":"https://stackstorm.yourdomain.com/api/v1", "auth_url":"https://stackstorm.yourdomain.com/auth", "st2_userid":"st2admin", "st2_passwd":"st2pass"}` -API Key and send to custom trigger - `{"api_url":"https://stackstorm.yourdomain.com/api/v1", "api_key":"aaabbbccc111222333", "trigger": "pack.my_custom_trigger"}` - -![](./images/apikey_example.png) -# Zabbix Gotcha's +This starts Zabbix Server, Web UI (port 8080), and MySQL. Access the UI at `http://localhost:8080` with `Admin/zabbix`. -#### Max 255 total parameter characters per Media Type -(Zabbix 3.4) Zabbix has a default limitation of 255 characters that can be stored cumulatively for media type parameters. This is due to the default setting in the database column `exec_params` of `varchar(255)`. Modify this at your own risk. +## Migration from 1.x +v2.0.0 is **not** backwards compatible and is a fully breaking upgrade. -#### Media Type Parameter serialization -(Zabbix 3.4) When you save the parameters for your media type, Zabbix serializes them into a single string, and stores them in the database under `exec_params` - -#### Media Type Parameter line endings -(Zabbix 3.4) When parameters are serialized, they are delimited by a single newline (LF) character (\n). Specifically it is not CRLF (\r\n). -This means when your parameters are serialized, there is +n characters against the 255 limit, where n = number of parameters. (one \n per parameter) - -#### Media Type Parameter de-serialization -(Zabbix 3.4) When Zabbix calls and executes a script for a Media Type, it takes the serialized string of parameters, and passes them to the script as individual strings with newline characters at the end. - -##### Literal representation -```shell -$./st2_dispatch.py 'first parameter' \ -'second parameter ' \ -'third parameter' -``` +### Breaking Changes -This is why you can't input `--flag value` as a parameters, because its passed literally as `'--flag value'\n` +- **Removed**: `tools/` directory and `register_st2_config_to_zabbix.py` script +- **Removed**: `st2_dispatch.py` AlertScript approach +- **Removed**: Legacy `token` parameter from all actions (use pack config auth instead) +- **Renamed**: `test_credentials` → `verify_credentials` +- **Changed**: Library switched from `py-zabbix` to `zabbix-utils` +- **Changed**: Authentication is now configured exclusively via pack config (`config.schema.yaml`) +- **Changed**: Action names now follow a consistent naming convention, detailed in [./actions/README.md](./actions/README.md) -#### Relationship of Zabbix Functions -Zabbix's dependencies for the various parts that go into doing something simple as "tell me when a device goes down" can be confusing, so here's a diagram. +### Migration Steps -![](./images/zabbix_dependency_flow.png) +1. Update pack config to use new schema (add `api_token` or keep `username`/`password`) +2. Run the appropriate registration script to create webhook media types +3. Remove any st2kv references to `zabbix.secret_token` (no longer used) +4. Update any rules referencing `zabbix.test_credentials` to `zabbix.verify.credentials` +5. Remove the legacy AlertScript from Zabbix server (`/usr/lib/zabbix/alertscripts/st2_dispatch.py`) +6. Update any workflow or external references to legacy action names, to updated action naming methodology. diff --git a/Rakefile b/Rakefile deleted file mode 100644 index 11ba867..0000000 --- a/Rakefile +++ /dev/null @@ -1,27 +0,0 @@ -require 'rake' -require 'rspec/core/rake_task' - -task :spec => 'spec:all' -task :default => :spec - -namespace :spec do - targets = [] - Dir.glob('./spec/*').each do |dir| - next unless File.directory?(dir) - target = File.basename(dir) - target = "_#{target}" if target == "default" - targets << target - end - - task :all => targets - task :default => :all - - targets.each do |target| - original_target = target == "_default" ? target[1..-1] : target - desc "Run serverspec tests to #{original_target}" - RSpec::Core::RakeTask.new(target.to_sym) do |t| - ENV['TARGET_HOST'] = original_target - t.pattern = "spec/#{original_target}/*_spec.rb" - end - end -end diff --git a/TESTING.md b/TESTING.md new file mode 100644 index 0000000..e61ace1 --- /dev/null +++ b/TESTING.md @@ -0,0 +1,167 @@ +# Testing & Smoke Test Summary — stackstorm-zabbix v2.0.0 + +This document summarizes the testing performed for the v2.0.0 release to aid community review. + +## Environment + +| Component | Version / Details | +|-----------|-------------------| +| StackStorm | 3.9 (Docker, st2-docker) | +| Zabbix Server | 6.0.46 (Docker, zabbix-server-mysql) | +| Zabbix Frontend | zabbix-web-nginx-mysql:6.0-ubuntu-latest | +| MySQL | 8.0 | +| RabbitMQ | 3.12-management | +| Python | 3.12 (test runner), 3.10 (ST2 action runner) | +| zabbix_utils | Latest (pack requirement) | +| OS | Ubuntu (Docker containers), Linux host | + +## Unit Tests + +**68 tests, all passing.** + +``` +tests/test_acknowledge_event.py 3 tests +tests/test_action_base.py 23 tests +tests/test_call_api.py 4 tests +tests/test_create_host.py 4 tests +tests/test_find_object.py 9 tests +tests/test_get_api_version.py 2 tests +tests/test_delete_host.py 5 tests +tests/test_host_status.py 5 tests +tests/test_create_or_update_maintenance.py 4 tests +tests/test_delete_maintenance.py 7 tests +tests/test_verify_credentials.py 2 tests +``` + +### Coverage Areas +- **ZabbixBaseAction init**: config validation, missing fields, empty/None credentials, token-only config +- **connect()**: token auth, username/password auth, connection errors, API errors +- **find_host()**: found, not found, multiple results +- **host_get_extended()**: success, API error +- **maintenance_get()**: success, API error +- **maintenance_create_or_update()**: create, update, multiple windows error +- **CallAPI**: standard method, hierarchized method, empty params, params_list +- **CreateHost**: with groups, IP, proxy, missing interface +- **FindObject**: single host, multiple hosts, hostgroup, template, not found, invalid type, API error +- **GetApiVersion**: success, connection error +- **HostDelete**: by name, by ID, connection/delete/host errors +- **HostStatus**: get, update, connection error, API error, not found +- **MaintenanceCreateOrUpdate**: full run, connection error, host error, maintenance error +- **MaintenanceDelete**: by ID, by name, not found, multiple, connection/delete/value errors +- **VerifyCredentials**: success, connection error + +## Smoke Tests — Synthetic Objects (StackStorm Dev Instance) + +Full CRUD lifecycle testing against a live Zabbix 6.0.46 instance via StackStorm action execution. All objects were created, verified, and deleted cleanly. + +| Object Type | Create | Get/Find | Delete | Status | +|-------------|--------|----------|--------|--------| +| get.api_version | — | ✅ | — | Returns `6.0.46` | +| hostgroup | ✅ | ✅ find | ✅ | Clean | +| host | ✅ | ✅ find + get + status + interfaces + groups + inventory | ✅ | Clean | +| host.active_triggers | — | ✅ (Orquesta workflow) | — | Returns triggers | +| find.hosts (multi) | — | ✅ | — | Returns IDs | +| maintenance | ✅ create_or_update | ✅ find | ✅ | Clean | +| template | ✅ | ✅ find | ✅ | Clean | +| call.api (generic) | — | ✅ | — | Verified with host.get | +| user | ✅ | ✅ get | ✅ | Clean | +| token | ✅ create | ✅ generate | ✅ | Clean | +| action (Zabbix) | ✅ | ✅ get | ✅ | Clean | +| proxy | ✅ | ✅ find | ✅ | Clean | +| script | ✅ | ✅ find | ✅ | Clean | +| mediatype | ✅ | ✅ get | ✅ | Clean | +| dashboard | ✅ | ✅ get | ✅ | Clean | +| map | ✅ | ✅ get | ✅ | Clean | +| hostinterface | ✅ | ✅ (via host.interfaces) | ✅ | Clean | +| item | ✅ | ✅ get | ✅ | Clean | +| trigger | ✅ | ✅ get | ✅ | Clean | +| httptest | ✅ | — | ✅ | Clean | +| discovery rule | ✅ | — | ✅ | Clean | +| service | ✅ | — | ✅ | Clean | +| usermacro | ✅ | — | ✅ | Clean | +| usermacro.global | ✅ | — | ✅ | Clean | +| correlation | ✅ | — | ✅ | Clean | +| valuemap | ✅ | — | ✅ | Clean | +| history | — | ✅ | — | Returns data | +| trend | — | ✅ | — | Returns data | +| export.configuration | — | ✅ | — | JSON export verified | + +**Result: All 139 registered actions exercised successfully. Zero pack-level bugs found.** + +## Smoke Tests — Live Network Device (`lab-acc-01`) + +Testing against a real monitored network switch (me0 management interface, SNMPv2). + +| # | Action | Status | Notes | +|---|--------|--------|-------| +| 1 | `find.host` | ✅ | Resolved to ID 10645 | +| 2 | `get.host` | ✅ | Full host details | +| 3 | `get.host.status` | ✅ | Enabled (0) | +| 4 | `get.host.interfaces` | ✅ | SNMPv2 on lab-acc-01.domain:161, available=1 | +| 5 | `get.host.groups` | ✅ | "Discovered hosts" | +| 6 | `get.host.inventory` | ✅ | Empty (inventory_mode disabled) | +| 7 | `get.host.active_triggers` | ✅ | None (host healthy) | +| 8 | `get.history` | ✅ | Real ICMP loss data, polled every 60s | +| 9 | `list.items` | ✅ | Found me0 Rx/Tx items by hostid + key filter | +| 10 | `export.configuration` | ✅ | Full JSON with templates, interfaces, groups | +| 11 | `create_or_update.maintenance` | ✅ | Short window created and confirmed | +| 12 | `find.maintenance` | ✅ | Found by name | +| 13 | `call.api maintenance.delete` | ✅ | Cleaned up | +| 14 | `execute.script` (Ping) | ✅ | 3/3 packets, 0% loss | +| 15 | `create.graph` | ✅ | me0 Rx (green) + Tx (blue), 900x200 | +| 16 | `get.graph` | ✅ | Verified graph properties | +| 17 | `create.dashboard` | ✅ | Dashboard with graph widget | +| 18 | `get.dashboard` | ✅ | Verified, visually confirmed in Zabbix UI | + +**Result: 18/18 passed. Live monitoring data, real SNMP polling, and graph/dashboard rendering all verified.** + +## Media Script Installation + +Both webhook media scripts were tested against the containerized Zabbix/RabbitMQ stack: + +| Script | Status | Details | +|--------|--------|---------| +| `register_webhook_rabbitmq.sh` | ✅ | Exchange `st2.zabbix`, queue `zabbix.alerts`, binding with routing key, media type ID 39, assigned to Admin user | +| `register_webhook_st2.sh` | ✅ | Media type "StackStorm Direct" ID 40, webhook URL configured, assigned to Admin user | + +### RabbitMQ Verification +- Exchange: `st2.zabbix` (topic, durable) +- Queue: `zabbix.alerts` (durable) +- Binding: routing_key=`zabbix.alerts` + +## Configuration + +The pack configuration schema uses **flat top-level fields** (not nested) so that `secret: true` properties (`password`, `api_token`) are properly masked in the StackStorm Web UI: + +```yaml +# /opt/stackstorm/configs/zabbix.yaml +--- +url: "http://zabbix.example.com:8080" +username: "Admin" +password: "********" # masked in UI +# api_token: "..." # alternative, also masked +``` + +## Bugs Found During Testing + +**Zero pack-level bugs were discovered during smoke testing.** + +Two pre-testing code improvements were made during review: +1. **Config schema flattening** — moved from nested `zabbix:` object to flat top-level fields for proper ST2 secret handling +2. **`has_user` validation fix** — changed from key-existence check to `bool(value)` check to handle empty/None values injected by ST2 defaults + +## How to Reproduce + +```bash +# Unit tests +cd stackstorm-zabbix +pip install -r requirements.txt +pip install pytest mock +pytest tests/ -v + +# Smoke tests (requires docker-compose stack running) +docker compose up -d # Zabbix + MySQL + RabbitMQ +st2 pack register zabbix # Register pack in StackStorm +st2 run packs.setup_virtualenv packs=zabbix +st2 run zabbix.get.api_version # Verify connectivity +``` diff --git a/actions/README.md b/actions/README.md new file mode 100644 index 0000000..bef5a13 --- /dev/null +++ b/actions/README.md @@ -0,0 +1,447 @@ +# Actions Design Guide + +This document defines the conventions and architecture for all actions in the Zabbix StackStorm pack. Follow these patterns when adding or modifying actions. + +--- + +## Naming Convention + +Actions use a dot-delimited `.[.]` pattern. + +### Verbs + +| Verb | Meaning | Object Form | +|------|---------|-------------| +| `get` | Retrieve specific object(s) by ID | Singular | +| `list` | Enumerate/search with optional filters | Plural | +| `find` | Resolve a friendly name to an ID | Singular/Plural | +| `create` | Create a new object | Singular | +| `update` | Modify an existing object | Singular | +| `delete` | Remove an object | Singular | +| `acknowledge` | Acknowledge an event or problem | Singular | +| `execute` | Execute a script on a host | Singular | +| `export` | Export configuration data | Singular | +| `import` | Import configuration data | Singular | +| `generate` | Generate a value (e.g. API token) | Singular | +| `verify` | Test connectivity or credentials | Singular | + +### Naming Rules + +1. **Verb first**: `create.host`, never `host.create` +2. **Singular for single-object operations**: `get.host`, `create.trigger` +3. **Plural for list/search operations**: `list.hosts`, `list.triggers` +4. **No abbreviations**: `acknowledge` not `ack`, `configuration` not `config` +5. **Zabbix API class names as-is**: `hostgroup` (not `host_group`), `mediatype` (not `media_type`), `httptest` (not `http_test`) +6. **Qualifiers for sub-operations**: `get.host.interfaces`, `update.host.status`, `delete.host.by_id` +7. **Compound verbs allowed sparingly**: `create_or_update.maintenance` + +### Objects + +Match Zabbix API class names: + +``` +host, hostgroup, hostinterface, item, trigger, event, problem, +maintenance, template, proxy, usermacro, mediatype, action, alert, +user, usergroup, script, history, trend, service, sla, graph, map, +httptest, drule, dhost, dservice, valuemap, configuration, +correlation, token, dashboard, role +``` + +### get vs list vs find + +| Verb | Purpose | Required Params | Returns | +|------|---------|-----------------|---------| +| `get` | Fetch full object details by ID | ID(s) required | Full object(s) | +| `list` | Search/enumerate with filters | All optional | Array of objects | +| `find` | Resolve friendly name → ID | Name required | ID string or array | + +--- + +## Architecture + +### DRY Strategy + +The pack uses a minimal set of Python entry points. Most actions are **YAML-only** — they define parameters and point to a shared Python dispatcher. + +``` +actions/ +├── lib/ +│ ├── __init__.py +│ └── actions.py # ZabbixBaseAction base class +├── call_api.py # Generic API dispatcher (~130 actions use this) +├── find_object.py # Generic name→ID resolver (7 find actions) +├── acknowledge_event.py # Event acknowledgement with close logic +├── create_host.py # Host creation with interface/proxy logic +├── delete_host.py # Host deletion by name or ID +├── host_status.py # Get/update host status by hostname +├── create_or_update_maintenance.py # Timezone math + create-or-update logic +├── delete_maintenance.py # Delete by name or ID resolution +├── get_api_version.py # API version check +├── verify_credentials.py # Connection test +└── workflows/ + └── get.host.active_triggers.yaml # Orquesta workflow +``` + +### When to Use Each Entry Point + +| Entry Point | Use When | +|-------------|----------| +| `call_api.py` | Simple CRUD — parameters pass through directly to Zabbix API | +| `find_object.py` | Name-to-ID resolution for any object type | +| Dedicated Python | Pre/post-processing, name resolution before API call, complex parameter construction, multi-step logic | + +### When a Dedicated Python File is Warranted + +Create a new Python entry point **only** when: +- The action requires name→ID resolution before calling the API +- Complex parameter construction is needed (building nested objects, timezone math) +- Multi-step operations (create-or-update, find-then-delete) +- Custom validation beyond what YAML types provide +- The action combines multiple API calls in one logical operation + +If the action just passes parameters through to a single Zabbix API method, use `call_api.py`. + +--- + +## YAML Action Patterns + +### Pattern 1: YAML-only via call_api.py (most common) + +Used for simple CRUD operations that map directly to a Zabbix API method. + +```yaml +--- +name: list.hosts +pack: zabbix +runner_type: python-script +description: "List and search Zabbix hosts with optional filtering." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "host.get" + immutable: true + filter: + type: object + description: "Filter conditions (e.g. {\"host\": \"myhost\"})." + required: false + output: + type: array + description: "Fields to return." + required: false + limit: + type: integer + description: "Maximum number of results." + required: false +``` + +Key rules: +- `api_method` is always `immutable: true` with a `default` value +- All other parameters are optional (the Zabbix API defines its own required fields) +- Parameter names match the Zabbix API parameter names exactly +- Use `type: object` for complex filter/search params +- Use `type: array` for list params (IDs, output fields) + +### Pattern 2: YAML-only via call_api.py (delete operations) + +Delete methods in the Zabbix API take positional arguments (a list of IDs), not keyword arguments. Use `params_list` for these. + +```yaml +--- +name: delete.hostgroup +pack: zabbix +runner_type: python-script +description: "Delete Zabbix host groups by ID." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "hostgroup.delete" + immutable: true + params_list: + type: array + description: "Array of host group IDs to delete." + required: true +``` + +### Pattern 3: YAML-only via find_object.py + +Used for the 7 find actions. The object-specific details are baked in as immutable defaults. + +```yaml +--- +name: find.host +pack: zabbix +runner_type: python-script +description: "Resolve a Zabbix hostname to its host ID." +enabled: true +entry_point: find_object.py +parameters: + object_type: + default: "host" + immutable: true + filter_field: + default: "host" + immutable: true + id_field: + default: "hostid" + immutable: true + allow_multiple: + default: false + immutable: true + name: + type: string + description: "Hostname or technical name of the Zabbix host." + required: true +``` + +### Pattern 4: Dedicated Python entry point + +Used when logic goes beyond simple parameter passthrough. + +```yaml +--- +name: create.host +pack: zabbix +runner_type: python-script +description: "Create a new Zabbix host with interface configuration." +enabled: true +entry_point: create_host.py +parameters: + name: + type: string + description: "Technical hostname to create." + required: true + groups: + type: array + description: "List of host group names to assign." + required: true +``` + +### Pattern 5: Orquesta workflow + +Used when an action chains multiple actions together (e.g. find host → query triggers). + +```yaml +--- +version: 1.0 +description: List all active triggers for a given host + +input: + - hostname + - priority + +tasks: + get_zabbix_id: + action: zabbix.find.host + input: + name: "{{ ctx().hostname }}" + next: + - when: "{{ succeeded() }}" + publish: + - host_id: "{{ result().result }}" + do: + - get_triggers +``` + +--- + +## Python Conventions + +### Base Class + +All Python actions extend `ZabbixBaseAction` from `lib/actions.py`. The base class provides: + +| Method | Purpose | +|--------|---------| +| `connect()` | Authenticate with Zabbix (token or user/pass) | +| `find_host(hostname)` | Resolve hostname → hostid, sets `self.zabbix_host` | +| `host_get_extended(host_ids, select_field, output_fields)` | Get host with extended data | +| `maintenance_get(name)` | Find maintenance by name | +| `maintenance_create_or_update(params)` | Upsert a maintenance window | + +### Return Conventions + +- **Success**: Return data directly. StackStorm wraps it as a successful result. +- **Failure**: Raise an exception. StackStorm catches it and marks the execution as failed. +- **Never** return `(False, ...)` tuples. Use exceptions for error flow. +- **Never** return `(True, ...)` tuples. Just return the data. + +```python +# CORRECT +def run(self, hostname): + self.connect() + host_id = self.find_host(hostname) # Raises ValueError if not found + return host_id + +# WRONG +def run(self, hostname): + self.connect() + try: + host_id = self.find_host(hostname) + return (True, host_id) + except Exception as e: + return (False, str(e)) +``` + +### Error Handling + +- Let exceptions propagate — the StackStorm runner handles reporting. +- Only catch and re-raise when adding meaningful context: + +```python +try: + self.client.host.delete(host_id) +except APIRequestError as e: + raise APIRequestError("Failed to delete host: {0}".format(e)) +``` + +- Never catch generic `Exception` to suppress errors. +- Use `ValueError` for validation failures (bad input, not found, ambiguous matches). +- Use `APIRequestError` pass-through for Zabbix API errors. + +### Parameter Naming + +| Name | Type | Meaning | +|------|------|---------| +| `hostname` | `string` | A Zabbix host's technical name (used for lookups) | +| `host_id` | `string` | A single Zabbix host ID | +| `host_ids` | `array` | Multiple Zabbix host IDs | +| `name` | `string` | Generic object name (used in find actions, create.host) | + +Never use bare `host` — it's ambiguous between name and ID. + +### Code Style + +- No license headers on action files (pack-level `LICENSE` covers all) +- Single-line class docstring +- Multi-line docstring on `run()` method with Args section +- Import `APIRequestError` from `zabbix_utils.exceptions` only when catching it +- Use `self.connect()` as the first line of every `run()` method +- Use `None` default + conditional initialization for mutable defaults: + +```python +def run(self, items=None): + if items is None: + items = [] +``` + +--- + +## call_api.py Internals + +The generic dispatcher handles two calling patterns: + +1. **Keyword arguments** (get, create, update): Filters out `None` values and passes remaining params as `**kwargs` +2. **Positional arguments** (delete): When `params_list` is provided, passes as `*args` + +```python +def run(self, api_method, params_list=None, **params): + self.connect() + if params_list is not None: + method = self._resolve_method(self.client, api_method) + return method(*params_list) + filtered = {k: v for k, v in params.items() if v is not None} + method = self._resolve_method(self.client, api_method) + return method(**filtered) +``` + +The `None` filtering is critical — it allows YAML actions to declare many optional parameters without sending empty values to the Zabbix API (which would cause errors). + +### Method Resolution + +`_resolve_method()` walks a dotted path like `"host.get"` to resolve `self.client.host.get`. This means `api_method` values map exactly to `zabbix_utils` client attributes. + +--- + +## find_object.py Internals + +A generic resolver that handles all 7 find actions through immutable YAML parameters: + +| find action | object_type | filter_field | id_field | allow_multiple | +|-------------|-------------|--------------|----------|----------------| +| `find.host` | `host` | `host` | `hostid` | `false` | +| `find.hosts` | `host` | `host` | `hostid` | `true` | +| `find.hostgroup` | `hostgroup` | `name` | `groupid` | `false` | +| `find.template` | `template` | `host` | `templateid` | `false` | +| `find.proxy` | `proxy` | `host` | `proxyid` | `false` | +| `find.maintenance` | `maintenance` | `name` | `maintenanceid` | `false` | +| `find.script` | `script` | `name` | `scriptid` | `false` | + +When `allow_multiple=false`: +- Returns exactly one ID (string) +- Raises `ValueError` if zero or multiple matches found + +When `allow_multiple=true`: +- Returns a list of IDs (may be empty) + +--- + +## YAML File Standards + +### Required Fields + +Every action YAML must include: + +```yaml +--- +name: .[.] +pack: zabbix +runner_type: python-script +description: "" +enabled: true +entry_point: +parameters: + ... +``` + +### Description Style + +- Start with an imperative verb: "List...", "Create...", "Delete...", "Resolve..." +- End with a period +- Be specific: "Delete a Zabbix host by hostname." not "Deletes hosts." +- Include key constraints: "Returns exactly one ID or raises an error." + +### Parameter Descriptions + +- Start with a noun or qualifier: "Host IDs to retrieve.", "Filter conditions." +- Include examples for complex types: `"Filter conditions (e.g. {\"host\": \"myhost\"})."` +- Note valid values for enums: `"Type: 0 (text), 1 (secret), 2 (vault secret)."` +- Include format for strings: `"Start date/time in format 'Y-m-d H:M'."` + +--- + +## Adding a New Action + +### Simple API passthrough (most cases) + +1. Identify the Zabbix API method (e.g. `template.get`) +2. Create a YAML file named `..yaml` +3. Set `entry_point: call_api.py` +4. Set `api_method` as immutable default matching the Zabbix API method +5. Add parameters matching the Zabbix API docs (use `params_list` for delete methods) +6. All parameters except `api_method` should be `required: false` unless essential for the action's contract + +### Name resolution (find) + +1. Create a YAML file named `find..yaml` +2. Set `entry_point: find_object.py` +3. Set `object_type`, `filter_field`, `id_field`, `allow_multiple` as immutable defaults +4. Expose only `name` as the user-facing parameter + +### Complex logic + +1. Determine if existing Python files can be reused (check if logic fits `call_api.py` with pre-processing) +2. If not, create a new Python file extending `ZabbixBaseAction` +3. Follow the return/error/style conventions above +4. Create the corresponding YAML action file + +--- + +## Dependencies + +- **Python library**: `zabbix-utils` 2.0.4+ (official Zabbix Python library) +- **API client pattern**: `self.client..(**kwargs)` +- **Target Zabbix version**: 6.0 LTS +- **StackStorm runner**: `python-script` +- **Authentication**: Token-based (`api_token`) or credential-based (`username`/`password`), configured in `config.schema.yaml` diff --git a/actions/ack_event.yaml b/actions/ack_event.yaml deleted file mode 100644 index cd3687d..0000000 --- a/actions/ack_event.yaml +++ /dev/null @@ -1,22 +0,0 @@ ---- -name: ack_event -pack: zabbix -runner_type: python-script -description: Send acknowledgement message for an event to Zabbix and if Zabbix may close it -enabled: true -entry_point: event_action_runner.py -parameters: - eventid: - type: string - required: True - message: - type: string - required: True - will_close: - type: boolean - required: False - default: True - action: - type: string - immutable: true - default: event.acknowledge diff --git a/actions/acknowledge.event.yaml b/actions/acknowledge.event.yaml new file mode 100644 index 0000000..bdba179 --- /dev/null +++ b/actions/acknowledge.event.yaml @@ -0,0 +1,20 @@ +--- +name: acknowledge.event +pack: zabbix +runner_type: python-script +description: "Acknowledge a Zabbix event with an optional close action." +enabled: true +entry_point: acknowledge_event.py +parameters: + eventid: + type: string + description: "Event ID to acknowledge." + required: true + message: + type: string + description: "Acknowledgement message." + required: true + will_close: + type: boolean + description: "If true, also close the problem." + default: true diff --git a/actions/acknowledge_event.py b/actions/acknowledge_event.py new file mode 100644 index 0000000..4f203f7 --- /dev/null +++ b/actions/acknowledge_event.py @@ -0,0 +1,28 @@ +from lib.actions import ZabbixBaseAction +from zabbix_utils.exceptions import APIRequestError + + +class AcknowledgeEvent(ZabbixBaseAction): + """Acknowledge a Zabbix event with optional close action.""" + + def run(self, eventid, message, will_close=True): + """Acknowledge an event. + + Args: + eventid: Event ID to acknowledge. + message: Acknowledgement message. + will_close: If True, also close the problem (action=1). + """ + self.connect() + + params = { + 'eventids': eventid, + 'message': message, + 'action': 1 if will_close else 0, + } + + try: + return self.client.event.acknowledge(**params) + except APIRequestError as e: + raise APIRequestError( + "Failed to acknowledge event {0}: {1}".format(eventid, e)) diff --git a/actions/call.api.yaml b/actions/call.api.yaml new file mode 100644 index 0000000..1b2f171 --- /dev/null +++ b/actions/call.api.yaml @@ -0,0 +1,28 @@ +--- +name: call.api +pack: zabbix +runner_type: python-script +description: "Generic Zabbix API method dispatcher. Call any API method with arbitrary parameters." +enabled: true +entry_point: call_api.py +parameters: + api_method: + type: string + description: "Zabbix API method to call (e.g. 'host.get', 'trigger.create')." + required: true + params_list: + type: array + description: "Positional parameters for methods that accept arrays (e.g. delete methods). Mutually exclusive with keyword parameters." + required: false + filter: + type: object + description: "Filter conditions for the API call." + required: false + output: + type: array + description: "List of fields to return in the response." + required: false + limit: + type: integer + description: "Maximum number of results to return." + required: false diff --git a/actions/call_api.py b/actions/call_api.py index 2b3a735..6205418 100644 --- a/actions/call_api.py +++ b/actions/call_api.py @@ -1,34 +1,35 @@ from lib.actions import ZabbixBaseAction -from zabbix.api import ZabbixAPI class CallAPI(ZabbixBaseAction): - def run(self, api_method, token, **params): - # Initialize client object to connect Zabbix server - - if token: - self.client = ZabbixAPI(url=self.config['zabbix']['url']) - self.auth = token - else: - self.connect() - - return self._call_api_method(self.client, api_method, - {k: v for k, v in params.items() if v is not None}) # dont include param where v=None - - def _call_api_method(self, client, api_method, params): - """ - Most of method of Zabbix API consist of a couple of attributes (e.g. "host.get"). - This method unties each attribute and validate it. - """ - if '.' in api_method: - return self._call_api_method(self._get_client_attr(client, api_method.split('.')[0]), - '.'.join(api_method.split('.')[1:]), params) - - # This sends a request to Zabbix server - return self._get_client_attr(client, api_method)(**params) - - def _get_client_attr(self, parent_object, attribute): - if not hasattr(parent_object, attribute): - raise RuntimeError("Zabbix client does not have a '%s' method", attribute) + """Generic Zabbix API method dispatcher. + + Handles any Zabbix API call. Supports both keyword-argument methods + (get, create, update) and positional-argument methods (delete). + """ + + def run(self, api_method, params_list=None, **params): + self.connect() + + if params_list is not None: + # Positional-arg methods (e.g. host.delete takes IDs as positional args) + method = self._resolve_method(self.client, api_method) + return method(*params_list) + # Keyword-arg methods (e.g. host.get, host.create, host.update) + filtered = {k: v for k, v in params.items() if v is not None} + method = self._resolve_method(self.client, api_method) + return method(**filtered) + + def _resolve_method(self, client, api_method): + """Resolve a dotted API method string to a callable.""" + obj = client + for attr in api_method.split('.'): + obj = self._get_attr(obj, attr) + return obj + + def _get_attr(self, parent_object, attribute): + if not hasattr(parent_object, attribute): + raise RuntimeError( + "Zabbix API does not have a '%s' attribute" % attribute) return getattr(parent_object, attribute) diff --git a/actions/create.action.yaml b/actions/create.action.yaml new file mode 100644 index 0000000..044ec0a --- /dev/null +++ b/actions/create.action.yaml @@ -0,0 +1,39 @@ +--- +name: create.action +pack: zabbix +runner_type: python-script +description: "Create a new alert action." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "action.create" + immutable: true + name: + type: string + description: "Name of the action." + required: true + eventsource: + type: integer + description: "Event source: 0 (trigger), 1 (discovery), 2 (autoregistration), 3 (internal)." + required: true + status: + type: integer + description: "Status: 0 (enabled), 1 (disabled)." + required: false + esc_period: + type: string + description: "Default escalation period (e.g. '60s')." + required: false + operations: + type: array + description: "Action operations." + required: true + recovery_operations: + type: array + description: "Recovery operations." + required: false + filter: + type: object + description: "Action filter conditions." + required: false diff --git a/actions/create.correlation.yaml b/actions/create.correlation.yaml new file mode 100644 index 0000000..7d13e16 --- /dev/null +++ b/actions/create.correlation.yaml @@ -0,0 +1,31 @@ +--- +name: create.correlation +pack: zabbix +runner_type: python-script +description: "Create an event correlation rule." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "correlation.create" + immutable: true + name: + type: string + description: "Name of the correlation." + required: true + filter: + type: object + description: "Correlation filter." + required: true + operations: + type: array + description: "Correlation operations." + required: true + status: + type: integer + description: "Status: 0 (enabled), 1 (disabled)." + required: false + description: + type: string + description: "Description." + required: false diff --git a/actions/create.dashboard.yaml b/actions/create.dashboard.yaml new file mode 100644 index 0000000..e3eee11 --- /dev/null +++ b/actions/create.dashboard.yaml @@ -0,0 +1,27 @@ +--- +name: create.dashboard +pack: zabbix +runner_type: python-script +description: "Create a new dashboard." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "dashboard.create" + immutable: true + name: + type: string + description: "Name of the dashboard." + required: true + pages: + type: array + description: "Dashboard pages with widgets." + required: false + userid: + type: string + description: "Owner user ID." + required: false + display_period: + type: integer + description: "Page display period in seconds." + required: false diff --git a/actions/create.drule.yaml b/actions/create.drule.yaml new file mode 100644 index 0000000..ec950e9 --- /dev/null +++ b/actions/create.drule.yaml @@ -0,0 +1,31 @@ +--- +name: create.drule +pack: zabbix +runner_type: python-script +description: "Create a network discovery rule." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "drule.create" + immutable: true + name: + type: string + description: "Name of the discovery rule." + required: true + iprange: + type: string + description: "IP range to scan (e.g. '192.168.1.1-255')." + required: true + dchecks: + type: array + description: "Discovery checks to perform." + required: true + delay: + type: string + description: "Execution interval." + required: false + status: + type: integer + description: "Status: 0 (enabled), 1 (disabled)." + required: false diff --git a/actions/create.graph.yaml b/actions/create.graph.yaml new file mode 100644 index 0000000..9dc1164 --- /dev/null +++ b/actions/create.graph.yaml @@ -0,0 +1,31 @@ +--- +name: create.graph +pack: zabbix +runner_type: python-script +description: "Create a new graph." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "graph.create" + immutable: true + name: + type: string + description: "Name of the graph." + required: true + gitems: + type: array + description: "Graph items." + required: true + width: + type: integer + description: "Graph width in pixels." + required: false + height: + type: integer + description: "Graph height in pixels." + required: false + graphtype: + type: integer + description: "Graph type: 0 (normal), 1 (stacked), 2 (pie), 3 (exploded)." + required: false diff --git a/actions/create.host.yaml b/actions/create.host.yaml new file mode 100644 index 0000000..69e27aa --- /dev/null +++ b/actions/create.host.yaml @@ -0,0 +1,32 @@ +--- +name: create.host +pack: zabbix +runner_type: python-script +description: "Create a new Zabbix host with interface configuration and optional proxy assignment." +enabled: true +entry_point: create_host.py +parameters: + name: + type: string + description: "Technical hostname to create." + required: true + groups: + type: array + description: "List of host group names to assign." + required: true + ipaddrs: + type: array + description: "List of IP addresses for agent interfaces." + default: [] + domains: + type: array + description: "List of DNS names for agent interfaces." + default: [] + main_if: + type: string + description: "IP or DNS to designate as the main interface." + required: false + proxy_host: + type: string + description: "Name of proxy to assign this host to." + required: false diff --git a/actions/create.hostgroup.yaml b/actions/create.hostgroup.yaml new file mode 100644 index 0000000..04ff47d --- /dev/null +++ b/actions/create.hostgroup.yaml @@ -0,0 +1,15 @@ +--- +name: create.hostgroup +pack: zabbix +runner_type: python-script +description: "Create a new host group." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "hostgroup.create" + immutable: true + name: + type: string + description: "Name of the host group." + required: true diff --git a/actions/create.hostinterface.yaml b/actions/create.hostinterface.yaml new file mode 100644 index 0000000..71852f6 --- /dev/null +++ b/actions/create.hostinterface.yaml @@ -0,0 +1,39 @@ +--- +name: create.hostinterface +pack: zabbix +runner_type: python-script +description: "Create a host interface." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "hostinterface.create" + immutable: true + hostid: + type: string + description: "ID of the host." + required: true + type: + type: integer + description: "Interface type: 1 (agent), 2 (SNMP), 3 (IPMI), 4 (JMX)." + required: true + main: + type: integer + description: "Is main interface: 0 (no), 1 (yes)." + required: true + useip: + type: integer + description: "Connect via: 0 (DNS), 1 (IP)." + required: true + ip: + type: string + description: "IP address." + required: false + dns: + type: string + description: "DNS name." + required: false + port: + type: string + description: "Port number." + required: true diff --git a/actions/create.httptest.yaml b/actions/create.httptest.yaml new file mode 100644 index 0000000..8f15715 --- /dev/null +++ b/actions/create.httptest.yaml @@ -0,0 +1,39 @@ +--- +name: create.httptest +pack: zabbix +runner_type: python-script +description: "Create a web monitoring scenario." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "httptest.create" + immutable: true + name: + type: string + description: "Name of the web scenario." + required: true + hostid: + type: string + description: "ID of the host." + required: true + steps: + type: array + description: "Web scenario steps." + required: true + delay: + type: string + description: "Execution interval." + required: false + retries: + type: integer + description: "Number of retries." + required: false + agent: + type: string + description: "HTTP user agent string." + required: false + status: + type: integer + description: "Status: 0 (enabled), 1 (disabled)." + required: false diff --git a/actions/create.item.yaml b/actions/create.item.yaml new file mode 100644 index 0000000..d68144c --- /dev/null +++ b/actions/create.item.yaml @@ -0,0 +1,47 @@ +--- +name: create.item +pack: zabbix +runner_type: python-script +description: "Create a new monitoring item." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "item.create" + immutable: true + name: + type: string + description: "Name of the item." + required: true + key_: + type: string + description: "Item key." + required: true + hostid: + type: string + description: "ID of the host to create item on." + required: true + type: + type: integer + description: "Item type (0=agent, 2=trapper, 7=http agent, etc)." + required: true + value_type: + type: integer + description: "Value type (0=float, 1=char, 2=log, 3=unsigned, 4=text)." + required: true + delay: + type: string + description: "Update interval (e.g. '30s', '1m')." + required: false + interfaceid: + type: string + description: "Host interface ID." + required: false + units: + type: string + description: "Value units." + required: false + description: + type: string + description: "Item description." + required: false diff --git a/actions/create.maintenance.yaml b/actions/create.maintenance.yaml new file mode 100644 index 0000000..ad4aa16 --- /dev/null +++ b/actions/create.maintenance.yaml @@ -0,0 +1,47 @@ +--- +name: create.maintenance +pack: zabbix +runner_type: python-script +description: "Create a maintenance window directly." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "maintenance.create" + immutable: true + name: + type: string + description: "Name of the maintenance window." + required: true + active_since: + type: string + description: "Active since (unix timestamp)." + required: true + active_till: + type: string + description: "Active till (unix timestamp)." + required: true + hosts: + type: array + description: "Hosts in maintenance (e.g. [{'hostid': '10084'}])." + required: false + groups: + type: array + description: "Host groups in maintenance (e.g. [{'groupid': '2'}])." + required: false + timeperiods: + type: array + description: "Time periods." + required: true + maintenance_type: + type: integer + description: "Type: 0 (with data collection), 1 (without)." + required: false + description: + type: string + description: "Description." + required: false + tags: + type: array + description: "Problem tags for maintenance." + required: false diff --git a/actions/create.map.yaml b/actions/create.map.yaml new file mode 100644 index 0000000..9893b67 --- /dev/null +++ b/actions/create.map.yaml @@ -0,0 +1,31 @@ +--- +name: create.map +pack: zabbix +runner_type: python-script +description: "Create a new network map." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "map.create" + immutable: true + name: + type: string + description: "Name of the map." + required: true + width: + type: integer + description: "Map width in pixels." + required: true + height: + type: integer + description: "Map height in pixels." + required: true + selements: + type: array + description: "Map elements." + required: false + links: + type: array + description: "Map links." + required: false diff --git a/actions/create.mediatype.yaml b/actions/create.mediatype.yaml new file mode 100644 index 0000000..7883d25 --- /dev/null +++ b/actions/create.mediatype.yaml @@ -0,0 +1,35 @@ +--- +name: create.mediatype +pack: zabbix +runner_type: python-script +description: "Create a new media type." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "mediatype.create" + immutable: true + name: + type: string + description: "Name of the media type." + required: true + type: + type: integer + description: "Type: 0 (email), 1 (script), 2 (SMS), 4 (webhook)." + required: true + status: + type: integer + description: "Status: 0 (enabled), 1 (disabled)." + required: false + description: + type: string + description: "Media type description." + required: false + script: + type: string + description: "Webhook JavaScript body." + required: false + parameters: + type: array + description: "Webhook parameters." + required: false diff --git a/actions/create.proxy.yaml b/actions/create.proxy.yaml new file mode 100644 index 0000000..90d19a3 --- /dev/null +++ b/actions/create.proxy.yaml @@ -0,0 +1,31 @@ +--- +name: create.proxy +pack: zabbix +runner_type: python-script +description: "Create a new proxy." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "proxy.create" + immutable: true + host: + type: string + description: "Technical name of the proxy." + required: true + status: + type: integer + description: "Proxy mode: 5 (active), 6 (passive)." + required: true + description: + type: string + description: "Proxy description." + required: false + interface: + type: object + description: "Proxy interface (required for passive proxy)." + required: false + hosts: + type: array + description: "Hosts to assign to this proxy." + required: false diff --git a/actions/create.script.yaml b/actions/create.script.yaml new file mode 100644 index 0000000..7a60733 --- /dev/null +++ b/actions/create.script.yaml @@ -0,0 +1,39 @@ +--- +name: create.script +pack: zabbix +runner_type: python-script +description: "Create a new script." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "script.create" + immutable: true + name: + type: string + description: "Name of the script." + required: true + command: + type: string + description: "Script command to execute." + required: true + type: + type: integer + description: "Script type: 0 (custom), 1 (IPMI), 2 (SSH), 3 (Telnet), 5 (webhook)." + required: true + scope: + type: integer + description: "Scope: 1 (action), 2 (host/event), 4 (both)." + required: false + execute_on: + type: integer + description: "Execute on: 0 (agent), 1 (server), 2 (proxy)." + required: false + groupid: + type: string + description: "Host group ID where script is available." + required: false + description: + type: string + description: "Script description." + required: false diff --git a/actions/create.service.yaml b/actions/create.service.yaml new file mode 100644 index 0000000..3745f74 --- /dev/null +++ b/actions/create.service.yaml @@ -0,0 +1,55 @@ +--- +name: create.service +pack: zabbix +runner_type: python-script +description: "Create a new service." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "service.create" + immutable: true + name: + type: string + description: "Name of the service." + required: true + algorithm: + type: integer + description: "Status calculation: 0 (set by child), 1 (most critical child), 2 (most critical if all children have problems)." + required: true + sortorder: + type: integer + description: "Position for sorting." + required: true + weight: + type: integer + description: "Service weight." + required: false + propagation_rule: + type: integer + description: "Status propagation rule." + required: false + propagation_value: + type: integer + description: "Status propagation value." + required: false + status_rules: + type: array + description: "Status calculation rules." + required: false + tags: + type: array + description: "Service tags." + required: false + problem_tags: + type: array + description: "Problem tags." + required: false + parents: + type: array + description: "Parent services." + required: false + children: + type: array + description: "Child services." + required: false diff --git a/actions/create.template.yaml b/actions/create.template.yaml new file mode 100644 index 0000000..8567665 --- /dev/null +++ b/actions/create.template.yaml @@ -0,0 +1,39 @@ +--- +name: create.template +pack: zabbix +runner_type: python-script +description: "Create a new template." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "template.create" + immutable: true + host: + type: string + description: "Technical name of the template." + required: true + groups: + type: array + description: "Host groups to add template to." + required: true + name: + type: string + description: "Visible name of the template." + required: false + description: + type: string + description: "Template description." + required: false + templates: + type: array + description: "Templates to link." + required: false + macros: + type: array + description: "User macros for the template." + required: false + tags: + type: array + description: "Template tags." + required: false diff --git a/actions/create.token.yaml b/actions/create.token.yaml new file mode 100644 index 0000000..c369a30 --- /dev/null +++ b/actions/create.token.yaml @@ -0,0 +1,31 @@ +--- +name: create.token +pack: zabbix +runner_type: python-script +description: "Create a new API token." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "token.create" + immutable: true + name: + type: string + description: "Name of the token." + required: true + userid: + type: string + description: "ID of the user the token belongs to." + required: true + description: + type: string + description: "Token description." + required: false + status: + type: integer + description: "Status: 0 (enabled), 1 (disabled)." + required: false + expires_at: + type: string + description: "Expiration unix timestamp (0 for no expiry)." + required: false diff --git a/actions/create.trigger.yaml b/actions/create.trigger.yaml new file mode 100644 index 0000000..ec6129b --- /dev/null +++ b/actions/create.trigger.yaml @@ -0,0 +1,43 @@ +--- +name: create.trigger +pack: zabbix +runner_type: python-script +description: "Create a new trigger." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "trigger.create" + immutable: true + description: + type: string + description: "Name of the trigger." + required: true + expression: + type: string + description: "Trigger expression." + required: true + priority: + type: integer + description: "Severity: 0-5 (not classified to disaster)." + required: false + status: + type: integer + description: "Status: 0 (enabled), 1 (disabled)." + required: false + type: + type: integer + description: "Event generation: 0 (single), 1 (multiple)." + required: false + comments: + type: string + description: "Trigger comments." + required: false + tags: + type: array + description: "Trigger tags." + required: false + dependencies: + type: array + description: "Trigger dependencies." + required: false diff --git a/actions/create.user.yaml b/actions/create.user.yaml new file mode 100644 index 0000000..8412af5 --- /dev/null +++ b/actions/create.user.yaml @@ -0,0 +1,39 @@ +--- +name: create.user +pack: zabbix +runner_type: python-script +description: "Create a new user." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "user.create" + immutable: true + username: + type: string + description: "Username." + required: true + passwd: + type: string + description: "User password." + required: true + roleid: + type: string + description: "Role ID to assign." + required: true + usrgrps: + type: array + description: "User groups to add to." + required: true + name: + type: string + description: "First name." + required: false + surname: + type: string + description: "Surname." + required: false + medias: + type: array + description: "User medias (notification methods)." + required: false diff --git a/actions/create.usermacro.global.yaml b/actions/create.usermacro.global.yaml new file mode 100644 index 0000000..2fc4464 --- /dev/null +++ b/actions/create.usermacro.global.yaml @@ -0,0 +1,27 @@ +--- +name: create.usermacro.global +pack: zabbix +runner_type: python-script +description: "Create a global user macro." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "usermacro.createglobal" + immutable: true + macro: + type: string + description: "Macro name (e.g. '{$MACRO}')." + required: true + value: + type: string + description: "Macro value." + required: true + type: + type: integer + description: "Type: 0 (text), 1 (secret), 2 (vault secret)." + required: false + description: + type: string + description: "Macro description." + required: false diff --git a/actions/create.usermacro.yaml b/actions/create.usermacro.yaml new file mode 100644 index 0000000..14554a0 --- /dev/null +++ b/actions/create.usermacro.yaml @@ -0,0 +1,31 @@ +--- +name: create.usermacro +pack: zabbix +runner_type: python-script +description: "Create a host user macro." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "usermacro.create" + immutable: true + hostid: + type: string + description: "ID of the host." + required: true + macro: + type: string + description: "Macro name (e.g. '{$MACRO}')." + required: true + value: + type: string + description: "Macro value." + required: true + type: + type: integer + description: "Type: 0 (text), 1 (secret), 2 (vault secret)." + required: false + description: + type: string + description: "Macro description." + required: false diff --git a/actions/create.valuemap.yaml b/actions/create.valuemap.yaml new file mode 100644 index 0000000..473ccbe --- /dev/null +++ b/actions/create.valuemap.yaml @@ -0,0 +1,23 @@ +--- +name: create.valuemap +pack: zabbix +runner_type: python-script +description: "Create a new value map." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "valuemap.create" + immutable: true + name: + type: string + description: "Name of the value map." + required: true + hostid: + type: string + description: "ID of the host." + required: true + mappings: + type: array + description: "Value mappings." + required: true diff --git a/actions/create_host.py b/actions/create_host.py index 8be6026..b6fd93f 100644 --- a/actions/create_host.py +++ b/actions/create_host.py @@ -1,9 +1,10 @@ from lib.actions import ZabbixBaseAction -from zabbix.api import ZabbixAPI class CreateHost(ZabbixBaseAction): - def get_interface_config(self, ipaddr='', domain='', port="10050", is_main=False): + """Create a new Zabbix host with interface configuration.""" + + def _build_interface(self, ipaddr='', domain='', port="10050", is_main=False): return { "type": 1, "main": 1 if is_main else 0, @@ -13,53 +14,64 @@ def get_interface_config(self, ipaddr='', domain='', port="10050", is_main=False "port": port, } - def get_interface_config_with_domain(self, domains, main_if): - return [self.get_interface_config(domain=x, is_main=(x == main_if)) for x in domains] + def _build_interfaces(self, ipaddrs, domains, main_if): + interfaces = ( + [self._build_interface(ipaddr=x, is_main=(x == main_if)) for x in ipaddrs] + + [self._build_interface(domain=x, is_main=(x == main_if)) for x in domains] + ) + return interfaces + + def _assign_proxy(self, proxy_name, new_host_ids): + proxies = self.client.proxy.get(filter={'host': proxy_name}) + if not proxies: + raise ValueError("Proxy not found: {0}".format(proxy_name)) - def get_interface_config_with_ipaddr(self, ipaddrs, main_if): - return [self.get_interface_config(ipaddr=x, is_main=(x == main_if)) for x in ipaddrs] + proxy = proxies[0] + current_hosts = [ + x['hostid'] for x in + self.client.host.get(proxyids=[proxy['proxyid']]) + ] + self.client.proxy.update( + proxyid=proxy['proxyid'], + hosts=current_hosts + new_host_ids, + ) - def set_proxy_for_host(self, proxy_name, new_hosts): - for proxy in self.client.proxy.get(filter={'host': proxy_name}): - current_hosts = [x['hostid'] for x in self.client.host.get(proxyids=[proxy['proxyid']])] + def run(self, name, groups, ipaddrs=None, domains=None, proxy_host=None, main_if=''): + """Create a Zabbix host. - return self.client.proxy.update(**{ - 'proxyid': proxy['proxyid'], - 'hosts': current_hosts + new_hosts, - }) + Args: + name: Hostname to create. + groups: List of host group names to assign. + ipaddrs: List of IP addresses for interfaces. + domains: List of DNS names for interfaces. + proxy_host: Optional proxy name to assign host to. + main_if: IP or DNS to designate as main interface. + """ + self.connect() - def run(self, name, groups, ipaddrs=[], domains=[], proxy_host=None, token=None, main_if=''): - # Initialize client object to connect Zabbix server - if token: - self.client = ZabbixAPI(url=self.config['zabbix']['url']) - self.auth = token - else: - self.connect() + if ipaddrs is None: + ipaddrs = [] + if domains is None: + domains = [] - # retrieve hostgroup-ids to be set to creating host object hostgroups = [x['groupid'] for x in self.client.hostgroup.get(filter={'name': groups})] - # make interface configurations to be set to creating host object - interfaces = (self.get_interface_config_with_ipaddr(ipaddrs, main_if) + - self.get_interface_config_with_domain(domains, main_if)) + interfaces = self._build_interfaces(ipaddrs, domains, main_if) - # Zabbix server requires one interface value at least if not interfaces: - return (False, "You have to IP address or domain value at least one.") + raise ValueError("At least one IP address or domain is required.") - # If there is no main interface, set it for the first one. - if not any([x['main'] > 0 for x in interfaces]): + # Ensure exactly one main interface exists + if not any(x['main'] > 0 for x in interfaces): interfaces[0]['main'] = 1 - # register a host object - new_host = self.client.host.create(**{ - 'host': name, - 'groups': [{'groupid': x} for x in hostgroups], - 'interfaces': interfaces, - }) + new_host = self.client.host.create( + host=name, + groups=[{'groupid': x} for x in hostgroups], + interfaces=interfaces, + ) - # register ZabbixProxy if it is necessary if proxy_host: - self.set_proxy_for_host(proxy_host, new_host['hostids']) + self._assign_proxy(proxy_host, new_host['hostids']) - return (True, new_host) + return new_host diff --git a/actions/create_host.yaml b/actions/create_host.yaml deleted file mode 100644 index a28fa61..0000000 --- a/actions/create_host.yaml +++ /dev/null @@ -1,36 +0,0 @@ ---- -name: create_host -pack: zabbix -runner_type: python-script -description: Create a new host to Zabbix Server -enabled: true -entry_point: create_host.py -parameters: - name: - type: string - description: Hostname to be created - required: True - groups: - type: array - description: HostGroups to be registered to creating host - required: True - ipaddrs: - type: array - description: IP addresses of the host in which ZabbixAgent is installed - default: [] - domains: - type: array - description: Domain names of the host in which ZabbixAgent is installed - default: [] - main_if: - type: string - description: Default ZabbixAgent interface of IP address or domain-name - proxy_host: - type: string - description: Proxy host's name which is registered in ZabbixServer - token: - type: string - description: Encrypted access token to authenticate to ZabbixServer - default: | - {% if st2kv.user.zabbix.secret_token|string != '' %}{{ st2kv.user.zabbix.secret_token | decrypt_kv }}{% endif %} - secret: true diff --git a/actions/create_or_update.maintenance.yaml b/actions/create_or_update.maintenance.yaml new file mode 100644 index 0000000..e7184c6 --- /dev/null +++ b/actions/create_or_update.maintenance.yaml @@ -0,0 +1,32 @@ +--- +name: create_or_update.maintenance +pack: zabbix +runner_type: python-script +description: "Create a maintenance window or update it if one with the same name exists." +enabled: true +entry_point: create_or_update_maintenance.py +parameters: + hostname: + type: string + description: "Name of the Zabbix host to put in maintenance." + required: true + maintenance_window_name: + type: string + description: "Name of the maintenance window." + required: true + start_date: + type: string + description: "Start date/time in format 'Y-m-d H:M'." + required: true + end_date: + type: string + description: "End date/time in format 'Y-m-d H:M'." + required: true + time_type: + type: integer + description: "Period type: 0 (one time), 2 (daily), 3 (weekly), 4 (monthly)." + default: 0 + maintenance_type: + type: integer + description: "Type: 0 (with data collection), 1 (without data collection)." + default: 0 diff --git a/actions/create_or_update_maintenance.py b/actions/create_or_update_maintenance.py new file mode 100644 index 0000000..3c08d94 --- /dev/null +++ b/actions/create_or_update_maintenance.py @@ -0,0 +1,53 @@ +from datetime import datetime +from tzlocal import get_localzone +from lib.actions import ZabbixBaseAction + + +class MaintenanceCreateOrUpdate(ZabbixBaseAction): + """Create or update a Zabbix maintenance window.""" + + def run(self, hostname, maintenance_window_name, start_date, end_date, + time_type=0, maintenance_type=0): + """Create or update a maintenance window. + + Args: + hostname: Name of the Zabbix host. + maintenance_window_name: Name for the maintenance window. + start_date: Start datetime string (Y-m-d H:M). + end_date: End datetime string (Y-m-d H:M). + time_type: Period type (0=one time, 2=daily, 3=weekly, 4=monthly). + maintenance_type: 0=with data collection, 1=without. + """ + self.connect() + + host_id = self.find_host(hostname) + + local_tz = get_localzone() + + start_local = datetime.strptime(start_date, "%Y-%m-%d %H:%M") + start_local = start_local.replace(tzinfo=local_tz) + start_time = int(start_local.timestamp()) + + end_local = datetime.strptime(end_date, "%Y-%m-%d %H:%M") + end_local = end_local.replace(tzinfo=local_tz) + end_time = int(end_local.timestamp()) + + period = end_time - start_time + + time_period = [{ + 'start_date': start_time, + 'timeperiod_type': time_type, + 'period': period, + }] + + maintenance_params = { + 'hosts': [{'hostid': host_id}], + 'name': maintenance_window_name, + 'active_since': start_time, + 'active_till': end_time, + 'maintenance_type': maintenance_type, + 'timeperiods': time_period, + } + + result = self.maintenance_create_or_update(maintenance_params) + return result['maintenanceids'][0] diff --git a/actions/delete.action.yaml b/actions/delete.action.yaml new file mode 100644 index 0000000..b9294b6 --- /dev/null +++ b/actions/delete.action.yaml @@ -0,0 +1,15 @@ +--- +name: delete.action +pack: zabbix +runner_type: python-script +description: "Delete alert actions by ID." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "action.delete" + immutable: true + params_list: + type: array + description: "List of action IDs to delete." + required: true diff --git a/actions/delete.correlation.yaml b/actions/delete.correlation.yaml new file mode 100644 index 0000000..555b588 --- /dev/null +++ b/actions/delete.correlation.yaml @@ -0,0 +1,15 @@ +--- +name: delete.correlation +pack: zabbix +runner_type: python-script +description: "Delete event correlations by ID." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "correlation.delete" + immutable: true + params_list: + type: array + description: "List of correlation IDs to delete." + required: true diff --git a/actions/delete.dashboard.yaml b/actions/delete.dashboard.yaml new file mode 100644 index 0000000..22e4fc5 --- /dev/null +++ b/actions/delete.dashboard.yaml @@ -0,0 +1,15 @@ +--- +name: delete.dashboard +pack: zabbix +runner_type: python-script +description: "Delete dashboards by ID." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "dashboard.delete" + immutable: true + params_list: + type: array + description: "List of dashboard IDs to delete." + required: true diff --git a/actions/delete.drule.yaml b/actions/delete.drule.yaml new file mode 100644 index 0000000..d982ef8 --- /dev/null +++ b/actions/delete.drule.yaml @@ -0,0 +1,15 @@ +--- +name: delete.drule +pack: zabbix +runner_type: python-script +description: "Delete discovery rules by ID." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "drule.delete" + immutable: true + params_list: + type: array + description: "List of discovery rule IDs to delete." + required: true diff --git a/actions/delete.graph.yaml b/actions/delete.graph.yaml new file mode 100644 index 0000000..f3ecafe --- /dev/null +++ b/actions/delete.graph.yaml @@ -0,0 +1,15 @@ +--- +name: delete.graph +pack: zabbix +runner_type: python-script +description: "Delete graphs by ID." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "graph.delete" + immutable: true + params_list: + type: array + description: "List of graph IDs to delete." + required: true diff --git a/actions/delete.host.by_id.yaml b/actions/delete.host.by_id.yaml new file mode 100644 index 0000000..f7047e2 --- /dev/null +++ b/actions/delete.host.by_id.yaml @@ -0,0 +1,12 @@ +--- +name: delete.host.by_id +pack: zabbix +runner_type: python-script +description: "Delete a Zabbix host by host ID." +enabled: true +entry_point: delete_host.py +parameters: + host_id: + type: string + description: "ID of the Zabbix host to delete." + required: true diff --git a/actions/delete.host.yaml b/actions/delete.host.yaml new file mode 100644 index 0000000..c71d14f --- /dev/null +++ b/actions/delete.host.yaml @@ -0,0 +1,12 @@ +--- +name: delete.host +pack: zabbix +runner_type: python-script +description: "Delete a Zabbix host by hostname." +enabled: true +entry_point: delete_host.py +parameters: + hostname: + type: string + description: "Name of the Zabbix host to delete." + required: true diff --git a/actions/delete.hostgroup.yaml b/actions/delete.hostgroup.yaml new file mode 100644 index 0000000..f2dd038 --- /dev/null +++ b/actions/delete.hostgroup.yaml @@ -0,0 +1,15 @@ +--- +name: delete.hostgroup +pack: zabbix +runner_type: python-script +description: "Delete host groups by ID." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "hostgroup.delete" + immutable: true + params_list: + type: array + description: "List of host group IDs to delete." + required: true diff --git a/actions/delete.hostinterface.yaml b/actions/delete.hostinterface.yaml new file mode 100644 index 0000000..13b683c --- /dev/null +++ b/actions/delete.hostinterface.yaml @@ -0,0 +1,15 @@ +--- +name: delete.hostinterface +pack: zabbix +runner_type: python-script +description: "Delete host interfaces by ID." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "hostinterface.delete" + immutable: true + params_list: + type: array + description: "List of interface IDs to delete." + required: true diff --git a/actions/delete.httptest.yaml b/actions/delete.httptest.yaml new file mode 100644 index 0000000..8f2dc17 --- /dev/null +++ b/actions/delete.httptest.yaml @@ -0,0 +1,15 @@ +--- +name: delete.httptest +pack: zabbix +runner_type: python-script +description: "Delete web scenarios by ID." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "httptest.delete" + immutable: true + params_list: + type: array + description: "List of web scenario IDs to delete." + required: true diff --git a/actions/delete.item.yaml b/actions/delete.item.yaml new file mode 100644 index 0000000..4bfe889 --- /dev/null +++ b/actions/delete.item.yaml @@ -0,0 +1,15 @@ +--- +name: delete.item +pack: zabbix +runner_type: python-script +description: "Delete monitoring items by ID." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "item.delete" + immutable: true + params_list: + type: array + description: "List of item IDs to delete." + required: true diff --git a/actions/delete.maintenance.yaml b/actions/delete.maintenance.yaml new file mode 100644 index 0000000..330d864 --- /dev/null +++ b/actions/delete.maintenance.yaml @@ -0,0 +1,16 @@ +--- +name: delete.maintenance +pack: zabbix +runner_type: python-script +description: "Delete a maintenance window by name or ID." +enabled: true +entry_point: delete_maintenance.py +parameters: + maintenance_id: + type: string + description: "ID of the maintenance window to delete." + required: false + maintenance_window_name: + type: string + description: "Name of the maintenance window to delete." + required: false diff --git a/actions/delete.map.yaml b/actions/delete.map.yaml new file mode 100644 index 0000000..372b0d8 --- /dev/null +++ b/actions/delete.map.yaml @@ -0,0 +1,15 @@ +--- +name: delete.map +pack: zabbix +runner_type: python-script +description: "Delete network maps by ID." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "map.delete" + immutable: true + params_list: + type: array + description: "List of map IDs to delete." + required: true diff --git a/actions/delete.mediatype.yaml b/actions/delete.mediatype.yaml new file mode 100644 index 0000000..d121eba --- /dev/null +++ b/actions/delete.mediatype.yaml @@ -0,0 +1,15 @@ +--- +name: delete.mediatype +pack: zabbix +runner_type: python-script +description: "Delete media types by ID." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "mediatype.delete" + immutable: true + params_list: + type: array + description: "List of media type IDs to delete." + required: true diff --git a/actions/delete.proxy.yaml b/actions/delete.proxy.yaml new file mode 100644 index 0000000..9217238 --- /dev/null +++ b/actions/delete.proxy.yaml @@ -0,0 +1,15 @@ +--- +name: delete.proxy +pack: zabbix +runner_type: python-script +description: "Delete proxies by ID." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "proxy.delete" + immutable: true + params_list: + type: array + description: "List of proxy IDs to delete." + required: true diff --git a/actions/delete.script.yaml b/actions/delete.script.yaml new file mode 100644 index 0000000..6e9dbca --- /dev/null +++ b/actions/delete.script.yaml @@ -0,0 +1,15 @@ +--- +name: delete.script +pack: zabbix +runner_type: python-script +description: "Delete scripts by ID." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "script.delete" + immutable: true + params_list: + type: array + description: "List of script IDs to delete." + required: true diff --git a/actions/delete.service.yaml b/actions/delete.service.yaml new file mode 100644 index 0000000..105e34d --- /dev/null +++ b/actions/delete.service.yaml @@ -0,0 +1,15 @@ +--- +name: delete.service +pack: zabbix +runner_type: python-script +description: "Delete services by ID." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "service.delete" + immutable: true + params_list: + type: array + description: "List of service IDs to delete." + required: true diff --git a/actions/delete.template.yaml b/actions/delete.template.yaml new file mode 100644 index 0000000..d907ca2 --- /dev/null +++ b/actions/delete.template.yaml @@ -0,0 +1,15 @@ +--- +name: delete.template +pack: zabbix +runner_type: python-script +description: "Delete templates by ID." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "template.delete" + immutable: true + params_list: + type: array + description: "List of template IDs to delete." + required: true diff --git a/actions/delete.token.yaml b/actions/delete.token.yaml new file mode 100644 index 0000000..57ccbc1 --- /dev/null +++ b/actions/delete.token.yaml @@ -0,0 +1,15 @@ +--- +name: delete.token +pack: zabbix +runner_type: python-script +description: "Delete API tokens by ID." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "token.delete" + immutable: true + params_list: + type: array + description: "List of token IDs to delete." + required: true diff --git a/actions/delete.trigger.yaml b/actions/delete.trigger.yaml new file mode 100644 index 0000000..c205cda --- /dev/null +++ b/actions/delete.trigger.yaml @@ -0,0 +1,15 @@ +--- +name: delete.trigger +pack: zabbix +runner_type: python-script +description: "Delete triggers by ID." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "trigger.delete" + immutable: true + params_list: + type: array + description: "List of trigger IDs to delete." + required: true diff --git a/actions/delete.user.yaml b/actions/delete.user.yaml new file mode 100644 index 0000000..ea0f704 --- /dev/null +++ b/actions/delete.user.yaml @@ -0,0 +1,15 @@ +--- +name: delete.user +pack: zabbix +runner_type: python-script +description: "Delete users by ID." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "user.delete" + immutable: true + params_list: + type: array + description: "List of user IDs to delete." + required: true diff --git a/actions/delete.usermacro.global.yaml b/actions/delete.usermacro.global.yaml new file mode 100644 index 0000000..26ea074 --- /dev/null +++ b/actions/delete.usermacro.global.yaml @@ -0,0 +1,15 @@ +--- +name: delete.usermacro.global +pack: zabbix +runner_type: python-script +description: "Delete global user macros by ID." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "usermacro.deleteglobal" + immutable: true + params_list: + type: array + description: "List of global macro IDs to delete." + required: true diff --git a/actions/delete.usermacro.yaml b/actions/delete.usermacro.yaml new file mode 100644 index 0000000..4d5dec5 --- /dev/null +++ b/actions/delete.usermacro.yaml @@ -0,0 +1,15 @@ +--- +name: delete.usermacro +pack: zabbix +runner_type: python-script +description: "Delete host user macros by ID." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "usermacro.delete" + immutable: true + params_list: + type: array + description: "List of host macro IDs to delete." + required: true diff --git a/actions/delete.valuemap.yaml b/actions/delete.valuemap.yaml new file mode 100644 index 0000000..1c7ad21 --- /dev/null +++ b/actions/delete.valuemap.yaml @@ -0,0 +1,15 @@ +--- +name: delete.valuemap +pack: zabbix +runner_type: python-script +description: "Delete value maps by ID." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "valuemap.delete" + immutable: true + params_list: + type: array + description: "List of value map IDs to delete." + required: true diff --git a/actions/delete_host.py b/actions/delete_host.py new file mode 100644 index 0000000..644a08f --- /dev/null +++ b/actions/delete_host.py @@ -0,0 +1,25 @@ +from lib.actions import ZabbixBaseAction +from zabbix_utils.exceptions import APIRequestError + + +class HostDelete(ZabbixBaseAction): + """Delete a Zabbix host by hostname or ID.""" + + def run(self, hostname=None, host_id=None): + """Delete a host. + + Args: + hostname: Name of the host to delete (resolved to ID). + host_id: Direct host ID to delete. + """ + self.connect() + + if not host_id: + host_id = self.find_host(hostname) + + try: + self.client.host.delete(host_id) + return True + except APIRequestError as e: + raise APIRequestError( + "Failed to delete host: {0}".format(e)) diff --git a/actions/delete_maintenance.py b/actions/delete_maintenance.py new file mode 100644 index 0000000..216efbe --- /dev/null +++ b/actions/delete_maintenance.py @@ -0,0 +1,40 @@ +from lib.actions import ZabbixBaseAction +from zabbix_utils.exceptions import APIRequestError + + +class MaintenanceDelete(ZabbixBaseAction): + """Delete a Zabbix maintenance window by name or ID.""" + + def run(self, maintenance_id=None, maintenance_window_name=None): + """Delete a maintenance window. + + Args: + maintenance_id: ID of the maintenance window to delete. + maintenance_window_name: Name of the maintenance window to delete. + """ + self.connect() + + if maintenance_window_name is not None: + maintenance_result = self.maintenance_get(maintenance_window_name) + + if len(maintenance_result) == 0: + raise ValueError( + "Could not find maintenance window: {0}".format( + maintenance_window_name)) + elif len(maintenance_result) == 1: + maintenance_id = maintenance_result[0]['maintenanceid'] + else: + raise ValueError( + "Multiple maintenance windows found: {0}".format( + maintenance_window_name)) + elif maintenance_id is None: + raise ValueError( + "Must provide either maintenance_window_name or maintenance_id") + + try: + self.client.maintenance.delete(maintenance_id) + except APIRequestError as e: + raise APIRequestError( + "Failed to delete maintenance window: {0}".format(e)) + + return True diff --git a/actions/event_action_runner.py b/actions/event_action_runner.py deleted file mode 100644 index 558d93f..0000000 --- a/actions/event_action_runner.py +++ /dev/null @@ -1,33 +0,0 @@ -# Licensed to the StackStorm, Inc ('StackStorm') under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from lib.actions import ZabbixBaseAction - - -class EventActionRunner(ZabbixBaseAction): - def run(self, action, *args, **kwargs): - self.connect() - - if action == 'event.acknowledge': - kwargs = self.reconstruct_args_for_ack_event(*args, **kwargs) - - try: - api_handler = self.client - for obj in action.split('.'): - api_handler = getattr(api_handler, obj) - - return (True, api_handler(*args, **kwargs)) - except AttributeError: - return (False, "Specified action(%s) is invalid" % action) diff --git a/actions/execute.script.yaml b/actions/execute.script.yaml new file mode 100644 index 0000000..df1020e --- /dev/null +++ b/actions/execute.script.yaml @@ -0,0 +1,23 @@ +--- +name: execute.script +pack: zabbix +runner_type: python-script +description: "Execute a Zabbix script on a host." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "script.execute" + immutable: true + scriptid: + type: string + description: "ID of the script to execute." + required: true + hostid: + type: string + description: "ID of the host to execute the script on." + required: true + eventid: + type: string + description: "ID of the event to execute the script for (if scope permits)." + required: false diff --git a/actions/export.configuration.yaml b/actions/export.configuration.yaml new file mode 100644 index 0000000..85942a9 --- /dev/null +++ b/actions/export.configuration.yaml @@ -0,0 +1,19 @@ +--- +name: export.configuration +pack: zabbix +runner_type: python-script +description: "Export Zabbix configuration data." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "configuration.export" + immutable: true + format: + type: string + description: "Export format: yaml, xml, or json." + default: "yaml" + options: + type: object + description: "Objects to export (e.g. {'hosts': ['10084'], 'templates': ['10001']})." + required: true diff --git a/actions/find.host.yaml b/actions/find.host.yaml new file mode 100644 index 0000000..acf0106 --- /dev/null +++ b/actions/find.host.yaml @@ -0,0 +1,24 @@ +--- +name: find.host +pack: zabbix +runner_type: python-script +description: "Resolve a Zabbix hostname to its host ID. Returns exactly one ID or raises an error." +enabled: true +entry_point: find_object.py +parameters: + object_type: + default: "host" + immutable: true + filter_field: + default: "host" + immutable: true + id_field: + default: "hostid" + immutable: true + allow_multiple: + default: false + immutable: true + name: + type: string + description: "Hostname or technical name of the Zabbix host." + required: true diff --git a/actions/find.hostgroup.yaml b/actions/find.hostgroup.yaml new file mode 100644 index 0000000..9ae665c --- /dev/null +++ b/actions/find.hostgroup.yaml @@ -0,0 +1,24 @@ +--- +name: find.hostgroup +pack: zabbix +runner_type: python-script +description: "Resolve a host group name to its group ID." +enabled: true +entry_point: find_object.py +parameters: + object_type: + default: "hostgroup" + immutable: true + filter_field: + default: "name" + immutable: true + id_field: + default: "groupid" + immutable: true + allow_multiple: + default: false + immutable: true + name: + type: string + description: "Name of the host group." + required: true diff --git a/actions/find.hosts.yaml b/actions/find.hosts.yaml new file mode 100644 index 0000000..1d0636e --- /dev/null +++ b/actions/find.hosts.yaml @@ -0,0 +1,24 @@ +--- +name: find.hosts +pack: zabbix +runner_type: python-script +description: "Resolve one or more Zabbix hostnames to host IDs. Returns all matching IDs (may be empty)." +enabled: true +entry_point: find_object.py +parameters: + object_type: + default: "host" + immutable: true + filter_field: + default: "host" + immutable: true + id_field: + default: "hostid" + immutable: true + allow_multiple: + default: true + immutable: true + name: + type: array + description: "List of hostnames to resolve." + required: true diff --git a/actions/find.maintenance.yaml b/actions/find.maintenance.yaml new file mode 100644 index 0000000..0b33912 --- /dev/null +++ b/actions/find.maintenance.yaml @@ -0,0 +1,24 @@ +--- +name: find.maintenance +pack: zabbix +runner_type: python-script +description: "Resolve a maintenance window name to its maintenance ID." +enabled: true +entry_point: find_object.py +parameters: + object_type: + default: "maintenance" + immutable: true + filter_field: + default: "name" + immutable: true + id_field: + default: "maintenanceid" + immutable: true + allow_multiple: + default: false + immutable: true + name: + type: string + description: "Name of the maintenance window." + required: true diff --git a/actions/find.proxy.yaml b/actions/find.proxy.yaml new file mode 100644 index 0000000..5d92ed8 --- /dev/null +++ b/actions/find.proxy.yaml @@ -0,0 +1,24 @@ +--- +name: find.proxy +pack: zabbix +runner_type: python-script +description: "Resolve a proxy name to its proxy ID." +enabled: true +entry_point: find_object.py +parameters: + object_type: + default: "proxy" + immutable: true + filter_field: + default: "host" + immutable: true + id_field: + default: "proxyid" + immutable: true + allow_multiple: + default: false + immutable: true + name: + type: string + description: "Name of the Zabbix proxy." + required: true diff --git a/actions/find.script.yaml b/actions/find.script.yaml new file mode 100644 index 0000000..22e1a6a --- /dev/null +++ b/actions/find.script.yaml @@ -0,0 +1,24 @@ +--- +name: find.script +pack: zabbix +runner_type: python-script +description: "Resolve a script name to its script ID." +enabled: true +entry_point: find_object.py +parameters: + object_type: + default: "script" + immutable: true + filter_field: + default: "name" + immutable: true + id_field: + default: "scriptid" + immutable: true + allow_multiple: + default: false + immutable: true + name: + type: string + description: "Name of the script." + required: true diff --git a/actions/find.template.yaml b/actions/find.template.yaml new file mode 100644 index 0000000..f15920d --- /dev/null +++ b/actions/find.template.yaml @@ -0,0 +1,24 @@ +--- +name: find.template +pack: zabbix +runner_type: python-script +description: "Resolve a template name to its template ID." +enabled: true +entry_point: find_object.py +parameters: + object_type: + default: "template" + immutable: true + filter_field: + default: "host" + immutable: true + id_field: + default: "templateid" + immutable: true + allow_multiple: + default: false + immutable: true + name: + type: string + description: "Technical name of the template." + required: true diff --git a/actions/find_object.py b/actions/find_object.py new file mode 100644 index 0000000..ecb9855 --- /dev/null +++ b/actions/find_object.py @@ -0,0 +1,43 @@ +from lib.actions import ZabbixBaseAction +from zabbix_utils.exceptions import APIRequestError + + +class FindObject(ZabbixBaseAction): + """Generic name-to-ID resolution for Zabbix objects.""" + + def run(self, object_type, filter_field, id_field, name, allow_multiple=False): + """Resolve a friendly name to an object ID. + + Args: + object_type: Zabbix API object type (e.g. 'host', 'hostgroup'). + filter_field: Field to filter on (e.g. 'host', 'name'). + id_field: Field containing the ID in results (e.g. 'hostid', 'groupid'). + name: Name value(s) to search for (string or array). + allow_multiple: If True, return all matching IDs as a list. + """ + self.connect() + + try: + api_object = getattr(self.client, object_type) + except AttributeError: + raise ValueError("Invalid object type: {0}".format(object_type)) + + try: + results = api_object.get(filter={filter_field: name}) + except APIRequestError as e: + raise APIRequestError( + "Error searching for {0}: {1}".format(object_type, e)) + + if allow_multiple: + return [r[id_field] for r in results] + + if len(results) == 0: + raise ValueError( + "Could not find {0} with {1}={2}".format( + object_type, filter_field, name)) + if len(results) > 1: + raise ValueError( + "Multiple {0} found with {1}={2}".format( + object_type, filter_field, name)) + + return results[0][id_field] diff --git a/actions/generate.token.yaml b/actions/generate.token.yaml new file mode 100644 index 0000000..009b6c7 --- /dev/null +++ b/actions/generate.token.yaml @@ -0,0 +1,15 @@ +--- +name: generate.token +pack: zabbix +runner_type: python-script +description: "Generate (reveal) the auth string for an API token." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "token.generate" + immutable: true + params_list: + type: array + description: "List of token IDs to generate auth strings for." + required: true diff --git a/actions/get.action.yaml b/actions/get.action.yaml new file mode 100644 index 0000000..19a192d --- /dev/null +++ b/actions/get.action.yaml @@ -0,0 +1,31 @@ +--- +name: get.action +pack: zabbix +runner_type: python-script +description: "Get an alert action by ID." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "action.get" + immutable: true + actionids: + type: array + description: "Action IDs to retrieve." + required: true + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" + selectOperations: + type: string + description: "Include operations. Set to 'extend'." + required: false + selectRecoveryOperations: + type: string + description: "Include recovery operations. Set to 'extend'." + required: false + selectFilter: + type: string + description: "Include filter. Set to 'extend'." + required: false diff --git a/actions/get.api_version.yaml b/actions/get.api_version.yaml new file mode 100644 index 0000000..b1b3b4c --- /dev/null +++ b/actions/get.api_version.yaml @@ -0,0 +1,8 @@ +--- +name: get.api_version +pack: zabbix +runner_type: python-script +description: "Get the Zabbix API version string." +enabled: true +entry_point: get_api_version.py +parameters: {} diff --git a/actions/get.dashboard.yaml b/actions/get.dashboard.yaml new file mode 100644 index 0000000..728cb21 --- /dev/null +++ b/actions/get.dashboard.yaml @@ -0,0 +1,23 @@ +--- +name: get.dashboard +pack: zabbix +runner_type: python-script +description: "Get a dashboard by ID." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "dashboard.get" + immutable: true + dashboardids: + type: array + description: "Dashboard IDs to retrieve." + required: true + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" + selectPages: + type: string + description: "Include dashboard pages. Set to 'extend'." + required: false diff --git a/actions/get.graph.yaml b/actions/get.graph.yaml new file mode 100644 index 0000000..c70afc4 --- /dev/null +++ b/actions/get.graph.yaml @@ -0,0 +1,23 @@ +--- +name: get.graph +pack: zabbix +runner_type: python-script +description: "Get a graph by ID." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "graph.get" + immutable: true + graphids: + type: array + description: "Graph IDs to retrieve." + required: true + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" + selectGraphItems: + type: string + description: "Include graph items. Set to 'extend'." + required: false diff --git a/actions/get.history.yaml b/actions/get.history.yaml new file mode 100644 index 0000000..d7f2fba --- /dev/null +++ b/actions/get.history.yaml @@ -0,0 +1,47 @@ +--- +name: get.history +pack: zabbix +runner_type: python-script +description: "Retrieve historical data values." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "history.get" + immutable: true + hostids: + type: array + description: "Filter by host IDs." + required: false + itemids: + type: array + description: "Filter by item IDs." + required: false + history: + type: integer + description: "History type: 0 (float), 1 (string), 2 (log), 3 (integer), 4 (text)." + required: false + time_from: + type: string + description: "Return only values after this time (unix timestamp)." + required: false + time_till: + type: string + description: "Return only values before this time (unix timestamp)." + required: false + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" + sortfield: + type: string + description: "Field to sort by (usually 'clock')." + required: false + sortorder: + type: string + description: "Sort order: ASC or DESC." + required: false + limit: + type: integer + description: "Maximum number of results." + required: false diff --git a/actions/get.host.active_triggers.yaml b/actions/get.host.active_triggers.yaml new file mode 100644 index 0000000..9a26ffa --- /dev/null +++ b/actions/get.host.active_triggers.yaml @@ -0,0 +1,16 @@ +--- +name: get.host.active_triggers +pack: zabbix +runner_type: orquesta +description: "Get active (in problem state) triggers for a host, optionally filtered by priority." +enabled: true +entry_point: workflows/get.host.active_triggers.yaml +parameters: + hostname: + type: string + description: "Name of the Zabbix host." + required: true + priority: + type: array + description: "List of priority numbers to filter by (0-5). Empty for all." + default: [] diff --git a/actions/get.host.groups.yaml b/actions/get.host.groups.yaml new file mode 100644 index 0000000..3fd1829 --- /dev/null +++ b/actions/get.host.groups.yaml @@ -0,0 +1,24 @@ +--- +name: get.host.groups +pack: zabbix +runner_type: python-script +description: "Get host group membership for one or more hosts by host ID." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "host.get" + immutable: true + hostids: + type: array + description: "List of host IDs to retrieve groups for." + required: true + selectGroups: + default: "extend" + immutable: true + output: + type: array + description: "Host fields to include alongside groups." + default: + - "hostid" + - "host" diff --git a/actions/get.host.interfaces.yaml b/actions/get.host.interfaces.yaml new file mode 100644 index 0000000..5ffd9a2 --- /dev/null +++ b/actions/get.host.interfaces.yaml @@ -0,0 +1,24 @@ +--- +name: get.host.interfaces +pack: zabbix +runner_type: python-script +description: "Get interfaces for one or more hosts by host ID." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "host.get" + immutable: true + hostids: + type: array + description: "List of host IDs to retrieve interfaces for." + required: true + selectInterfaces: + default: "extend" + immutable: true + output: + type: array + description: "Host fields to include alongside interfaces." + default: + - "hostid" + - "host" diff --git a/actions/get.host.inventory.yaml b/actions/get.host.inventory.yaml new file mode 100644 index 0000000..5c7cb9a --- /dev/null +++ b/actions/get.host.inventory.yaml @@ -0,0 +1,24 @@ +--- +name: get.host.inventory +pack: zabbix +runner_type: python-script +description: "Get inventory data for one or more hosts by host ID." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "host.get" + immutable: true + hostids: + type: array + description: "List of host IDs to retrieve inventory for." + required: true + selectInventory: + default: "extend" + immutable: true + output: + type: array + description: "Host fields to include alongside inventory." + default: + - "hostid" + - "host" diff --git a/actions/get.host.status.yaml b/actions/get.host.status.yaml new file mode 100644 index 0000000..455de67 --- /dev/null +++ b/actions/get.host.status.yaml @@ -0,0 +1,12 @@ +--- +name: get.host.status +pack: zabbix +runner_type: python-script +description: "Get the monitoring status of a host by hostname." +enabled: true +entry_point: host_status.py +parameters: + hostname: + type: string + description: "Name of the Zabbix host." + required: true diff --git a/actions/get.host.yaml b/actions/get.host.yaml new file mode 100644 index 0000000..e8860d5 --- /dev/null +++ b/actions/get.host.yaml @@ -0,0 +1,43 @@ +--- +name: get.host +pack: zabbix +runner_type: python-script +description: "Get a Zabbix host object by ID with full details." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "host.get" + immutable: true + hostids: + type: array + description: "Host IDs to retrieve." + required: true + output: + type: string + description: "Output fields. Use 'extend' for all fields or provide a list." + default: "extend" + selectGroups: + type: string + description: "Include host groups. Set to 'extend' to include." + required: false + selectInterfaces: + type: string + description: "Include host interfaces. Set to 'extend' to include." + required: false + selectInventory: + type: string + description: "Include host inventory. Set to 'extend' to include." + required: false + selectMacros: + type: string + description: "Include host macros. Set to 'extend' to include." + required: false + selectParentTemplates: + type: string + description: "Include parent templates. Set to 'extend' to include." + required: false + selectTags: + type: string + description: "Include host tags. Set to 'extend' to include." + required: false diff --git a/actions/get.hostgroup.yaml b/actions/get.hostgroup.yaml new file mode 100644 index 0000000..d85c246 --- /dev/null +++ b/actions/get.hostgroup.yaml @@ -0,0 +1,19 @@ +--- +name: get.hostgroup +pack: zabbix +runner_type: python-script +description: "Get a host group by ID." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "hostgroup.get" + immutable: true + groupids: + type: array + description: "Host group IDs to retrieve." + required: true + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" diff --git a/actions/get.item.yaml b/actions/get.item.yaml new file mode 100644 index 0000000..f1aa631 --- /dev/null +++ b/actions/get.item.yaml @@ -0,0 +1,19 @@ +--- +name: get.item +pack: zabbix +runner_type: python-script +description: "Get an item by ID." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "item.get" + immutable: true + itemids: + type: array + description: "Item IDs to retrieve." + required: true + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" diff --git a/actions/get.maintenance.yaml b/actions/get.maintenance.yaml new file mode 100644 index 0000000..1822da5 --- /dev/null +++ b/actions/get.maintenance.yaml @@ -0,0 +1,31 @@ +--- +name: get.maintenance +pack: zabbix +runner_type: python-script +description: "Get a maintenance window by ID." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "maintenance.get" + immutable: true + maintenanceids: + type: array + description: "Maintenance IDs to retrieve." + required: true + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" + selectHosts: + type: string + description: "Include hosts. Set to 'extend'." + required: false + selectGroups: + type: string + description: "Include groups. Set to 'extend'." + required: false + selectTimeperiods: + type: string + description: "Include time periods. Set to 'extend'." + required: false diff --git a/actions/get.map.yaml b/actions/get.map.yaml new file mode 100644 index 0000000..9d2c010 --- /dev/null +++ b/actions/get.map.yaml @@ -0,0 +1,27 @@ +--- +name: get.map +pack: zabbix +runner_type: python-script +description: "Get a network map by ID." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "map.get" + immutable: true + sysmapids: + type: array + description: "Map IDs to retrieve." + required: true + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" + selectSelements: + type: string + description: "Include map elements. Set to 'extend'." + required: false + selectLinks: + type: string + description: "Include map links. Set to 'extend'." + required: false diff --git a/actions/get.mediatype.yaml b/actions/get.mediatype.yaml new file mode 100644 index 0000000..3ba139f --- /dev/null +++ b/actions/get.mediatype.yaml @@ -0,0 +1,19 @@ +--- +name: get.mediatype +pack: zabbix +runner_type: python-script +description: "Get a media type by ID." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "mediatype.get" + immutable: true + mediatypeids: + type: array + description: "Media type IDs to retrieve." + required: true + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" diff --git a/actions/get.proxy.yaml b/actions/get.proxy.yaml new file mode 100644 index 0000000..be882ff --- /dev/null +++ b/actions/get.proxy.yaml @@ -0,0 +1,27 @@ +--- +name: get.proxy +pack: zabbix +runner_type: python-script +description: "Get a proxy by ID." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "proxy.get" + immutable: true + proxyids: + type: array + description: "Proxy IDs to retrieve." + required: true + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" + selectHosts: + type: string + description: "Include hosts monitored by proxy. Set to 'extend'." + required: false + selectInterface: + type: string + description: "Include proxy interface. Set to 'extend'." + required: false diff --git a/actions/get.script.yaml b/actions/get.script.yaml new file mode 100644 index 0000000..5381192 --- /dev/null +++ b/actions/get.script.yaml @@ -0,0 +1,19 @@ +--- +name: get.script +pack: zabbix +runner_type: python-script +description: "Get a script by ID." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "script.get" + immutable: true + scriptids: + type: array + description: "Script IDs to retrieve." + required: true + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" diff --git a/actions/get.service.yaml b/actions/get.service.yaml new file mode 100644 index 0000000..5f89795 --- /dev/null +++ b/actions/get.service.yaml @@ -0,0 +1,27 @@ +--- +name: get.service +pack: zabbix +runner_type: python-script +description: "Get a service by ID." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "service.get" + immutable: true + serviceids: + type: array + description: "Service IDs to retrieve." + required: true + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" + selectChildren: + type: string + description: "Include child services. Set to 'extend'." + required: false + selectParents: + type: string + description: "Include parent services. Set to 'extend'." + required: false diff --git a/actions/get.sla.yaml b/actions/get.sla.yaml new file mode 100644 index 0000000..9fc10f5 --- /dev/null +++ b/actions/get.sla.yaml @@ -0,0 +1,27 @@ +--- +name: get.sla +pack: zabbix +runner_type: python-script +description: "Get an SLA definition by ID." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "sla.get" + immutable: true + slaids: + type: array + description: "SLA IDs to retrieve." + required: true + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" + selectSchedule: + type: string + description: "Include schedule. Set to 'extend'." + required: false + selectServiceTags: + type: string + description: "Include service tags. Set to 'extend'." + required: false diff --git a/actions/get.template.yaml b/actions/get.template.yaml new file mode 100644 index 0000000..0be8655 --- /dev/null +++ b/actions/get.template.yaml @@ -0,0 +1,19 @@ +--- +name: get.template +pack: zabbix +runner_type: python-script +description: "Get a template by ID." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "template.get" + immutable: true + templateids: + type: array + description: "Template IDs to retrieve." + required: true + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" diff --git a/actions/get.trend.yaml b/actions/get.trend.yaml new file mode 100644 index 0000000..d9a8608 --- /dev/null +++ b/actions/get.trend.yaml @@ -0,0 +1,31 @@ +--- +name: get.trend +pack: zabbix +runner_type: python-script +description: "Retrieve trend data (hourly aggregated values)." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "trend.get" + immutable: true + itemids: + type: array + description: "Item IDs to retrieve trends for." + required: true + time_from: + type: string + description: "Return only trends after this time (unix timestamp)." + required: false + time_till: + type: string + description: "Return only trends before this time (unix timestamp)." + required: false + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" + limit: + type: integer + description: "Maximum number of results." + required: false diff --git a/actions/get.trigger.yaml b/actions/get.trigger.yaml new file mode 100644 index 0000000..27afd47 --- /dev/null +++ b/actions/get.trigger.yaml @@ -0,0 +1,23 @@ +--- +name: get.trigger +pack: zabbix +runner_type: python-script +description: "Get a trigger by ID." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "trigger.get" + immutable: true + triggerids: + type: array + description: "Trigger IDs to retrieve." + required: true + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" + expandDescription: + type: boolean + description: "Expand macros in trigger description." + required: false diff --git a/actions/get.user.yaml b/actions/get.user.yaml new file mode 100644 index 0000000..db91126 --- /dev/null +++ b/actions/get.user.yaml @@ -0,0 +1,27 @@ +--- +name: get.user +pack: zabbix +runner_type: python-script +description: "Get a user by ID." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "user.get" + immutable: true + userids: + type: array + description: "User IDs to retrieve." + required: true + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" + selectMedias: + type: string + description: "Include user medias. Set to 'extend'." + required: false + selectUsrgrps: + type: string + description: "Include user groups. Set to 'extend'." + required: false diff --git a/actions/get_api_version.py b/actions/get_api_version.py new file mode 100644 index 0000000..ee550a2 --- /dev/null +++ b/actions/get_api_version.py @@ -0,0 +1,9 @@ +from lib.actions import ZabbixBaseAction + + +class GetApiVersion(ZabbixBaseAction): + """Get the Zabbix API version.""" + + def run(self): + self.connect() + return str(self.client.api_version()) diff --git a/actions/host_delete.py b/actions/host_delete.py deleted file mode 100644 index 80b13c7..0000000 --- a/actions/host_delete.py +++ /dev/null @@ -1,33 +0,0 @@ -# Licensed to the StackStorm, Inc ('StackStorm') under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from lib.actions import ZabbixBaseAction -from pyzabbix.api import ZabbixAPIException - - -class HostDelete(ZabbixBaseAction): - def run(self, host=None, host_id=None): - """ Deletes a Zabbix Host. - """ - self.connect() - - if not host_id: - host_id = self.find_host(host) - - try: - self.client.host.delete(host_id) - return True - except ZabbixAPIException as e: - raise ZabbixAPIException("There was a problem deleting the host: {0}".format(e)) diff --git a/actions/host_delete.yaml b/actions/host_delete.yaml deleted file mode 100644 index f8a5b67..0000000 --- a/actions/host_delete.yaml +++ /dev/null @@ -1,12 +0,0 @@ ---- -name: host_delete -pack: zabbix -runner_type: python-script -description: Delete a Zabbix Host -enabled: true -entry_point: host_delete.py -parameters: - host: - type: string - description: "Name of the Zabbix Host" - required: True diff --git a/actions/host_delete_by_id.yaml b/actions/host_delete_by_id.yaml deleted file mode 100644 index ec616b7..0000000 --- a/actions/host_delete_by_id.yaml +++ /dev/null @@ -1,12 +0,0 @@ ---- -name: host_delete_by_id -pack: zabbix -runner_type: python-script -description: Delete a Zabbix Host by it's Id -enabled: true -entry_point: host_delete.py -parameters: - host_id: - type: string - description: "Id of the Zabbix Host" - required: True diff --git a/actions/host_get_active_triggers.yaml b/actions/host_get_active_triggers.yaml deleted file mode 100644 index 1735e49..0000000 --- a/actions/host_get_active_triggers.yaml +++ /dev/null @@ -1,17 +0,0 @@ ---- -description: "List all active triggers for a given host" -enabled: true -runner_type: orquesta -entry_point: workflows/host_get_active_triggers.yaml -name: host_get_active_triggers -pack: zabbix -parameters: - host: - type: string - description: "Name of the Zabbix Host" - required: True - priority: - type: array - description: "List of priority numbers (severity) to get triggers for" - required: False - default: [] \ No newline at end of file diff --git a/actions/host_get_alerts.yaml b/actions/host_get_alerts.yaml deleted file mode 100644 index c1b23a3..0000000 --- a/actions/host_get_alerts.yaml +++ /dev/null @@ -1,25 +0,0 @@ ---- -name: host_get_alerts -pack: zabbix -runner_type: python-script -description: List all alerts for a given host ID in Zabbix -enabled: true -entry_point: call_api.py -parameters: - expandDescription: - type: string - description: "test flag" - default: "" - immutable: true - filter: - type: object - description: Condition to filter the result - token: - type: string - description: Encrypted access token to authenticate to ZabbixServer - default: | - {% if st2kv.user.zabbix.secret_token|string != '' %}{{ st2kv.user.zabbix.secret_token | decrypt_kv }}{% endif %} - secret: true - api_method: - default: alert.get - immutable: true diff --git a/actions/host_get_events.yaml b/actions/host_get_events.yaml deleted file mode 100644 index 66243b6..0000000 --- a/actions/host_get_events.yaml +++ /dev/null @@ -1,25 +0,0 @@ ---- -name: host_get_events -pack: zabbix -runner_type: python-script -description: List all events for a given host in Zabbix -enabled: true -entry_point: call_api.py -parameters: - expandDescription: - type: string - description: "test flag" - default: "" - immutable: true - filter: - type: object - description: Condition to filter the result - token: - type: string - description: Encrypted access token to authenticate to ZabbixServer - default: | - {% if st2kv.user.zabbix.secret_token|string != '' %}{{ st2kv.user.zabbix.secret_token | decrypt_kv }}{% endif %} - secret: true - api_method: - default: event.get - immutable: true diff --git a/actions/host_get_hostgroups.py b/actions/host_get_hostgroups.py deleted file mode 100644 index d82e998..0000000 --- a/actions/host_get_hostgroups.py +++ /dev/null @@ -1,44 +0,0 @@ -# Licensed to the StackStorm, Inc ('StackStorm') under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from lib.actions import ZabbixBaseAction -from pyzabbix.api import ZabbixAPIException - - -class HostGetHostGroups(ZabbixBaseAction): - - def run(self, host_id, group_id): - """ Gets the hostgroups of one or more Zabbix Hosts. - """ - self.connect() - - # Find hostgroups by host ids - try: - hostgroups = self.client.host.get( - hostids=host_id, selectGroups='extend', output=['hostid', 'groups']) - except ZabbixAPIException as e: - raise ZabbixAPIException(("There was a problem searching for the host: " - "{0}".format(e))) - - # if group ids are passed in we check to see if the host is a part of said groups - if group_id: - for group in hostgroups[0]["groups"]: - if group["groupid"] == group_id: - return hostgroups - - return (False, hostgroups) - # otherwise just return the groups the host is in - else: - return hostgroups diff --git a/actions/host_get_hostgroups.yaml b/actions/host_get_hostgroups.yaml deleted file mode 100644 index d4b5e24..0000000 --- a/actions/host_get_hostgroups.yaml +++ /dev/null @@ -1,16 +0,0 @@ ---- -name: host_get_hostgroups -pack: zabbix -runner_type: python-script -description: Gets/Checks the hostgroups of one or more Zabbix Hosts -enabled: true -entry_point: host_get_hostgroups.py -parameters: - group_id: - type: string - description: "Optional Group ID to check if host is in" - required: False - host_id: - type: string - description: "Host ID to find hostgroups for" - required: True \ No newline at end of file diff --git a/actions/host_get_id.py b/actions/host_get_id.py deleted file mode 100644 index d112082..0000000 --- a/actions/host_get_id.py +++ /dev/null @@ -1,28 +0,0 @@ -# Licensed to the StackStorm, Inc ('StackStorm') under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from lib.actions import ZabbixBaseAction - - -class HostGetID(ZabbixBaseAction): - def run(self, host=None): - """ Gets the ID of the Zabbix host given the Hostname or FQDN - of the Zabbix host. - """ - self.connect() - - host_id = self.find_host(host) - - return host_id diff --git a/actions/host_get_id.yaml b/actions/host_get_id.yaml deleted file mode 100644 index 2547a56..0000000 --- a/actions/host_get_id.yaml +++ /dev/null @@ -1,12 +0,0 @@ ---- -name: host_get_id -pack: zabbix -runner_type: python-script -description: Get the ID of a Zabbix Host -enabled: true -entry_point: host_get_id.py -parameters: - host: - type: string - description: "Name of the Zabbix Host" - required: True diff --git a/actions/host_get_interfaces.py b/actions/host_get_interfaces.py deleted file mode 100644 index 4164e8e..0000000 --- a/actions/host_get_interfaces.py +++ /dev/null @@ -1,35 +0,0 @@ -# Licensed to the StackStorm, Inc ('StackStorm') under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from lib.actions import ZabbixBaseAction -from pyzabbix.api import ZabbixAPIException - - -class HostGetInterfaces(ZabbixBaseAction): - - def run(self, host_ids=None): - """ Gets the interfaces of one or more Zabbix Hosts. - """ - self.connect() - - # Find interfaces by host ids - try: - interfaces = self.client.host.get( - hostids=host_ids, selectInterfaces='extend', output=['hostid', 'interfaces']) - except ZabbixAPIException as e: - raise ZabbixAPIException(("There was a problem searching for the host: " - "{0}".format(e))) - - return interfaces diff --git a/actions/host_get_interfaces.yaml b/actions/host_get_interfaces.yaml deleted file mode 100644 index 6295132..0000000 --- a/actions/host_get_interfaces.yaml +++ /dev/null @@ -1,12 +0,0 @@ ---- -name: host_get_interfaces -pack: zabbix -runner_type: python-script -description: Get the interfaces of one or more Zabbix Hosts -enabled: true -entry_point: host_get_interfaces.py -parameters: - host_ids: - type: array - description: "List of Host IDs to find inventory items for" - required: True \ No newline at end of file diff --git a/actions/host_get_inventory.py b/actions/host_get_inventory.py deleted file mode 100644 index 8764eee..0000000 --- a/actions/host_get_inventory.py +++ /dev/null @@ -1,35 +0,0 @@ -# Licensed to the StackStorm, Inc ('StackStorm') under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from lib.actions import ZabbixBaseAction -from pyzabbix.api import ZabbixAPIException - - -class HostGetInventory(ZabbixBaseAction): - - def run(self, host_ids=None): - """ Gets the inventory of one or more Zabbix Hosts. - """ - self.connect() - - # Find inventory by host ids - try: - inventory = self.client.host.get( - hostids=host_ids, selectInventory='extend', output=['hostid', 'inventory']) - except ZabbixAPIException as e: - raise ZabbixAPIException(("There was a problem searching for the host: " - "{0}".format(e))) - - return inventory diff --git a/actions/host_get_inventory.yaml b/actions/host_get_inventory.yaml deleted file mode 100644 index e521956..0000000 --- a/actions/host_get_inventory.yaml +++ /dev/null @@ -1,12 +0,0 @@ ---- -name: host_get_inventory -pack: zabbix -runner_type: python-script -description: Get the inventory of one or more Zabbix Hosts -enabled: true -entry_point: host_get_inventory.py -parameters: - host_ids: - type: array - description: "List of Host IDs to find inventory items for" - required: True \ No newline at end of file diff --git a/actions/host_get_multiple_ids.py b/actions/host_get_multiple_ids.py deleted file mode 100644 index 1ed056c..0000000 --- a/actions/host_get_multiple_ids.py +++ /dev/null @@ -1,47 +0,0 @@ -# Licensed to the StackStorm, Inc ('StackStorm') under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from lib.actions import ZabbixBaseAction -from pyzabbix.api import ZabbixAPIException - - -class ZabbixGetMultipleHostID(ZabbixBaseAction): - def find_hosts(self, host_name): - """ Queries the zabbix api for a host and returns just the - ids of the hosts as a list. If a host could not be found it - returns an empty list. - """ - try: - zabbix_hosts = self.client.host.get(filter={"host": host_name}) - except ZabbixAPIException as e: - raise ZabbixAPIException(("There was a problem searching for the host: " - "{0}".format(e))) - - zabbix_hosts_return = [] - if len(zabbix_hosts) > 0: - for host in zabbix_hosts: - zabbix_hosts_return.append(host['hostid']) - - return zabbix_hosts_return - - def run(self, host=None): - """ Gets the IDs of the Zabbix host given the Hostname or FQDN - of the Zabbix host. - """ - self.connect() - - zabbix_hosts = self.find_hosts(host) - - return {'host_ids': zabbix_hosts} diff --git a/actions/host_get_multiple_ids.yaml b/actions/host_get_multiple_ids.yaml deleted file mode 100644 index dac1107..0000000 --- a/actions/host_get_multiple_ids.yaml +++ /dev/null @@ -1,12 +0,0 @@ ---- -name: host_get_multiple_ids -pack: zabbix -runner_type: python-script -description: Get the IDs of multiple Zabbix Hosts -enabled: true -entry_point: host_get_multiple_ids.py -parameters: - host: - type: array - description: "Name of the Zabbix Hosts to retreive an ID for" - required: True diff --git a/actions/host_get_status.py b/actions/host_get_status.py deleted file mode 100644 index cbb860b..0000000 --- a/actions/host_get_status.py +++ /dev/null @@ -1,31 +0,0 @@ -# Licensed to the StackStorm, Inc ('StackStorm') under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from lib.actions import ZabbixBaseAction - - -class HostGetStatus(ZabbixBaseAction): - def run(self, host=None, status=None): - """ Gets the status of a Zabbix Host. - """ - self.connect() - - # Find current host and populate self.zabbix_host - self.find_host(host) - - # Get status from self.zabbix_host - host_status = self.zabbix_host['status'] - - return host_status diff --git a/actions/host_get_status.yaml b/actions/host_get_status.yaml deleted file mode 100644 index 1658627..0000000 --- a/actions/host_get_status.yaml +++ /dev/null @@ -1,12 +0,0 @@ ---- -name: host_get_status -pack: zabbix -runner_type: python-script -description: Get the status of a Zabbix Host -enabled: true -entry_point: host_get_status.py -parameters: - host: - type: string - description: "Name of the Zabbix Host" - required: True diff --git a/actions/host_get_triggers.yaml b/actions/host_get_triggers.yaml deleted file mode 100644 index 96b3998..0000000 --- a/actions/host_get_triggers.yaml +++ /dev/null @@ -1,25 +0,0 @@ ---- -name: host_get_triggers -pack: zabbix -runner_type: python-script -description: List all triggers for a given host in Zabbix -enabled: true -entry_point: call_api.py -parameters: - expandDescription: - type: string - description: "test flag" - default: "" - immutable: true - filter: - type: object - description: Condition to filter the result - token: - type: string - description: Encrypted access token to authenticate to ZabbixServer - default: | - {% if st2kv.user.zabbix.secret_token|string != '' %}{{ st2kv.user.zabbix.secret_token | decrypt_kv }}{% endif %} - secret: true - api_method: - default: trigger.get - immutable: true diff --git a/actions/host_status.py b/actions/host_status.py new file mode 100644 index 0000000..38117b5 --- /dev/null +++ b/actions/host_status.py @@ -0,0 +1,30 @@ +from lib.actions import ZabbixBaseAction +from zabbix_utils.exceptions import APIRequestError + + +class HostStatus(ZabbixBaseAction): + """Get or update host monitoring status by hostname.""" + + def run(self, hostname, status=None): + """Get or update host status. + + If status is provided, updates the host status. + If status is None, returns the current status. + + Args: + hostname: Name of the Zabbix host. + status: New status value (0=monitored, 1=unmonitored) or None to get. + """ + self.connect() + + host_id = self.find_host(hostname) + + if status is not None: + try: + self.client.host.update(hostid=host_id, status=status) + return True + except APIRequestError as e: + raise APIRequestError( + "Failed to update host status: {0}".format(e)) + else: + return self.zabbix_host['status'] diff --git a/actions/host_update_status.py b/actions/host_update_status.py deleted file mode 100644 index fad2c20..0000000 --- a/actions/host_update_status.py +++ /dev/null @@ -1,33 +0,0 @@ -# Licensed to the StackStorm, Inc ('StackStorm') under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from lib.actions import ZabbixBaseAction -from pyzabbix.api import ZabbixAPIException - - -class HostUpdateStatus(ZabbixBaseAction): - def run(self, host=None, status=None): - """ Updates the status of a Zabbix Host. Status needs to be - 1 or 0 for the call to succeed. - """ - self.connect() - - host_id = self.find_host(host) - - try: - self.client.host.update(hostid=host_id, status=status) - return True - except ZabbixAPIException as e: - raise ZabbixAPIException("There was a problem updating the host: {0}".format(e)) diff --git a/actions/host_update_status.yaml b/actions/host_update_status.yaml deleted file mode 100644 index efd6d2f..0000000 --- a/actions/host_update_status.yaml +++ /dev/null @@ -1,16 +0,0 @@ ---- -name: host_update_status -pack: zabbix -runner_type: python-script -description: Update the status of a Zabbix Host -enabled: true -entry_point: host_update_status.py -parameters: - host: - type: string - description: "Name of the Zabbix Host" - required: True - status: - type: integer - description: "Status to set the Zabbix Host to valid values: 0 - monitored host 1 - unmonitored host" - required: True diff --git a/actions/import.configuration.yaml b/actions/import.configuration.yaml new file mode 100644 index 0000000..d6047ed --- /dev/null +++ b/actions/import.configuration.yaml @@ -0,0 +1,23 @@ +--- +name: import.configuration +pack: zabbix +runner_type: python-script +description: "Import Zabbix configuration data." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "configuration.import_" + immutable: true + format: + type: string + description: "Import format: yaml, xml, or json." + required: true + source: + type: string + description: "Configuration data string to import." + required: true + rules: + type: object + description: "Import rules defining how to handle existing objects." + required: true diff --git a/actions/lib/actions.py b/actions/lib/actions.py index d7102bd..17a8fde 100644 --- a/actions/lib/actions.py +++ b/actions/lib/actions.py @@ -13,10 +13,9 @@ # See the License for the specific language governing permissions and # limitations under the License. -from pyzabbix.api import ZabbixAPIException +from zabbix_utils import ZabbixAPI +from zabbix_utils.exceptions import APIRequestError, ProcessingError from st2common.runners.base_action import Action -from six.moves.urllib.error import URLError -from zabbix.api import ZabbixAPI class ZabbixBaseAction(Action): @@ -26,25 +25,34 @@ def __init__(self, config): self.config = config self.client = None - if self.config is not None and "zabbix" in self.config: - if "url" not in self.config['zabbix']: - raise ValueError("Zabbix url details not in the config.yaml") - elif "username" not in self.config['zabbix']: - raise ValueError("Zabbix user details not in the config.yaml") - elif "password" not in self.config['zabbix']: - raise ValueError("Zabbix password details not in the config.yaml") - else: + if not self.config: raise ValueError("Zabbix details not in the config.yaml") + if "url" not in self.config: + raise ValueError("Zabbix url details not in the config.yaml") + # Require either api_token or username+password + has_token = bool(self.config.get('api_token')) + has_user = bool(self.config.get('username') and + self.config.get('password')) + if not has_token and not has_user: + raise ValueError("Zabbix api_token or username/password " + "must be set in the config.yaml") + def connect(self): try: - self.client = ZabbixAPI(url=self.config['zabbix']['url'], - user=self.config['zabbix']['username'], - password=self.config['zabbix']['password']) - except ZabbixAPIException as e: - raise ZabbixAPIException("Failed to authenticate with Zabbix (%s)" % str(e)) - except URLError as e: - raise URLError("Failed to connect to Zabbix Server (%s)" % str(e)) + self.client = ZabbixAPI(url=self.config['url']) + api_token = self.config.get('api_token') + if api_token: + self.client.login(token=api_token) + else: + self.client.login( + user=self.config['username'], + password=self.config['password'] + ) + except APIRequestError as e: + raise APIRequestError("Failed to authenticate with Zabbix (%s)" % str(e)) + except ProcessingError as e: + raise ProcessingError("Failed to connect to Zabbix Server (%s)" % str(e)) except KeyError: raise KeyError("Configuration for Zabbix pack is not set yet") @@ -58,9 +66,9 @@ def reconstruct_args_for_ack_event(self, eventid, message, will_close): def find_host(self, host_name): try: zabbix_host = self.client.host.get(filter={"host": host_name}) - except ZabbixAPIException as e: - raise ZabbixAPIException(("There was a problem searching for the host: " - "{0}".format(e))) + except APIRequestError as e: + raise APIRequestError(("There was a problem searching for the host: " + "{0}".format(e))) if len(zabbix_host) == 0: raise ValueError("Could not find any hosts named {0}".format(host_name)) @@ -71,13 +79,35 @@ def find_host(self, host_name): return self.zabbix_host['hostid'] + def host_get_extended(self, host_ids, select_field, output_fields): + """Retrieve extended host data by IDs with a specified select parameter. + + Args: + host_ids: Host ID or list of host IDs. + select_field: The selectX parameter name (e.g. 'selectInterfaces'). + output_fields: List of output field names (e.g. ['hostid', 'interfaces']). + + Returns: + List of host dicts with the requested extended data. + """ + try: + kwargs = { + 'hostids': host_ids, + select_field: 'extend', + 'output': output_fields, + } + return self.client.host.get(**kwargs) + except APIRequestError as e: + raise APIRequestError( + "There was a problem searching for the host: {0}".format(e)) + def maintenance_get(self, maintenance_name): try: result = self.client.maintenance.get(filter={"name": maintenance_name}) return result - except ZabbixAPIException as e: - raise ZabbixAPIException(("There was a problem searching for the maintenance window: " - "{0}".format(e))) + except APIRequestError as e: + raise APIRequestError(("There was a problem searching for the maintenance window: " + "{0}".format(e))) def maintenance_create_or_update(self, maintenance_params): maintenance_result = self.maintenance_get(maintenance_params['name']) @@ -85,18 +115,18 @@ def maintenance_create_or_update(self, maintenance_params): try: create_result = self.client.maintenance.create(**maintenance_params) return create_result - except ZabbixAPIException as e: - raise ZabbixAPIException(("There was a problem creating the " - "maintenance window: {0}".format(e))) + except APIRequestError as e: + raise APIRequestError(("There was a problem creating the " + "maintenance window: {0}".format(e))) elif len(maintenance_result) == 1: try: maintenance_id = maintenance_result[0]['maintenanceid'] update_result = self.client.maintenance.update(maintenanceid=maintenance_id, **maintenance_params) return update_result - except ZabbixAPIException as e: - raise ZabbixAPIException(("There was a problem updating the " - "maintenance window: {0}".format(e))) + except APIRequestError as e: + raise APIRequestError(("There was a problem updating the " + "maintenance window: {0}".format(e))) elif len(maintenance_result) >= 2: raise ValueError(("There are multiple maintenance windows with the " "name: {0}").format(maintenance_params['name'])) diff --git a/actions/list.actions.yaml b/actions/list.actions.yaml new file mode 100644 index 0000000..5115f44 --- /dev/null +++ b/actions/list.actions.yaml @@ -0,0 +1,47 @@ +--- +name: list.actions +pack: zabbix +runner_type: python-script +description: "List Zabbix alert actions." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "action.get" + immutable: true + filter: + type: object + description: "Filter conditions." + required: false + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" + search: + type: object + description: "Search by pattern." + required: false + limit: + type: integer + description: "Maximum number of results." + required: false + sortfield: + type: string + description: "Field to sort by." + required: false + sortorder: + type: string + description: "Sort order: ASC or DESC." + required: false + actionids: + type: array + description: "Filter by action IDs." + required: false + selectOperations: + type: string + description: "Include operations. Set to 'extend'." + required: false + selectRecoveryOperations: + type: string + description: "Include recovery operations. Set to 'extend'." + required: false diff --git a/actions/list.alerts.yaml b/actions/list.alerts.yaml new file mode 100644 index 0000000..3219a15 --- /dev/null +++ b/actions/list.alerts.yaml @@ -0,0 +1,59 @@ +--- +name: list.alerts +pack: zabbix +runner_type: python-script +description: "List Zabbix alerts with optional filtering." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "alert.get" + immutable: true + hostids: + type: array + description: "Filter alerts by host IDs." + required: false + groupids: + type: array + description: "Filter alerts by host group IDs." + required: false + actionids: + type: array + description: "Filter by action IDs." + required: false + eventids: + type: array + description: "Filter by event IDs." + required: false + mediatypeids: + type: array + description: "Filter by media type IDs." + required: false + filter: + type: object + description: "Additional filter conditions." + required: false + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" + time_from: + type: string + description: "Return only alerts after this time (unix timestamp)." + required: false + time_till: + type: string + description: "Return only alerts before this time (unix timestamp)." + required: false + sortfield: + type: string + description: "Field to sort by." + required: false + sortorder: + type: string + description: "Sort order: ASC or DESC." + required: false + limit: + type: integer + description: "Maximum number of results." + required: false diff --git a/actions/list.correlations.yaml b/actions/list.correlations.yaml new file mode 100644 index 0000000..b74eb75 --- /dev/null +++ b/actions/list.correlations.yaml @@ -0,0 +1,47 @@ +--- +name: list.correlations +pack: zabbix +runner_type: python-script +description: "List event correlation rules." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "correlation.get" + immutable: true + filter: + type: object + description: "Filter conditions." + required: false + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" + search: + type: object + description: "Search by pattern." + required: false + limit: + type: integer + description: "Maximum number of results." + required: false + sortfield: + type: string + description: "Field to sort by." + required: false + sortorder: + type: string + description: "Sort order: ASC or DESC." + required: false + correlationids: + type: array + description: "Filter by correlation IDs." + required: false + selectOperations: + type: string + description: "Include operations. Set to 'extend'." + required: false + selectFilter: + type: string + description: "Include filter. Set to 'extend'." + required: false diff --git a/actions/list.dashboards.yaml b/actions/list.dashboards.yaml new file mode 100644 index 0000000..65d9060 --- /dev/null +++ b/actions/list.dashboards.yaml @@ -0,0 +1,43 @@ +--- +name: list.dashboards +pack: zabbix +runner_type: python-script +description: "List Zabbix dashboards." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "dashboard.get" + immutable: true + filter: + type: object + description: "Filter conditions." + required: false + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" + search: + type: object + description: "Search by pattern." + required: false + limit: + type: integer + description: "Maximum number of results." + required: false + sortfield: + type: string + description: "Field to sort by." + required: false + sortorder: + type: string + description: "Sort order: ASC or DESC." + required: false + dashboardids: + type: array + description: "Filter by dashboard IDs." + required: false + selectPages: + type: string + description: "Include dashboard pages. Set to 'extend'." + required: false diff --git a/actions/list.dhosts.yaml b/actions/list.dhosts.yaml new file mode 100644 index 0000000..0e149f6 --- /dev/null +++ b/actions/list.dhosts.yaml @@ -0,0 +1,47 @@ +--- +name: list.dhosts +pack: zabbix +runner_type: python-script +description: "List discovered hosts." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "dhost.get" + immutable: true + filter: + type: object + description: "Filter conditions." + required: false + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" + search: + type: object + description: "Search by pattern." + required: false + limit: + type: integer + description: "Maximum number of results." + required: false + sortfield: + type: string + description: "Field to sort by." + required: false + sortorder: + type: string + description: "Sort order: ASC or DESC." + required: false + druleids: + type: array + description: "Filter by discovery rule IDs." + required: false + dhostids: + type: array + description: "Filter by discovered host IDs." + required: false + selectDServices: + type: string + description: "Include discovered services. Set to 'extend'." + required: false diff --git a/actions/list.drules.yaml b/actions/list.drules.yaml new file mode 100644 index 0000000..2151e37 --- /dev/null +++ b/actions/list.drules.yaml @@ -0,0 +1,43 @@ +--- +name: list.drules +pack: zabbix +runner_type: python-script +description: "List network discovery rules." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "drule.get" + immutable: true + filter: + type: object + description: "Filter conditions." + required: false + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" + search: + type: object + description: "Search by pattern." + required: false + limit: + type: integer + description: "Maximum number of results." + required: false + sortfield: + type: string + description: "Field to sort by." + required: false + sortorder: + type: string + description: "Sort order: ASC or DESC." + required: false + druleids: + type: array + description: "Filter by discovery rule IDs." + required: false + selectDChecks: + type: string + description: "Include discovery checks. Set to 'extend'." + required: false diff --git a/actions/list.dservices.yaml b/actions/list.dservices.yaml new file mode 100644 index 0000000..ab248b4 --- /dev/null +++ b/actions/list.dservices.yaml @@ -0,0 +1,47 @@ +--- +name: list.dservices +pack: zabbix +runner_type: python-script +description: "List discovered services." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "dservice.get" + immutable: true + filter: + type: object + description: "Filter conditions." + required: false + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" + search: + type: object + description: "Search by pattern." + required: false + limit: + type: integer + description: "Maximum number of results." + required: false + sortfield: + type: string + description: "Field to sort by." + required: false + sortorder: + type: string + description: "Sort order: ASC or DESC." + required: false + dhostids: + type: array + description: "Filter by discovered host IDs." + required: false + druleids: + type: array + description: "Filter by discovery rule IDs." + required: false + dserviceids: + type: array + description: "Filter by specific discovered service IDs." + required: false diff --git a/actions/list.events.yaml b/actions/list.events.yaml new file mode 100644 index 0000000..1925c9e --- /dev/null +++ b/actions/list.events.yaml @@ -0,0 +1,59 @@ +--- +name: list.events +pack: zabbix +runner_type: python-script +description: "List Zabbix events with optional filtering." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "event.get" + immutable: true + hostids: + type: array + description: "Filter events by host IDs." + required: false + objectids: + type: array + description: "Filter by trigger/item/etc IDs that generated events." + required: false + source: + type: integer + description: "Event source: 0 (trigger), 1 (discovery), 2 (autoregistration), 3 (internal)." + required: false + object: + type: integer + description: "Event object type: 0 (trigger), 1 (discovered host), etc." + required: false + value: + type: integer + description: "Event value: 0 (OK/Up), 1 (Problem/Down)." + required: false + time_from: + type: string + description: "Return only events after this time (unix timestamp)." + required: false + time_till: + type: string + description: "Return only events before this time (unix timestamp)." + required: false + filter: + type: object + description: "Filter conditions." + required: false + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" + sortfield: + type: array + description: "Fields to sort by (e.g. ['clock', 'eventid'])." + required: false + sortorder: + type: string + description: "Sort order: ASC or DESC." + required: false + limit: + type: integer + description: "Maximum number of results." + required: false diff --git a/actions/list.graphs.yaml b/actions/list.graphs.yaml new file mode 100644 index 0000000..712663c --- /dev/null +++ b/actions/list.graphs.yaml @@ -0,0 +1,51 @@ +--- +name: list.graphs +pack: zabbix +runner_type: python-script +description: "List Zabbix graphs." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "graph.get" + immutable: true + filter: + type: object + description: "Filter conditions." + required: false + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" + search: + type: object + description: "Search by pattern." + required: false + limit: + type: integer + description: "Maximum number of results." + required: false + sortfield: + type: string + description: "Field to sort by." + required: false + sortorder: + type: string + description: "Sort order: ASC or DESC." + required: false + hostids: + type: array + description: "Filter by host IDs." + required: false + groupids: + type: array + description: "Filter by host group IDs." + required: false + templateids: + type: array + description: "Filter by template IDs." + required: false + graphids: + type: array + description: "Filter by graph IDs." + required: false diff --git a/actions/list.hostgroups.yaml b/actions/list.hostgroups.yaml new file mode 100644 index 0000000..5f8a8e8 --- /dev/null +++ b/actions/list.hostgroups.yaml @@ -0,0 +1,35 @@ +--- +name: list.hostgroups +pack: zabbix +runner_type: python-script +description: "List Zabbix host groups." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "hostgroup.get" + immutable: true + filter: + type: object + description: "Filter conditions." + required: false + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" + search: + type: object + description: "Search by pattern." + required: false + limit: + type: integer + description: "Maximum number of results." + required: false + sortfield: + type: string + description: "Field to sort by." + required: false + sortorder: + type: string + description: "Sort order: ASC or DESC." + required: false diff --git a/actions/list.hostinterfaces.yaml b/actions/list.hostinterfaces.yaml new file mode 100644 index 0000000..91b7ddc --- /dev/null +++ b/actions/list.hostinterfaces.yaml @@ -0,0 +1,43 @@ +--- +name: list.hostinterfaces +pack: zabbix +runner_type: python-script +description: "List host interfaces." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "hostinterface.get" + immutable: true + filter: + type: object + description: "Filter conditions." + required: false + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" + search: + type: object + description: "Search by pattern." + required: false + limit: + type: integer + description: "Maximum number of results." + required: false + sortfield: + type: string + description: "Field to sort by." + required: false + sortorder: + type: string + description: "Sort order: ASC or DESC." + required: false + hostids: + type: array + description: "Filter by host IDs." + required: false + interfaceids: + type: array + description: "Filter by interface IDs." + required: false diff --git a/actions/list.hosts.yaml b/actions/list.hosts.yaml new file mode 100644 index 0000000..1ae9675 --- /dev/null +++ b/actions/list.hosts.yaml @@ -0,0 +1,55 @@ +--- +name: list.hosts +pack: zabbix +runner_type: python-script +description: "List and search Zabbix hosts with optional filtering." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "host.get" + immutable: true + filter: + type: object + description: "Filter conditions (e.g. {\"host\": \"myhost\"})." + required: false + output: + type: array + description: "Fields to return (e.g. [\"hostid\", \"host\", \"name\", \"status\"])." + required: false + groupids: + type: array + description: "Filter by host group IDs." + required: false + templateids: + type: array + description: "Filter by template IDs." + required: false + proxyids: + type: array + description: "Filter by proxy IDs." + required: false + hostids: + type: array + description: "Filter by specific host IDs." + required: false + search: + type: object + description: "Search by pattern (e.g. {\"host\": \"web*\"})." + required: false + searchWildcardsEnabled: + type: boolean + description: "Enable wildcard matching in search." + required: false + limit: + type: integer + description: "Maximum number of results." + required: false + sortfield: + type: string + description: "Field to sort by." + required: false + sortorder: + type: string + description: "Sort order: ASC or DESC." + required: false diff --git a/actions/list.httptests.yaml b/actions/list.httptests.yaml new file mode 100644 index 0000000..ee05d47 --- /dev/null +++ b/actions/list.httptests.yaml @@ -0,0 +1,51 @@ +--- +name: list.httptests +pack: zabbix +runner_type: python-script +description: "List web monitoring scenarios." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "httptest.get" + immutable: true + filter: + type: object + description: "Filter conditions." + required: false + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" + search: + type: object + description: "Search by pattern." + required: false + limit: + type: integer + description: "Maximum number of results." + required: false + sortfield: + type: string + description: "Field to sort by." + required: false + sortorder: + type: string + description: "Sort order: ASC or DESC." + required: false + hostids: + type: array + description: "Filter by host IDs." + required: false + groupids: + type: array + description: "Filter by host group IDs." + required: false + httptestids: + type: array + description: "Filter by web scenario IDs." + required: false + selectSteps: + type: string + description: "Include web scenario steps. Set to 'extend'." + required: false diff --git a/actions/list.items.yaml b/actions/list.items.yaml new file mode 100644 index 0000000..d6d12ac --- /dev/null +++ b/actions/list.items.yaml @@ -0,0 +1,51 @@ +--- +name: list.items +pack: zabbix +runner_type: python-script +description: "List Zabbix monitoring items." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "item.get" + immutable: true + filter: + type: object + description: "Filter conditions." + required: false + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" + search: + type: object + description: "Search by pattern." + required: false + limit: + type: integer + description: "Maximum number of results." + required: false + sortfield: + type: string + description: "Field to sort by." + required: false + sortorder: + type: string + description: "Sort order: ASC or DESC." + required: false + hostids: + type: array + description: "Filter items by host IDs." + required: false + groupids: + type: array + description: "Filter items by host group IDs." + required: false + templateids: + type: array + description: "Filter items by template IDs." + required: false + itemids: + type: array + description: "Filter by specific item IDs." + required: false diff --git a/actions/list.maintenances.yaml b/actions/list.maintenances.yaml new file mode 100644 index 0000000..64f3304 --- /dev/null +++ b/actions/list.maintenances.yaml @@ -0,0 +1,47 @@ +--- +name: list.maintenances +pack: zabbix +runner_type: python-script +description: "List Zabbix maintenance windows." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "maintenance.get" + immutable: true + filter: + type: object + description: "Filter conditions." + required: false + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" + search: + type: object + description: "Search by pattern." + required: false + limit: + type: integer + description: "Maximum number of results." + required: false + sortfield: + type: string + description: "Field to sort by." + required: false + sortorder: + type: string + description: "Sort order: ASC or DESC." + required: false + hostids: + type: array + description: "Filter by host IDs in maintenance." + required: false + groupids: + type: array + description: "Filter by host group IDs in maintenance." + required: false + maintenanceids: + type: array + description: "Filter by specific maintenance IDs." + required: false diff --git a/actions/list.maps.yaml b/actions/list.maps.yaml new file mode 100644 index 0000000..99e91ef --- /dev/null +++ b/actions/list.maps.yaml @@ -0,0 +1,39 @@ +--- +name: list.maps +pack: zabbix +runner_type: python-script +description: "List Zabbix network maps." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "map.get" + immutable: true + filter: + type: object + description: "Filter conditions." + required: false + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" + search: + type: object + description: "Search by pattern." + required: false + limit: + type: integer + description: "Maximum number of results." + required: false + sortfield: + type: string + description: "Field to sort by." + required: false + sortorder: + type: string + description: "Sort order: ASC or DESC." + required: false + sysmapids: + type: array + description: "Filter by map IDs." + required: false diff --git a/actions/list.mediatypes.yaml b/actions/list.mediatypes.yaml new file mode 100644 index 0000000..2f408bb --- /dev/null +++ b/actions/list.mediatypes.yaml @@ -0,0 +1,39 @@ +--- +name: list.mediatypes +pack: zabbix +runner_type: python-script +description: "List Zabbix media types." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "mediatype.get" + immutable: true + filter: + type: object + description: "Filter conditions." + required: false + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" + search: + type: object + description: "Search by pattern." + required: false + limit: + type: integer + description: "Maximum number of results." + required: false + sortfield: + type: string + description: "Field to sort by." + required: false + sortorder: + type: string + description: "Sort order: ASC or DESC." + required: false + mediatypeids: + type: array + description: "Filter by media type IDs." + required: false diff --git a/actions/list.problems.yaml b/actions/list.problems.yaml new file mode 100644 index 0000000..cb33cfc --- /dev/null +++ b/actions/list.problems.yaml @@ -0,0 +1,75 @@ +--- +name: list.problems +pack: zabbix +runner_type: python-script +description: "List active Zabbix problems with optional filtering." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "problem.get" + immutable: true + hostids: + type: array + description: "Filter problems by host IDs." + required: false + groupids: + type: array + description: "Filter problems by host group IDs." + required: false + objectids: + type: array + description: "Filter by trigger IDs that generated problems." + required: false + severities: + type: array + description: "Filter by severity levels (0-5)." + required: false + acknowledged: + type: boolean + description: "Filter by acknowledgement state." + required: false + suppressed: + type: boolean + description: "Filter by suppression state." + required: false + tags: + type: array + description: "Filter by problem tags." + required: false + time_from: + type: string + description: "Return only problems after this time (unix timestamp)." + required: false + time_till: + type: string + description: "Return only problems before this time (unix timestamp)." + required: false + recent: + type: boolean + description: "Return only recently created problems." + required: false + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" + selectAcknowledges: + type: string + description: "Include acknowledgements. Set to 'extend'." + required: false + selectTags: + type: string + description: "Include tags. Set to 'extend'." + required: false + sortfield: + type: array + description: "Fields to sort by." + required: false + sortorder: + type: string + description: "Sort order: ASC or DESC." + required: false + limit: + type: integer + description: "Maximum number of results." + required: false diff --git a/actions/list.proxies.yaml b/actions/list.proxies.yaml new file mode 100644 index 0000000..3e83318 --- /dev/null +++ b/actions/list.proxies.yaml @@ -0,0 +1,39 @@ +--- +name: list.proxies +pack: zabbix +runner_type: python-script +description: "List Zabbix proxies." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "proxy.get" + immutable: true + filter: + type: object + description: "Filter conditions." + required: false + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" + search: + type: object + description: "Search by pattern." + required: false + limit: + type: integer + description: "Maximum number of results." + required: false + sortfield: + type: string + description: "Field to sort by." + required: false + sortorder: + type: string + description: "Sort order: ASC or DESC." + required: false + proxyids: + type: array + description: "Filter by proxy IDs." + required: false diff --git a/actions/list.roles.yaml b/actions/list.roles.yaml new file mode 100644 index 0000000..9acbed2 --- /dev/null +++ b/actions/list.roles.yaml @@ -0,0 +1,39 @@ +--- +name: list.roles +pack: zabbix +runner_type: python-script +description: "List Zabbix user roles." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "role.get" + immutable: true + filter: + type: object + description: "Filter conditions." + required: false + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" + search: + type: object + description: "Search by pattern." + required: false + limit: + type: integer + description: "Maximum number of results." + required: false + sortfield: + type: string + description: "Field to sort by." + required: false + sortorder: + type: string + description: "Sort order: ASC or DESC." + required: false + roleids: + type: array + description: "Filter by role IDs." + required: false diff --git a/actions/list.scripts.yaml b/actions/list.scripts.yaml new file mode 100644 index 0000000..c05272a --- /dev/null +++ b/actions/list.scripts.yaml @@ -0,0 +1,47 @@ +--- +name: list.scripts +pack: zabbix +runner_type: python-script +description: "List Zabbix scripts." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "script.get" + immutable: true + filter: + type: object + description: "Filter conditions." + required: false + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" + search: + type: object + description: "Search by pattern." + required: false + limit: + type: integer + description: "Maximum number of results." + required: false + sortfield: + type: string + description: "Field to sort by." + required: false + sortorder: + type: string + description: "Sort order: ASC or DESC." + required: false + hostids: + type: array + description: "Filter scripts available for these hosts." + required: false + groupids: + type: array + description: "Filter scripts available for these host groups." + required: false + scriptids: + type: array + description: "Filter by specific script IDs." + required: false diff --git a/actions/list.services.yaml b/actions/list.services.yaml new file mode 100644 index 0000000..dae1ed2 --- /dev/null +++ b/actions/list.services.yaml @@ -0,0 +1,55 @@ +--- +name: list.services +pack: zabbix +runner_type: python-script +description: "List Zabbix services." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "service.get" + immutable: true + filter: + type: object + description: "Filter conditions." + required: false + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" + search: + type: object + description: "Search by pattern." + required: false + limit: + type: integer + description: "Maximum number of results." + required: false + sortfield: + type: string + description: "Field to sort by." + required: false + sortorder: + type: string + description: "Sort order: ASC or DESC." + required: false + serviceids: + type: array + description: "Filter by service IDs." + required: false + selectChildren: + type: string + description: "Include child services. Set to 'extend'." + required: false + selectParents: + type: string + description: "Include parent services. Set to 'extend'." + required: false + selectTags: + type: string + description: "Include service tags. Set to 'extend'." + required: false + selectProblemTags: + type: string + description: "Include problem tags. Set to 'extend'." + required: false diff --git a/actions/list.sla.yaml b/actions/list.sla.yaml new file mode 100644 index 0000000..2eff595 --- /dev/null +++ b/actions/list.sla.yaml @@ -0,0 +1,51 @@ +--- +name: list.sla +pack: zabbix +runner_type: python-script +description: "List SLA definitions." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "sla.get" + immutable: true + filter: + type: object + description: "Filter conditions." + required: false + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" + search: + type: object + description: "Search by pattern." + required: false + limit: + type: integer + description: "Maximum number of results." + required: false + sortfield: + type: string + description: "Field to sort by." + required: false + sortorder: + type: string + description: "Sort order: ASC or DESC." + required: false + slaids: + type: array + description: "Filter by SLA IDs." + required: false + serviceids: + type: array + description: "Filter SLAs linked to these services." + required: false + selectSchedule: + type: string + description: "Include schedule. Set to 'extend'." + required: false + selectServiceTags: + type: string + description: "Include service tags. Set to 'extend'." + required: false diff --git a/actions/list.templates.yaml b/actions/list.templates.yaml new file mode 100644 index 0000000..fdf51ed --- /dev/null +++ b/actions/list.templates.yaml @@ -0,0 +1,43 @@ +--- +name: list.templates +pack: zabbix +runner_type: python-script +description: "List Zabbix templates." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "template.get" + immutable: true + filter: + type: object + description: "Filter conditions." + required: false + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" + search: + type: object + description: "Search by pattern." + required: false + limit: + type: integer + description: "Maximum number of results." + required: false + sortfield: + type: string + description: "Field to sort by." + required: false + sortorder: + type: string + description: "Sort order: ASC or DESC." + required: false + hostids: + type: array + description: "Filter templates linked to these hosts." + required: false + groupids: + type: array + description: "Filter templates in these host groups." + required: false diff --git a/actions/list.tokens.yaml b/actions/list.tokens.yaml new file mode 100644 index 0000000..e5df5fa --- /dev/null +++ b/actions/list.tokens.yaml @@ -0,0 +1,43 @@ +--- +name: list.tokens +pack: zabbix +runner_type: python-script +description: "List API tokens." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "token.get" + immutable: true + filter: + type: object + description: "Filter conditions." + required: false + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" + search: + type: object + description: "Search by pattern." + required: false + limit: + type: integer + description: "Maximum number of results." + required: false + sortfield: + type: string + description: "Field to sort by." + required: false + sortorder: + type: string + description: "Sort order: ASC or DESC." + required: false + tokenids: + type: array + description: "Filter by token IDs." + required: false + userids: + type: array + description: "Filter by user IDs." + required: false diff --git a/actions/list.triggers.yaml b/actions/list.triggers.yaml new file mode 100644 index 0000000..e1997a1 --- /dev/null +++ b/actions/list.triggers.yaml @@ -0,0 +1,67 @@ +--- +name: list.triggers +pack: zabbix +runner_type: python-script +description: "List Zabbix triggers." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "trigger.get" + immutable: true + filter: + type: object + description: "Filter conditions." + required: false + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" + search: + type: object + description: "Search by pattern." + required: false + limit: + type: integer + description: "Maximum number of results." + required: false + sortfield: + type: string + description: "Field to sort by." + required: false + sortorder: + type: string + description: "Sort order: ASC or DESC." + required: false + hostids: + type: array + description: "Filter triggers by host IDs." + required: false + groupids: + type: array + description: "Filter triggers by host group IDs." + required: false + templateids: + type: array + description: "Filter triggers by template IDs." + required: false + triggerids: + type: array + description: "Filter by specific trigger IDs." + required: false + expandDescription: + type: boolean + description: "Expand macros in trigger description." + required: false + only_true: + type: boolean + description: "Return only triggers in problem state." + required: false + min_severity: + type: integer + description: "Minimum trigger severity (0-5)." + required: false + selectHosts: + type: string + description: "Include hosts. Set to 'extend'." + required: false diff --git a/actions/list.usergroups.yaml b/actions/list.usergroups.yaml new file mode 100644 index 0000000..e6bb970 --- /dev/null +++ b/actions/list.usergroups.yaml @@ -0,0 +1,43 @@ +--- +name: list.usergroups +pack: zabbix +runner_type: python-script +description: "List Zabbix user groups." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "usergroup.get" + immutable: true + filter: + type: object + description: "Filter conditions." + required: false + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" + search: + type: object + description: "Search by pattern." + required: false + limit: + type: integer + description: "Maximum number of results." + required: false + sortfield: + type: string + description: "Field to sort by." + required: false + sortorder: + type: string + description: "Sort order: ASC or DESC." + required: false + usrgrpids: + type: array + description: "Filter by user group IDs." + required: false + userids: + type: array + description: "Filter by user IDs that belong to the groups." + required: false diff --git a/actions/list.usermacros.yaml b/actions/list.usermacros.yaml new file mode 100644 index 0000000..c791a9f --- /dev/null +++ b/actions/list.usermacros.yaml @@ -0,0 +1,43 @@ +--- +name: list.usermacros +pack: zabbix +runner_type: python-script +description: "List host and global user macros." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "usermacro.get" + immutable: true + filter: + type: object + description: "Filter conditions." + required: false + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" + search: + type: object + description: "Search by pattern." + required: false + limit: + type: integer + description: "Maximum number of results." + required: false + sortfield: + type: string + description: "Field to sort by." + required: false + sortorder: + type: string + description: "Sort order: ASC or DESC." + required: false + hostids: + type: array + description: "Filter macros by host IDs." + required: false + globalmacro: + type: boolean + description: "Return global macros instead of host macros." + required: false diff --git a/actions/list.users.yaml b/actions/list.users.yaml new file mode 100644 index 0000000..29cc945 --- /dev/null +++ b/actions/list.users.yaml @@ -0,0 +1,51 @@ +--- +name: list.users +pack: zabbix +runner_type: python-script +description: "List Zabbix users." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "user.get" + immutable: true + filter: + type: object + description: "Filter conditions." + required: false + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" + search: + type: object + description: "Search by pattern." + required: false + limit: + type: integer + description: "Maximum number of results." + required: false + sortfield: + type: string + description: "Field to sort by." + required: false + sortorder: + type: string + description: "Sort order: ASC or DESC." + required: false + userids: + type: array + description: "Filter by user IDs." + required: false + usrgrpids: + type: array + description: "Filter by user group IDs." + required: false + selectMedias: + type: string + description: "Include user medias. Set to 'extend'." + required: false + selectUsrgrps: + type: string + description: "Include user groups. Set to 'extend'." + required: false diff --git a/actions/list.valuemaps.yaml b/actions/list.valuemaps.yaml new file mode 100644 index 0000000..b8e41d3 --- /dev/null +++ b/actions/list.valuemaps.yaml @@ -0,0 +1,43 @@ +--- +name: list.valuemaps +pack: zabbix +runner_type: python-script +description: "List value maps." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "valuemap.get" + immutable: true + filter: + type: object + description: "Filter conditions." + required: false + output: + type: string + description: "Output fields. Use 'extend' for all." + default: "extend" + search: + type: object + description: "Search by pattern." + required: false + limit: + type: integer + description: "Maximum number of results." + required: false + sortfield: + type: string + description: "Field to sort by." + required: false + sortorder: + type: string + description: "Sort order: ASC or DESC." + required: false + valuemapids: + type: array + description: "Filter by value map IDs." + required: false + hostids: + type: array + description: "Filter by host IDs." + required: false diff --git a/actions/list_host_groups.yaml b/actions/list_host_groups.yaml deleted file mode 100644 index 9ca9464..0000000 --- a/actions/list_host_groups.yaml +++ /dev/null @@ -1,20 +0,0 @@ ---- -name: list_host_groups -pack: zabbix -runner_type: python-script -description: List all host_groups objects which are registered in Zabbix -enabled: true -entry_point: call_api.py -parameters: - filter: - type: object - description: Condition to filter the result - token: - type: string - description: Encrypted access token to authenticate to ZabbixServer - default: | - {% if st2kv.user.zabbix.secret_token|string != '' %}{{ st2kv.user.zabbix.secret_token | decrypt_kv }}{% endif %} - secret: true - api_method: - default: hostgroup.get - immutable: true diff --git a/actions/list_host_interfaces.yaml b/actions/list_host_interfaces.yaml deleted file mode 100644 index 46f2f5e..0000000 --- a/actions/list_host_interfaces.yaml +++ /dev/null @@ -1,20 +0,0 @@ ---- -name: list_host_interfaces -pack: zabbix -runner_type: python-script -description: List all hostinterfaces objects which are registered in Zabbix -enabled: true -entry_point: call_api.py -parameters: - filter: - type: object - description: Condition to filter the result - token: - type: string - description: Encrypted access token to authenticate to ZabbixServer - default: | - {% if st2kv.user.zabbix.secret_token|string != '' %}{{ st2kv.user.zabbix.secret_token | decrypt_kv }}{% endif %} - secret: true - api_method: - default: hostinterface.get - immutable: true diff --git a/actions/list_hosts.yaml b/actions/list_hosts.yaml deleted file mode 100644 index de783a3..0000000 --- a/actions/list_hosts.yaml +++ /dev/null @@ -1,26 +0,0 @@ ---- -name: list_hosts -pack: zabbix -runner_type: python-script -description: List all host objects which are registered in Zabbix -enabled: true -entry_point: call_api.py -parameters: - filter: - type: object - description: 'Condition to filter the result. Example - {"hostid": "12345"}' - output: - description: A list of key names that limit the response data. 'hostid' is always present. Example - ["maintenance_status", "name"] - type: array - groupids: - description: list of groupids to limit the results to. Example - ["123", "456"] - type: array - token: - type: string - description: Encrypted access token to authenticate to ZabbixServer - default: | - {% if st2kv.user.zabbix.secret_token|string != '' %}{{ st2kv.user.zabbix.secret_token | decrypt_kv }}{% endif %} - secret: true - api_method: - default: host.get - immutable: true diff --git a/actions/list_templates.yaml b/actions/list_templates.yaml deleted file mode 100644 index 1b13f10..0000000 --- a/actions/list_templates.yaml +++ /dev/null @@ -1,20 +0,0 @@ ---- -name: list_templates -pack: zabbix -runner_type: python-script -description: List all templates objects which are registered in Zabbix -enabled: true -entry_point: call_api.py -parameters: - filter: - type: object - description: Condition to filter the result - token: - type: string - description: Encrypted access token to authenticate to ZabbixServer - default: | - {% if st2kv.user.zabbix.secret_token|string != '' %}{{ st2kv.user.zabbix.secret_token | decrypt_kv }}{% endif %} - secret: true - api_method: - default: template.get - immutable: true diff --git a/actions/maintenance_create_or_update.py b/actions/maintenance_create_or_update.py deleted file mode 100644 index fd068dd..0000000 --- a/actions/maintenance_create_or_update.py +++ /dev/null @@ -1,70 +0,0 @@ -# Licensed to the StackStorm, Inc ('StackStorm') under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from datetime import datetime -from tzlocal import get_localzone -from lib.actions import ZabbixBaseAction - - -class MaintenanceCreateOrUpdate(ZabbixBaseAction): - def run(self, - host=None, - time_type=None, - maintenance_window_name=None, - maintenance_type=None, - start_date=None, - end_date=None): - """ Creates or updates a Zabbix maintenance window by looking - for the supplied maintenance_window_name and creating the mainenance window if it - does not exist or updating the mainenance window if it already exists. - """ - self.connect() - - host_id = self.find_host(host) - - start_time = None - end_time = None - period = None - if start_date is not None and end_date is not None: - local_tz = get_localzone() - - start_local = datetime.strptime(start_date, "%Y-%m-%d %H:%M") - start_local = start_local.replace(tzinfo=local_tz) - start_time = int(start_local.strftime('%s')) - - end_local = datetime.strptime(end_date, "%Y-%m-%d %H:%M") - end_local = end_local.replace(tzinfo=local_tz) - end_time = int(end_local.strftime('%s')) - - period = end_time - start_time - else: - raise ValueError("Must supply a start_date and end_date") - - time_period = [{'start_date': start_time, - 'timeperiod_type': time_type, - 'period': period}] - - maintenance_params = { - 'hostids': [host_id], - 'name': maintenance_window_name, - 'active_since': start_time, - 'active_till': end_time, - 'maintenance_type': maintenance_type, - 'timeperiods': time_period - } - - maintenance_result = self.maintenance_create_or_update(maintenance_params) - - return {'maintenance_id': maintenance_result['maintenanceids'][0]} diff --git a/actions/maintenance_create_or_update.yaml b/actions/maintenance_create_or_update.yaml deleted file mode 100644 index e092bab..0000000 --- a/actions/maintenance_create_or_update.yaml +++ /dev/null @@ -1,32 +0,0 @@ ---- -name: maintenance_create_or_update -pack: zabbix -runner_type: python-script -description: Create or update Zabbix Maintenance Window -enabled: true -entry_point: maintenance_create_or_update.py -parameters: - end_date: - type: string - description: "Date and time to end maintenance window ex. 2017-10-13 20:00 (Y-m-d H:M)" - required: True - host: - type: string - description: "Name of the Zabbix Host" - required: True - maintenance_window_name: - type: string - description: "Name that of the maintenance window" - required: True - maintenance_type: - type: integer - description: "Type of maintenance valid values: 0 - with data collection 1 - without data collection" - default: 0 - start_date: - type: string - description: "Date and time to start maintenance window ex. 2017-10-13 11:00 (Y-m-d H:M)" - required: True - time_type: - type: integer - description: "Type of time period valid values: 0 - one time only; 2 - daily; 3 - weekly; 4 - monthly" - default: 0 diff --git a/actions/maintenance_delete.py b/actions/maintenance_delete.py deleted file mode 100644 index 03f8266..0000000 --- a/actions/maintenance_delete.py +++ /dev/null @@ -1,47 +0,0 @@ -# Licensed to the StackStorm, Inc ('StackStorm') under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from lib.actions import ZabbixBaseAction -from pyzabbix.api import ZabbixAPIException - - -class MaintenanceDelete(ZabbixBaseAction): - def run(self, maintenance_id=None, maintenance_window_name=None): - """ Delete a maintenance window base on the given maintenance_window_name - or a maintenance_id - """ - self.connect() - - if maintenance_window_name is not None: - maintenance_result = self.maintenance_get(maintenance_window_name) - - if len(maintenance_result) == 0: - raise ValueError(("Could not find maintenance windows with name: " - "{0}").format(maintenance_window_name)) - elif len(maintenance_result) == 1: - maintenance_id = maintenance_result[0]['maintenanceid'] - elif len(maintenance_result) >= 2: - raise ValueError(("There are multiple maintenance windows with the " - "name: {0}").format(maintenance_window_name)) - elif maintenance_window_name is None and maintenance_id is None: - raise ValueError("Must provide either a maintenance_window_name or a maintenance_id") - - try: - self.client.maintenance.delete(maintenance_id) - except ZabbixAPIException as e: - raise ZabbixAPIException(("There was a problem deleting the " - "maintenance window: {0}").format(e)) - - return True diff --git a/actions/maintenance_delete.yaml b/actions/maintenance_delete.yaml deleted file mode 100644 index 3edf877..0000000 --- a/actions/maintenance_delete.yaml +++ /dev/null @@ -1,14 +0,0 @@ ---- -name: maintenance_delete -pack: zabbix -runner_type: python-script -description: Delete Zabbix Maintenance Window -enabled: true -entry_point: maintenance_delete.py -parameters: - maintenance_id: - type: string - description: "ID of the maintenance window" - maintenance_window_name: - type: string - description: "Name that of the maintenance window" diff --git a/actions/test_credentials.py b/actions/test_credentials.py deleted file mode 100644 index 06032bf..0000000 --- a/actions/test_credentials.py +++ /dev/null @@ -1,26 +0,0 @@ -# Licensed to the StackStorm, Inc ('StackStorm') under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from lib.actions import ZabbixBaseAction - - -class TestCredentials(ZabbixBaseAction): - - def run(self, host=None): - """ Attempt to login to the Zabbix server given the credentials in the - config - """ - self.connect() - return True diff --git a/actions/test_credentials.yaml b/actions/test_credentials.yaml deleted file mode 100644 index bd44323..0000000 --- a/actions/test_credentials.yaml +++ /dev/null @@ -1,7 +0,0 @@ ---- -name: test_credentials -pack: zabbix -runner_type: python-script -description: Attempts to login to Zabbix given the credentials in the config -enabled: true -entry_point: test_credentials.py diff --git a/actions/update.action.yaml b/actions/update.action.yaml new file mode 100644 index 0000000..ff4ee45 --- /dev/null +++ b/actions/update.action.yaml @@ -0,0 +1,39 @@ +--- +name: update.action +pack: zabbix +runner_type: python-script +description: "Update an alert action." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "action.update" + immutable: true + actionid: + type: string + description: "ID of the action to update." + required: true + name: + type: string + description: "Action name." + required: false + status: + type: integer + description: "Status: 0 (enabled), 1 (disabled)." + required: false + esc_period: + type: string + description: "Default escalation period." + required: false + operations: + type: array + description: "Action operations." + required: false + recovery_operations: + type: array + description: "Recovery operations." + required: false + filter: + type: object + description: "Action filter." + required: false diff --git a/actions/update.correlation.yaml b/actions/update.correlation.yaml new file mode 100644 index 0000000..313e03f --- /dev/null +++ b/actions/update.correlation.yaml @@ -0,0 +1,35 @@ +--- +name: update.correlation +pack: zabbix +runner_type: python-script +description: "Update an event correlation rule." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "correlation.update" + immutable: true + correlationid: + type: string + description: "ID of the correlation to update." + required: true + name: + type: string + description: "Correlation name." + required: false + filter: + type: object + description: "Correlation filter." + required: false + operations: + type: array + description: "Correlation operations." + required: false + status: + type: integer + description: "Status." + required: false + description: + type: string + description: "Description." + required: false diff --git a/actions/update.dashboard.yaml b/actions/update.dashboard.yaml new file mode 100644 index 0000000..1b43a6c --- /dev/null +++ b/actions/update.dashboard.yaml @@ -0,0 +1,31 @@ +--- +name: update.dashboard +pack: zabbix +runner_type: python-script +description: "Update a dashboard." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "dashboard.update" + immutable: true + dashboardid: + type: string + description: "ID of the dashboard to update." + required: true + name: + type: string + description: "Dashboard name." + required: false + pages: + type: array + description: "Dashboard pages." + required: false + userid: + type: string + description: "Owner user ID." + required: false + display_period: + type: integer + description: "Page display period." + required: false diff --git a/actions/update.drule.yaml b/actions/update.drule.yaml new file mode 100644 index 0000000..3eb6b1c --- /dev/null +++ b/actions/update.drule.yaml @@ -0,0 +1,35 @@ +--- +name: update.drule +pack: zabbix +runner_type: python-script +description: "Update a network discovery rule." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "drule.update" + immutable: true + druleid: + type: string + description: "ID of the discovery rule to update." + required: true + name: + type: string + description: "Rule name." + required: false + iprange: + type: string + description: "IP range." + required: false + dchecks: + type: array + description: "Discovery checks." + required: false + delay: + type: string + description: "Execution interval." + required: false + status: + type: integer + description: "Status." + required: false diff --git a/actions/update.graph.yaml b/actions/update.graph.yaml new file mode 100644 index 0000000..6e1714a --- /dev/null +++ b/actions/update.graph.yaml @@ -0,0 +1,35 @@ +--- +name: update.graph +pack: zabbix +runner_type: python-script +description: "Update a graph." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "graph.update" + immutable: true + graphid: + type: string + description: "ID of the graph to update." + required: true + name: + type: string + description: "Graph name." + required: false + gitems: + type: array + description: "Graph items." + required: false + width: + type: integer + description: "Width in pixels." + required: false + height: + type: integer + description: "Height in pixels." + required: false + graphtype: + type: integer + description: "Graph type." + required: false diff --git a/actions/update.host.status.yaml b/actions/update.host.status.yaml new file mode 100644 index 0000000..e1b2c72 --- /dev/null +++ b/actions/update.host.status.yaml @@ -0,0 +1,16 @@ +--- +name: update.host.status +pack: zabbix +runner_type: python-script +description: "Update the monitoring status of a host by hostname." +enabled: true +entry_point: host_status.py +parameters: + hostname: + type: string + description: "Name of the Zabbix host." + required: true + status: + type: integer + description: "Status value: 0 (monitored) or 1 (unmonitored)." + required: true diff --git a/actions/update.host.yaml b/actions/update.host.yaml new file mode 100644 index 0000000..5be97f3 --- /dev/null +++ b/actions/update.host.yaml @@ -0,0 +1,55 @@ +--- +name: update.host +pack: zabbix +runner_type: python-script +description: "Update properties of an existing Zabbix host." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "host.update" + immutable: true + hostid: + type: string + description: "ID of the host to update." + required: true + host: + type: string + description: "New technical name for the host." + required: false + name: + type: string + description: "New visible name for the host." + required: false + description: + type: string + description: "Host description." + required: false + status: + type: integer + description: "Host status: 0 (monitored) or 1 (unmonitored)." + required: false + groups: + type: array + description: "Host groups to assign (replaces existing)." + required: false + interfaces: + type: array + description: "Host interfaces to set (replaces existing)." + required: false + templates: + type: array + description: "Templates to link (replaces existing)." + required: false + macros: + type: array + description: "User macros to set." + required: false + inventory: + type: object + description: "Host inventory properties to update." + required: false + tags: + type: array + description: "Host tags to set." + required: false diff --git a/actions/update.hostgroup.yaml b/actions/update.hostgroup.yaml new file mode 100644 index 0000000..bf61214 --- /dev/null +++ b/actions/update.hostgroup.yaml @@ -0,0 +1,19 @@ +--- +name: update.hostgroup +pack: zabbix +runner_type: python-script +description: "Update a host group." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "hostgroup.update" + immutable: true + groupid: + type: string + description: "ID of the host group to update." + required: true + name: + type: string + description: "New name for the host group." + required: false diff --git a/actions/update.hostinterface.yaml b/actions/update.hostinterface.yaml new file mode 100644 index 0000000..a1c1548 --- /dev/null +++ b/actions/update.hostinterface.yaml @@ -0,0 +1,39 @@ +--- +name: update.hostinterface +pack: zabbix +runner_type: python-script +description: "Update a host interface." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "hostinterface.update" + immutable: true + interfaceid: + type: string + description: "ID of the interface to update." + required: true + type: + type: integer + description: "Interface type." + required: false + main: + type: integer + description: "Is main interface." + required: false + useip: + type: integer + description: "Connect via IP or DNS." + required: false + ip: + type: string + description: "IP address." + required: false + dns: + type: string + description: "DNS name." + required: false + port: + type: string + description: "Port number." + required: false diff --git a/actions/update.httptest.yaml b/actions/update.httptest.yaml new file mode 100644 index 0000000..50a4c20 --- /dev/null +++ b/actions/update.httptest.yaml @@ -0,0 +1,39 @@ +--- +name: update.httptest +pack: zabbix +runner_type: python-script +description: "Update a web monitoring scenario." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "httptest.update" + immutable: true + httptestid: + type: string + description: "ID of the web scenario to update." + required: true + name: + type: string + description: "Web scenario name." + required: false + steps: + type: array + description: "Web scenario steps." + required: false + delay: + type: string + description: "Execution interval." + required: false + retries: + type: integer + description: "Number of retries." + required: false + agent: + type: string + description: "HTTP user agent." + required: false + status: + type: integer + description: "Status." + required: false diff --git a/actions/update.item.yaml b/actions/update.item.yaml new file mode 100644 index 0000000..c4a0a99 --- /dev/null +++ b/actions/update.item.yaml @@ -0,0 +1,43 @@ +--- +name: update.item +pack: zabbix +runner_type: python-script +description: "Update a monitoring item." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "item.update" + immutable: true + itemid: + type: string + description: "ID of the item to update." + required: true + name: + type: string + description: "Item name." + required: false + key_: + type: string + description: "Item key." + required: false + type: + type: integer + description: "Item type." + required: false + value_type: + type: integer + description: "Value type." + required: false + delay: + type: string + description: "Update interval." + required: false + status: + type: integer + description: "Status: 0 (enabled), 1 (disabled)." + required: false + description: + type: string + description: "Item description." + required: false diff --git a/actions/update.maintenance.yaml b/actions/update.maintenance.yaml new file mode 100644 index 0000000..3c6c6af --- /dev/null +++ b/actions/update.maintenance.yaml @@ -0,0 +1,51 @@ +--- +name: update.maintenance +pack: zabbix +runner_type: python-script +description: "Update a maintenance window." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "maintenance.update" + immutable: true + maintenanceid: + type: string + description: "ID of the maintenance window to update." + required: true + name: + type: string + description: "Maintenance window name." + required: false + active_since: + type: string + description: "Active since (unix timestamp)." + required: false + active_till: + type: string + description: "Active till (unix timestamp)." + required: false + hosts: + type: array + description: "Hosts in maintenance." + required: false + groups: + type: array + description: "Host groups in maintenance." + required: false + timeperiods: + type: array + description: "Time periods." + required: false + maintenance_type: + type: integer + description: "Maintenance type." + required: false + description: + type: string + description: "Description." + required: false + tags: + type: array + description: "Problem tags." + required: false diff --git a/actions/update.map.yaml b/actions/update.map.yaml new file mode 100644 index 0000000..5d78626 --- /dev/null +++ b/actions/update.map.yaml @@ -0,0 +1,35 @@ +--- +name: update.map +pack: zabbix +runner_type: python-script +description: "Update a network map." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "map.update" + immutable: true + sysmapid: + type: string + description: "ID of the map to update." + required: true + name: + type: string + description: "Map name." + required: false + width: + type: integer + description: "Map width." + required: false + height: + type: integer + description: "Map height." + required: false + selements: + type: array + description: "Map elements." + required: false + links: + type: array + description: "Map links." + required: false diff --git a/actions/update.mediatype.yaml b/actions/update.mediatype.yaml new file mode 100644 index 0000000..2e4a6ba --- /dev/null +++ b/actions/update.mediatype.yaml @@ -0,0 +1,39 @@ +--- +name: update.mediatype +pack: zabbix +runner_type: python-script +description: "Update a media type." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "mediatype.update" + immutable: true + mediatypeid: + type: string + description: "ID of the media type to update." + required: true + name: + type: string + description: "Media type name." + required: false + type: + type: integer + description: "Media type." + required: false + status: + type: integer + description: "Status: 0 (enabled), 1 (disabled)." + required: false + description: + type: string + description: "Description." + required: false + script: + type: string + description: "Webhook JavaScript body." + required: false + parameters: + type: array + description: "Webhook parameters." + required: false diff --git a/actions/update.proxy.yaml b/actions/update.proxy.yaml new file mode 100644 index 0000000..8666d3f --- /dev/null +++ b/actions/update.proxy.yaml @@ -0,0 +1,35 @@ +--- +name: update.proxy +pack: zabbix +runner_type: python-script +description: "Update a proxy." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "proxy.update" + immutable: true + proxyid: + type: string + description: "ID of the proxy to update." + required: true + host: + type: string + description: "Proxy name." + required: false + status: + type: integer + description: "Proxy mode: 5 (active), 6 (passive)." + required: false + description: + type: string + description: "Proxy description." + required: false + interface: + type: object + description: "Proxy interface." + required: false + hosts: + type: array + description: "Hosts to assign." + required: false diff --git a/actions/update.script.yaml b/actions/update.script.yaml new file mode 100644 index 0000000..5374350 --- /dev/null +++ b/actions/update.script.yaml @@ -0,0 +1,39 @@ +--- +name: update.script +pack: zabbix +runner_type: python-script +description: "Update a script." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "script.update" + immutable: true + scriptid: + type: string + description: "ID of the script to update." + required: true + name: + type: string + description: "Script name." + required: false + command: + type: string + description: "Script command." + required: false + type: + type: integer + description: "Script type." + required: false + scope: + type: integer + description: "Script scope." + required: false + execute_on: + type: integer + description: "Execution target." + required: false + description: + type: string + description: "Script description." + required: false diff --git a/actions/update.service.yaml b/actions/update.service.yaml new file mode 100644 index 0000000..438923c --- /dev/null +++ b/actions/update.service.yaml @@ -0,0 +1,47 @@ +--- +name: update.service +pack: zabbix +runner_type: python-script +description: "Update a service." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "service.update" + immutable: true + serviceid: + type: string + description: "ID of the service to update." + required: true + name: + type: string + description: "Service name." + required: false + algorithm: + type: integer + description: "Status calculation algorithm." + required: false + sortorder: + type: integer + description: "Sorting position." + required: false + weight: + type: integer + description: "Service weight." + required: false + tags: + type: array + description: "Service tags." + required: false + problem_tags: + type: array + description: "Problem tags." + required: false + parents: + type: array + description: "Parent services." + required: false + children: + type: array + description: "Child services." + required: false diff --git a/actions/update.template.yaml b/actions/update.template.yaml new file mode 100644 index 0000000..c3d10a2 --- /dev/null +++ b/actions/update.template.yaml @@ -0,0 +1,43 @@ +--- +name: update.template +pack: zabbix +runner_type: python-script +description: "Update a template." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "template.update" + immutable: true + templateid: + type: string + description: "ID of the template to update." + required: true + host: + type: string + description: "New technical name." + required: false + name: + type: string + description: "New visible name." + required: false + description: + type: string + description: "Template description." + required: false + groups: + type: array + description: "Host groups (replaces existing)." + required: false + templates: + type: array + description: "Linked templates (replaces existing)." + required: false + macros: + type: array + description: "User macros." + required: false + tags: + type: array + description: "Template tags." + required: false diff --git a/actions/update.trigger.yaml b/actions/update.trigger.yaml new file mode 100644 index 0000000..29ad7ab --- /dev/null +++ b/actions/update.trigger.yaml @@ -0,0 +1,39 @@ +--- +name: update.trigger +pack: zabbix +runner_type: python-script +description: "Update a trigger." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "trigger.update" + immutable: true + triggerid: + type: string + description: "ID of the trigger to update." + required: true + description: + type: string + description: "Trigger name." + required: false + expression: + type: string + description: "Trigger expression." + required: false + priority: + type: integer + description: "Severity (0-5)." + required: false + status: + type: integer + description: "Status: 0 (enabled), 1 (disabled)." + required: false + comments: + type: string + description: "Trigger comments." + required: false + tags: + type: array + description: "Trigger tags." + required: false diff --git a/actions/update.user.yaml b/actions/update.user.yaml new file mode 100644 index 0000000..57c3f7e --- /dev/null +++ b/actions/update.user.yaml @@ -0,0 +1,43 @@ +--- +name: update.user +pack: zabbix +runner_type: python-script +description: "Update a user." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "user.update" + immutable: true + userid: + type: string + description: "ID of the user to update." + required: true + username: + type: string + description: "Username." + required: false + passwd: + type: string + description: "New password." + required: false + roleid: + type: string + description: "Role ID." + required: false + name: + type: string + description: "First name." + required: false + surname: + type: string + description: "Surname." + required: false + usrgrps: + type: array + description: "User groups." + required: false + medias: + type: array + description: "User medias." + required: false diff --git a/actions/update.usermacro.global.yaml b/actions/update.usermacro.global.yaml new file mode 100644 index 0000000..b2e3a45 --- /dev/null +++ b/actions/update.usermacro.global.yaml @@ -0,0 +1,31 @@ +--- +name: update.usermacro.global +pack: zabbix +runner_type: python-script +description: "Update a global user macro." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "usermacro.updateglobal" + immutable: true + globalmacroid: + type: string + description: "ID of the global macro to update." + required: true + macro: + type: string + description: "Macro name." + required: false + value: + type: string + description: "Macro value." + required: false + type: + type: integer + description: "Type: 0 (text), 1 (secret), 2 (vault secret)." + required: false + description: + type: string + description: "Macro description." + required: false diff --git a/actions/update.usermacro.yaml b/actions/update.usermacro.yaml new file mode 100644 index 0000000..38a4342 --- /dev/null +++ b/actions/update.usermacro.yaml @@ -0,0 +1,31 @@ +--- +name: update.usermacro +pack: zabbix +runner_type: python-script +description: "Update a host user macro." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "usermacro.update" + immutable: true + hostmacroid: + type: string + description: "ID of the host macro to update." + required: true + macro: + type: string + description: "Macro name." + required: false + value: + type: string + description: "Macro value." + required: false + type: + type: integer + description: "Type: 0 (text), 1 (secret), 2 (vault secret)." + required: false + description: + type: string + description: "Macro description." + required: false diff --git a/actions/update.valuemap.yaml b/actions/update.valuemap.yaml new file mode 100644 index 0000000..287e9a7 --- /dev/null +++ b/actions/update.valuemap.yaml @@ -0,0 +1,23 @@ +--- +name: update.valuemap +pack: zabbix +runner_type: python-script +description: "Update a value map." +enabled: true +entry_point: call_api.py +parameters: + api_method: + default: "valuemap.update" + immutable: true + valuemapid: + type: string + description: "ID of the value map to update." + required: true + name: + type: string + description: "Value map name." + required: false + mappings: + type: array + description: "Value mappings." + required: false diff --git a/actions/update_host.yaml b/actions/update_host.yaml deleted file mode 100644 index a1a06e0..0000000 --- a/actions/update_host.yaml +++ /dev/null @@ -1,44 +0,0 @@ ---- -name: update_host -pack: zabbix -runner_type: python-script -description: A primitive action to update host information -enabled: true -entry_point: call_api.py -parameters: - hostid: - type: string - description: ID of Host to be updated - description: - type: string - description: Description of the host. - groups: - type: array - description: Host groups to replace the current host groups the host belongs to. - host: - type: string - description: Technical name of the host. - interfaces: - type: array - description: Host interfaces to replace the current host interfaces. - inventory: - type: object - description: Host inventory properties. - macros: - type: array - description: User macros to replace the current user macros. - name: - type: string - description: Visible name of the host. - templates: - type: array - description: Templates to replace the currently linked templates. - token: - type: string - description: Encrypted access token to authenticate to ZabbixServer - default: | - {% if st2kv.user.zabbix.secret_token|string != '' %}{{ st2kv.user.zabbix.secret_token | decrypt_kv }}{% endif %} - secret: true - api_method: - default: host.update - immutable: true diff --git a/actions/verify.credentials.yaml b/actions/verify.credentials.yaml new file mode 100644 index 0000000..0a7fcff --- /dev/null +++ b/actions/verify.credentials.yaml @@ -0,0 +1,8 @@ +--- +name: verify.credentials +pack: zabbix +runner_type: python-script +description: "Verify Zabbix API connectivity and authentication." +enabled: true +entry_point: verify_credentials.py +parameters: {} diff --git a/actions/verify_credentials.py b/actions/verify_credentials.py new file mode 100644 index 0000000..5a913d9 --- /dev/null +++ b/actions/verify_credentials.py @@ -0,0 +1,9 @@ +from lib.actions import ZabbixBaseAction + + +class VerifyCredentials(ZabbixBaseAction): + """Verify Zabbix API connectivity and authentication.""" + + def run(self): + self.connect() + return True diff --git a/actions/workflows/host_get_active_triggers.yaml b/actions/workflows/get.host.active_triggers.yaml similarity index 88% rename from actions/workflows/host_get_active_triggers.yaml rename to actions/workflows/get.host.active_triggers.yaml index 14b2a40..204abd5 100644 --- a/actions/workflows/host_get_active_triggers.yaml +++ b/actions/workflows/get.host.active_triggers.yaml @@ -4,7 +4,7 @@ version: 1.0 description: List all active triggers for a given host input: - - host + - hostname - priority vars: @@ -18,9 +18,9 @@ output: tasks: get_zabbix_id: - action: zabbix.host_get_id + action: zabbix.find.host input: - host: "{{ ctx().host }}" + name: "{{ ctx().hostname }}" next: - when: "{{ succeeded() }}" publish: @@ -34,7 +34,7 @@ tasks: - fail get_triggers: - action: zabbix.host_get_triggers + action: zabbix.list.triggers input: filter: hostid: "{{ ctx().host_id }}" diff --git a/config.schema.yaml b/config.schema.yaml index 9479910..97dc5fd 100644 --- a/config.schema.yaml +++ b/config.schema.yaml @@ -1,18 +1,19 @@ --- -zabbix: - description: Configuration to authenticate with Zabbix Server - type: object +url: + type: string required: true - additionalProperties: false - properties: - url: - type: string - description: The zabbix login URL - default: http://localhost/zabbix - username: - type: string - default: Admin - password: - type: string - default: zabbix - secret: true + description: The Zabbix frontend URL (e.g. http://zabbix.example.com:8080) + default: http://localhost:8080 +username: + type: string + description: Zabbix username (required if api_token not set) + default: Admin +password: + type: string + description: Zabbix password (required if api_token not set) + default: zabbix + secret: true +api_token: + type: string + description: Zabbix API token (preferred over username/password) + secret: true diff --git a/conftest.py b/conftest.py new file mode 100644 index 0000000..2aaa4de --- /dev/null +++ b/conftest.py @@ -0,0 +1,6 @@ +import sys +import os + +# Add actions/ and tests/ to the path so imports resolve as they do in StackStorm +sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'actions')) +sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'tests')) diff --git a/docker-compose.yaml b/docker-compose.yaml index 3b48b11..ad6f38d 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -1,7 +1,8 @@ -version: '3' +version: '3.8' services: mysql: - image: mysql:5.7 + image: mysql:8.0 + command: --default-authentication-plugin=mysql_native_password ports: - "3306:3306" environment: @@ -9,27 +10,62 @@ services: MYSQL_USER: zabbix MYSQL_PASSWORD: zabbix MYSQL_ROOT_PASSWORD: passwd + volumes: + - mysql-data:/var/lib/mysql + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-ppasswd"] + interval: 10s + timeout: 5s + retries: 5 zabbix-server: - image: zabbix/zabbix-server-mysql:${TAG} + image: zabbix/zabbix-server-mysql:6.0-ubuntu-latest environment: DB_SERVER_HOST: mysql + MYSQL_DATABASE: zabbix + MYSQL_USER: zabbix + MYSQL_PASSWORD: zabbix MYSQL_ROOT_PASSWORD: passwd depends_on: - - mysql - volumes: - - ./tools/scripts/st2_dispatch.py:/usr/lib/zabbix/alertscripts/st2_dispatch.py + mysql: + condition: service_healthy ports: - "10051:10051" zabbix-web: - image: zabbix/zabbix-web-nginx-mysql:${TAG} - restart: always + image: zabbix/zabbix-web-nginx-mysql:6.0-ubuntu-latest environment: DB_SERVER_HOST: mysql + MYSQL_DATABASE: zabbix + MYSQL_USER: zabbix + MYSQL_PASSWORD: zabbix MYSQL_ROOT_PASSWORD: passwd - ports: - - 3033:80 + ZBX_SERVER_HOST: zabbix-server + PHP_TZ: America/New_York depends_on: - - mysql - - zabbix-server + mysql: + condition: service_healthy + zabbix-server: + condition: service_started + ports: + - "8080:8080" + + # Uncomment to enable RabbitMQ for webhook testing. + # The RabbitMQ webhook media type publishes messages to the Management API. + # Use with stackstorm-rabbitmq pack to consume messages into StackStorm. + # rabbitmq: + # image: rabbitmq:3.12-management + # ports: + # - "5672:5672" + # - "15672:15672" + # environment: + # RABBITMQ_DEFAULT_USER: guest + # RABBITMQ_DEFAULT_PASS: guest + # healthcheck: + # test: ["CMD", "rabbitmqctl", "status"] + # interval: 10s + # timeout: 5s + # retries: 5 + +volumes: + mysql-data: diff --git a/images/apikey_example.png b/images/apikey_example.png deleted file mode 100644 index a91d13d2d09053dc77a2bb171ca6806e82f1f642..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14588 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 diff --git a/images/configuration_for_action1.png b/images/configuration_for_action1.png deleted file mode 100644 index f473ce6aee1402bad3a9df5cd116fcce3782166e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 169366 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%0DbH6OWX@4;n+ysdY@rEn)fF)%|jE1NS-e(3igd~ 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 X^d89txpR!Y>^The%&w!Z-irMV>ww22 diff --git a/images/configuration_for_action2.png b/images/configuration_for_action2.png deleted file mode 100644 index 8bc38f180ffbaeeb65a65981550cad8de6396e0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 107794 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%0At>7`xk%AXBN~t8 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 diff --git a/images/configuration_for_mediatype1.png b/images/configuration_for_mediatype1.png deleted file mode 100644 index a216ee07a811dae0e9e1902ffe26e839517062ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 169113 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%0A~hiAhq=&?e`w}+cjyHi@jhocKmrE!8s6mL)zq6U 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

C+7_;)-s5D<2R+`>Fb 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 RAV(;F>MC0IV0SHp|1VYQCz}8O diff --git a/images/configuration_for_mediatype2.png b/images/configuration_for_mediatype2.png deleted file mode 100644 index 0f1f67f7cfc2f56224223afa519d492d95a73b9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 201645 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 Ng`^(mJ<{>|{{VNY*w_F7 diff --git a/images/description_alertscript1.png b/images/description_alertscript1.png deleted file mode 100644 index 8569fe80afb134c14874dfd08a5b86c68a202992..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18483 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 IS<}$}1tD#qI{*Lx diff --git a/images/internal_construction.png b/images/internal_construction.png deleted file mode 100644 index b27bb2dc4baa24e933cd3944c68c6188430444cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 101497 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 G;r{_g?)tR= diff --git a/images/zabbix_dependency_flow.png b/images/zabbix_dependency_flow.png deleted file mode 100644 index 3b850e2a8774d9dd9fb6281c47cb6d812572fa42..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86473 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�CNk|;14KTZ?Yqs$#3o`7BVF~~*=MUb4aW3w7+-v+*1m$I>NUKGK%ix*5ho3y z@2#!bZD)EQhgZ&ihvGXG<@Kwr;(gZ8)~ZB0YmLZvAScmlduBoaI6u6X-$>SP#b@T$ z?nJ~H0P!gfK)z#V7Hz{-2d;@g?8*+D`unLoUL+NOuT0@VOihsQ_$qCL;7-x;^27uq23ZDuS%ocEo<&pPJ`c&Kq#a6iUTYWlbSO>_@uJc$Z;j3SkJsEeP5Ixx!t}aYT$V zRs-KoW@pm&`sTYoov&W`&AS>PlPCjw3mTY2F2sPyp}ciZM}2S`c2^#F9F>89iXJfl zOs}BSD0kd(u7iOd0c zsg;4k)6{5CjM>jsiA?t(uKWFP2mVx%;J#{s{3u5$Vjp4)i#Xe&sNji=ZUl~HKm))V zv1&M@*n^D0zz+vdhjt^XzX|spONEok>5>s!;NekWljYpg3yv?k5GkL=xlHx#oc~GU?{?FmK>Alp;TkQDb?}0Y+fjaBmDr zhQPG8qarBmb^>0nJPvJFx9i{O461z@yXRi?ScM4^NlN12hogUl7kv z6QYo6dRG+PSkzS=TNvx*eA6d_3?4G1^9g8d{NM{vQ00ab*5!H#$@sZ_F@+1Jg5_C9NR z?(TP`vib(Ml6D&6OPIuu_)dliSn3s0zXA8e!MjN!-ChM7V{VVyKu2RI0A><{g@_Md zo&N0gqAc()u?-B_<4;-|r=TeM{jt2J?^+RHuiA0-1XU<{yLZOuPrDG(o9u94k1?uMa-*{`zK|An%^zV?LGU7ZTa|#~f+3jz?!Vqei8Wm=s-A@fk5o zs%niH+LZ>gT`dCb>~`B@10}b?nO?ha<@1=J|6m3Tw3Ry$6FB>@QA+V?8f`s>mDaT zxnvUtE|us$t8sf!?s|iLC68@49n5S+$d6vWTZnixAwEMz3I_NAV_O$}KAggm#TOjc zU4Wrox>oRM`t)Vv`LX)Z#yI_Vh3{DWT3UJe5v%y$(!227-c+660Z-&gu>y#+#))nt zM(<$h{DIr06>)7ZFg@7C0d|v?H2F6Vj&p}lbqkuvT`-nfz8vzL@I(#bcw+emhaVoD ztQqG8KibmBBY^@esIpxXSfTi#dQ4G};~%%9{Knl0mEX{jG#u(fUECoGT+6MZ|wYku=mzsRc3G7uqYr1l1fO40ZR9# zQ4xz$kZuqG3F%NkNrO_6Es`SA(ui~lC|f{61Zj|N0cm-!h0Z)Pqw_q!=dbU0zvKPO z8JuD7`@Yw`)^(lN8Pzwn`zU(n+KPb_$(!+H$6b3wm37zF7b%Fd+($+l)p&zWbF*?c zOO&N@#jgKpnf#@&LyH8w5P{!N4Fo~z-51yu3J33V8q+zT{k&Z?@NBi}6!Pk_1ryv_ ziczpb3g*6s7^KAtl>x(1M_(oE%iQR!fyncSW*V7 ztdl6r;o4++ra>|3=hgauc+3L>S*BauuJT<7X2##HZZF+4TcF>)lrk=$mpt#yVzZHO zUMRCrRU>bz#JIqv7qqV6aAdn2B;d~2aPKc?L=t#L`n-l0XhmF#Icm;Nou5=hVfpw@ znj-0G;1SQy_m4}~tcW}|Er~=n`dqM*`Cqc;Jr%Lm<|!DEv~N|!)ToP)I+uVyQXP#X z;;V`R^^s( zn6ogRy;$8LLTdHCKsc|RwZn*%slKHOoHB`>H2s~Z$>w9qCGAqnf>C|(YfIw{r}f<7 zptC+-4+pS)=+=q^DbP00IV4?($LIPKdzi{A;_>30urA9#M;#_aV7I+|0Ol+mx-2xW>ID=j4&LP-$So z5FUF`C?vC(LmL%oQ)D4Jl~p}RF5U;{=oizb}m@cI!41u+u&T8zhsd&_+?FIz|Ttt9Ezf zZCmFp5G_5Kci^qQt^IP~CtY)Uqj%!w9Hmg&zmc#mxq6}+g+Ud&!`}zR;%dfwer4@-yWyY@RAcC<7Lg8T*qA2 zlw~#-SLiPC94wT0YdN!$WJ6C{R^NI=Gk?l^0dx_8Aq0xF4dV{oj<_jI>d?R~zor-rsQjVjTK? z3S4kp$=gM~`CoQ}#w%v+m(IoXh7we+G@U~e=k|ysj zP5-g#A2sUu<>*zi)$jG+ThuZ=Z*=A?-2%SwR?DhfYtF5J{K)S#in#CAmqj+YBQa4q zLGF`V?aC&_jPec1z8G;m$+H6XrO<=UAct6Svwv7v zv6G~2Bq>0idHTEyX(GQXD>nh1`>QGM(DogUU4{?T>iK$irxTnBq@&z@vGmI$`9paZ z`_EHXukuXN&yb7GHi?&x{H3ExQgs@6h;zS_xZGbX0W|rc$wH5^iL+>pQ)mAJHQ1mV zhc19ebh2*bZPn1Jaqmh^M#+=jBq}k?mGL2UK@1umR#i`kFs#H{cMr69nF`q z4DNS>X}2m|H1XH@!=?cjfD- zbq=i9TiJ674?%%Ij7n9m>g76v#H3}1NMz5#uF$-h!yL2rrgiFmz0+Y-qTkc}I~33f zUE$C>A<0#LJAwNnt>U*y&Jmt6(?34}&as@|u40WFn@`@UnDt9Ui!(lNKI zbMlD#v)>|%aVxiq8(^B%;M!bIVD{~ur~@3R2oH(=V<(MP`Y1+#kz07y=N@?}?E33q zJK0ht(E;BAk4AYEOT)e4s*F*rihOS0^RJET(9Q?NmU%?SBFH5(!l9t=LeWHn;Rh_< z2dQc32_qx+`JJJ7nr@03WIUHYfi+u4YCl-kgwVz!lZAA-9X=`caq`P#MIKjPV|0JE zF&xmw2(d#CA+83bLbuef@TQn+snWDxG4f<@)VPNViwYMA4Y9=<12EP##H7lyzeC>{1NzSMYc6dVwqB)2%b9>H?iu|r6vP!yD(ZGos{T1^s zvSeaM@}-{zoNKnPM&?=2OC@H-<~`ox&Kaah)^1H<7fwR3x*}NN!7hrg+NGnF`aEg0dE`~-r8L2C;SFo z?aCJkLPY}zu-x{YWCM4HSo^cK3-1M+-r%)rVVmxFwGms5U0s6r%@+dRgq&H2bx)-+ z66*ItEP>@@Y$U0!t?WP9vEZ^YqrFs3Fj{gD-V;I2HLl|QEalO4bq|%qgA2^z-w~>M z14%}XM__a}Hl1VK+{!ri*w8slBCqIl3)ch8CKmi>X!V4NZIFcEbLe6+@2;d=$q@cq z$TrY$0$0+XCt%i!BO{+c1(_xZ-)v8sZq{h3De$C3Va>Mq1HF@XUhJ zfBrmW=XejH^31@ccijYB5wVEw@AE|>%HuGTj$~1!&4uxT)H^0T>qlt%-*I+JDZ3<% z5_In$9lxy0*ZeBg{OK74h}tZ|fEym?$E|e-pXdFAB9Pu_3vMpHAP|xw@8LSXJzytbYi6`aeQ)Tcd*o~N zJ(i0b{l*7dQLtwesHlwqK1YEP_e=|(fr;v234x07ZeJFk?goj8y*Nig7n#t%D)y?nJxSPbnBvsDspXmd87&RROWD*Uab5{>0r;er$ zhY~(QjuQ@i;aLC&2PQJn{@bEK9&Sijw?1>1^6+38?q+cI;^{Cz7`gn#rs^24GxBo9 zG8f~%iGC;IJYHSmm{c^SX~G;U?_A8N>}YrJ;`5K>xa7Ys60vXo4y5@zNB0D~HL7-w zZ=5mIW$+Z7E0<9mEvcFf0E=Ef2%x|ais85BDO`~rJ*xdyAo^?f!3(41O1~|2U@}~>_L_wUFgVszqE2ZD|T#YGt zwD$~=W5-#sZylf9n)uIrI{M9;$5^zsA8eQJugh>djoF`g;PCYwdtHTaPx=VmGtQk| zLxXn%SnH8Ae_ptbzAM3RZyj^pK9|>G`eV;4id;`Aq{ey!-ZFLuMk#KfCtoe^JHC>B zg6Ms|*s>kj;D{3BKUK$95grvgXw{RccQ+3wmnXreWPrL4D& ztLqV}o$hbkkR_Me7b!mr{r|kuX8=7JWSOu-JC`2FlHH?yN_zUO+;J~5+HkN*(6OSd zCg4b?ATmnkos@=}$V48`uxq3L@YKK{cH|@KGfKv;P@LwuO6*7m30re;#@DUBL>hzu zR!Zf9{!@7`3A}!wM?db{B?u5pMAU==&KCfbPL>N(h^YnOdR z@Smevg!TfX86zi>l}R!q>tffJltuQK$W`QsPHJavD!T&s;Pu*}@T|MVz2KyMO;TSo zk!y+z?#rLAI4&C#WnwEjSB_=i+2~_GH*(9~S(=-a_u1?dvgZ4pSL**KX%ATd_u26Q{HrEmKMObFg-wK~6Qf`;qAv?*CUnitpV|%II zk8^-z@~Sj#k#2HJ6?l5iC<@gi;)pUWj85Pf>g_5oNSU8Mp-0E-+m5IESQ<{mLeC{W zyTLcE{E^l*p+B*CiS;wh*1XrX&WAjlqH0{Qy7A0SW1 zcU81x#*RLW1M8g-Zv5NU)L$qVv&kmjR-|@LHxJ(F_qWmO94G!!VN6dkSfzdMxFEF0 zro*K*oC0E$)vs~I)>;fUid0gxCez-sUql9~B)5ViXgg?Y3pT z5bHEEwVd+($mzOZ=kgbmFABJevHIM)EO@IL@ZothHvMy zP^TQ5V70_c!8`o1mhY3&KEiZ@artIdB*^k5na_5b_+!QM65|+$b9-os{9Pj$z08}V z7X+Z91_=a679e+k@n*Fc;cmF2zfNNFJK-R19Am5OpdZf=uiWc0Q5Zgyd+5PH)q|Of zf!Af_=^|tSC(4k|doXY)6ieWk-LE9IK%`}ES5Z;%l7%kPhvd>u2AI4^?r%K13u13LHlZI8)+lC2jA zVppbYw=J>NRi!Pun9a2FBP??lyC}Pj{FZc7z5j8mH`CqqmGUwpldMTfYG>RZ=7^ThEy1(QBSW!*T&S^BZaVIp3O znree!8SqyYH7sEW-rs&!9z)2H`06t2Kn-q(a+X=bXbzrEGFo z)42P%cM~Kqz)g;40L{`Dn2`=|m8}~54j0lIh9Saaq4`jwq!)3zdI3X|+>s9-z43gB z9djTdOIh^P6N;I+BmrF^s{pucFteE*S6$s3dM8m%9wHO^0W0b?O_k@ zW{VdbYan}2FJkvxj%---?3(_#v782Hk#oZEs$H!dXRs-4+@HnDL`b?&^o)Y9z*JJF z&1J5pyu3{6(_do_-l_9~^7$Np4`~XC$rweutt7>iZ4`gVkXQfXRmoFPP7p3wEJkLr zRBKn0-6&b5kzakoRas9AOKhX^i3`mYnzyw*fSK0y+6Gsi{MU7G@~zwf+S`(!i_M?v z`_J7mBr0!v6!){wnVx}6jE?6Cbm?Y9DsCJkMr_=jL>Gt;k7Gr_wNmqJk#=?yHIPF0 zTHy~{bXKpZbXHvc>k9mF0zLTcQ3FMNp31=U5Q(q4Ry5qLX&;7tl63jcoI6nP>gT6d zcVb4`v*mD%+G)+{d`{$7tPW_8^TnzQN~+ygw;qjhP?~yP^EF-C`ALSVqRD_ zbyW8Ei~%27Ide62Yq?!PautB3n z^(xEfl&$jUjdGdpoL#MhiRQ+X{~%G7PIW0c44!dPk_o>*a`I!@^hGtT^$8%uA*Sb| zH883Uge|R#fdWT0wA zsQ&njOkQ6Q&H-sYHg*9Bd!wAc^6wj;Aw8{-DlSih9@w&X{_5HUhT`O!a>i zHu+3|5Lrwu>{X^x`RdxKWAMfQ-v#_kBH9Mc|G$3%KgsfoyvR_O)MiCTs9f!8V-)@I z2(!TEIlC+3Udx=V#3cr5A^)I!(O))r{g=hy6Afs3Q2p9Q6#NM`^}nif2|q&X zX%OwXu;h0U==LBRT5y0rA@S;0(K&p;ZcIZ;>Pru&wT4f$r$EX9@};IG_;Y9>>{t4z z*+rR^11w9F`w{UB1~7xHfONu>CWO0EB_k<{nz!TR|BUBEwN z|Nr+rfzkM9JB{U9*Z2Q8C$=3#oRB|{Pb4}J8n1`_R>YZBH#%B)$K%f2YU+)D2svTT zE2{agWy>`6|2EaBzlT`=-*hS@J)FIkmQHg#VmA=j1Ah^i{ryrvsZrGY8dMWM4$*Y1 z6qqETM7+VtFU0`G+(EoXBS>7X=Pm|ED?jA1j&jBZ0Pk&Rh@^G8+J!7x)r_- zt-JKYVqtr`P5PLFXf!A(**)5w7ZS`?WE=r6$8pOO*`X0W-vHRQ*EdXFjs~Z@=50dj zCtqen@3QgC=fWX$1yfGBFu0B?o@6TN^x(cqLh#Av#URe z)7xb3zm*$Z?|#zse^dmm*R-^oH-P6k@ATCJJW#4(?nc1_X?~yWk#qb;c@dC>YWW6W z9!3OzWlINc6yd<~&;;g=C9VpExGBLP*cM!k!KZo+jN&Pf^L0mr8Nf|kT#+3x=QP%Q zBMu3)UmzDb(9{KZRkjdkbmvvOc3QqWEr2WMTvRz?bL6{9|_h}5JG9_w^M(=e*C)Az8=1#)ez z6QX(WMCvJ1KGC&5k4#>srIrQ->v?2*=CvG~F?%C1Xjm4fcwf`1=LMi6b+@@$z>H<1Xh05 zMlfV~Nq`}jTD*w-3ekkD3J671h^}4WKEWYJv;babep^qC975cNebJMczaG?Sc>OjCC{`Nek6I@){l>)ly@*SE#rQrqVs3=Sa&KV;LChohm=ST zLdg;~xS1CgR;E^C=K7bwdeR`WZutbC3uMT*C93^XdG_~u?jL*K^kX2is+wr}%pxwM zENNovqpRS=csCtm?sQ6nC6QX1;?b2)mFtLS>AX6y#mjo;K!6|ixI(iq|yt!0pJ>CLQ9>k2<$>L}xBBT!&B_aM=Va`(9>jJz9IW7IxuXm>@ z^XI?AthB)?Y?F_b@2FeL_(}#v;O{S z**%y`zTnK0thO*N67I0puUe@c|Eoi#CnvD0%CJm#D#^l;doa5X8N|Dl( z3UTO=b9)dyrhDS|A-*haADC~xpA#p*mew&-WGe7R5`DET8w_ zxz4^TI6)EeSmLhAP<4?&vp144{&GxX7vvsP-z=L%3BKym^8f2gp0^wmuMQXK9M9|M zUl<-&wK$;cno92KTBW)cE6-%^R#j2yyWgeT?rgdoNxI^Ju=G0_r}3#!b}3{0FjOgx z4Q3K1b-_WITD-gH7b0%^&Rl{N?s28O1NGQlWd_=%{bxTsN^G@0&S2OLDI%{9vKLa` zZ!2yN3(WGL^Y1$djMbv}wjiv<;*(<231H~m(Ge-Vo^Q2j zz#JdZi_yvde%-lv{5s<9jXG-qV=rwhaw&aFM~HjFh_)SDlrq;*1%z^OLe{rnwLjG%GpBsBDp@*_nOF-{x( z91$6OQPb)_@FDp$;oTV7ZN%rN<;-sZA5fPh(yOiKZ^wVOzI`1^+tD+Iw4Z-kex&_d z>%Ltp{^K41>hW(d(YDs_Fq*t?H~PR4Nyq9zWYN%;JhMelP#KE#6NUJtJ)Cnv&R?lOWT zwsn+ee)y36FpbdW#)aNnF?iQ!v$**sRQXH4|A#Lq!_`j&s3VsUOt>M1@`Xq1E4$}R zZ-N+2&Rx-V0rJ*HvA8Px!)Jr1I?U7vLr6v?^i6_<_l%ku6(W6B@c2SeBO+e>DV+r! z=r*XfjRv*8g|G7i7J=zOn(3rZBviAUQ7{1-KtwT#={!|LvmHH_3*x9+0mOE;{(Lpk znnuTYE<)fAqy0HjWhJrU$5~Kbe8l=7oeqlEco-z|`IyEi)D?aZ-oh4jbEeP;VzZc`>YpNc~U+D}V)s{PMwYN;D)3eybla;UV!L?0KnpRN=SuC+~*87au9sW&s zma@B1qSLu|B`Es_sR!(sH1yp}QEgp~w05Jw9@fhy?Sj3q%lM+4)Hug0Fm!(N>E)f- zse9}(cV~(Hh#WOpj5_^j^~2NT_k(N3-=;zUsRcxiYzys!+$A~%o^LC+VFQ#XG}v3U z9LY4~f7^El>#Ll&{ba2)n!rJ$-^oz_;o1?!csP56T@@=%a6S+UIbjG%Q}e<@B~$P| zzj8xlBT`I9En;+{xQox9ncR!7dAEb@VN_W+4!TfXev zqf3C0^^afKFIIc4~KFF8rll|UX^ z@L7P=P?x1UixiJ4vmCA+u~N#6HFT3UGnbW;JI36i+HyCB zdwW8${lL*x{&$-hORH~<1`~Kmb}m%U-$ofi3c3tmhA&3g zC|kIBW7qfyTg2zz5n?0>IExtvNSFGZL<+P(AGj@3+OE3EieB(LU(DzF;Bmic4BnNYzcVuxDwseP?eNKwQA4Q0$COUhlvwpGcZy1VR5(7CvTxxGI~cm(6NxjohP! zJP_3qXQorp7P#;MZaWwg{iTn?2C)Rwgevts;Xo#RUsp4p{HE$uvT14>)Vg)tgAwhHCmIPz z&nRB3`(Hh>+{y+(a9FB$#E8BrY0L4qQCJ%G++6z9k?P;?!*eO`LR)2q-+~YNt8WwZo&9h=F83GLH%gEZ)^H)43eHhNAyCa_A ziZlUj9@p~#DyKvVDj#;i*#4vI`#8O62&t52sV#~Fk5;$F(b*OxL)ERAs=CJplNP?bVF8zN=JT7h1B{c3lgY-AJn_%k2?hzjeZu%h+&z5-SM2ec)oth*kY#45CfuI-0BB@fqQ|2ws;$z17+Z~$+r0{m{nx*v-ix-cbRT5PRQ%gH?ema6KT4n${6h#pf)9TBQl*ca;Ilr zjplyx%#yZmw~xpIri%k1XMu54kScU;DbZ5h*@M(yL8~ff(f7DE-u#p7yDQx-LvK5G zn&bZv(tPO@IDvNc!`lf0&Q` zX-GTqZ&R*cOUmt^{KuD}oaFB2E)>$l6H#Z90R@7JXeJS1Z8Yq`8#1L368Qd-Sw70W z{E`^Pk8yVa3C$dw=(TkYydVj6;LA$dR?slY`bY%U9G<~zs`18Kiea_QYIljG|U1L}uruRvxgaTIzn5N;Ao44CH) zYo;YeI2n!FUuw-Su|--@!S5-W1E8>GDILV^11LTOYRr$DHNRANb#+ zX7>jWS<)szJi)CENma=}J4yy9+BHp}yE>T8BZ1Ul3HR%60nF?+(1}y>0sn4^c59!# zB6m%JCEJn(JmxRhP6#`yLgL=ZVt`D}kSD5Y)PHsB-`0GOOJZ-fyf}|a`Ma@}+A-Fb z&i3ZUYzuRJ+)AY3&>u}k+QMomuIL)2*Qe+t`P0X48jG7gZ8Uqc)*=p%p)?EOqBoc! z;DY~!4)hj-;;USpJbh}~p8EgHT7ZEow@t(!D|g%O@rU7Ap7uAujst1Gm5iL)1Za2< zN=LDl=C&YGSJ6m8N_d4x5pGl$^S^j@l#Cnbc1YGC8$>R>a4j;s=!JDOLg`PV54bhmIY>9+9S9U`yo=)n_YeN$NSIIPeuq|#76 z+o^XZ*)=o)xYmRz0GC5zsr#sv5Se;l`Hgc**M1FM%5rvT25IVc*<(N;?OkCee&E`$ zY>#q-nkG@c2QJ&46LR1GVSE0!z40&G1PnrW23uEz@(K*6o&xTDJXp3m50CN+*G{o|2yS{pO$`oA3Eqi;vYs#Q7`lT^n3N zM^v%uG9`)3c_oKFoL^A;-1B?v@z?#|;uY5xuj;W=Pw1+Ms~C#T*_~|KQrQ`PwXy-; zJ(ZiW+Cf)jAH4xskak;I4!ux&;(mx36dsrA0$8PQa1sq8oYS7~C;mX?XQPqgN3yAacg1nMD znS#mtn6=q^G=f%~+$5-ue<`m`i>IL-LnEC>XsiRevRp}92Pw$8{}1=(JZ)@%-FJhQ zSN=R_@=8QuLSRBdseN5?Z7kld5LI^ey8_=;iNn00=5ro?y0&>x4(k5VZRy1FT7_h5 zyDHAj%@ohJd++vU_?|<$FfLFdDv=`5ihyL%po7UUb4jiew!ZW19#+=T?E<cA?c$5HhNr5k~``2&2~|0uYMpHk8)_dhg0Ptz*zYVt7;tU--OuM z{RRu5O=E*;yJBj(`PlQL3c+5_`&O@#j&N@T6@g&`# zDYyJzEt8}v#Krd6QFLxTrkxcE8{Gnc2d?RvMG#;DGavN=aoR?~LfadAFz^W~PPbP{ z-q&-poxS8T8y9uHL0t>*@t0!Q*ZrHM*SYc!J+C2hy3kYj?ECuBETitHQ$pt|_v$@w z5hBE}z3mrv!a4IBGvgK_XwD!6KTtMwT03m74FU)X+}i_|Ev)Dhsk`T%QatAi=|9RH znehGQA+G20TFy`LCk^#F``JjC1I12vs0o!*{tu77Fc;@%_=j)W4>;=carv=|9j`5P z>1$udSyIt%>ShUYLvUAH%09NN(zOhg;|1^X4?y@SPba^PYdvM$PCVkuJzXiY95wFx zNlw%!Cpy(Sg?HHL5Vm{-4bT{n@kAdoGkXBhRRR!X+Mvw3$1 zXQ^@)OI8D|zAJ0Kd)(wcCx!Gtb38{xF)s>%iJCKkiJSJ^+*=3zRu8W9kbb`fR-B+e z=`OZh(paYh0qh<#73*!&0XI}*u;L|2#k5P$l~!6x@6nuipSBfa{O6&E4Og2!s98*Cosp_H9!ON=E`msHqwE2DuGF- zmO1jPzqPn~6UID%-BSBQdcf9#FLUP&L37@87gulUkY%=m=XY^a$9&MfW2Z;gh!LN{X zdU`7H%oCyZ^T}_%=FwchQNMq2(reX|xZd?826oOxP-4EJk?<98w7f7h)OJhRS3;67 zD&v~M(0Rk-6c_sFmxiVI8Y!0!^&3~1XsemZ@P;`r|1kB{e{*mEwu-5nnjh)i!;bheUT@ zJ8v#1f@%Yf@LZV~b;2!o?NJMxK4Z|hbWwHC&X}`Q}<-v+^kJl?yBdB~Uw0NLh zX=@|jnwq-My=d+CONqN(qXP(DIF9SN%)?w@84*p^ebSUU?&xgf$EQ5IJl? z*;hs}#!!LYYnUXy2%T&AW5Rp|#dVzdvcrhO`5p#32>L#4B@rZ%{f0{Z%|T3$TT=^n z-*w2I$p1mFC+J&z%mx8rbSkfS)74#1W1KkFNYx<@O_X>2MH0|5G45S)zr>ZaHafTJ zZ9dOga#_NeI~8{puccmZh98hdLk8@5d zF(=)1FWVyw-F!6obwnZQigkqRZ0V}s0TQIU^1}LqWDNgN*GKZ-L6n1n5R8^yJfyzr zlAHc+#|s9U^Shgqigyo5>?6R8kMjohoYe3WiXIBL4g?AZBY>wyFp_;6W+EN3Iehb2 zkwm7-7X7PJYNo~WD@aqS;VzaT=08?;`4z8I|LeU&4Q;%;tbA5GXXMpBy4kGc%l;D2 zk`z6iSiA-&>OAAZ#O%bAhxuJ&8J^fFJ&&3v)30x8lm}jo-5)Ez#}fW>;msa>Oi`MF zKTyX{E}OEv2&jaZvara;6OSdoWBJ&aB6TS?p#qsF<|2Le&JLG-@mY@d|77S#zoWl#?~D;|GW8yg<0`8aoB+v8Iv^ZL}E9`V27S32iM&P+7L zNJ(Hy$1=V@HH*=5)rd`^7Aj8L0tMB+-jD3~7Rwo)?N0(So)@p_9uX-2p79-cNgo$8 zJonh3n>5fhmGK=E>X+ev448v^nR2sP&jVh=o*5iJ7|9uGqZ?&GeD;G2bdhxyNM%6J{>=O z!S*E*ZI;zKfVtQ!w@z!SLy9qyg(Bn~SNAAC?jHe#U$lwguyMh83G za@YZuVsF+^ute<+QSMJ1)t#BC99=bsI9xN}>-Z?&J;i$oKe`ccfb=$Y>$-E6+3kf;!GMzpQG?ABlhAg$h&innDU~Hre=mj_I6hC%E_>!UScf zqPfFLM9~xL&JsOB?-{2cDV6meY*C~Wcf#eWSocp6!zdz-Jq_PIIz&b=|DvKl1X zw?WRxerm72LtNDj*9JWg=nGg0bXROI)k&1nR)&`VX;kIJd1^RYH9|}S^X&L0A`c3bjC5R) zuwbquHko>{yyOn^B;;%7puj%WuNimq;JOr^g0trVW&cn3mrc7$V08`JJscSb=B%Wh z4KoQHV$RGXdnRYJ<}NBC7MtLf!c}=W0&A%Ae#owJX<_Z5jihJitvK^uTQIjRxA@Za zZZnkwqQGD-^EaBrQWrPu*2=K*2rlKq+o!O<=c8G1!_0))yWWp=n45P>W6roN<(8Sc zED<}n>cJUEfGOcAPE)28(Err;QQ4)Nq37crSbgK`)}tAoYU^KY>(^F3ru6aDv6&p2 zkFfFg-IsEc@`Z_@AHC4hDF186y@Pb|^84!q)4zl_*)@uEEXzO(Q$UWAcI^t=))D~a z^*VRMfV?MH6O)c}2286!CWJ*sIzxsj#OjIZ*htMc`i1+;fz&nbjhv=kUkVO89?~_A zI$p%8f^}e6$gN}Rp%xn4Z$(mUL@QF-aJ zJWg5ll2)TiOM2^aKII>;?e+LAvmZ9cN{9QDW;9^V{VPRONuq0b@WF@MIrt*F;S@!- zC+pmKR0>3|yoBYsTPn=-Lw`=cKg)^Z8+b(~2?y^4RJZLVHsEP1I2?mb9|gAKU2d|8 zB-QKQ`kHix-_nWHw7~*pt|n>46ZJRf((Y&L zwura_rN!k_?Qd=EL%R08drwgP*PcI(qmv$9XJ1YO?aP^esZJilZYiy-e9c)S zmhJ8K?g{^7oinor#+t3>&KfcvF>w5*7{D5r1DSBOuOzH-2jFUI$b3wK)3gooe(tm>N>lEHE!s^13P+Ea zwH7$Dpv_lx)nMs^A47TIdElq~qc5~{B zrjs#q$krFW#uX1@^;~YJh~~+%^p+HHm#;g!pfD(31*9GMX#e_6{+v*u$;D3>dm*q_ z4*eC=-u{3;hIT)r(tcp!znoNm(5ilD|9(ae1%b8lmtXZqfBeSnl!>27FxxXSQ)rXxR~=`uaE7vN9ejlL=Ej-Dp=I3RvezBP0ab2) z`U?T=1Q9S|eraJEZSy6-%V_1?1fpQsdScfk7CNWDj@j~vv>tvlDF&EK^%(~1%Qs`) z-6Sy~3rel~N0wYpKLw0JQokE{H_SgA1H;#=139K(RZH*K2Ouub@;ShTSHKwfx~5fj z&9&C=;4Qvw*MTU;$ZzV^xMW6bU1RI1JDbihs|^XsQd)5H==a*~4-)_`>6!1~y2nLo zqdC*J_1(qYQOc_pu`&>bD0&@PgR)22p3*c8Q?oa1hpNgJQDq>@U8JnB(L|3?0-AfH z4nv>4*IF%%PD_cAU&{Z^Se5Mz#3_k^Dta-y7t-#TauW$JEi zT5DwX+6xsiy(iS=$RYELS$j4-)i-WdPwZWlpcZYPM&k+uOdENimQveef;G#i$DIt> zkC9p<_;U`iJl5uy;Z!l_ETLcAEZlz}OtDVxPw?o!**klt(YZTsY>GPWThM!Tc5gVE z#T0*$a~Uc0@j#wJ$a%6i;VM(7#FkcDzrVHp!#X{i?^kv9fEo9pC^(}M(E9Ha0@~Z^y#n;wqp@9p z*;fO;%`6iSyrhqbtyBklI(O@uKRhw%a}=w2sO;*^#|df#+{7(8=^tjw@KA-Tk>pvN z$HA&F>}tF1ev29}Ub<*0+ZojXN; z;u1R;h-6o-~T04Uj(kmt8TbXWIUfki*FPl{MhH1jU_m_AC-? zVj6}0=J*tH|15xsST*c#RDI;^1p|j3kz~XE!K*)JcXAnqLp1^HJa594?w+!(mYV=+ z>=3~*Zi5by^qpgk5A*SsTv~{ea$H*MIEq8dU<&>w2l2_=`^Fp+!*-=pp!w5hzoY59 z3tYd==^wd<`c&>EP#Nu(^aaE+(7FLLrmMT-GElTG*w=U>dysfDz z7CjoSo~P$6StLsN*_Mk!fy$j?ia#35llOg4v!Az)bzR6*j4a3Km>2sxIbI{Yr3ZEq zB_>VhaMc-UOFz_ZHtjK&tIm#1v|6$X%Pxb{q}C)af9b5I#vI6wErgcPi+O!z2+^1ORh$d7U3tjAz!$X2Lq=EVK~KYYv!$wIqrMg$8)zi1nUo`e#tL9e+i5@JgKU z4wph=U(GGpzjbxkUB>CRjK6H%@+t&J{*NQ3M$9flZVg35?wXj{PMU#zU5!}0+TOS+ z7^unAmE4#CgV;GB=G3Y0DM{+uV@iC@wP{&C3w)lI-z-b=-zDj~9HUOd6+)8E>Dti2 zWFb8{x*$JW%*0Y&V_QPW$aWul-222M5AV5$^Vf-NTCyK+`v>OWlTPubaG8`}#I}q0 zM&V0ZFjE}rg*ix}MON(r%QyDpj5{1L7b^FH)3r&@i-S)NCY0%qhd(1AtCQ+^s)^kJ zwq){AGReze*tri8yInUvLx0SCkCZdXyW<~QW(flT7Ui^psOA~6S9DDD%xITb$)`jcchE=Q7xeh15?;#U%5c|7OS)u?nYqkVK<*rkj3##n6@ zWFfR+<6e<=@h}YeyNxS})81K1C#j!#krXi8rsv)Cw0LWrjA>4cKZGIx%b&tU8-iw; z(^7rBag=2xW}Q|6k^2;y4;*x|9=LghxhsL818@#q9sLBBZ=>pCPJM`vna`#J#(WOA zxfl=c&5$|&PgBcsP9t>nGeapgds#9Kd%2Z-?aS-B_Q2S>{3wXW`LYTMjHWTI8}Qo5nc0INKD z4>`LL%33g&1yVnjx~djo{hAUW-P$2cv_rt3{0(>D=Q+h+7yOl*yVNyI%spOru9KW< zCd(mCMft#s@T6qhOIYse8YY*oZVl1%Qzv5EV!w9xD7WSu(@P+79us+pR_sB|0bvuz zxkb9#LPH&0&E~!FVQ`8xI~|vZUB*A%Y4LyupPv2BvU?-Gs;|z8%}wU%s8S+@Se7BO1PU&{YgSL1ikep#O&6=7Q7D~}zkMN1P+Ox}IM{8< zl96GXHg}1LN-Tzm!D4^4fMZ(xFv%o{ju`CM9rp0knMdMjym!l31U~GETXt%^7KI!jbumt)J*cxhliTpKL)#+BlW|OE zBn}@VDeNDRpGRtYGNS4sz7wH0srF_bRW}8x>Ff*Hc!}}A>1sK_A+xqyjS9+6Y1fBO zye2EkeX+b^Kd=T2huY=9^HnPh7Sg+NRFnzXlxTy---%m2A*mN)zQoz~sc^r)>JK2& zV!W#0Qr=w?nP-;Gpx$7VjmRU-q%R0xb<`M4k++Cq+sR0nr-Y+&wVz7F3OZgov?Fc` zHX~Y;p3%|30ZaHx9OKgYRw71vQPEYZmx*=>bI%A!<9K>F#F$$|Qg+q71@guLov-u0 zsf*^83n#Xw!Yg;ZUKZp!*%xr@GFS!&O~y~Upky<_1Cx> z3ZJpBMP*z*yQrzI%)ZZ6*o=1Li7H4Q*hxhs6K;U+wuLSoA#H{^|)6=t0 z4)Kf;g||F=(IzZ4d|dvUk~kh2E>U89W7wlJ+Of95NSZc)3kPWrHRoOWQx4;r>%B;- zF9!#h$B@1u5aMR0>+{KAO|jhHhew-|C;H5CAMKl$AtbttZVhJlB}{s=xOy-xYibka zed=^doopAGec#)ibyP;j>&zms37pkiQ_NhNOtd9{W_F16)eK7KsP5^s$7Oo*L_~ORg0XJU^3yA{I~NL z9N#^AMXL9}_4DO?HN23nM8Av9diSQH9o=(XTId}T;VQN1KB)K?e|wCVuS^$;O}Re& zpq_sRH;!6he#Q6{+emYcf3||Tniq9C`O3x^N0_$s{Nw06Dee7pPt87M@)4~&(15>1 z5pPetsE8LxC+^w7}HNp_{D#dywH`+0&o0wv}CYulPc>pq?@XDge=*!$zxY!4W> zyM)3*@kjxG8WUwX>aH8(+G-#I!f* zZH}2PHj5k~%xv9*`;?3$}Cw|3q5saTEPjs&?J&qjKrJ z^k*467;CmOPxsyR-13}+XYg|h@NdnYb3TsXP{=bL4%|>hAyHbaeiLG6@eYFd^d-@9 z%JdaxP)*yte}Ye2G%g&{!NZ|?rnrwXJ9fC(QG(lJW;Ek!b$`08uj3G<0P<(X2IXz?c$& z508BOKis`#Sk>G1Hf$iFfP|EksEE>`lz;*vDrJC#G@`I+1Z5$iQWAoKbcrZnkS-BP zVG+`$gmi;6i_Uk<a<@<1R?JjUhV0fqn2OuLDEuxi@Rgw3 zHKL}>Px5MlQf%K8c#9IU*`cP}8pv0fU=I6l4-a%CUl-Trj;Aq?m)k@C;yMfN!O7kl zp54|t*Hkqh&&y;2L%3|uasF;Ix=)hYd-=!^Dv<$2QY$|>vmH!{@r0qE!{F(+=X?vU zXTlkHfp4_#NSV1l);Zj(Sp5Lh)~#WjG1>r|lmHdaq?JmCuHiS1THFZ`=#d)61fi-} zk{2owJ4rq=Gt3N_(0dA*lz(ZFhRUR^%DlhS_v2NX-2_Y-^5;fYJ){rIGa&~baR=Jg@Z=)%to_Rb`k16wX!gK3YvE#YlBva-@c^iNWXLB7;J}Y zc)&u2M+WEM_L~Y1ebxB#i&=X4i$lf_r$`j=jCVZp=JMm9?#w^n z0@dI^*R5Q8RQuH_71x65cz@5W#$_Z92i9C>b{f%klIm{wowIU}{V(o_08-)MPGDZo zmdwIY*bUH8Orm8NIE8YDDNRGCW<@JZ(!TF=KHxgfve~BQd!X8w-4VLyybcZ3vj#mc z`W;`)0e%UrPU7bUdstO+1JbC?wVti?0{muFw0PU?O`o7{mjn04D!x!T3t;xLT1rOz zw!^cVtbo>enzi{Z8Rzzs5&KJ`Pv48sm)kfrA8XMq;*SlxZDVfrW?}>97^k)wgvorh#X~ATa+fplqpOx6jl$I|-dlT?iuuOO`$dgbRZjF8fR~ zrIUGS2MViw4kes(3A^YA zYnkcX3%hPSp3djhbZpG72QKLDKSzE-)K_nxent<>bnBGkuJCRP3^v5z7P*+&uet8v zA8p>8w7~s%%<834dz;30*yPGGAbr;#XVu9-T9E{W3(m1_tJgYbs-aZuW+Vr8Q&IPv!^*P-HJ5ss0lSN{FBjBeNTB`aDC@3yEcZ==J=avo?je8&*@s`& z8%QYzaL|OmJh8XAU&dQ#YUm@m)r>1#)pFJQN@%*1m#XI(JE@+(C^|&M@$}s?8|iP1 zAG}+!f&Lta8&>`8&wgU`h!(e|h;dzPkDR{jNfjz&yByf$_}I1FWS34zX8OFOXDpEn z*6+Mp5aL}My=Bv99rPKkc}aMj1p@F7+-Ar zN%E+=<%W?|&S!$w-6d$vKUropd_5}1TqcV2S6Z|! zy(*f4`MpQ3#x)nK9L}C#D$fZY5ylpW+l3#ceX3A?S2@iCaf>BR`|aA@v_yfc_^P-~aBM|= zu}M#QZgj6T>6y`~r}{@ILM!JJpT6Q{2g-cGQjR?@*hQST@i+7`89pXH*6Uqmy~=33 z6b_4bTQebxEnL9A`km@Emt$%~RGu_X_c|d{mjhjPOy$uWgQEsP+dPNH4wkivWS$`B zvlvY))jHu4?$mjTjz%ZFG>q4i&(57!Ua%xLz*YVT{_=2>98be$uX7F)f0M*)QDsw4Dn@ujaJF z%xO)E?urFtTlpa#>2eCZR$!IJdT0T=&dV6*@2`vk7|ZhvyWl8rv7B&UdfX|Hcw8RZ!#i0{wc`LIO>^NFW@gy|*(K0&Y z2x}+Rdd6NI;fow`px_uiQZi@hGiev#Ad+yoc3Z_nczwifuGFJVsS)0nG$UC|_1xVZ zhbx3C!gyzonKzjBNI_%j3{WSuL4kuBRAIl`21DTv)>oGoWV&;<(VZ-z%N5OF>0)(a zZ%uS0tEO&g*m%%7d#R0x%afgi&B@Sa7HOU3qg*NF0mmsb9=9O|8uk0Eex5fc3xjt zI?sM4+V#i$XY#q&aJq>jt7t_$T4KY8s^ZgC8C;T8qQjWKoz9Kk=TQ8C{GS)yz;`9v zkUNPd9*VAAB`C!R5g)C8>W}v@=d!kwc^Q!KVXZWtLhfIE!g%iuar6@E4*b5y&GZO+ zJ!B-hRgXK}#j#BDWuVC>9f@UtPtXDC3&qe!JjtcoMN*YMuGBOO>1**Y#JvVhUnBf- z(+;7x?NDR{Los6=XlmFtau?>z(s`RE#*E~)EG&FyIBI}V3-NQPy~FsQ-}LLLaElH| zT~1ZZqoRPe({=;8EBIh&?}}*K6f8J5w@>@=q%rEy2~v$iXS+2T_3ORHN96YKJp~~e zeR4#U)1Vn&i9}sGJk*lZ z>k~lwE0}!g5#6&sEM~+U!#-R#wvn-ySfLP24z{Sfvnr0Moj=i{b?7Or{;ka!iT;O& zN^U;xW=l;mGj$kzqBxwLa``;FJZSA!cNwJrBEbCZjpfQ}Phe(Yd4B)7YQQc+4#<6o8Ieb-u_dzhoql!MbJ}j;U zwRJ=%lv+m2`9a$&;6+BR1F&Lr*TK~I6w6LLn%g-D?IkrNF%t}$L>>f@lgS)8?SM-J zBjM7mGz5tZg0|}%YL4mK;;y)BO(B1Z?Je-%+bqc5L3i;m6nLgb??PMDbq-pmM+{sS zGz4&J7X z9V%LL&8g1|=e8GS5jIqjaml6U@Q-Z4yB;kNkngAxiRUn(pWTYu>cVX%8RusGD_c9s0+Tg-0`62Y+lFGf4V-kXQP;VQ*CpBO0t|AOpR_ zt5{8)<}v2#3R|M!ssOc4U_*(=h2!Im7dZLjj}VKYIp#L|`L3{muC1FOwDLS>xdiPl z%4(6=ix2NTFd1An@1kw3^ys|-Rutr2VQApBpcS+=$-6?FYHv&E%k0#rZ8*cO(m8uj&wgzQc_RF>Sw9+qQVG@l!V%$D&cPoFL^*HfGYAc?4_!(vVw|%tN ztY;;sbtw}A>lt3Bfs^ykHC$Z|ctQVpr9x8rdd-xVPN(KYve32}FgAHQR`PTha07Ca z*E3NEd}M9c!nYGo4Skc~%}KbX5p&j-cIP3v$58XQ+tW6G)tJGu4b zUuyRO@T~qhA%SZu^GZ%(Be$p3TL?G_p(Hz}no2xPNhOyZWdhmddFbRw^=Xr+uG+@F zP^bXDIm-^xFit7M4k@o=Qvxdbn#UeQ!_k+{cY`}eu9_j2LTI=KTv%{(*oMAWs#v#3 za2Pz7w)7i0n~vpgia!bTNYw^Qgvzg(>#|Vi5I> zU1AX!UnCKmbz;n4X)W4xWZV{M@~npby^GO0>td)IH(g!85FQ}2La|3&=9yMH2dIxX z4*4%(>5XOh?#4lJb1_c*4)!5RJ?@T&Cs+-&7e4}5`W@en5GTI1_|sAi3VBV)&3;OO zgsa@h6wESuN7>xJPIpy{ z!y&dGf8fl(viOvE5jmU!!m#6gz3$lGO9X-iNUZ4EU)w(1PxQ|+!fMXcWk0dJ>U4O8 zCvE48aON}7E{8Oh#(U3JK*?SxIQH{J^ljqrdkhLZVgsF>jTDoxQz(LX)TYDf&jab# z<;IFEw)jK*>orH)M3LLY6g=Dq!o&*Rw0-Cx{ORfhj2K<-yZaiGG0k~ZopVFO-WA=$ zwH7oumz4$4^iC|DL3(cOfgY_S{P25(2qpzgBa6=ir9|Qz_)&YuFP9W+g$m5S%&s(b z)f7KEOKv^N9eIb}r!jjv{cmZs9)5_yj4gh@`=cqJ*&TC9Jc8$pyB)l8Ti#C#*m{)r z>p>rWVKENVKVD&UksY}!ih^XRfdNtJm=OkLCA9#HR#tCKRF315Q# z$n9tDA6F*f+>Uz>M8QFya`DP`DFpCWD+@?6KCOrqI_;?at)JP>HW4OL-b>ScsPQM1 z2n&hh79ju|<9^n#G{+lTha{?xu5ENpyM@P~IzhCIOU^iJ7x!`>20{|yA?!3NNGi^N#QbKzsb>Z%eZ#K&lhsWjdezg@Re#)%z9 zbQkYj+O#^84GF7l8gl-;4wJPfR7P|&SY`4MHAG_YvAnbCwh^S(eTx$YG-ho89}sWh zyoJV^wo#7HeuPy{E5Mk(N|ZX8(+E1q(;cOTPaXgCWBT=KLLP$#ngS^65{z=JN<=TM zi8{eUbeu@geXXM>7*Xti-Dwew%;ivpaJP>_&jvyFGfY&UT;Lx#ND+lM7^<}6>ZGXC zbsa)ljYH@+V}HJqd|(_2V1Q8>3_!nRK3As}k}S_egm;51kmP|EJY_a`Q355v_$E|V{?+Zt`(LH4a>#Wwmi<90OkwPt`3 z*qr`@u&m@G14UaKHd(NawV4!0zfr~ujP%_nVIv)RL^TTe;5iibJ0}I%*>&TAD2G!0 zy|PUBHhwkgL6JTu8KBV)0?mUQPioo5H4=N8uS>)4R<#UrZStuPTF?%vk6r;+TFi1M zTD6O!h`>4s*$f4~>arr{_K!`R?OS|w{M(-g9iW=u5BeRgc9fbE0Il#5UX4Yi@x9#E zL`U+IFROXE!rboNsY--KgI8RbIMET$ZTTY$u&Q4=1o(7FA+lT0WGhuOc0;~*YHOvw z5*CV0e?Uq6Q*s6*+@T^Er}!aiWM3+3|cCfZjYQ4-aNmNV%~p8{{W*9j`>!2pk5Pp zY})7zK!a#q_2S;Cw+nHIdBdKakJoX7+0#{S}B#L3a$8aLRwfEpa#xegx_=ys=* z>=J{jS4AtVb-C$;k7+xlENOZ(B*XeJ__S{U3M*EfH#1Q~?Wa-=&Dv==93Bq!qc#*$ z-E?P<-Y#8i)(dRn1zVHKONy*tJLvD1zeU9~t^1W$jg|fO})E<_tJjCCx7oLn`=oB=wBQH6Kz1%O-ewlEWBrG#@YP_#M7qQCHo#w>5H5b!uKKXm4WG*RcJ5QKv{9YD1NLs zpqVO-ioa~h&S1=1nfgI65b3j);`q-5bc9e^-`ha9LBg9RXx~OflE4WNNY!iNi!`>S ztr+qZ6s2f32|uz}%_tYpjJx|F8YU}TZ!tQRd4hI)7+e?{o83FzSE>!1^{Su&x8;f7 zH@#L@PlDbxUG%$~?Qm5PfZL4?_)Y}=ZOIvc7yG1&FKThBDeQ`O8kJ)jam{GQ-wKy6_SCO~9Mdic#G2A+TeeaKK(TdjNQpJBG`vK@AFzc7E{b=u z(X2$1+|jxYfTZLZan1nzT}>a~PsLrPn74DhDVM7dqQf6`$$HS$KY?$6`l~4p4A$;+ zFO-DV!BtTRn#h(GWk^cbT*yv4MbV|tzRaVSRoSw~nfcp9eOy_giCGAeRX@YvqQTNR z8lY#3^V|J!NM)LPaZ(ihu@XDJ$0r}tTmPYhd=5VH+rv{m)&p~$(q?pW7Ei&6&^wu- zac%&xuFrbe7B#i?;q+kaQyJa5@B7huY#W?tYL95J#2<{SHo{Ii57GaGKS9>&v$1=U z5Y(*`9{-sz9x>o<#nNNII#s?kp=~3X+-mL-`ec6Pu`~;h(Ff^%zvs>a_8ftKCC`7| zsXxVu|Le)~|N0k1_EglElw$H1*5^%?!;wxWKW$tjD!!1K4dYhMbaSxoidnRPdRO}Y z<{s>t1|3tFCAe{Z#1kXg%wgbRH@Yk!^U@GVzqs?+lIz3oKST_gPRwpAyceN>Lh1Ft z%}jn;MToYL%<-Op|~p1LaCu8R2X47i|gYHK=k>dR>>vh9*;20&LyfF}zU`=A3;X1`^B(D-tvia1dGo zsu0xk1#JN29!;$l654Wh?nYdgq5pxtDLA8mETjMO% z+X5&=3YJV?T^2o<`1V@GLe(!Z0CdD6XHhfSK-1wJlxV(%{Po(eCzc>GQ__8aRFbP5 zi~;1#L_oeW2$`2s8syA_aKu$NXM@}ay~RAqJ&#R<8xBE!{$J{CKd_2 zMyu;JaQ57YAJss;g%AYWUCD~M$=Xk7K=mvZ(N64mac1F8w@~P=lL}GE&O^0X$1>~nKv%h>q zVF7opktOW2qLd@Xs}3)q#S)UJ9PJCGL9WqUaqkYsGQaq?JQqPZu-@ILy;_s}tb9Ed#Y8z?`vBCSVY@k=agZ8gvMcR9g^?6iE2+q_9z1%UN&%lY z;lzFpL(gZyEm98ACa2&@msyG_DlX)B>@D6`5!`+I6jUlRr*wYr;Ug#D=YN7hlswEo zm<&Kgn2UM&-R)Hl49=+MJl#8{c=UZidbRyMNVQov-S|iu-*Bx7wty0%r=^f z40Pm5XM9a?$LdTb;+^ubU&iime(rN}lAdsS?N)fPHP`X!%@a8sFF11gZu$0+b+wY7 zTh1rbHZw01SHh+p>`l;Z8hUivyVs}JbBsKy0QH<(^obZ z50WdGp&aqe_IEeA5bZGiGCRrnq>@@puXw*GSy)6xn^-0%g~^0qhM-<42-u#k$1a65tEb((j zueS;3TWy#(;|!kG3HdWobM-Q9TopLOPE5ykILyoJss9NLeU;mTEdD*kGBqetccnO7 zP8hK30r_#9N$l~7@Gvs<2hfQ9I`i~s`EK6?lH#2^cZjqJ3^ZrxPJEMPIJ6^pev$NQ z${D;f_>>mRcvOTnQ}|sFz|Xn7N=dr5bkQzpkETly51mO1Crg6k4wGssHlc3vokiuQ zua++tij%Cv?cs`ZAf`xadc-43Gtf(QK`1DUK`J|X;N?r2E)&#K*1uTx(R7_ATX7FL z@!=!|V!StN{n4SwmL-hYb0$0#xB zaaz46WDWx!xO2B1v7C*37ETz+%VU?{k9y>pK=4d>&&=@24iF7+h#Z#!_ z==|-^Xb98AVeV5(dns^rRz=yrNj;;=a2lCDn^tVQoN}>O#{^AE%-|)bz~cNj0Cx_ zn`p(iTm&oF36^o{!UpamGQ@1FVC=4>FA_9$fhah@|IBAG-kiSkX1r<*v>f*iZ>!p4 z-JeNATAulY)L6pXp|t>YnD0gX8w8$R?AH|!P;S2Kge$(e(wF?ac3CU{BhToMAKWL3EZL2u^SZT4CzWUcJO7kNtaB$vZV(-?PgTZ2tw!_fs+r z6~mYJ{B#(dTMc^T{j`buzKve17^Y!+ zCCT6Wb>6n^QtJ6Lvg&^e);}Tl1Xd5WR+G%y%v65a z9!+@2@DTE69QRI6n2l-?4Y0t8lHMV;iKyF#L%I)AjnTz3Vjpr;^qZx9?aWB68I!%Q z3I;^W?_n!%NC@4__m=ULZ{`!mx8i}jLc1wb-HgTFz`fc}o9^ViPwnILJO)bgq#CXB zEbMB>ObjRUe}qZ}AVU3q#-Y9OtGXXirBpjyLVJlxZ_@rT$7=|Dsdv@!?F~`&1lz`pCvbo(Xku9)IoyAn(If>2}IB z-tThZ-FrKX@*HMMeCYKo!})btcv9_Gug$*z82w&R%3m$8W}xPUG7)NSM+Gt1c7$sV zs##dq==A-aHA>LFwZdI#oEsL~g<_Wf>%ZJaROWwGL=XrW*(;(PITACUcH(+*g8B>;`{7m_jjEV}OC0q`dLZO4BQDpvr zP_Kk4l7uKU?VTB{d&iEy=~cc$Rf-{!9Eha^0q8TeWz3;-{vokmECESN6=$owhhK zyl_e~X7)-%or|uxCd*0dvHMnlihHytRp|M~Ye+F5FE?VfI#v!1;LOM*dQuN~{<9ta zZ%W}QF@c=>Nc2@RaAG?Ss@zy)m7TCadcPEkbJ~(kg)3=G$Wf;d!x3H3@kfA~oi zN_p)OCcQ*NYIz4FX-bI9)$rc;+0eUsnQH6-3=~=NnrX{2a(6i6zTn1HMB5KrhP3c+ zR4a_;KG;)X2jU9P$vLx|!+cPD8EqiPHVn{&fHTrfYbY3R=(j|41wQwh*?HU=Oxzfm zfooc26LoYHSq-8_Ze|CYkZ6*H4V5YHjZC|G)WWouT zD{cpg_dkRz4&zAyDO;7{ChBa+F%7@;VBWD`Uqn?&H@rT;@LsD!dM0nQj(TzwaoqzyU!qA&Y-n@yd$Q4i3S?N@DBpUK=@VP4cR>^7K$h${Ss-4U~ zl5zgd3DE2$mduSQ%8oR$ciJkWQeNP2AB!7EG%CR!{>!x_(j94VhF-S{dlx|yNg)ev zcF#%bh?gWKDmG$}^eV&C>Cp6*WDY)3ae%hKVx2r4V1d8j4*WWBLVe%^%Cdb4?`yzk zlX^!usVrscl{TA8ARBSu1;#|dWK*z*A}4;8P+*>E>Uh~fOIMZSLcLKq;XkEp>2Z1# z01jm|j}SymrvbCFv|(ovOTC+<5>21G$1Y&G+=|+|w1wB9@}Pq+{`nQl6Y6K+Hf3}G z_QUnC;tlY{sZ*}@c;+2;9{GVdp%I=w^?bKeb->?Ue$T5>pKF${o>E$yMM6v9sLiZM zQr>=(U1e6=^m@hb*sWxJxfJ(%d)&%cuqyXYaRR6oesNL2_w|3ktP|Go@?mS{j`*}M zxWUR09QwCh+F8llBs<_QEVEIV{OKO+?oUM<CO*ogKVE}_ZtsfOt8OHQsA^GRKKpU(T z+CqKPE?@ASk=3Fdd09`Fu&W}1(wI~ajf0w5g@(;oEXl)Az4B?_W~AI;%<~yICx8zx zS~u-&6E(jIseHqJU+e4ZkMxR1z0bC$#roN2%zEAIVgc>7G>uA0z33Db*?UmR4n`Q;_4LFMuip3(ZxAG3- zm9p{`^m+VX1@Y6IRxj&{1&I&Wz|9*q0V5-g1dX!sFk!%Fz?dnQn)(LSOomnNxyD>i zlK@%TR3E6t5=O6Y4>$lo!7yFMF52A+v*k|1@$`&0rhYm1#h%IlKXZ zC|28sN=S-=YRY!P<|eQrUIXNOry-IxQ|1UkAp7jGiPw@RPN zk3*Hn7WaA=xl_%@fVJOtJ~fG9=_KcJ)0DW08OgGM`Bs0)ZJKWzSgYp9`qzM^>G~m6 zHKm?U(3LUIgK2<`pc4R0l&nx)xXBbXAii$Qz2L~**NBE!>hB)NK;(-8S%*VJ%;e{4 zB$DZNn>-hc-4M>MK|Jqnypv6~!kgITC@!(GNu<9jDE1?}G@2`aaUP&yxB`1Q`KvRj zzLzeUHx)u;QyQ%*%PdADKb@Etd1j5mK3C6Ruc9ec@-rn4QW9q$_~%T3=7KHv2&ArZ zp6qrVSk>pubQNsj^&VEbuym2;PDPMH7@b7@mTAU)Go0f6T4Vim$rVBm#oaAoZVVz` zRyR8O^>Su2MhP0pnK{ZoRA?0{VG2tuqrjUxmfp>lKYd2?)%<~a#JIRc(YxH-x+A2% z?L9O^A}YkU68RuI{GG~jye!;3-{aiY6(ncc)ssK>xSXzQ9fJf9o%6LkICI@N{0Id> zjqwT>ZgG0+{ii{I>$kaI`r{K|b&nO!hL1=!x%Lzjv+uHgm5M(ow~zkw_u8|5&SQ&^_(#TkxF?^VXhVrVR?1rPKDYSFPAa zO6PO;QbdLtjCSL7y43z}e{&j%N7|lYhJW(M!ug35^o-DZXmvTppwM;Uhv)_|(e%cD z^bZLlny_q;4?e<2g0*(<7XQWBA1N?;03YN00!-t^`b6Ej19k-vZ1 z=EJM+C%-!;@_*0QPX!*r#}Rvd$iC9vSz;HqE`8lPR;XWlS2wPDVD4?>85kKnOppZQ z+0r!Oml)fMm{vXQyd@Ek9eVQvklU;ZGkeRQcJ0G0lP2m?>BYgpyW(TBuE8~Z*Ema% zQbDivk!01oYVW#~tt&1CO&}uaIW(3d6`tr@IQy=KAm0L}+`v}P>z-n}61|t`%_j$% zu)XgMq)m+D3BL)I+?T%b=$)~b>LI&EpOn)jE(d>`e&PU6*+`JM0g-R3NOIsdup@xJ z<>GqfxybjA_8=NdS7j|MlxSdD(0!jOm1jAc^ZZ(%q>F3Ni-9@az$3s#Mq6%c>nqcT z@lceq506LFz;6nzeh20B_nC#-`*kTJuYuueDqlg@We-ns_b_Yth&}X+fxMi(vbvRC zm!k)bntctT20c$l1Dw-9S%}sk-GG3yJIJsH`pnBU~ybtWjkLn^pOR~f`qNUx%EcG8j)Xi z!Ojuml>GHd1@hz$rQlkZ&Pnpu51A3fwO05?Tkg=8S)Xwo+;~=G?#*{?UQ;`1)Mme9 z>}FAwFvcCUTcTHg|LE`?6VWt}{#uTqlfC2K<$o;5%`a%Lj6oOn@2`S+Yiob3-A8=@ zQ($`(9z!RBa_u{|R;-(4Iaes=j~Dr?$D5A@2K+MRRimel$*QqYCt1+|zbcJxsg&^u z?K=Q3ejKr5B(Q9O^OJ6K0oa~TA^uz8|NdzId{+P{A+g%fYv`Z-&}#j7VE`9^{_opx z^_@?x6!2Al?6F@w+TUc!Ki(KnbR{4PiW(H|EVMR*SO4v5oSvwIZX=%}>^j9JI}E=f ztt&y8_d})jLtFCWl~Gz(fe+spV%`njU{HszjH_k0@c_p@IXReaCpA43h) zsgDx}H#cubzb-7a9<>b=*Nl0We@j9Du4Xtb0jsCVTHj!T;4}~(=cGw_!0GP%OS2;# zRs_YR27}d_OIJT(2e%&n>EJvv@=RyO{dw#NAH);;dhM@oM*q7o6=Zckv}gYZ?-Lyc zg2wU3nTMN?1>s2oJ=+b$j{gsb55g`%UH3z6MmY39ryGJhrNd=~ayd6a=-;0{z^s1A z;Ru4i|F<^L$clz28hvpc8q=y_y7rYd^GGCwdJ9Or$1hUg`_BN1vJfPT`VVgr;}-e| z!7vhlUWFiPgb4B&P^|+dgKdGTnm{!o8v`Ad{uYt^E!zKSD|utBB`RPa@3LQ1kOYyF|+04$U-Q;4+G!UAPZF(OUTbY3+!CEn60pv?zJkLbeHTA zh*6F@eherSR>4RSs11zXkX;PAf{~EI+5@|h6M0h1b@XhCYCAM4h^$3i`~R~L6r4F6 z&)R`3BEKi*)W(?FeUQHKfUO1JZv-9#)Yb$d?+>xuQeF=y5PIF(%Aps?ko~S?H_!D& zp%1qIxEKD*orz!PW+oCtCC?ln95SAK)N)Zsd_ly|lZw4;58g@M_eP$1P+p*vS?(P~ zq}XQ0LqB>Hi!i(EJgCoT~T?ZePX*+G98H5C~c-^Bu;Z#<aOd($Nkv>xCV@%_0~Jd$rTi1r8$1Xd(lms(d+%}xl3BOq@YXAuZ zPYYF?lhB1}$Z|Z)xvGu(eXMAD5#ni-&m1Qc+Fj9U{6|_bof7|~3V4-aZ-FzP5UuaL zif9%|_0`+#tosP*+du78z71a+X6IA;CJweUIPo3F`9@kR#S6F9Hox*5N);398y-rE zw%#q)v#t~ML3t2~pUid_wdhz3)d^Imh;jb@Wq#bN=-WZ6k+}L=@M8EK!t>K6)_sIaKGpyre_ z%<-rN@}4HOBDFDlN!yyZL&fP95PBAqYOQ`GN{Mb~xuqJxcik@byjpU8H*Dnu-nlrg z7`xhoGe@w4xeVb$-_Cs;l6()g?hA3=gl*@9!Q-Y5rVr4GO6W%=Uy zex>SKGPMQ6h6(`O_}6#m0=~ngspqJn6=zUoF1!xn5YMH~x2SbPs?wqzhG&L-V_aJM z88QQU?#q@-NYXsLq7lQqFHTZU;qirIbTUzu@1(75Q@&*GwGLR_n1db>Mc(7Cf6`cBm*?I9&^Bw^!8)K(*t&VvF~|*S?zf+_Yvst zd{OFZKY)8gp?B0Nm~?u8mNF$m8ir!_Nmn-$#hLVKIxmU@T(Y_FojWA)?f7)MDzodF zNAz)_(uB^X^ol$8OkKJ@FDYMH&{cq%L2-eV>+D8+|M)xAuN#4@Os}Xq1s6597{z8+ z0YT3>+Z6oRlq}p_8mFbI8*XNbbMzbU0IpIfLgf0K6>a5D*Ph@n*!bxCZ)*mPt;R*o zPbsGx3+^%RiY$8@;ENdE4oxDlW}>Wvt#HH|dAN@ZhM~j6OpPF_Onu&3QOlaHcL{r+`pQxZOxrh*UR3TJ~}=ZS-yk|o7`gF zn#Q{!-Fq`U?Ce7RTf;Tym;dUp1XZZ9-cZtuq8;V6JBt=)_C{l<%U>IwzT_4=?0sQB3>=jI6Y zVCVXzG55ZPi+%kh`^8EW& z&%^0-hu2egzSN)d%6yM-eJbJPM~v|yz@+M$f zE$-{&N2~5~E3F6D)sl%F4$vrmmO#s;N=|o}TWx-P*mqCnj&cghqA#~_xJ|ROHER&H zj;l|km^BVPFet}F?J&7&Tch5egCXRV6lyR|>;lio8{RQ`Cev3IdT!gRqtgKN%553a z{5DTY|LNvmzap=Sw7`GcgC52!|;v{TT|8JsY@wk9*A7fIt0hEr1ULr`u2IBdTx&4#0@%s5J&vgsJqETvm7;IDpIRcJ^^FHf zarq-R?p>f$aW*fh7U)ush&Vg+&~N{MR_TpTmkk419Pp$7z-8E6~zIiJ} zxsmUF8gL+I#-)O6Or^PF)MHW}HkRFwW{q1dF?^Yy+@!FJZ}XrRJKb?N$9@JUZWETh z6-+!{IK~CyIzly+_*RKCLO8Ypq=__99V4N4k}?C*nOEY>3FoE?pHhesNZoa z`Uj_j>V5sV@2hq@s~|k%`wYrU_{hhI6_$=vNwn%$iBWx@IWG0UI?ae&&;^EvdroQS z28m~DT-D}OPCmggZm(x@l1MrSA9wMt8<7}){eA+~gn)az`n^W(dA((Z*-t*6M3S4h zbwZ3x%08Hj_3?K+k0gHd!ReQLY+Q6g-S}$pX-ybrIKv|;)+;sZ70tk{*!j@*R!MsA zaq1hNF146sTyncVbaoiEzr+r&uhzM>3GBq%9g^n^I8v%Uk+X7BI_zfNaoHP~Y+6=g zq3PeHKIALVdJ+U_Tw9Y=yk_64TK<&qiI6k8VPn^sQ`ZvNg%dP2asOSk?Rw<{MEh zX&oVZNtW?ZwM^D;HYuO>bo1(wuno+8h~I=}1Ob@*VgCex4<4U%#w(g8SN!-`gyA0` z;Uy6IU&2Kl=NbN%t1!`ek5rs z`HH`B1Bytnf+XNlKm7Rs2os%6@|@+%8M{H%n7`t9>87oGnMdZSx#0yo@a`AOsqSA| zRPyqj9I9n5f3~s6ZgMJ-MWjgXa(k7Bfe^mMw9RM8;BPPCPo z7E*H01#=^Laa^;rStf4zpwufLdMYU048)0Zdm3rpxc6xMsGkvDkKqRdkf4tO1F1hC zx(~i$oG5mAsMe(#oEV{ZBo+g1|L#!Ve9Q)wUqkGnLUz+4se*%nTymtd;M`W9sZ2e# zL34ek)PK2fi*b!^bkr?fwdn&${k;_w- ziivzNB{6V!XqUJR=+Q~lvYxGN-&su4DHujnEl6AmH7NT!)4-vETGApz5z+~y9$Re| zc|=dO?ze$BxNntAf3s#YaV~IMcH97E@n_|0NZ6b{Z5dsZAA}!0Sggf}?e5i*xSfRG z=oKf^?$4TtPh%vyD3$4907?PjpsWWZ(<^Vq#nffU!unTCI=AcW%m*1W6GQnmqh4KN zoN14pYUbHkA<$UqDb!L6tl0N?K)!mE79NywT7k&UOK56!R?h@>lli`>Qh z>~RaPI=?=2c`vSPfvyTs1B6{Cc&)X0XeAqoR?X8`<=!a-ax@Mm#O3P?WOttv(0N`Bh%tWEL)`0Be zb%8zAYi0m{Q}A4v={IDMW&4)s3J8O=onBMpoA|7qEXP3>M7LNbGgejXmg0H2eb9;Y zJ!!dCxGWc0Hu&By!@z8?8YZ=i5SP|A%~?Lo(kKB$O_46Fprc&wzMGzIp-LSv^>{u9M)-f?LY6k@4nk-KK}5b zG57EO-M{<3uJ84|TI=(k9Knuz2h(>zbIFhSWebAN^EWt>Hqiq+j9*koAR|)?8(OzL z^BGFakJ+(BKwnwHPq9$y!(_Mm%+K+Zg3KoqCYhr%P)dKMVAowrUh?jzP(t)JK8EBd zqnzS0*&RdN@ch|%6P9tesDm3fr=Nd8p~11}V;8qd<>eRM`RaMeKXPd3cp4noPsF=% zzNNHD)pRSHLuuICDKLmj=0h}++z*`L9@N3CDOOomWi~ES9IP1yc(lMq^3z>i6$&9~ z%9R;MRa;0U+rK&NKX1}q_eKhuM)5_xq!sNrk!k43MjUn}C?g4hU)1A7VBsVp zbtV^vZGF!aX{(+HZHvh;$l>XHT=FsKyik9=Nx=2UVgKs^<21FA^{FSsuL_REo!?ff z)PRlzzOB`JqPBob_n8~+)OqcS#n~@hIFYEk&T;YJ(DQM4!fMuI^}iG1zI?x;xR z@J*e?;1zJ!i(xWx!))1a1ud!m9mNA3N;x%DpQnVDi&?*eoLhJPPilB0|VVl95PyntZ2~f)D7-1|7?RF)|rs&--Hgaw#3l}>zK~^3w?v0IeOfvX#mBc0j!a-*rF_I@Xt&K5L z6g3V<`hn+!;`_Cc=fQNxmPdbelg)&$&MMU5SXP9I z|GmcT;;@op$4##}wWM{-)E91BmlH^})kpn=iV3}dFDd&N6}@{0zFIxnLOlJ$C70Wl z&9Viijx9mm{toduCYx#0PgR5p<7l}f$Ws+2mqA7{#7$4VR-$g}uXrE6hH*;$qLjOI zpLf5o?{($3oZuy3jS9miJ-Fu5n0UG8)3L32K|c5bO}r5~^W})EH!%{>za zps`QA>T`D@)zGa#rQ+i+IDI|wjm*l1Sz84T2N6`)odW&NBdr*j8b+aF7b2b|vQ}P> z;x76Oag{NasIr=0tLF8seW;Gxjz=aAV^~AuH7b(xo0v)4Zgq9&i}cTVr1EHI=XHy7 z7fT+!3yBN;W4`Mu4Fe^#{Wkdt%Z<1eM4?N$nVHApQpKqy?h0HJ)yJ+wq$v`oh8kmM z#Ii|cAhTnOQB0QUCo}AJ(%}HYmXbDG9XqA4LwH)L!tfzw=8%bvn<2tW7?Ad|1Ivkl zvt^TNP0Yv{cLO7QU76>G_4+traLxu@Wo4G&G*fVY&hRY9Jvm-v>dpzSrj!T(_=(mV zKaYlUrYB$z1(?tL%+qvxO4x#%SyU0L*wIatrJ5?Fu$pNaMehqy2(jE(NeE-}HzlWC zdeW|PC2=;{H#;|u7(Qj4R-Fv%7i@e~X!Z3PR*qxVL~`U&OCyadqoBVy)1~NuAJ|Dg zUuhgPh9yQiO1v2Ic*-ZIXkEi)Uyb&ynz~#19@_H!HFnCGQ_{Q^Fjmna~|0yG=1xqDiDPamf6xt!?x z8DxwaA48Rp3fG7qjaMeBQAUOB#3`|)czE}S}P+tl3;UI1VRilusgrA#hxZT4)zE-)&~k&O9~|MN-q|Lp+; zneLi%>#ILj*Fa~ia_&R6g=;`FRyn3G0$qNG%b33+3qEdoCi`!FFZ|D6%4NA!@#*>+ zMEhT{vx1lb>FbDZnNFo$+C79s1rP}A z@ii}R3pgr)FWUa@LUI)8a4Uc8t@>$y!rmfL>KAjv^-j+U&I15KUXSc-R#AFj+NRb<^2}7!o2xw3Fw>+MAWVI z^;0R{IT&`O_I8fJo%?AJZRbrPJ;If8d?4+m{?Jauv-WnKmNPIyk^YZFCB*fU#lJmP_e(GO@~bN z?AuLwhqDavI(&Mpqp{Za2zPP&emYf03ux6feC&ZK?>mnVy>pH9UDd6A< ze6Ogqxk(@{X%Iwzh6FLj4ivXorw0ZAVEUTA@?$`pPEo%|A@BR6I(yEZ8djefgQEIT zY$~U~$|0S9kM9dIuC8m?1&k(6UqtG+|Knq>V31F-h0V?Bn{v8~Mes}KXlh>pkArRl zWHn2a&0-gKi}c@vbPL1KbOJvwCn;R_kQIrZlFU$8~oW<9Yp%?95(~%*j5Zi`!79! z3ebXCqz+2}k3W3r<$x9nFb-l`Tn;kv9#$7I4vwq$IDokVG_4~v+kvZ3FFXF{DlD3W z|6ix^*BlNsNtt1-=fAt0oq?s`NO{{?==Vf3SpO=D` z>R&qwhs*N&UxF8QEdI=BXB8DY)@1;?jGG+@(DF05f+FANHp$U>K7U~o8Mn!M_w(9= zsmgSz&7^(F8Wu}?6CzZ?PHh27!q5q{uv;Kzdzpmfd5wWHb!rT;15^w4bz>3Wol?n% z_bXGFs6FX5{xTB$l3(QmEJ{ZR^C#Y%k3_0J=};lJQZq5^owfzA=v5GRPnh+IH6g~5 zKU$TWa@xA?MCuYS;^21wl5PX< zPsfZ%ul9!Q$Ucz$blVSG;vEWXvw?!5qn1Y2;O#nqG^`j-D9$-fl}FkOCcopYerOi0 zHx%+}H%jilz)1#f4hJ69;gU{J>v2;B(u2^^NYgmX;d&-(q`O*m)_WwdPc=ePuV?DD zM7SHEYvTyf^qF-cN`pof{#ZJB`b~L|KqL~ZxEZ1x-iyGfM)K=Dv%DtA)34>5!pHi` z;c_fhe=mJ_S>N=G$2Knzxhjcm?ei$9FPm@FRh}^urhC8Uv*B#_8bzHI0b?<-7(2}AI;)^)90EMKKmP==75{ky1?g%RAZIdLfQ>YbWax&n z|1fq6-y>s@H9S}ypdTPTVJp)+Vo&clg2b8=P*}uSW0SAhcn_3iTM@jI?1b8a$Xn4T zW4)oTguk4Q-_C{4AJkdve3~39{38dpe01@NF0soLdf!O3a z(g7x?OG3ud+b+bxAg4xDuo)w%2RSFCZv{CQeFkj@rV0ZF#O}Qn!5M9CJ%qR#>6f-V zK%@QNB|?E|oo2vT*&g@j+4pNNqUp^vFg%Xpep-IG7*i*mo`edIFM*{Z?-6AV7^}(> z5Oj1vdkvTFZHY+bL3Ut^N_|)CTPmv_1(iO(Z~QOH5ae0mZCY>g=k%oPfNOE7J z)+6w?O)_2dE4)WRS5hV)AUAwStVXGxT}#<$s599-x61LMo=FKtn6Huu21_D|aC;oW z)D*2@P;vG30Fuok>-%~Fx(tffFw34rUjp4qARddiAv@N|hT1p8u~QI;dIx1!*}CW_ zfLv;(y&S@+L+MM&BB${x``=dRa^XQ}#_i$qVX4M-aS_Ocz#CL;4p-$j3CBHA&!g)a z04J6eVB$LmSzuv#KWUUA=nL(P652?UIR`)wY-|&SuNJJVviLIHt;cCUr>Jij7@E~x zw8aFQ8CsH+FBfR@Mbw=OZ1Z!_&C;p?ki1bvKkPlE{&*?nmwVNOnX$PQ(|a#!ZZ_fI z`&?HRn5qNzskY!(+AfKG>Knx0f~E~4S>ctv!|dscj*g#750rA7qgaa4fL9Ji&dAGO zdQG0}EOElkTw)!p=;JnKWmk$J+T6r{74?w~#7Y*T(<%5(mG_dHgs5m)LuK9_$Q?+! zE=`h$E)qf+ z;|qS$E9IP5r6KRyKl$zQlgq2u>jR>nOZFUOH;R!QiVG3r|i#pm3)^=LddMx#sYt6Q-Y)x138x{nP<@i4N4xtd0tL5$ zi+O}U3G)oYpdh1Q=4VMH({}sq&ACMVDx4+tq)spZCvoI=~6wLuXTQBIT3xgznJI+nDXL)HpwNOCm})3|I4Zh+0c0=ZhT zrS6KK-+g5k(j&=I*!3E1i@x$&ZK^#MecXuT+8Zor1}TIe#KJ;K0yYI|1nhM%X?(!t zZOguYQ$-g4(RA=wmWJDB+n3$`aPd3+;mC_gyI}xqMiOu#gslVZdA8~MjU{eU#rcOZ zg7w>M;_Y+U(}P}2r7|jS|9>LnNVwBR zlJ{jY|EaLotOBHkD_$w~MPPyCiRwhWm)^hhn_sg<-KauT<pC( diff --git a/pack.yaml b/pack.yaml index 685e79c..3a33460 100644 --- a/pack.yaml +++ b/pack.yaml @@ -1,12 +1,16 @@ --- ref: zabbix name: zabbix -description: Zabbix Monitoring System +description: Zabbix 6.0+ Monitoring Integration Pack for StackStorm keywords: - zabbix - monitoring -version: 1.2.4 -author: Hiroyasu OHYAMA -email: user.localhost2000@gmail.com + - webhooks + - alerts +version: 2.0.0 python_versions: - "3" +author: Hiroyasu OHYAMA +email: user.localhost2000@gmail.com +contributors: + - "namachieli" diff --git a/requirements.txt b/requirements.txt index 3c6485e..93bca84 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ -git+https://github.com/EncoreTechnologies/py-zabbix.git -pytz +zabbix-utils>=2.0.0 tzlocal +requests diff --git a/scripts/register_webhook_rabbitmq.sh b/scripts/register_webhook_rabbitmq.sh new file mode 100755 index 0000000..e05ec32 --- /dev/null +++ b/scripts/register_webhook_rabbitmq.sh @@ -0,0 +1,309 @@ +#!/usr/bin/env bash +# Register the "StackStorm RabbitMQ" webhook media type in Zabbix and +# configure the RabbitMQ exchange/queue/binding via Management API. +# +# This script: +# 1. Creates RabbitMQ exchange, queue, and binding via Management API +# 2. Authenticates to the Zabbix API +# 3. Creates/updates a webhook media type (type=4) that publishes to RabbitMQ +# 4. Assigns media to the Admin user +# +# Required environment variables: +# ZABBIX_URL - Zabbix frontend URL (e.g. http://localhost:8080) +# RABBITMQ_URL - RabbitMQ Management API URL (e.g. http://localhost:15672) +# +# Authentication (one of): +# ZABBIX_API_TOKEN - Zabbix API token (preferred) +# ZABBIX_USER - Zabbix username (default: Admin) +# ZABBIX_PASSWORD - Zabbix password (default: zabbix) +# +# Optional: +# RABBITMQ_USER - RabbitMQ username (default: guest) +# RABBITMQ_PASSWORD - RabbitMQ password (default: guest) +# RABBITMQ_VHOST - RabbitMQ virtual host (default: /) +# RABBITMQ_EXCHANGE - Exchange name (default: st2.zabbix) +# RABBITMQ_ROUTING_KEY - Routing key (default: zabbix.alerts) +# RABBITMQ_QUEUE - Queue name (default: zabbix.alerts) +# ZABBIX_ADMIN_USER_ID - Zabbix user ID to assign media to (default: 1 = Admin) + +set -euo pipefail + +: "${ZABBIX_URL:?ZABBIX_URL is required}" +: "${RABBITMQ_URL:?RABBITMQ_URL is required}" + +ZABBIX_USER="${ZABBIX_USER:-Admin}" +ZABBIX_PASSWORD="${ZABBIX_PASSWORD:-zabbix}" +ZABBIX_ADMIN_USER_ID="${ZABBIX_ADMIN_USER_ID:-1}" +RABBITMQ_USER="${RABBITMQ_USER:-guest}" +RABBITMQ_PASSWORD="${RABBITMQ_PASSWORD:-guest}" +RABBITMQ_VHOST="${RABBITMQ_VHOST:-/}" +RABBITMQ_EXCHANGE="${RABBITMQ_EXCHANGE:-st2.zabbix}" +RABBITMQ_ROUTING_KEY="${RABBITMQ_ROUTING_KEY:-zabbix.alerts}" +RABBITMQ_QUEUE="${RABBITMQ_QUEUE:-zabbix.alerts}" +MEDIA_TYPE_NAME="StackStorm RabbitMQ" + +# URL-encode the vhost for RabbitMQ Management API paths +VHOST_ENCODED=$(python3 -c "import urllib.parse; print(urllib.parse.quote('${RABBITMQ_VHOST}', safe=''))") + +# --- RabbitMQ Setup --- + +echo "=== RabbitMQ Setup ===" + +rabbitmq_api() { + local method="$1" + local path="$2" + local data="${3:-}" + + local args=(-s -o /dev/null -w "%{http_code}" -X "${method}" + -u "${RABBITMQ_USER}:${RABBITMQ_PASSWORD}" + -H "Content-Type: application/json") + + if [[ -n "${data}" ]]; then + args+=(-d "${data}") + fi + + curl "${args[@]}" "${RABBITMQ_URL}/api${path}" +} + +# Create exchange +echo "Creating exchange '${RABBITMQ_EXCHANGE}' on vhost '${RABBITMQ_VHOST}'..." +HTTP_CODE=$(rabbitmq_api PUT "/exchanges/${VHOST_ENCODED}/${RABBITMQ_EXCHANGE}" \ + '{"type": "topic", "durable": true, "auto_delete": false}') +if [[ "${HTTP_CODE}" == "201" || "${HTTP_CODE}" == "204" ]]; then + echo "Exchange created/confirmed." +elif [[ "${HTTP_CODE}" == "204" ]]; then + echo "Exchange already exists." +else + echo "WARNING: Exchange creation returned HTTP ${HTTP_CODE}" >&2 +fi + +# Create queue +echo "Creating queue '${RABBITMQ_QUEUE}' on vhost '${RABBITMQ_VHOST}'..." +HTTP_CODE=$(rabbitmq_api PUT "/queues/${VHOST_ENCODED}/${RABBITMQ_QUEUE}" \ + '{"durable": true, "auto_delete": false}') +if [[ "${HTTP_CODE}" == "201" || "${HTTP_CODE}" == "204" ]]; then + echo "Queue created/confirmed." +else + echo "WARNING: Queue creation returned HTTP ${HTTP_CODE}" >&2 +fi + +# Create binding +echo "Binding queue '${RABBITMQ_QUEUE}' to exchange '${RABBITMQ_EXCHANGE}' with key '${RABBITMQ_ROUTING_KEY}'..." +HTTP_CODE=$(rabbitmq_api POST "/bindings/${VHOST_ENCODED}/e/${RABBITMQ_EXCHANGE}/q/${RABBITMQ_QUEUE}" \ + "{\"routing_key\": \"${RABBITMQ_ROUTING_KEY}\"}") +if [[ "${HTTP_CODE}" == "201" || "${HTTP_CODE}" == "204" ]]; then + echo "Binding created." +elif [[ "${HTTP_CODE}" == "409" ]]; then + echo "Binding already exists." +else + echo "WARNING: Binding creation returned HTTP ${HTTP_CODE}" >&2 +fi + +echo "" + +# --- Zabbix Setup --- + +echo "=== Zabbix Webhook Setup ===" + +# JSON-RPC request helper +request_id=1 +zabbix_api() { + local method="$1" + local params="$2" + local auth_field="" + + if [[ -n "${AUTH_TOKEN:-}" ]]; then + auth_field="\"auth\": \"${AUTH_TOKEN}\"," + fi + + local payload + payload=$(cat </dev/null || true) + if [[ -n "${error}" ]]; then + echo "ERROR: Zabbix API ${method} failed: ${error}" >&2 + exit 1 + fi + + echo "${response}" | python3 -c "import sys,json; print(json.dumps(json.load(sys.stdin).get('result')))" +} + +# Authenticate +echo "Authenticating to Zabbix at ${ZABBIX_URL}..." +AUTH_TOKEN="" +if [[ -n "${ZABBIX_API_TOKEN:-}" ]]; then + AUTH_TOKEN="${ZABBIX_API_TOKEN}" + echo "Using API token authentication." +else + AUTH_TOKEN=$(zabbix_api "user.login" "{\"username\": \"${ZABBIX_USER}\", \"password\": \"${ZABBIX_PASSWORD}\"}" | tr -d '"') + echo "Authenticated as ${ZABBIX_USER}." +fi + +# Webhook JavaScript +WEBHOOK_JS=$(cat <<'JSEOF' +var params = JSON.parse(value); +var req = new HttpRequest(); +req.addHeader('Content-Type: application/json'); +var auth = Base64.encode(params.RABBITMQ_USER + ':' + params.RABBITMQ_PASSWORD); +req.addHeader('Authorization: Basic ' + auth); +var vhost = encodeURIComponent(params.RABBITMQ_VHOST || '/'); +var exchange = encodeURIComponent(params.RABBITMQ_EXCHANGE || 'st2.zabbix'); +var url = params.RABBITMQ_URL + '/api/exchanges/' + vhost + '/' + exchange + '/publish'; +var message = { + properties: {content_type: 'application/json', delivery_mode: 2}, + routing_key: params.RABBITMQ_ROUTING_KEY || 'zabbix.alerts', + payload: JSON.stringify({ + trigger: 'zabbix.event_handler', + payload: { + alert_sendto: params.To, + alert_subject: params.Subject, + alert_message: params.Message, + host: params.HostName, + event_id: params.EventID, + trigger_id: params.TriggerID, + trigger_name: params.TriggerName, + trigger_status: params.TriggerStatus, + trigger_severity: params.TriggerSeverity, + event_time: params.EventTime, + event_date: params.EventDate + } + }), + payload_encoding: 'string' +}; +var resp = req.post(url, JSON.stringify(message)); +if (req.getStatus() >= 200 && req.getStatus() < 300) { + return 'OK'; +} else { + throw 'RabbitMQ publish failed with status ' + req.getStatus() + ': ' + resp; +} +JSEOF +) + +# Build parameters JSON array +PARAMETERS='[ + {"name": "RABBITMQ_URL", "value": "'"${RABBITMQ_URL}"'"}, + {"name": "RABBITMQ_USER", "value": "'"${RABBITMQ_USER}"'"}, + {"name": "RABBITMQ_PASSWORD", "value": "'"${RABBITMQ_PASSWORD}"'"}, + {"name": "RABBITMQ_VHOST", "value": "'"${RABBITMQ_VHOST}"'"}, + {"name": "RABBITMQ_EXCHANGE", "value": "'"${RABBITMQ_EXCHANGE}"'"}, + {"name": "RABBITMQ_ROUTING_KEY", "value": "'"${RABBITMQ_ROUTING_KEY}"'"}, + {"name": "To", "value": "{ALERT.SENDTO}"}, + {"name": "Subject", "value": "{ALERT.SUBJECT}"}, + {"name": "Message", "value": "{ALERT.MESSAGE}"}, + {"name": "HostName", "value": "{HOST.NAME}"}, + {"name": "EventID", "value": "{EVENT.ID}"}, + {"name": "TriggerID", "value": "{TRIGGER.ID}"}, + {"name": "TriggerName", "value": "{TRIGGER.NAME}"}, + {"name": "TriggerStatus", "value": "{TRIGGER.STATUS}"}, + {"name": "TriggerSeverity", "value": "{TRIGGER.SEVERITY}"}, + {"name": "EventTime", "value": "{EVENT.TIME}"}, + {"name": "EventDate", "value": "{EVENT.DATE}"} +]' + +# Escape JS for JSON embedding +WEBHOOK_JS_ESCAPED=$(echo "${WEBHOOK_JS}" | python3 -c "import sys,json; print(json.dumps(sys.stdin.read()))") + +# Check if media type already exists +echo "Checking for existing '${MEDIA_TYPE_NAME}' media type..." +EXISTING=$(zabbix_api "mediatype.get" "{\"filter\": {\"name\": \"${MEDIA_TYPE_NAME}\"}}") +EXISTING_ID=$(echo "${EXISTING}" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d[0]['mediatypeid'] if d else '')" 2>/dev/null || true) + +if [[ -n "${EXISTING_ID}" ]]; then + echo "Updating existing media type (ID: ${EXISTING_ID})..." + zabbix_api "mediatype.update" "{ + \"mediatypeid\": \"${EXISTING_ID}\", + \"name\": \"${MEDIA_TYPE_NAME}\", + \"type\": \"4\", + \"script\": ${WEBHOOK_JS_ESCAPED}, + \"parameters\": ${PARAMETERS}, + \"timeout\": \"30s\", + \"process_tags\": \"0\", + \"description\": \"Publishes Zabbix alerts to RabbitMQ for StackStorm consumption.\" + }" > /dev/null + MEDIA_TYPE_ID="${EXISTING_ID}" + echo "Media type updated." +else + echo "Creating '${MEDIA_TYPE_NAME}' webhook media type..." + RESULT=$(zabbix_api "mediatype.create" "{ + \"name\": \"${MEDIA_TYPE_NAME}\", + \"type\": \"4\", + \"script\": ${WEBHOOK_JS_ESCAPED}, + \"parameters\": ${PARAMETERS}, + \"timeout\": \"30s\", + \"process_tags\": \"0\", + \"description\": \"Publishes Zabbix alerts to RabbitMQ for StackStorm consumption.\" + }") + MEDIA_TYPE_ID=$(echo "${RESULT}" | python3 -c "import sys,json; print(json.load(sys.stdin)['mediatypeids'][0])") + echo "Media type created (ID: ${MEDIA_TYPE_ID})." +fi + +# Add media to Admin user +echo "Configuring media on user ID ${ZABBIX_ADMIN_USER_ID}..." +EXISTING_MEDIA=$(zabbix_api "user.get" "{\"userids\": \"${ZABBIX_ADMIN_USER_ID}\", \"selectMedias\": \"extend\"}") +HAS_MEDIA=$(echo "${EXISTING_MEDIA}" | python3 -c " +import sys, json +users = json.load(sys.stdin) +if users: + for m in users[0].get('medias', []): + if m.get('mediatypeid') == '${MEDIA_TYPE_ID}': + print('yes') + break +" 2>/dev/null || true) + +if [[ "${HAS_MEDIA}" != "yes" ]]; then + CURRENT_MEDIAS=$(echo "${EXISTING_MEDIA}" | python3 -c " +import sys, json +users = json.load(sys.stdin) +medias = users[0].get('medias', []) if users else [] +for m in medias: + m.pop('mediaid', None) + m.pop('userid', None) +medias.append({ + 'mediatypeid': '${MEDIA_TYPE_ID}', + 'sendto': 'stackstorm-rabbitmq', + 'active': '0', + 'severity': '63', + 'period': '1-7,00:00-24:00' +}) +print(json.dumps(medias)) +") + zabbix_api "user.update" "{ + \"userid\": \"${ZABBIX_ADMIN_USER_ID}\", + \"medias\": ${CURRENT_MEDIAS} + }" > /dev/null + echo "Media assigned to user." +else + echo "Media already assigned to user." +fi + +echo "" +echo "=== Registration Complete ===" +echo "Media Type: ${MEDIA_TYPE_NAME} (ID: ${MEDIA_TYPE_ID})" +echo "RabbitMQ Exchange: ${RABBITMQ_EXCHANGE} (vhost: ${RABBITMQ_VHOST})" +echo "RabbitMQ Queue: ${RABBITMQ_QUEUE}" +echo "Routing Key: ${RABBITMQ_ROUTING_KEY}" +echo "" +echo "Next steps:" +echo " 1. Create a Zabbix Action (Alerts > Actions > Trigger actions) that" +echo " uses this media type to send notifications on problem events." +echo " 2. Install the stackstorm-rabbitmq pack: st2 pack install rabbitmq" +echo " 3. Configure rabbitmq pack to consume from queue '${RABBITMQ_QUEUE}'" +echo " 4. Create StackStorm rules to process rabbitmq.new_message triggers" +echo " (see rules/zabbix_rabbitmq_bridge.yaml for an example)" diff --git a/scripts/register_webhook_st2.sh b/scripts/register_webhook_st2.sh new file mode 100755 index 0000000..54b7dbd --- /dev/null +++ b/scripts/register_webhook_st2.sh @@ -0,0 +1,219 @@ +#!/usr/bin/env bash +# Register the "StackStorm Direct" webhook media type in Zabbix. +# +# This script authenticates to the Zabbix API and creates/updates a webhook +# media type (type=4) that POSTs alerts directly to the StackStorm API. +# +# Required environment variables: +# ZABBIX_URL - Zabbix frontend URL (e.g. http://localhost:8080) +# ST2_API_URL - StackStorm API URL (e.g. http://localhost:81) +# ST2_API_KEY - StackStorm API key for authentication +# +# Authentication (one of): +# ZABBIX_API_TOKEN - Zabbix API token (preferred) +# ZABBIX_USER - Zabbix username (default: Admin) +# ZABBIX_PASSWORD - Zabbix password (default: zabbix) +# +# Optional: +# ZABBIX_ADMIN_USER_ID - Zabbix user ID to assign media to (default: 1 = Admin) + +set -euo pipefail + +: "${ZABBIX_URL:?ZABBIX_URL is required}" +: "${ST2_API_URL:?ST2_API_URL is required}" +: "${ST2_API_KEY:?ST2_API_KEY is required}" + +ZABBIX_USER="${ZABBIX_USER:-Admin}" +ZABBIX_PASSWORD="${ZABBIX_PASSWORD:-zabbix}" +ZABBIX_ADMIN_USER_ID="${ZABBIX_ADMIN_USER_ID:-1}" +MEDIA_TYPE_NAME="StackStorm Direct" + +# JSON-RPC request helper +request_id=1 +zabbix_api() { + local method="$1" + local params="$2" + local auth_field="" + + if [[ -n "${AUTH_TOKEN:-}" ]]; then + auth_field="\"auth\": \"${AUTH_TOKEN}\"," + fi + + local payload + payload=$(cat </dev/null || true) + if [[ -n "${error}" ]]; then + echo "ERROR: Zabbix API ${method} failed: ${error}" >&2 + exit 1 + fi + + echo "${response}" | python3 -c "import sys,json; print(json.dumps(json.load(sys.stdin).get('result')))" +} + +# Authenticate +echo "Authenticating to Zabbix at ${ZABBIX_URL}..." +AUTH_TOKEN="" +if [[ -n "${ZABBIX_API_TOKEN:-}" ]]; then + AUTH_TOKEN="${ZABBIX_API_TOKEN}" + echo "Using API token authentication." +else + AUTH_TOKEN=$(zabbix_api "user.login" "{\"username\": \"${ZABBIX_USER}\", \"password\": \"${ZABBIX_PASSWORD}\"}" | tr -d '"') + echo "Authenticated as ${ZABBIX_USER}." +fi + +# Webhook JavaScript +WEBHOOK_JS=$(cat <<'JSEOF' +var params = JSON.parse(value); +var req = new HttpRequest(); +req.addHeader('Content-Type: application/json'); +req.addHeader('St2-Api-Key: ' + params.ST2_API_KEY); +var payload = JSON.stringify({ + trigger: 'zabbix.event_handler', + payload: { + alert_sendto: params.To, + alert_subject: params.Subject, + alert_message: params.Message, + host: params.HostName, + event_id: params.EventID, + trigger_id: params.TriggerID, + trigger_name: params.TriggerName, + trigger_status: params.TriggerStatus, + trigger_severity: params.TriggerSeverity, + event_time: params.EventTime, + event_date: params.EventDate + } +}); +var url = params.ST2_API_URL + '/api/v1/webhooks/st2'; +var resp = req.post(url, payload); +if (req.getStatus() >= 200 && req.getStatus() < 300) { + return 'OK'; +} else { + throw 'Failed with status ' + req.getStatus() + ': ' + resp; +} +JSEOF +) + +# Build parameters JSON array +PARAMETERS='[ + {"name": "ST2_API_URL", "value": "'"${ST2_API_URL}"'"}, + {"name": "ST2_API_KEY", "value": "'"${ST2_API_KEY}"'"}, + {"name": "HTTPProxy", "value": ""}, + {"name": "To", "value": "{ALERT.SENDTO}"}, + {"name": "Subject", "value": "{ALERT.SUBJECT}"}, + {"name": "Message", "value": "{ALERT.MESSAGE}"}, + {"name": "HostName", "value": "{HOST.NAME}"}, + {"name": "EventID", "value": "{EVENT.ID}"}, + {"name": "TriggerID", "value": "{TRIGGER.ID}"}, + {"name": "TriggerName", "value": "{TRIGGER.NAME}"}, + {"name": "TriggerStatus", "value": "{TRIGGER.STATUS}"}, + {"name": "TriggerSeverity", "value": "{TRIGGER.SEVERITY}"}, + {"name": "EventTime", "value": "{EVENT.TIME}"}, + {"name": "EventDate", "value": "{EVENT.DATE}"} +]' + +# Escape JS for JSON embedding +WEBHOOK_JS_ESCAPED=$(echo "${WEBHOOK_JS}" | python3 -c "import sys,json; print(json.dumps(sys.stdin.read()))") + +# Check if media type already exists +echo "Checking for existing '${MEDIA_TYPE_NAME}' media type..." +EXISTING=$(zabbix_api "mediatype.get" "{\"filter\": {\"name\": \"${MEDIA_TYPE_NAME}\"}}") +EXISTING_ID=$(echo "${EXISTING}" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d[0]['mediatypeid'] if d else '')" 2>/dev/null || true) + +if [[ -n "${EXISTING_ID}" ]]; then + echo "Updating existing media type (ID: ${EXISTING_ID})..." + zabbix_api "mediatype.update" "{ + \"mediatypeid\": \"${EXISTING_ID}\", + \"name\": \"${MEDIA_TYPE_NAME}\", + \"type\": \"4\", + \"script\": ${WEBHOOK_JS_ESCAPED}, + \"parameters\": ${PARAMETERS}, + \"timeout\": \"30s\", + \"process_tags\": \"0\", + \"description\": \"Posts Zabbix alerts directly to StackStorm API webhook endpoint.\" + }" > /dev/null + MEDIA_TYPE_ID="${EXISTING_ID}" + echo "Media type updated." +else + echo "Creating '${MEDIA_TYPE_NAME}' webhook media type..." + RESULT=$(zabbix_api "mediatype.create" "{ + \"name\": \"${MEDIA_TYPE_NAME}\", + \"type\": \"4\", + \"script\": ${WEBHOOK_JS_ESCAPED}, + \"parameters\": ${PARAMETERS}, + \"timeout\": \"30s\", + \"process_tags\": \"0\", + \"description\": \"Posts Zabbix alerts directly to StackStorm API webhook endpoint.\" + }") + MEDIA_TYPE_ID=$(echo "${RESULT}" | python3 -c "import sys,json; print(json.load(sys.stdin)['mediatypeids'][0])") + echo "Media type created (ID: ${MEDIA_TYPE_ID})." +fi + +# Add media to Admin user +echo "Configuring media on user ID ${ZABBIX_ADMIN_USER_ID}..." +EXISTING_MEDIA=$(zabbix_api "user.get" "{\"userids\": \"${ZABBIX_ADMIN_USER_ID}\", \"selectMedias\": \"extend\"}") +HAS_MEDIA=$(echo "${EXISTING_MEDIA}" | python3 -c " +import sys, json +users = json.load(sys.stdin) +if users: + for m in users[0].get('medias', []): + if m.get('mediatypeid') == '${MEDIA_TYPE_ID}': + print('yes') + break +" 2>/dev/null || true) + +if [[ "${HAS_MEDIA}" != "yes" ]]; then + # Get current medias and append new one + CURRENT_MEDIAS=$(echo "${EXISTING_MEDIA}" | python3 -c " +import sys, json +users = json.load(sys.stdin) +medias = users[0].get('medias', []) if users else [] +# Strip mediaid so Zabbix treats them as new entries during update +for m in medias: + m.pop('mediaid', None) + m.pop('userid', None) +medias.append({ + 'mediatypeid': '${MEDIA_TYPE_ID}', + 'sendto': 'stackstorm', + 'active': '0', + 'severity': '63', + 'period': '1-7,00:00-24:00' +}) +print(json.dumps(medias)) +") + zabbix_api "user.update" "{ + \"userid\": \"${ZABBIX_ADMIN_USER_ID}\", + \"medias\": ${CURRENT_MEDIAS} + }" > /dev/null + echo "Media assigned to user." +else + echo "Media already assigned to user." +fi + +echo "" +echo "=== Registration Complete ===" +echo "Media Type: ${MEDIA_TYPE_NAME} (ID: ${MEDIA_TYPE_ID})" +echo "Webhook URL: ${ST2_API_URL}/api/v1/webhooks/st2" +echo "" +echo "Next steps:" +echo " 1. Create a Zabbix Action (Alerts > Actions > Trigger actions) that" +echo " uses this media type to send notifications on problem events." +echo " 2. Ensure the StackStorm zabbix.event_handler trigger is registered" +echo " and rules are configured to process incoming alerts." diff --git a/spec/localhost/tools_register_config_for_st2_spec.rb b/spec/localhost/tools_register_config_for_st2_spec.rb deleted file mode 100644 index 28aedec..0000000 --- a/spec/localhost/tools_register_config_for_st2_spec.rb +++ /dev/null @@ -1,52 +0,0 @@ -require 'zbxapi' -require 'spec_helper' - -ZABBIX_USER = ENV['ZABBIX_USER'] || 'admin' -ZABBIX_SENDTO = ENV['ZABBIX_SENDTO'] || 'admin' -ZABBIX_PASSWORD = ENV['ZABBIX_PASSWORD'] || 'zabbix' -ZABBIX_API_ENDPOINT = ENV['ZABBIX_API'] || 'http://localhost/' - -describe 'Tests for registering Zabbix for StackStorm' do - before(:all) do - @client = ZabbixAPI.new(ZABBIX_API_ENDPOINT) - - expect(try_to_login).not_to be_a(RuntimeError) - end - - # run script to register configurations for StackStorm to the Zabbix - describe command("tools/register_st2_config_to_zabbix.py " \ - "-u #{ ZABBIX_USER } " \ - "-s #{ ZABBIX_SENDTO } " \ - "-p #{ ZABBIX_PASSWORD } " \ - "-z #{ ZABBIX_API_ENDPOINT }") do - its(:exit_status) { should eq 0 } - its(:stdout) do - should match /^Success to register the configurations for StackStorm to the Zabbix Server./ - end - - describe 'Check each configurations are actually set in the Zabbix' do - it 'MediaType configuration is set' do - expect(@client.mediatype.get.find {|x| x['description'] == 'StackStorm'}).to_not be_nil - end - - it 'Action configuration is set' do - expect(@client.action.get.find { |x| x['name'].include?('StackStorm')}).to_not be_nil - end - end - end - - # This method wait to start and initialize Zabbix-server and Zabbix-Web - def try_to_login(retry_count = 0) - begin - return @client.login('admin', 'zabbix') - rescue => e - if retry_count < 60 - # make a delay before retrying - sleep 1 - return try_to_login(retry_count + 1) - else - return e - end - end - end -end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb deleted file mode 100644 index 677ae95..0000000 --- a/spec/spec_helper.rb +++ /dev/null @@ -1,4 +0,0 @@ -require 'serverspec' - -set :backend, :exec - diff --git a/tests/README.md b/tests/README.md new file mode 100644 index 0000000..9661d46 --- /dev/null +++ b/tests/README.md @@ -0,0 +1,277 @@ +# Tests + +This document describes how the test suite is structured, how to run it, and how to add new tests. + +--- + +## Running Tests + +From the pack root (`stackstorm-zabbix/`): + +```bash +# Run all tests +python3 -m pytest tests/ -v + +# Run a single test file +python3 -m pytest tests/test_call_api.py -v + +# Run a specific test +python3 -m pytest tests/test_find_object.py::FindObjectTestCase::test_find_single_host -v +``` + +### Prerequisites + +- Python 3.12+ +- Virtual environment with dependencies installed: + +```bash +pip install -r requirements.txt +``` + +The `requirements.txt` includes `st2common` (provides the test base class) and `zabbix-utils`. + +--- + +## Architecture + +### Path Setup + +The `conftest.py` at the pack root adds `actions/` and `tests/` to `sys.path`. This mirrors how StackStorm resolves imports at runtime — action Python files import from `lib.actions` as a relative path, and tests import action classes directly by module name. + +```python +# conftest.py +sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'actions')) +sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'tests')) +``` + +### Base Test Class + +All tests extend `ZabbixBaseActionTestCase` (defined in `zabbix_base_action_test_case.py`): + +```python +from zabbix_base_action_test_case import ZabbixBaseActionTestCase +from my_action import MyAction + +class MyActionTestCase(ZabbixBaseActionTestCase): + __test__ = True + action_cls = MyAction +``` + +This base class: +- Extends `st2tests.base.BaseActionTestCase` (provides `get_action_instance()`, `get_fixture_content()`) +- Loads fixture configs in `setUp()`: `self.full_config` and `self.blank_config` +- Provides `load_yaml()` and `load_json()` helpers for fixture files + +### Key Attributes + +| Attribute | Purpose | +|-----------|---------| +| `__test__ = True` | Tells pytest to collect this class (set `False` on base classes) | +| `action_cls = MyAction` | The action class under test — required by `get_action_instance()` | +| `self.full_config` | Valid Zabbix config (URL + credentials) loaded from `fixtures/full.yaml` | +| `self.blank_config` | Empty config — triggers `ValueError` on action instantiation | + +--- + +## Fixtures + +Located in `tests/fixtures/`: + +| File | Purpose | +|------|---------| +| `full.yaml` | Symlink to `../../zabbix.yaml.example` — valid pack config with URL, username, password | +| `token.yaml` | Config with API token auth — tests token-based authentication path | +| `blank.yaml` | Empty YAML — used to test config validation errors | + +Add new fixture files here for complex test scenarios (JSON responses, multi-host data, etc.). + +--- + +## Test Patterns + +### Pattern 1: Testing a dedicated Python action + +```python +import mock + +from zabbix_base_action_test_case import ZabbixBaseActionTestCase +from my_action import MyAction + +from zabbix_utils.exceptions import APIRequestError + + +class MyActionTestCase(ZabbixBaseActionTestCase): + __test__ = True + action_cls = MyAction + + @mock.patch('lib.actions.ZabbixBaseAction.connect') + def test_happy_path(self, mock_connect): + action = self.get_action_instance(self.full_config) + action.client = mock.Mock() + action.client.host.get.return_value = [{'hostid': '10084'}] + + result = action.run(hostname='myhost') + self.assertEqual(result, '10084') + + @mock.patch('lib.actions.ZabbixBaseAction.connect') + def test_not_found_raises(self, mock_connect): + action = self.get_action_instance(self.full_config) + action.client = mock.Mock() + action.client.host.get.return_value = [] + + with self.assertRaises(ValueError): + action.run(hostname='nonexistent') + + @mock.patch('lib.actions.ZabbixBaseAction.connect') + def test_api_error_propagates(self, mock_connect): + action = self.get_action_instance(self.full_config) + action.client = mock.Mock() + action.client.host.get.side_effect = APIRequestError('server error') + + with self.assertRaises(APIRequestError): + action.run(hostname='myhost') +``` + +### Pattern 2: Testing connection failures + +```python +@mock.patch('lib.actions.ZabbixBaseAction.connect') +def test_connection_error(self, mock_connect): + action = self.get_action_instance(self.full_config) + mock_connect.side_effect = ProcessingError('connection error') + + with self.assertRaises(ProcessingError): + action.run(hostname='test') +``` + +### Pattern 3: Testing config validation + +```python +def test_blank_config_raises(self): + self.assertRaises(ValueError, self.action_cls, self.blank_config) +``` + +### Pattern 4: Mocking multi-level API calls + +For `call_api.py` style tests where the API path is dotted (e.g. `host.get`): + +```python +@mock.patch('lib.actions.ZabbixBaseAction.connect') +def test_dotted_method(self, mock_connect): + action = self.get_action_instance(self.full_config) + action.client = mock.Mock(spec=['host']) + action.client.host = mock.Mock(spec=['get']) + action.client.host.get.return_value = [{'hostid': '1'}] + + result = action.run(api_method='host.get', filter={'host': 'test'}) + self.assertEqual(result, [{'hostid': '1'}]) +``` + +### Pattern 5: Testing helper methods on the base class + +```python +@mock.patch('lib.actions.ZabbixAPI') +def test_find_host(self, mock_client): + action = self.get_action_instance(self.full_config) + mock_client.host.get.return_value = [{'hostid': '1', 'host': 'test'}] + action.client = mock_client + + result = action.find_host('test') + self.assertEqual(result, '1') +``` + +--- + +## Mocking Strategy + +### Always mock `connect()` + +Every test that calls `action.run()` must mock `ZabbixBaseAction.connect` to prevent real network calls: + +```python +@mock.patch('lib.actions.ZabbixBaseAction.connect') +def test_something(self, mock_connect): + ... +``` + +### Mock `self.client` directly + +After mocking `connect()`, set `action.client` to a `mock.Mock()` to control API responses: + +```python +action = self.get_action_instance(self.full_config) +action.client = mock.Mock() +action.client.host.get.return_value = [...] +``` + +### Mock helper methods when testing higher-level logic + +If an action calls `self.find_host()`, mock it to isolate the test: + +```python +action.find_host = mock.MagicMock(return_value='10084') +``` + +--- + +## What to Test + +Each test file should cover: + +| Category | What to Assert | +|----------|---------------| +| **Happy path** | Correct return value, correct API method called with expected args | +| **Not found** | `ValueError` raised when lookup yields no results | +| **Multiple found** | `ValueError` raised when unique lookup is ambiguous | +| **API errors** | `APIRequestError` propagates (or re-raises with context) | +| **Connection errors** | `ProcessingError` propagates | +| **Edge cases** | `None` parameters filtered, empty lists handled, boundary values | + +### Coverage goals + +- Every dedicated Python action file (`actions/*.py`) must have a corresponding `tests/test_*.py` +- YAML-only actions (using `call_api.py`) do NOT need individual tests — they are covered by `test_call_api.py` which validates the dispatcher logic +- Base class helpers are tested in `test_action_base.py` + +--- + +## Adding a New Test File + +1. Create `tests/test_.py` +2. Import the action class and base test case: + +```python +import mock +from zabbix_base_action_test_case import ZabbixBaseActionTestCase +from my_action import MyAction +``` + +3. Define the test class: + +```python +class MyActionTestCase(ZabbixBaseActionTestCase): + __test__ = True + action_cls = MyAction +``` + +4. Write tests covering happy path, error cases, and edge cases +5. Run and verify: + +```bash +python3 -m pytest tests/test_my_action.py -v +``` + +--- + +## File Naming + +| Convention | Example | +|------------|---------| +| Test file | `test_.py` | +| Test class | `TestCase` | +| Test method | `test_` | + +The test filename maps to the Python entry point it tests, **not** the YAML action name. For example: +- `call_api.py` → `test_call_api.py` +- `find_object.py` → `test_find_object.py` +- `delete_host.py` → `test_delete_host.py` diff --git a/tests/fixtures/token.yaml b/tests/fixtures/token.yaml new file mode 100644 index 0000000..9192909 --- /dev/null +++ b/tests/fixtures/token.yaml @@ -0,0 +1,3 @@ +--- +url: http://localhost:8080 +api_token: my-test-token-12345 diff --git a/tests/test_acknowledge_event.py b/tests/test_acknowledge_event.py new file mode 100644 index 0000000..1ac49e4 --- /dev/null +++ b/tests/test_acknowledge_event.py @@ -0,0 +1,42 @@ +import mock + +from zabbix_base_action_test_case import ZabbixBaseActionTestCase +from acknowledge_event import AcknowledgeEvent + +from zabbix_utils.exceptions import APIRequestError + + +class AcknowledgeEventTestCase(ZabbixBaseActionTestCase): + __test__ = True + action_cls = AcknowledgeEvent + + @mock.patch('lib.actions.ZabbixBaseAction.connect') + def test_acknowledge_with_close(self, mock_connect): + action = self.get_action_instance(self.full_config) + action.client = mock.Mock() + action.client.event.acknowledge.return_value = {'eventids': ['123']} + + result = action.run(eventid='123', message='Fixed', will_close=True) + action.client.event.acknowledge.assert_called_with( + eventids='123', message='Fixed', action=1) + self.assertEqual(result, {'eventids': ['123']}) + + @mock.patch('lib.actions.ZabbixBaseAction.connect') + def test_acknowledge_without_close(self, mock_connect): + action = self.get_action_instance(self.full_config) + action.client = mock.Mock() + action.client.event.acknowledge.return_value = {'eventids': ['456']} + + result = action.run(eventid='456', message='Acknowledged', will_close=False) + action.client.event.acknowledge.assert_called_with( + eventids='456', message='Acknowledged', action=0) + self.assertEqual(result, {'eventids': ['456']}) + + @mock.patch('lib.actions.ZabbixBaseAction.connect') + def test_acknowledge_api_error(self, mock_connect): + action = self.get_action_instance(self.full_config) + action.client = mock.Mock() + action.client.event.acknowledge.side_effect = APIRequestError('failed') + + with self.assertRaises(APIRequestError): + action.run(eventid='789', message='test') diff --git a/tests/test_action_base.py b/tests/test_action_base.py index 4ed668d..c35df22 100644 --- a/tests/test_action_base.py +++ b/tests/test_action_base.py @@ -1,200 +1,264 @@ import mock from zabbix_base_action_test_case import ZabbixBaseActionTestCase -from event_action_runner import EventActionRunner +from verify_credentials import VerifyCredentials -from six.moves.urllib.error import URLError -from pyzabbix.api import ZabbixAPIException +from zabbix_utils.exceptions import ProcessingError +from zabbix_utils.exceptions import APIRequestError -class EventActionTestCase(ZabbixBaseActionTestCase): +class BaseActionTestCase(ZabbixBaseActionTestCase): __test__ = True - action_cls = EventActionRunner + action_cls = VerifyCredentials def test_run_action_without_configuration(self): self.assertRaises(ValueError, self.action_cls, self.blank_config) - @mock.patch('lib.actions.ZabbixAPI') - def test_run_action_with_invalid_config_of_endpoint(self, mock_client): - # make an exception that means failure to connect server. - mock_client.side_effect = URLError('connection error') + def test_init_with_token_only_config(self): + action = self.get_action_instance(self.token_config) + self.assertIsNotNone(action) - action = self.get_action_instance(self.full_config) + def test_init_missing_auth(self): + config = {"url": "http://localhost:8080"} + with self.assertRaises(ValueError): + self.action_cls(config) - with self.assertRaises(URLError): - action.run(action='something') + def test_init_empty_username(self): + config = {"url": "http://localhost:8080", "username": "", "password": "zabbix"} + with self.assertRaises(ValueError): + self.action_cls(config) - @mock.patch('lib.actions.ZabbixAPI') - def test_run_action_with_invalid_config_of_account(self, mock_client): - # make an exception that means failure to authenticate with Zabbix-server. - mock_client.side_effect = ZabbixAPIException('auth error') + def test_init_empty_password(self): + config = {"url": "http://localhost:8080", "username": "Admin", "password": ""} + with self.assertRaises(ValueError): + self.action_cls(config) - action = self.get_action_instance(self.full_config) + def test_init_none_credentials(self): + config = {"url": "http://localhost:8080", "username": None, "password": None} + with self.assertRaises(ValueError): + self.action_cls(config) - with self.assertRaises(ZabbixAPIException): - action.run(action='something') + @mock.patch("lib.actions.ZabbixAPI") + def test_connect_with_token(self, mock_zabbix_cls): + mock_client = mock.Mock() + mock_zabbix_cls.return_value = mock_client - @mock.patch('lib.actions.ZabbixAPI') - def test_run_action_with_invalid_config_of_action(self, mock_client): - mock_obj = mock.Mock() - mock_obj.invalid = [] + action = self.get_action_instance(self.token_config) + action.connect() - mock_client.return_value = mock_obj + mock_zabbix_cls.assert_called_with(url="http://localhost:8080") + mock_client.login.assert_called_once_with(token="my-test-token-12345") + + @mock.patch("lib.actions.ZabbixAPI") + def test_connect_with_username_password(self, mock_zabbix_cls): + mock_client = mock.Mock() + mock_zabbix_cls.return_value = mock_client action = self.get_action_instance(self.full_config) - result = action.run(action='invalid.action') + action.connect() - self.assertFalse(result[0]) - self.assertEqual(result[1], "Specified action(invalid.action) is invalid") + mock_client.login.assert_called_once_with(user="Admin", password="zabbix") - @mock.patch('lib.actions.ZabbixAPI') - def test_run_action_with_valid_config(self, mock_client): - def mock_double(param): - return param * 2 + @mock.patch("lib.actions.ZabbixAPI") + def test_run_action_with_invalid_config_of_endpoint(self, mock_client): + mock_client.side_effect = ProcessingError("connection error") - mock_handler = mock.Mock() - mock_handler.double = mock.Mock(side_effect=mock_double) + action = self.get_action_instance(self.full_config) - mock_obj = mock.Mock() - mock_obj.action = mock_handler + with self.assertRaises(ProcessingError): + action.run() - mock_client.return_value = mock_obj + @mock.patch("lib.actions.ZabbixAPI") + def test_run_action_with_invalid_config_of_account(self, mock_client): + mock_client.side_effect = APIRequestError("auth error") action = self.get_action_instance(self.full_config) - result = action.run(action='action.double', param=4) - self.assertTrue(result[0]) - self.assertEqual(result[1], 8) + with self.assertRaises(APIRequestError): + action.run() - @mock.patch('lib.actions.ZabbixAPI') + @mock.patch("lib.actions.ZabbixAPI") def test_find_host(self, mock_client): action = self.get_action_instance(self.full_config) - test_dict = {'host_name': "test", 'hostid': "1"} + test_dict = {"host_name": "test", "hostid": "1"} mock_client.host.get.return_value = [test_dict] action.client = mock_client - result = action.find_host(test_dict['host_name']) - self.assertEqual(result, test_dict['hostid']) + result = action.find_host(test_dict["host_name"]) + self.assertEqual(result, test_dict["hostid"]) - @mock.patch('lib.actions.ZabbixAPI') + @mock.patch("lib.actions.ZabbixAPI") def test_find_host_no_host(self, mock_client): action = self.get_action_instance(self.full_config) - test_dict = {'host_name': "test", 'host_id': "1"} + test_dict = {"host_name": "test", "host_id": "1"} mock_client.host.get.return_value = [] action.client = mock_client with self.assertRaises(ValueError): - action.find_host(test_dict['host_name']) + action.find_host(test_dict["host_name"]) - @mock.patch('lib.actions.ZabbixAPI') + @mock.patch("lib.actions.ZabbixAPI") def test_find_host_too_many_host(self, mock_client): action = self.get_action_instance(self.full_config) - test_dict = [{'host_name': "test", 'hostid': "1"}, - {'host_name': "test", 'hostid': "2"}] + test_dict = [ + {"host_name": "test", "hostid": "1"}, + {"host_name": "test", "hostid": "2"}, + ] mock_client.host.get.return_value = test_dict action.client = mock_client with self.assertRaises(ValueError): - action.find_host(test_dict[0]['host_name']) + action.find_host(test_dict[0]["host_name"]) - @mock.patch('lib.actions.ZabbixAPI') + @mock.patch("lib.actions.ZabbixAPI") def test_find_host_fail(self, mock_client): action = self.get_action_instance(self.full_config) - test_dict = {'host_name': "test", 'hostid': "1"} - mock_client.host.get.side_effect = ZabbixAPIException('host error') + test_dict = {"host_name": "test", "hostid": "1"} + mock_client.host.get.side_effect = APIRequestError("host error") mock_client.host.get.return_value = [test_dict] action.client = mock_client - with self.assertRaises(ZabbixAPIException): - action.find_host(test_dict['host_name']) + with self.assertRaises(APIRequestError): + action.find_host(test_dict["host_name"]) - @mock.patch('lib.actions.ZabbixAPI') + @mock.patch("lib.actions.ZabbixAPI") def test_maintenance_get(self, mock_client): action = self.get_action_instance(self.full_config) - test_dict = {'maintenance_name': "test", 'maintenanceid': "1"} + test_dict = {"maintenance_name": "test", "maintenanceid": "1"} mock_client.maintenance.get.return_value = [test_dict] action.client = mock_client - result = action.maintenance_get(test_dict['maintenance_name']) + result = action.maintenance_get(test_dict["maintenance_name"]) self.assertEqual(result, [test_dict]) - @mock.patch('lib.actions.ZabbixAPI') + @mock.patch("lib.actions.ZabbixAPI") def test_maintenance_get_fail(self, mock_client): action = self.get_action_instance(self.full_config) - test_dict = {'maintenance_name': "test", 'maintenanceid': "1"} - mock_client.maintenance.get.side_effect = ZabbixAPIException('maintenance error') + test_dict = {"maintenance_name": "test", "maintenanceid": "1"} + mock_client.maintenance.get.side_effect = APIRequestError("maintenance error") mock_client.maintenance.get.return_value = [test_dict] action.client = mock_client - with self.assertRaises(ZabbixAPIException): - action.maintenance_get(test_dict['maintenance_name']) + with self.assertRaises(APIRequestError): + action.maintenance_get(test_dict["maintenance_name"]) - @mock.patch('lib.actions.ZabbixBaseAction.maintenance_get') - @mock.patch('lib.actions.ZabbixAPI') - def test_maintenance_create_or_update_update(self, mock_client, mock_maintenance_get): + @mock.patch("lib.actions.ZabbixBaseAction.maintenance_get") + @mock.patch("lib.actions.ZabbixAPI") + def test_maintenance_create_or_update_update( + self, mock_client, mock_maintenance_get + ): action = self.get_action_instance(self.full_config) - test_dict = {'name': "test"} - maintenance_dict = {'maintenance_name': "test", 'maintenanceid': "1"} + test_dict = {"name": "test"} + maintenance_dict = {"maintenance_name": "test", "maintenanceid": "1"} mock_maintenance_get.return_value = [maintenance_dict] - mock_client.maintenance.update.return_value = [maintenance_dict['maintenanceid']] + mock_client.maintenance.update.return_value = [ + maintenance_dict["maintenanceid"] + ] action.client = mock_client result = action.maintenance_create_or_update(test_dict) - self.assertEqual(result, [maintenance_dict['maintenanceid']]) + self.assertEqual(result, [maintenance_dict["maintenanceid"]]) - @mock.patch('lib.actions.ZabbixBaseAction.maintenance_get') - @mock.patch('lib.actions.ZabbixAPI') - def test_maintenance_create_or_update_update_fail(self, mock_client, mock_maintenance_get): + @mock.patch("lib.actions.ZabbixBaseAction.maintenance_get") + @mock.patch("lib.actions.ZabbixAPI") + def test_maintenance_create_or_update_update_fail( + self, mock_client, mock_maintenance_get + ): action = self.get_action_instance(self.full_config) - test_dict = {'name': "test"} - maintenance_dict = {'maintenance_name': "test", 'maintenanceid': "1"} + test_dict = {"name": "test"} + maintenance_dict = {"maintenance_name": "test", "maintenanceid": "1"} mock_maintenance_get.return_value = [maintenance_dict] - mock_client.maintenance.update.return_value = [maintenance_dict['maintenanceid']] - mock_client.maintenance.update.side_effect = ZabbixAPIException('maintenance error') + mock_client.maintenance.update.return_value = [ + maintenance_dict["maintenanceid"] + ] + mock_client.maintenance.update.side_effect = APIRequestError( + "maintenance error" + ) action.client = mock_client - with self.assertRaises(ZabbixAPIException): + with self.assertRaises(APIRequestError): action.maintenance_create_or_update(test_dict) - @mock.patch('lib.actions.ZabbixBaseAction.maintenance_get') - @mock.patch('lib.actions.ZabbixAPI') - def test_maintenance_create_or_update_create(self, mock_client, mock_maintenance_get): + @mock.patch("lib.actions.ZabbixBaseAction.maintenance_get") + @mock.patch("lib.actions.ZabbixAPI") + def test_maintenance_create_or_update_create( + self, mock_client, mock_maintenance_get + ): action = self.get_action_instance(self.full_config) - test_dict = {'name': "test"} - maintenance_dict = {'maintenance_name': "test", 'maintenanceid': "1"} + test_dict = {"name": "test"} + maintenance_dict = {"maintenance_name": "test", "maintenanceid": "1"} mock_maintenance_get.return_value = [] - mock_client.maintenance.create.return_value = [maintenance_dict['maintenanceid']] + mock_client.maintenance.create.return_value = [ + maintenance_dict["maintenanceid"] + ] action.client = mock_client result = action.maintenance_create_or_update(test_dict) - self.assertEqual(result, [maintenance_dict['maintenanceid']]) + self.assertEqual(result, [maintenance_dict["maintenanceid"]]) - @mock.patch('lib.actions.ZabbixBaseAction.maintenance_get') - @mock.patch('lib.actions.ZabbixAPI') - def test_maintenance_create_or_update_create_fail(self, mock_client, mock_maintenance_get): + @mock.patch("lib.actions.ZabbixBaseAction.maintenance_get") + @mock.patch("lib.actions.ZabbixAPI") + def test_maintenance_create_or_update_create_fail( + self, mock_client, mock_maintenance_get + ): action = self.get_action_instance(self.full_config) - test_dict = {'name': "test"} - maintenance_dict = {'maintenance_name': "test", 'maintenanceid': "1"} + test_dict = {"name": "test"} + maintenance_dict = {"maintenance_name": "test", "maintenanceid": "1"} mock_maintenance_get.return_value = [] - mock_client.maintenance.create.return_value = [maintenance_dict['maintenanceid']] - mock_client.maintenance.create.side_effect = ZabbixAPIException('maintenance error') + mock_client.maintenance.create.return_value = [ + maintenance_dict["maintenanceid"] + ] + mock_client.maintenance.create.side_effect = APIRequestError( + "maintenance error" + ) action.client = mock_client - with self.assertRaises(ZabbixAPIException): + with self.assertRaises(APIRequestError): action.maintenance_create_or_update(test_dict) - @mock.patch('lib.actions.ZabbixBaseAction.maintenance_get') - @mock.patch('lib.actions.ZabbixAPI') - def test_maintenance_create_or_update_too_many_maintenance_windows(self, - mock_client, - mock_maintenance_get): + @mock.patch("lib.actions.ZabbixBaseAction.maintenance_get") + @mock.patch("lib.actions.ZabbixAPI") + def test_maintenance_create_or_update_too_many_maintenance_windows( + self, mock_client, mock_maintenance_get + ): action = self.get_action_instance(self.full_config) - test_dict = {'name': "test"} - maintenance_dict = [{'maintenance_name': "test", 'maintenanceid': "1"}, - {'maintenance_name': "test", 'maintenanceid': "2"}] + test_dict = {"name": "test"} + maintenance_dict = [ + {"maintenance_name": "test", "maintenanceid": "1"}, + {"maintenance_name": "test", "maintenanceid": "2"}, + ] mock_maintenance_get.return_value = maintenance_dict - mock_client.maintenance.create.return_value = maintenance_dict[0]['maintenanceid'] + mock_client.maintenance.create.return_value = maintenance_dict[0][ + "maintenanceid" + ] action.client = mock_client with self.assertRaises(ValueError): action.maintenance_create_or_update(test_dict) + + @mock.patch("lib.actions.ZabbixAPI") + def test_host_get_extended(self, mock_client): + action = self.get_action_instance(self.full_config) + mock_client.host.get.return_value = [ + {"hostid": "1", "interfaces": [{"interfaceid": "10"}]} + ] + action.client = mock_client + + result = action.host_get_extended( + "1", "selectInterfaces", ["hostid", "interfaces"] + ) + self.assertEqual( + result, [{"hostid": "1", "interfaces": [{"interfaceid": "10"}]}] + ) + mock_client.host.get.assert_called_with( + hostids="1", selectInterfaces="extend", output=["hostid", "interfaces"] + ) + + @mock.patch("lib.actions.ZabbixAPI") + def test_host_get_extended_api_error(self, mock_client): + action = self.get_action_instance(self.full_config) + mock_client.host.get.side_effect = APIRequestError("host error") + action.client = mock_client + + with self.assertRaises(APIRequestError): + action.host_get_extended("1", "selectInterfaces", ["hostid", "interfaces"]) diff --git a/tests/test_call_api.py b/tests/test_call_api.py index 9b051c7..2eeaac7 100644 --- a/tests/test_call_api.py +++ b/tests/test_call_api.py @@ -8,68 +8,56 @@ class CallAPITest(ZabbixBaseActionTestCase): __test__ = True action_cls = CallAPI - @mock.patch('lib.actions.ZabbixBaseAction.connect') - def test_run_action_without_token(self, mock_conn): + @mock.patch("lib.actions.ZabbixBaseAction.connect") + def test_run_action(self, mock_conn): action = self.get_action_instance(self.full_config) - # This is a mock of calling API 'hoge' action.client = mock.Mock() - action.client.hoge.return_value = 'result' + action.client.hoge.return_value = "result" - # This checks that a method which is specified in the api_method parameter would be called - self.assertEqual(action.run(api_method='hoge', token=None, param='foo'), 'result') + self.assertEqual(action.run(api_method="hoge", param="foo"), "result") - @mock.patch('call_api.ZabbixAPI') - def test_run_action_with_token(self, mock_client): - action = self.get_action_instance(self.full_config) - - # This is a mock of calling API 'hoge' to confirm that - # specified parameters would be passed correctly. - def side_effect(*args, **kwargs): - return (args, kwargs) - - _mock_client = mock.Mock() - _mock_client.hoge.side_effect = side_effect - mock_client.return_value = _mock_client - - # This checks that specified parameter and access token would be set expectedly - result = action.run(api_method='hoge', token='test_token', param='foo') - self.assertEqual(result, ((), {'param': 'foo'})) - self.assertEqual(action.auth, 'test_token') - - @mock.patch('lib.actions.ZabbixBaseAction.connect') + @mock.patch("lib.actions.ZabbixBaseAction.connect") def test_call_hierarchized_method(self, mock_conn): action = self.get_action_instance(self.full_config) - # Initialize client object that only accepts request to 'foo.bar' method. - action.client = mock.Mock(spec=['foo']) - action.client.foo = mock.Mock(spec=['bar']) - action.client.foo.bar.return_value = 'result' + action.client = mock.Mock(spec=["foo"]) + action.client.foo = mock.Mock(spec=["bar"]) + action.client.foo.bar.return_value = "result" - # Send request with proper parameter - self.assertEqual(action.run(api_method='foo.bar', token=None, param='hoge'), 'result') + self.assertEqual(action.run(api_method="foo.bar", param="hoge"), "result") - # Send request with invalid api_method with self.assertRaises(RuntimeError): - action.run(api_method='foo.hoge', token=None, param='hoge') + action.run(api_method="foo.hoge", param="hoge") - @mock.patch('call_api.ZabbixAPI') - def test_run_action_with_empty_parameters(self, mock_client): + @mock.patch("lib.actions.ZabbixBaseAction.connect") + def test_run_action_with_empty_parameters(self, mock_conn): action = self.get_action_instance(self.full_config) - # This is a mock of calling API 'hoge' to confirm that - # params with a value of None (p0) are removed prior to execution - # Should not remove [ '123', False, {}, [], 0 ] def side_effect(*args, **kwargs): return (args, kwargs) - _mock_client = mock.Mock() - _mock_client.hoge.side_effect = side_effect - mock_client.return_value = _mock_client + action.client = mock.Mock() + action.client.hoge.side_effect = side_effect + + result = action.run( + api_method="hoge", + **{"p0": None, "p1": "123", "p2": False, "p3": {}, "p4": [], "p5": 0} + ) + self.assertEqual( + result, ((), {"p1": "123", "p2": False, "p3": {}, "p4": [], "p5": 0}) + ) + action.client.hoge.assert_called_with( + **{"p1": "123", "p2": False, "p3": {}, "p4": [], "p5": 0} + ) + + @mock.patch("lib.actions.ZabbixBaseAction.connect") + def test_run_with_params_list(self, mock_conn): + action = self.get_action_instance(self.full_config) + + action.client = mock.Mock() + action.client.host.delete.return_value = {"hostids": ["10084"]} - result = action.run(api_method='hoge', token='test_token', - **{'p0': None, 'p1': '123', 'p2': False, 'p3': {}, 'p4': [], 'p5': 0}) - self.assertEqual(result, ((), - {'p1': '123', 'p2': False, 'p3': {}, 'p4': [], 'p5': 0})) - _mock_client.hoge.assert_called_with( - **{'p1': '123', 'p2': False, 'p3': {}, 'p4': [], 'p5': 0}) + result = action.run(api_method="host.delete", params_list=["10084", "10085"]) + action.client.host.delete.assert_called_with("10084", "10085") + self.assertEqual(result, {"hostids": ["10084"]}) diff --git a/tests/test_create_host.py b/tests/test_create_host.py index dc1024f..b501bd3 100644 --- a/tests/test_create_host.py +++ b/tests/test_create_host.py @@ -35,13 +35,11 @@ def side_effect_connect(): self._check_data['password_authentication'] = True mock_connect.side_effect = side_effect_connect - # set mock client to AirOne action = self.get_action_instance(self.full_config) action.client = self._mock_client - (result, data) = action.run(name='test-host', groups=[], domains=['example.com']) - self.assertTrue(result) - self.assertEqual(data, {'hostids': ['1234']}) + result = action.run(name='test-host', groups=[], domains=['example.com']) + self.assertEqual(result, {'hostids': ['1234']}) self.assertTrue(self._check_data['password_authentication']) self.assertFalse('is_set_proxy' in self._check_data) self.assertEqual(self._check_data['interfaces'], [{ @@ -61,29 +59,36 @@ def side_effect_connect(): self.assertEqual([x['main'] for x in ifdata if x['dns'] == 'foo.test'], [0]) self.assertEqual([x['main'] for x in ifdata if x['dns'] == 'bar.test'], [1]) - @mock.patch('create_host.ZabbixAPI') @mock.patch('lib.actions.ZabbixBaseAction.connect') - def test_create_host_with_token_and_proxy(self, mock_connect, mock_client): - def side_effect(): - self._check_data['password_authentication'] = True - mock_connect.side_effect = side_effect - - # set mock client to AirOne - mock_client.return_value = self._mock_client + def test_create_host_with_proxy(self, mock_connect): action = self.get_action_instance(self.full_config) + action.client = self._mock_client - (result, data) = action.run(name='test-host', groups=[], domains=['example.com'], - token='token', proxy_host='proxy') - self.assertTrue(result) - self.assertEqual(data, {'hostids': ['1234']}) - self.assertFalse('password_authentication' in self._check_data) + result = action.run(name='test-host', groups=[], domains=['example.com'], + proxy_host='proxy') + self.assertEqual(result, {'hostids': ['1234']}) self.assertTrue(self._check_data['is_set_proxy']) @mock.patch('lib.actions.ZabbixBaseAction.connect') def test_create_host_without_interface_information(self, mock_connect): action = self.get_action_instance(self.full_config) action.client = self._mock_client - (result, data) = action.run(name='test-host', groups=[]) - self.assertFalse(result) - self.assertEqual(data, 'You have to IP address or domain value at least one.') + with self.assertRaises(ValueError): + action.run(name='test-host', groups=[]) + + @mock.patch('lib.actions.ZabbixBaseAction.connect') + def test_create_host_with_ip(self, mock_connect): + action = self.get_action_instance(self.full_config) + action.client = self._mock_client + + result = action.run(name='test-host', groups=[], ipaddrs=['192.168.1.1']) + self.assertEqual(result, {'hostids': ['1234']}) + self.assertEqual(self._check_data['interfaces'], [{ + 'type': 1, + 'main': 1, + 'useip': 1, + 'dns': '', + 'ip': '192.168.1.1', + 'port': '10050' + }]) diff --git a/tests/test_create_or_update_maintenance.py b/tests/test_create_or_update_maintenance.py new file mode 100644 index 0000000..1f6648a --- /dev/null +++ b/tests/test_create_or_update_maintenance.py @@ -0,0 +1,92 @@ +import mock + +from zabbix_base_action_test_case import ZabbixBaseActionTestCase +from create_or_update_maintenance import MaintenanceCreateOrUpdate + +from zabbix_utils.exceptions import ProcessingError +from zabbix_utils.exceptions import APIRequestError + + +class MaintenanceCreateOrUpdateTestCase(ZabbixBaseActionTestCase): + __test__ = True + action_cls = MaintenanceCreateOrUpdate + + @mock.patch("lib.actions.ZabbixBaseAction.connect") + def test_run_connection_error(self, mock_connect): + action = self.get_action_instance(self.full_config) + mock_connect.side_effect = ProcessingError("connection error") + test_dict = { + "hostname": "test", + "time_type": 0, + "maintenance_window_name": "test", + "maintenance_type": 0, + "start_date": "2017-11-14 10:40", + "end_date": "2017-11-14 10:45", + } + + with self.assertRaises(ProcessingError): + action.run(**test_dict) + + @mock.patch("lib.actions.ZabbixBaseAction.connect") + def test_run_host_error(self, mock_connect): + action = self.get_action_instance(self.full_config) + mock_connect.return_vaue = "connect return" + test_dict = { + "hostname": "test", + "time_type": 0, + "maintenance_window_name": "test", + "maintenance_type": 0, + "start_date": "2017-11-14 10:40", + "end_date": "2017-11-14 10:45", + } + action.find_host = mock.MagicMock(side_effect=APIRequestError("host error")) + action.connect = mock_connect + + with self.assertRaises(APIRequestError): + action.run(**test_dict) + + @mock.patch("lib.actions.ZabbixBaseAction.connect") + def test_run_maintenance_error(self, mock_connect): + action = self.get_action_instance(self.full_config) + mock_connect.return_vaue = "connect return" + test_dict = { + "hostname": "test", + "time_type": 0, + "maintenance_window_name": "test", + "maintenance_type": 0, + "start_date": "2017-11-14 10:40", + "end_date": "2017-11-14 10:45", + } + host_dict = {"name": "test", "hostid": "1"} + action.connect = mock_connect + action.find_host = mock.MagicMock(return_value=host_dict["hostid"]) + action.maintenance_create_or_update = mock.MagicMock( + side_effect=APIRequestError("maintenance error") + ) + + with self.assertRaises(APIRequestError): + action.run(**test_dict) + + @mock.patch("lib.actions.ZabbixBaseAction.connect") + def test_run(self, mock_connect): + action = self.get_action_instance(self.full_config) + mock_connect.return_vaue = "connect return" + test_dict = { + "hostname": "test", + "time_type": 0, + "maintenance_window_name": "test", + "maintenance_type": 0, + "start_date": "2017-11-14 10:40", + "end_date": "2017-11-14 10:45", + } + host_dict = {"name": "test", "hostid": "1"} + maintenance_dict = {"maintenanceids": ["1"]} + expected_return = maintenance_dict["maintenanceids"][0] + action.connect = mock_connect + action.find_host = mock.MagicMock(return_value=host_dict["hostid"]) + action.maintenance_create_or_update = mock.MagicMock( + return_value=maintenance_dict + ) + + result = action.run(**test_dict) + self.assertEqual(result, expected_return) diff --git a/tests/test_host_delete.py b/tests/test_delete_host.py similarity index 51% rename from tests/test_host_delete.py rename to tests/test_delete_host.py index 4922033..16b4e6d 100644 --- a/tests/test_host_delete.py +++ b/tests/test_delete_host.py @@ -1,82 +1,80 @@ import mock from zabbix_base_action_test_case import ZabbixBaseActionTestCase -from host_delete import HostDelete +from delete_host import HostDelete -from six.moves.urllib.error import URLError -from pyzabbix.api import ZabbixAPIException +from zabbix_utils.exceptions import ProcessingError +from zabbix_utils.exceptions import APIRequestError class HostDeleteTestCase(ZabbixBaseActionTestCase): __test__ = True action_cls = HostDelete - @mock.patch('lib.actions.ZabbixBaseAction.connect') + @mock.patch("lib.actions.ZabbixBaseAction.connect") def test_run_connection_error(self, mock_connect): action = self.get_action_instance(self.full_config) - mock_connect.side_effect = URLError('connection error') - test_dict = {'host': "test"} - host_dict = {'name': "test", 'hostid': '1'} - mock.MagicMock(return_value=host_dict['hostid']) + mock_connect.side_effect = ProcessingError("connection error") + test_dict = {"hostname": "test"} - with self.assertRaises(URLError): + with self.assertRaises(ProcessingError): action.run(**test_dict) - @mock.patch('lib.actions.ZabbixBaseAction.connect') + @mock.patch("lib.actions.ZabbixBaseAction.connect") def test_run_host_error(self, mock_connect): action = self.get_action_instance(self.full_config) mock_connect.return_vaue = "connect return" - test_dict = {'host': "test"} - host_dict = {'name': "test", 'hostid': '1'} - action.find_host = mock.MagicMock(return_value=host_dict['hostid'], - side_effect=ZabbixAPIException('host error')) + test_dict = {"hostname": "test"} + action.find_host = mock.MagicMock(side_effect=APIRequestError("host error")) action.connect = mock_connect - with self.assertRaises(ZabbixAPIException): + with self.assertRaises(APIRequestError): action.run(**test_dict) - @mock.patch('lib.actions.ZabbixAPI') - @mock.patch('lib.actions.ZabbixBaseAction.connect') + @mock.patch("lib.actions.ZabbixAPI") + @mock.patch("lib.actions.ZabbixBaseAction.connect") def test_run(self, mock_connect, mock_client): action = self.get_action_instance(self.full_config) mock_connect.return_vaue = "connect return" - test_dict = {'host': "test"} - host_dict = {'name': "test", 'hostid': '1'} + test_dict = {"hostname": "test"} + host_dict = {"name": "test", "hostid": "1"} action.connect = mock_connect - action.find_host = mock.MagicMock(return_value=host_dict['hostid']) + action.find_host = mock.MagicMock(return_value=host_dict["hostid"]) mock_client.host.delete.return_value = "delete return" action.client = mock_client result = action.run(**test_dict) - mock_client.host.delete.assert_called_with(host_dict['hostid']) + mock_client.host.delete.assert_called_with(host_dict["hostid"]) self.assertEqual(result, True) - @mock.patch('lib.actions.ZabbixAPI') - @mock.patch('lib.actions.ZabbixBaseAction.connect') + @mock.patch("lib.actions.ZabbixAPI") + @mock.patch("lib.actions.ZabbixBaseAction.connect") def test_run_id(self, mock_connect, mock_client): action = self.get_action_instance(self.full_config) mock_connect.return_vaue = "connect return" - test_dict = {'host_id': "1"} + test_dict = {"host_id": "1"} action.connect = mock_connect mock_client.host.delete.return_value = "delete return" action.client = mock_client result = action.run(**test_dict) - mock_client.host.delete.assert_called_with(test_dict['host_id']) + mock_client.host.delete.assert_called_with(test_dict["host_id"]) self.assertEqual(result, True) - @mock.patch('lib.actions.ZabbixAPI') - @mock.patch('lib.actions.ZabbixBaseAction.connect') + @mock.patch("lib.actions.ZabbixAPI") + @mock.patch("lib.actions.ZabbixBaseAction.connect") def test_run_delete_error(self, mock_connect, mock_client): action = self.get_action_instance(self.full_config) mock_connect.return_vaue = "connect return" - test_dict = {'host': "test"} - host_dict = {'name': "test", 'hostid': '1'} + test_dict = {"hostname": "test"} + host_dict = {"name": "test", "hostid": "1"} action.connect = mock_connect - action.find_host = mock.MagicMock(return_value=host_dict['hostid']) - mock_client.host.delete.side_effect = ZabbixAPIException('host error') - mock_client.host.delete.return_value = "delete return" + action.find_host = mock.MagicMock(return_value=host_dict["hostid"]) + mock_client.host.delete.side_effect = APIRequestError("host error") action.client = mock_client - with self.assertRaises(ZabbixAPIException): + with self.assertRaises(APIRequestError): + action.run(**test_dict) + + with self.assertRaises(APIRequestError): action.run(**test_dict) diff --git a/tests/test_maintenance_delete.py b/tests/test_delete_maintenance.py similarity index 91% rename from tests/test_maintenance_delete.py rename to tests/test_delete_maintenance.py index ad12d3b..379c5aa 100644 --- a/tests/test_maintenance_delete.py +++ b/tests/test_delete_maintenance.py @@ -1,10 +1,10 @@ import mock from zabbix_base_action_test_case import ZabbixBaseActionTestCase -from maintenance_delete import MaintenanceDelete +from delete_maintenance import MaintenanceDelete -from six.moves.urllib.error import URLError -from pyzabbix.api import ZabbixAPIException +from zabbix_utils.exceptions import ProcessingError +from zabbix_utils.exceptions import APIRequestError class MaintenanceDeleteTestCase(ZabbixBaseActionTestCase): @@ -14,10 +14,10 @@ class MaintenanceDeleteTestCase(ZabbixBaseActionTestCase): @mock.patch('lib.actions.ZabbixBaseAction.connect') def test_run_connection_error(self, mock_connect): action = self.get_action_instance(self.full_config) - mock_connect.side_effect = URLError('connection error') + mock_connect.side_effect = ProcessingError('connection error') test_dict = {'maintenance_window_name': None, 'maintenance_id': '1'} - with self.assertRaises(URLError): + with self.assertRaises(ProcessingError): action.run(**test_dict) @mock.patch('lib.actions.ZabbixAPI') @@ -100,9 +100,9 @@ def test_run_delete_error(self, mock_connect, mock_client): mock_connect.return_vaue = "connect return" test_dict = {'maintenance_window_name': None, 'maintenance_id': '1'} action.connect = mock_connect - mock_client.maintenance.delete.side_effect = ZabbixAPIException('maintenance error') + mock_client.maintenance.delete.side_effect = APIRequestError('maintenance error') mock_client.maintenance.delete.return_value = "delete return" action.client = mock_client - with self.assertRaises(ZabbixAPIException): + with self.assertRaises(APIRequestError): action.run(**test_dict) diff --git a/tests/test_find_object.py b/tests/test_find_object.py new file mode 100644 index 0000000..2df7517 --- /dev/null +++ b/tests/test_find_object.py @@ -0,0 +1,112 @@ +import mock + +from zabbix_base_action_test_case import ZabbixBaseActionTestCase +from find_object import FindObject + +from zabbix_utils.exceptions import APIRequestError + + +class FindObjectTestCase(ZabbixBaseActionTestCase): + __test__ = True + action_cls = FindObject + + @mock.patch('lib.actions.ZabbixBaseAction.connect') + def test_find_single_host(self, mock_connect): + action = self.get_action_instance(self.full_config) + action.client = mock.Mock() + action.client.host.get.return_value = [{'hostid': '10084'}] + + result = action.run( + object_type='host', filter_field='host', + id_field='hostid', name='myhost') + self.assertEqual(result, '10084') + action.client.host.get.assert_called_with(filter={'host': 'myhost'}) + + @mock.patch('lib.actions.ZabbixBaseAction.connect') + def test_find_host_not_found(self, mock_connect): + action = self.get_action_instance(self.full_config) + action.client = mock.Mock() + action.client.host.get.return_value = [] + + with self.assertRaises(ValueError): + action.run( + object_type='host', filter_field='host', + id_field='hostid', name='nonexistent') + + @mock.patch('lib.actions.ZabbixBaseAction.connect') + def test_find_host_multiple_found(self, mock_connect): + action = self.get_action_instance(self.full_config) + action.client = mock.Mock() + action.client.host.get.return_value = [ + {'hostid': '1'}, {'hostid': '2'}] + + with self.assertRaises(ValueError): + action.run( + object_type='host', filter_field='host', + id_field='hostid', name='duplicate') + + @mock.patch('lib.actions.ZabbixBaseAction.connect') + def test_find_multiple_hosts(self, mock_connect): + action = self.get_action_instance(self.full_config) + action.client = mock.Mock() + action.client.host.get.return_value = [ + {'hostid': '1'}, {'hostid': '2'}] + + result = action.run( + object_type='host', filter_field='host', + id_field='hostid', name=['h1', 'h2'], allow_multiple=True) + self.assertEqual(result, ['1', '2']) + + @mock.patch('lib.actions.ZabbixBaseAction.connect') + def test_find_multiple_empty(self, mock_connect): + action = self.get_action_instance(self.full_config) + action.client = mock.Mock() + action.client.host.get.return_value = [] + + result = action.run( + object_type='host', filter_field='host', + id_field='hostid', name=['nonexistent'], allow_multiple=True) + self.assertEqual(result, []) + + @mock.patch('lib.actions.ZabbixBaseAction.connect') + def test_find_hostgroup(self, mock_connect): + action = self.get_action_instance(self.full_config) + action.client = mock.Mock() + action.client.hostgroup.get.return_value = [{'groupid': '5'}] + + result = action.run( + object_type='hostgroup', filter_field='name', + id_field='groupid', name='Linux servers') + self.assertEqual(result, '5') + + @mock.patch('lib.actions.ZabbixBaseAction.connect') + def test_find_template(self, mock_connect): + action = self.get_action_instance(self.full_config) + action.client = mock.Mock() + action.client.template.get.return_value = [{'templateid': '100'}] + + result = action.run( + object_type='template', filter_field='host', + id_field='templateid', name='Template OS Linux') + self.assertEqual(result, '100') + + @mock.patch('lib.actions.ZabbixBaseAction.connect') + def test_find_invalid_object_type(self, mock_connect): + action = self.get_action_instance(self.full_config) + action.client = mock.Mock(spec=[]) + + with self.assertRaises(ValueError): + action.run( + object_type='invalid', filter_field='name', + id_field='id', name='test') + + @mock.patch('lib.actions.ZabbixBaseAction.connect') + def test_find_api_error(self, mock_connect): + action = self.get_action_instance(self.full_config) + action.client = mock.Mock() + action.client.host.get.side_effect = APIRequestError('API error') + + with self.assertRaises(APIRequestError): + action.run( + object_type='host', filter_field='host', + id_field='hostid', name='test') diff --git a/tests/test_get_api_version.py b/tests/test_get_api_version.py new file mode 100644 index 0000000..479d4fc --- /dev/null +++ b/tests/test_get_api_version.py @@ -0,0 +1,29 @@ +import mock + +from zabbix_base_action_test_case import ZabbixBaseActionTestCase +from get_api_version import GetApiVersion + +from zabbix_utils.exceptions import ProcessingError + + +class GetApiVersionTestCase(ZabbixBaseActionTestCase): + __test__ = True + action_cls = GetApiVersion + + @mock.patch('lib.actions.ZabbixBaseAction.connect') + def test_get_api_version(self, mock_connect): + action = self.get_action_instance(self.full_config) + action.client = mock.Mock() + action.client.api_version.return_value = '6.0.46' + + result = action.run() + self.assertEqual(result, '6.0.46') + action.client.api_version.assert_called_once() + + @mock.patch('lib.actions.ZabbixBaseAction.connect') + def test_get_api_version_connection_error(self, mock_connect): + action = self.get_action_instance(self.full_config) + mock_connect.side_effect = ProcessingError('connection error') + + with self.assertRaises(ProcessingError): + action.run() diff --git a/tests/test_host_get_id.py b/tests/test_host_get_id.py deleted file mode 100644 index cd28a65..0000000 --- a/tests/test_host_get_id.py +++ /dev/null @@ -1,47 +0,0 @@ -import mock - -from zabbix_base_action_test_case import ZabbixBaseActionTestCase -from host_get_id import HostGetID - -from six.moves.urllib.error import URLError -from pyzabbix.api import ZabbixAPIException - - -class HostGetIDTestCase(ZabbixBaseActionTestCase): - __test__ = True - action_cls = HostGetID - - @mock.patch('lib.actions.ZabbixBaseAction.connect') - def test_run_connection_error(self, mock_connect): - action = self.get_action_instance(self.full_config) - mock_connect.side_effect = URLError('connection error') - test_dict = {'host': "test"} - host_dict = {'name': "test", 'hostid': '1'} - action.find_host = mock.MagicMock(return_value=host_dict['hostid']) - - with self.assertRaises(URLError): - action.run(**test_dict) - - @mock.patch('lib.actions.ZabbixBaseAction.connect') - def test_run_host_error(self, mock_connect): - action = self.get_action_instance(self.full_config) - mock_connect.return_vaue = "connect return" - test_dict = {'host': "test"} - host_dict = {'name': "test", 'hostid': '1'} - action.find_host = mock.MagicMock(return_value=host_dict['hostid'], - side_effect=ZabbixAPIException('host error')) - action.connect = mock_connect - with self.assertRaises(ZabbixAPIException): - action.run(**test_dict) - - @mock.patch('lib.actions.ZabbixBaseAction.connect') - def test_run(self, mock_connect): - action = self.get_action_instance(self.full_config) - mock_connect.return_vaue = "connect return" - test_dict = {'host': "test"} - host_dict = {'name': "test", 'hostid': '1'} - action.connect = mock_connect - action.find_host = mock.MagicMock(return_value=host_dict['hostid']) - - result = action.run(**test_dict) - self.assertEqual(result, host_dict['hostid']) diff --git a/tests/test_host_get_interfaces.py b/tests/test_host_get_interfaces.py deleted file mode 100644 index e90ce94..0000000 --- a/tests/test_host_get_interfaces.py +++ /dev/null @@ -1,99 +0,0 @@ -import mock - -from zabbix_base_action_test_case import ZabbixBaseActionTestCase -from host_get_interfaces import HostGetInterfaces - -from six.moves.urllib.error import URLError - - -class HostGetInterfacesTestCase(ZabbixBaseActionTestCase): - __test__ = True - action_cls = HostGetInterfaces - - @mock.patch('lib.actions.ZabbixBaseAction.connect') - def test_run_connection_error(self, mock_connect): - action = self.get_action_instance(self.full_config) - mock_connect.side_effect = URLError('connection error') - test_dict = {'host_ids': ["12345"]} - - with self.assertRaises(URLError): - action.run(**test_dict) - - @mock.patch('lib.actions.ZabbixAPI') - @mock.patch('lib.actions.ZabbixBaseAction.connect') - def test_run_host_error(self, mock_connect, mock_client): - action = self.get_action_instance(self.full_config) - mock_connect.return_vaue = "connect return" - test_dict = {'host_ids': ["12345"]} - interfaces_list = [{'hostid': "12345", 'interfaces': { - 'name': "test"}}] - action.connect = mock_connect - mock_client.host.get.return_value = interfaces_list - action.client = mock_client - - result = action.run(**test_dict) - mock_client.host.get.assert_called_with( - hostids=test_dict['host_ids'], - selectInterfaces='extend', - output=['hostid', 'interfaces']) - self.assertEqual(result, interfaces_list) - - @mock.patch('lib.actions.ZabbixAPI') - @mock.patch('lib.actions.ZabbixBaseAction.connect') - def test_run_none(self, mock_connect, mock_client): - action = self.get_action_instance(self.full_config) - mock_connect.return_vaue = "connect return" - test_dict = {'host_ids': ["12345"]} - interfaces_list = [] - action.connect = mock_connect - mock_client.host.get.return_value = interfaces_list - action.client = mock_client - - result = action.run(**test_dict) - self.assertEqual(result, []) - - @mock.patch('lib.actions.ZabbixAPI') - @mock.patch('lib.actions.ZabbixBaseAction.connect') - def test_run_single(self, mock_connect, mock_client): - action = self.get_action_instance(self.full_config) - mock_connect.return_vaue = "connect return" - test_dict = {'host_ids': ["12345"]} - interfaces_list = [{'hostid': "12345", 'interfaces': { - 'name': "test"}}] - action.connect = mock_connect - mock_client.host.get.return_value = interfaces_list - action.client = mock_client - expected_return = [{'hostid': interfaces_list[0][ - 'hostid'], 'interfaces': interfaces_list[0]['interfaces']}] - - result = action.run(**test_dict) - mock_client.host.get.assert_called_with( - hostids=test_dict['host_ids'], - selectInterfaces='extend', - output=['hostid', 'interfaces']) - self.assertEqual(result, expected_return) - - @mock.patch('lib.actions.ZabbixAPI') - @mock.patch('lib.actions.ZabbixBaseAction.connect') - def test_run_multiple(self, mock_connect, mock_client): - action = self.get_action_instance(self.full_config) - mock_connect.return_vaue = "connect return" - test_dict = {'host_ids': ["12345", "98765"]} - interfaces_list = [{'hostid': "12345", 'interfaces': - {'name': "test"}}, - {'hostid': "98765", 'interfaces': - {'name': "test2"}}] - action.connect = mock_connect - mock_client.host.get.return_value = interfaces_list - action.client = mock_client - expected_return = [{'hostid': interfaces_list[0]['hostid'], - 'interfaces': interfaces_list[0]['interfaces']}, - {'hostid': interfaces_list[1]['hostid'], - 'interfaces': interfaces_list[1]['interfaces']}] - - result = action.run(**test_dict) - mock_client.host.get.assert_called_with( - hostids=test_dict['host_ids'], - selectInterfaces='extend', - output=['hostid', 'interfaces']) - self.assertEqual(result, expected_return) diff --git a/tests/test_host_get_inventory.py b/tests/test_host_get_inventory.py deleted file mode 100644 index f808ed4..0000000 --- a/tests/test_host_get_inventory.py +++ /dev/null @@ -1,99 +0,0 @@ -import mock - -from zabbix_base_action_test_case import ZabbixBaseActionTestCase -from host_get_inventory import HostGetInventory - -from six.moves.urllib.error import URLError - - -class HostGetInventoryTestCase(ZabbixBaseActionTestCase): - __test__ = True - action_cls = HostGetInventory - - @mock.patch('lib.actions.ZabbixBaseAction.connect') - def test_run_connection_error(self, mock_connect): - action = self.get_action_instance(self.full_config) - mock_connect.side_effect = URLError('connection error') - test_dict = {'host_ids': ["12345"]} - - with self.assertRaises(URLError): - action.run(**test_dict) - - @mock.patch('lib.actions.ZabbixAPI') - @mock.patch('lib.actions.ZabbixBaseAction.connect') - def test_run_host_error(self, mock_connect, mock_client): - action = self.get_action_instance(self.full_config) - mock_connect.return_vaue = "connect return" - test_dict = {'host_ids': ["12345"]} - inventory_list = [{'hostid': "12345", 'inventory': { - 'serialno_a': "abcd1234", 'name': "test"}}] - action.connect = mock_connect - mock_client.host.get.return_value = inventory_list - action.client = mock_client - - result = action.run(**test_dict) - mock_client.host.get.assert_called_with( - hostids=test_dict['host_ids'], - selectInventory='extend', - output=['hostid', 'inventory']) - self.assertEqual(result, inventory_list) - - @mock.patch('lib.actions.ZabbixAPI') - @mock.patch('lib.actions.ZabbixBaseAction.connect') - def test_run_none(self, mock_connect, mock_client): - action = self.get_action_instance(self.full_config) - mock_connect.return_vaue = "connect return" - test_dict = {'host_ids': ["12345"]} - inventory_list = [] - action.connect = mock_connect - mock_client.host.get.return_value = inventory_list - action.client = mock_client - - result = action.run(**test_dict) - self.assertEqual(result, []) - - @mock.patch('lib.actions.ZabbixAPI') - @mock.patch('lib.actions.ZabbixBaseAction.connect') - def test_run_single(self, mock_connect, mock_client): - action = self.get_action_instance(self.full_config) - mock_connect.return_vaue = "connect return" - test_dict = {'host_ids': ["12345"]} - inventory_list = [{'hostid': "12345", 'inventory': { - 'serialno_a': "abcd1234", 'name': "test"}}] - action.connect = mock_connect - mock_client.host.get.return_value = inventory_list - action.client = mock_client - expected_return = [{'hostid': inventory_list[0][ - 'hostid'], 'inventory': inventory_list[0]['inventory']}] - - result = action.run(**test_dict) - mock_client.host.get.assert_called_with( - hostids=test_dict['host_ids'], - selectInventory='extend', - output=['hostid', 'inventory']) - self.assertEqual(result, expected_return) - - @mock.patch('lib.actions.ZabbixAPI') - @mock.patch('lib.actions.ZabbixBaseAction.connect') - def test_run_multiple(self, mock_connect, mock_client): - action = self.get_action_instance(self.full_config) - mock_connect.return_vaue = "connect return" - test_dict = {'host_ids': ["12345", "98765"]} - inventory_list = [{'hostid': "12345", 'inventory': - {'serialno_a': "abcd1234", 'name': "test"}}, - {'hostid': "98765", 'inventory': - {'serialno_a': "efgh5678", 'name': "test2"}}] - action.connect = mock_connect - mock_client.host.get.return_value = inventory_list - action.client = mock_client - expected_return = [{'hostid': inventory_list[0]['hostid'], - 'inventory': inventory_list[0]['inventory']}, - {'hostid': inventory_list[1]['hostid'], - 'inventory': inventory_list[1]['inventory']}] - - result = action.run(**test_dict) - mock_client.host.get.assert_called_with( - hostids=test_dict['host_ids'], - selectInventory='extend', - output=['hostid', 'inventory']) - self.assertEqual(result, expected_return) diff --git a/tests/test_host_get_multiple_ids.py b/tests/test_host_get_multiple_ids.py deleted file mode 100644 index 2aad2e3..0000000 --- a/tests/test_host_get_multiple_ids.py +++ /dev/null @@ -1,74 +0,0 @@ -import mock - -from zabbix_base_action_test_case import ZabbixBaseActionTestCase -from host_get_multiple_ids import ZabbixGetMultipleHostID - -from six.moves.urllib.error import URLError -from pyzabbix.api import ZabbixAPIException - - -class GetMultipleHostIDTestCase(ZabbixBaseActionTestCase): - __test__ = True - action_cls = ZabbixGetMultipleHostID - - @mock.patch('lib.actions.ZabbixBaseAction.connect') - def test_run_connection_error(self, mock_connect): - action = self.get_action_instance(self.full_config) - mock_connect.side_effect = URLError('connection error') - test_dict = {'host': "test"} - host_dict = {'name': "test", 'hostid': '1'} - action.find_host = mock.MagicMock(return_value=host_dict['hostid']) - - with self.assertRaises(URLError): - action.run(**test_dict) - - @mock.patch('lib.actions.ZabbixBaseAction.connect') - def test_run_host_error(self, mock_connect): - action = self.get_action_instance(self.full_config) - mock_connect.return_vaue = "connect return" - test_dict = {'host': "test"} - host_dict = {'name': "test", 'hostid': '1'} - action.find_hosts = mock.MagicMock(return_value=host_dict['hostid'], - side_effect=ZabbixAPIException('host error')) - action.connect = mock_connect - with self.assertRaises(ZabbixAPIException): - action.run(**test_dict) - - @mock.patch('lib.actions.ZabbixBaseAction.connect') - def test_run_none(self, mock_connect): - action = self.get_action_instance(self.full_config) - mock_connect.return_vaue = "connect return" - test_dict = {'host': "test"} - action.connect = mock_connect - action.find_hosts = mock.MagicMock(return_value=[]) - expected_return = {'host_ids': []} - - result = action.run(**test_dict) - self.assertEqual(result, expected_return) - - @mock.patch('lib.actions.ZabbixBaseAction.connect') - def test_run_single(self, mock_connect): - action = self.get_action_instance(self.full_config) - mock_connect.return_vaue = "connect return" - test_dict = {'host': "test"} - host_dict = {'name': "test", 'hostid': '1'} - action.connect = mock_connect - action.find_hosts = mock.MagicMock(return_value=[host_dict['hostid']]) - expected_return = {'host_ids': [host_dict['hostid']]} - - result = action.run(**test_dict) - self.assertEqual(result, expected_return) - - @mock.patch('lib.actions.ZabbixBaseAction.connect') - def test_run_multiple(self, mock_connect): - action = self.get_action_instance(self.full_config) - mock_connect.return_vaue = "connect return" - test_dict = {'host': "test"} - host_dict = [{'name': "test", 'hostid': '1'}, {'name': "test", 'hostid': '2'}] - action.connect = mock_connect - action.find_hosts = mock.MagicMock(return_value=[host_dict[0]['hostid'], - host_dict[1]['hostid']]) - expected_return = {'host_ids': [host_dict[0]['hostid'], host_dict[1]['hostid']]} - - result = action.run(**test_dict) - self.assertEqual(result, expected_return) diff --git a/tests/test_host_get_status.py b/tests/test_host_get_status.py deleted file mode 100644 index cb9b17b..0000000 --- a/tests/test_host_get_status.py +++ /dev/null @@ -1,49 +0,0 @@ -import mock - -from zabbix_base_action_test_case import ZabbixBaseActionTestCase -from host_get_status import HostGetStatus - -from six.moves.urllib.error import URLError -from pyzabbix.api import ZabbixAPIException - - -class HostGetStatusTestCase(ZabbixBaseActionTestCase): - __test__ = True - action_cls = HostGetStatus - - @mock.patch('lib.actions.ZabbixBaseAction.connect') - def test_run_connection_error(self, mock_connect): - action = self.get_action_instance(self.full_config) - mock_connect.side_effect = URLError('connection error') - test_dict = {'host': "test"} - host_dict = {'name': "test", 'hostid': '1'} - action.find_host = mock.MagicMock(return_value=host_dict['hostid']) - - with self.assertRaises(URLError): - action.run(**test_dict) - - @mock.patch('lib.actions.ZabbixBaseAction.connect') - def test_run_host_error(self, mock_connect): - action = self.get_action_instance(self.full_config) - mock_connect.return_vaue = "connect return" - test_dict = {'host': "test"} - host_dict = {'name': "test", 'hostid': '1'} - action.find_host = mock.MagicMock(return_value=host_dict['hostid'], - side_effect=ZabbixAPIException('host error')) - action.connect = mock_connect - with self.assertRaises(ZabbixAPIException): - action.run(**test_dict) - - @mock.patch('lib.actions.ZabbixBaseAction.connect') - @mock.patch('lib.actions.ZabbixBaseAction.find_host') - def test_run(self, mock_connect, mock_find_host): - action = self.get_action_instance(self.full_config) - mock_connect.return_vaue = "connect return" - test_dict = {'host': "test"} - host_dict = {'name': "test", 'hostid': '1', 'status': '0'} - action.connect = mock_connect - action.find_host = mock_find_host - action.zabbix_host = host_dict - - result = action.run(**test_dict) - self.assertEqual(result, host_dict['status']) diff --git a/tests/test_host_status.py b/tests/test_host_status.py new file mode 100644 index 0000000..18f2a6a --- /dev/null +++ b/tests/test_host_status.py @@ -0,0 +1,63 @@ +import mock + +from zabbix_base_action_test_case import ZabbixBaseActionTestCase +from host_status import HostStatus + +from zabbix_utils.exceptions import ProcessingError +from zabbix_utils.exceptions import APIRequestError + + +class HostStatusTestCase(ZabbixBaseActionTestCase): + __test__ = True + action_cls = HostStatus + + @mock.patch('lib.actions.ZabbixBaseAction.connect') + def test_get_status(self, mock_connect): + action = self.get_action_instance(self.full_config) + action.connect = mock_connect + action.find_host = mock.MagicMock(return_value='1') + action.zabbix_host = {'hostid': '1', 'status': '0'} + + result = action.run(hostname='test') + self.assertEqual(result, '0') + + @mock.patch('lib.actions.ZabbixBaseAction.connect') + def test_update_status(self, mock_connect): + action = self.get_action_instance(self.full_config) + action.connect = mock_connect + action.find_host = mock.MagicMock(return_value='1') + action.client = mock.Mock() + action.client.host.update.return_value = {'hostids': ['1']} + + result = action.run(hostname='test', status=1) + self.assertEqual(result, True) + action.client.host.update.assert_called_with(hostid='1', status=1) + + @mock.patch('lib.actions.ZabbixBaseAction.connect') + def test_connection_error(self, mock_connect): + action = self.get_action_instance(self.full_config) + mock_connect.side_effect = ProcessingError('connection error') + + with self.assertRaises(ProcessingError): + action.run(hostname='test') + + @mock.patch('lib.actions.ZabbixBaseAction.connect') + def test_host_not_found(self, mock_connect): + action = self.get_action_instance(self.full_config) + action.connect = mock_connect + action.find_host = mock.MagicMock( + side_effect=ValueError('Could not find host')) + + with self.assertRaises(ValueError): + action.run(hostname='nonexistent') + + @mock.patch('lib.actions.ZabbixBaseAction.connect') + def test_update_status_api_error(self, mock_connect): + action = self.get_action_instance(self.full_config) + action.connect = mock_connect + action.find_host = mock.MagicMock(return_value='1') + action.client = mock.Mock() + action.client.host.update.side_effect = APIRequestError('update failed') + + with self.assertRaises(APIRequestError): + action.run(hostname='test', status=1) diff --git a/tests/test_host_update_status.py b/tests/test_host_update_status.py deleted file mode 100644 index 991703e..0000000 --- a/tests/test_host_update_status.py +++ /dev/null @@ -1,69 +0,0 @@ -import mock - -from zabbix_base_action_test_case import ZabbixBaseActionTestCase -from host_update_status import HostUpdateStatus - -from six.moves.urllib.error import URLError -from pyzabbix.api import ZabbixAPIException - - -class HostUpdateStatusTestCase(ZabbixBaseActionTestCase): - __test__ = True - action_cls = HostUpdateStatus - - @mock.patch('lib.actions.ZabbixBaseAction.connect') - def test_run_connection_error(self, mock_connect): - action = self.get_action_instance(self.full_config) - mock_connect.side_effect = URLError('connection error') - test_dict = {'host': "test", 'status': 1} - host_dict = {'name': "test", 'hostid': '1'} - mock.MagicMock(return_value=host_dict['hostid']) - - with self.assertRaises(URLError): - action.run(**test_dict) - - @mock.patch('lib.actions.ZabbixBaseAction.connect') - def test_run_host_error(self, mock_connect): - action = self.get_action_instance(self.full_config) - mock_connect.return_vaue = "connect return" - test_dict = {'host': "test", 'status': 1} - host_dict = {'name': "test", 'hostid': '1'} - action.find_host = mock.MagicMock(return_value=host_dict['hostid'], - side_effect=ZabbixAPIException('host error')) - action.connect = mock_connect - - with self.assertRaises(ZabbixAPIException): - action.run(**test_dict) - - @mock.patch('lib.actions.ZabbixAPI') - @mock.patch('lib.actions.ZabbixBaseAction.connect') - def test_run(self, mock_connect, mock_client): - action = self.get_action_instance(self.full_config) - mock_connect.return_vaue = "connect return" - test_dict = {'host': "test", 'status': 1} - host_dict = {'name': "test", 'hostid': '1'} - action.connect = mock_connect - action.find_host = mock.MagicMock(return_value=host_dict['hostid']) - mock_client.host.update.return_value = "update return" - action.client = mock_client - - result = action.run(**test_dict) - mock_client.host.update.assert_called_with(hostid=host_dict['hostid'], - status=test_dict['status']) - self.assertEqual(result, True) - - @mock.patch('lib.actions.ZabbixAPI') - @mock.patch('lib.actions.ZabbixBaseAction.connect') - def test_run_update_error(self, mock_connect, mock_client): - action = self.get_action_instance(self.full_config) - mock_connect.return_vaue = "connect return" - test_dict = {'host': "test", 'status': 1} - host_dict = {'name': "test", 'hostid': '1'} - action.connect = mock_connect - action.find_host = mock.MagicMock(return_value=host_dict['hostid']) - mock_client.host.update.side_effect = ZabbixAPIException('host error') - mock_client.host.update.return_value = "update return" - action.client = mock_client - - with self.assertRaises(ZabbixAPIException): - action.run(**test_dict) diff --git a/tests/test_maintenance_create_or_update.py b/tests/test_maintenance_create_or_update.py deleted file mode 100644 index 6df64dc..0000000 --- a/tests/test_maintenance_create_or_update.py +++ /dev/null @@ -1,86 +0,0 @@ -import mock - -from zabbix_base_action_test_case import ZabbixBaseActionTestCase -from maintenance_create_or_update import MaintenanceCreateOrUpdate - -from six.moves.urllib.error import URLError -from pyzabbix.api import ZabbixAPIException - - -class MaintenanceCreateOrUpdateTestCase(ZabbixBaseActionTestCase): - __test__ = True - action_cls = MaintenanceCreateOrUpdate - - @mock.patch('lib.actions.ZabbixBaseAction.connect') - def test_run_connection_error(self, mock_connect): - action = self.get_action_instance(self.full_config) - mock_connect.side_effect = URLError('connection error') - test_dict = {'host': "test", - 'time_type': 0, - 'maintenance_window_name': "test", - 'maintenance_type': 0, - 'start_date': "2017-11-14 10:40", - 'end_date': "2017-11-14 10:45"} - host_dict = {'name': "test", 'hostid': '1'} - mock.MagicMock(return_value=host_dict['hostid']) - - with self.assertRaises(URLError): - action.run(**test_dict) - - @mock.patch('lib.actions.ZabbixBaseAction.connect') - def test_run_host_error(self, mock_connect): - action = self.get_action_instance(self.full_config) - mock_connect.return_vaue = "connect return" - test_dict = {'host': "test", - 'time_type': 0, - 'maintenance_window_name': "test", - 'maintenance_type': 0, - 'start_date': "2017-11-14 10:40", - 'end_date': "2017-11-14 10:45"} - host_dict = {'name': "test", 'hostid': '1'} - action.find_host = mock.MagicMock(return_value=host_dict['hostid'], - side_effect=ZabbixAPIException('host error')) - action.connect = mock_connect - - with self.assertRaises(ZabbixAPIException): - action.run(**test_dict) - - @mock.patch('lib.actions.ZabbixBaseAction.connect') - def test_run_maintenance_error(self, mock_connect): - action = self.get_action_instance(self.full_config) - mock_connect.return_vaue = "connect return" - test_dict = {'host': "test", - 'time_type': 0, - 'maintenance_window_name': "test", - 'maintenance_type': 0, - 'start_date': "2017-11-14 10:40", - 'end_date': "2017-11-14 10:45"} - host_dict = {'name': "test", 'hostid': '1'} - maintenance_dict = {'maintenanceids': ['1']} - action.connect = mock_connect - action.find_host = mock.MagicMock(return_value=host_dict['hostid']) - action.maintenance_create_or_update = mock.MagicMock(return_value=maintenance_dict, - side_effect=ZabbixAPIException('maintenance error')) - - with self.assertRaises(ZabbixAPIException): - action.run(**test_dict) - - @mock.patch('lib.actions.ZabbixBaseAction.connect') - def test_run(self, mock_connect): - action = self.get_action_instance(self.full_config) - mock_connect.return_vaue = "connect return" - test_dict = {'host': "test", - 'time_type': 0, - 'maintenance_window_name': "test", - 'maintenance_type': 0, - 'start_date': "2017-11-14 10:40", - 'end_date': "2017-11-14 10:45"} - host_dict = {'name': "test", 'hostid': '1'} - maintenance_dict = {'maintenanceids': ['1']} - expected_return = {'maintenance_id': maintenance_dict['maintenanceids'][0]} - action.connect = mock_connect - action.find_host = mock.MagicMock(return_value=host_dict['hostid']) - action.maintenance_create_or_update = mock.MagicMock(return_value=maintenance_dict) - - result = action.run(**test_dict) - self.assertEqual(result, expected_return) diff --git a/tests/test_tool_register_st2_config_to_zabbix.py b/tests/test_tool_register_st2_config_to_zabbix.py deleted file mode 100644 index 82ca5ac..0000000 --- a/tests/test_tool_register_st2_config_to_zabbix.py +++ /dev/null @@ -1,165 +0,0 @@ -import os -import re -import sys -import mock - -from six import StringIO -from unittest import TestCase - -from six.moves.urllib.error import URLError -from pyzabbix.api import ZabbixAPIException - -sys.path.append(os.path.dirname(os.path.realpath(__file__)) + '/../tools/') -import register_st2_config_to_zabbix - - -class TestRegisterMediaType(TestCase): - def setUp(self): - sys.argv = ['register_st2_config_to_zabbix.py'] - self.io_stdout = StringIO() - self.io_stderr = StringIO() - sys.stdout = self.io_stdout - sys.stderr = self.io_stderr - - def tearDown(self): - sys.stdout = sys.__stdout__ - sys.stderr = sys.__stderr__ - - def test_register_mediatype_without_argument(self): - with self.assertRaises(SystemExit): - register_st2_config_to_zabbix.main() - - self.assertTrue(re.match(r".*Zabbix Server URL is not given", - self.io_stderr.getvalue(), - flags=(re.MULTILINE | re.DOTALL))) - - @mock.patch('register_st2_config_to_zabbix.ZabbixAPI') - def test_register_mediatype_to_invalid_zabbix_server(self, mock_client): - sys.argv += ['-z', 'http://invalid-zabbix-host'] - - # make an exception that means failure to connect server. - mock_client.side_effect = URLError('connection error') - - with self.assertRaises(SystemExit): - register_st2_config_to_zabbix.main() - self.assertTrue(re.match(r"Failed to connect Zabbix server", self.io_stderr.getvalue())) - - @mock.patch('register_st2_config_to_zabbix.ZabbixAPI') - def test_register_mediatype_with_invalid_authentication(self, mock_client): - sys.argv += ['-z', 'http://invalid-zabbix-host', '-u', 'user', '-p', 'passwd'] - - # make an exception that means failure to authenticate with Zabbix-server. - mock_client.side_effect = ZabbixAPIException('auth error') - - with self.assertRaises(SystemExit): - register_st2_config_to_zabbix.main() - self.assertTrue(re.match(r"Failed to authenticate Zabbix", self.io_stderr.getvalue())) - - @mock.patch('register_st2_config_to_zabbix.ZabbixAPI') - def test_register_duplicate_mediatype(self, mock_client): - sys.argv += ['-z', 'http://zabbix-host'] - self.is_registered_media = False - self.is_registered_action = False - self.is_called_delete = False - - def side_effect_media(*args, **kwargs): - self.is_registered_media = True - - def side_effect_action(*args, **kwargs): - self.is_registered_action = True - - def side_effect_delete(*args, **kwargs): - self.is_called_delete = True - - # make mock to get target mediatype - mock_obj = mock.Mock() - mock_obj.apiinfo.version.return_value = '3.x' - mock_obj.mediatype.get.return_value = [{ - 'type': register_st2_config_to_zabbix.SCRIPT_MEDIA_TYPE, - 'exec_path': register_st2_config_to_zabbix.ST2_DISPATCHER_SCRIPT, - 'mediatypeid': '1', - }] - - # make mock to return no action - mock_obj.action.get.return_value = [] - mock_obj.mediatype.update.return_value = {'mediatypeids': ['1']} - mock_client.return_value = mock_obj - - mock_obj.user.addmedia.side_effect = side_effect_media - mock_obj.action.create.side_effect = side_effect_action - mock_obj.action.delete.side_effect = side_effect_delete - - register_st2_config_to_zabbix.main() - self.assertTrue(re.match(r"Success to register the configurations", - self.io_stdout.getvalue())) - self.assertTrue(self.is_registered_media) - self.assertTrue(self.is_registered_action) - self.assertFalse(self.is_called_delete) - - # make mock to return action which is alredy registered - mock_obj.action.get.return_value = [{ - 'name': register_st2_config_to_zabbix.ST2_ACTION_NAME, - 'actionid': 1, - }] - - register_st2_config_to_zabbix.main() - self.assertTrue(re.match(r"Success to register the configurations", - self.io_stdout.getvalue())) - self.assertTrue(self.is_registered_media) - self.assertTrue(self.is_registered_action) - self.assertTrue(self.is_called_delete) - - @mock.patch('register_st2_config_to_zabbix.ZabbixAPI') - def test_register_mediatype_successfully(self, mock_client): - sys.argv += ['-z', 'http://zabbix-host'] - self.is_registered_media = False - self.is_registered_action = False - - def side_effect_media(*args, **kwargs): - self.is_registered_media = True - - def side_effect_action(*args, **kwargs): - self.is_registered_action = True - - mock_obj = mock.Mock() - mock_obj.apiinfo.version.return_value = '3.x' - mock_obj.mediatype.get.return_value = [ - {'type': register_st2_config_to_zabbix.SCRIPT_MEDIA_TYPE, - 'exec_path': 'other-script.sh'}, - {'type': 0} - ] - mock_obj.mediatype.create.return_value = {'mediatypeids': ['1']} - mock_obj.action.get.return_value = [] - mock_obj.user.addmedia.side_effect = side_effect_media - mock_obj.action.create.side_effect = side_effect_action - mock_client.return_value = mock_obj - - register_st2_config_to_zabbix.main() - - self.assertTrue(re.match(r"Success to register the configurations", - self.io_stdout.getvalue())) - self.assertTrue(self.is_registered_media) - self.assertTrue(self.is_registered_action) - - def test_register_mediatype_with_different_zabbix_version(self): - mock_client = mock.Mock() - - def side_effect_addmedia(*args, **kwargs): - return 'user.addmedia is called' - - def side_effect_userupdate(*args, **kwargs): - return 'user.update is called' - - # set side_effect of caling user.update and user.addmedia API - mock_client.user.addmedia.side_effect = side_effect_addmedia - mock_client.user.update.side_effect = side_effect_userupdate - - # When sending request that changes MediaType to Zabbix3.x, this calls user.addmedia API - mock_client.apiinfo.version.return_value = '3.x.y' - ret = register_st2_config_to_zabbix.register_media_to_admin(mock_client, 1, mock.Mock()) - self.assertEqual(ret, 'user.addmedia is called') - - # When sending request that changes MediaType to Zabbix3.x, this calls user.update API - mock_client.apiinfo.version.return_value = '4.x.y' - ret = register_st2_config_to_zabbix.register_media_to_admin(mock_client, 1, mock.Mock()) - self.assertEqual(ret, 'user.update is called') diff --git a/tests/test_tool_st2_dispatch.py b/tests/test_tool_st2_dispatch.py deleted file mode 100644 index 29e0bdb..0000000 --- a/tests/test_tool_st2_dispatch.py +++ /dev/null @@ -1,77 +0,0 @@ -import os -import sys -import mock -import json -import requests -from optparse import OptionParser - -from unittest import TestCase - -sys.path.append(os.path.dirname(os.path.realpath(__file__)) + '/../tools/scripts') - -import st2_dispatch - - -class FakeResponse(object): - - def __init__(self, text, status_code, reason, *args): - self.text = text - self.content = text.encode('utf-8') - self.status_code = status_code - self.reason = reason - if args: - self.headers = args[0] - - def json(self): - return json.loads(self.text) - - def raise_for_status(self): - raise Exception(self.reason) - - -class TestZabbixDispatcher(TestCase): - TOKEN = { - 'user': 'st2admin', - 'token': '44583f15945b4095afbf57058535ca64', - 'expiry': '2017-02-12T00:53:09.632783Z', - 'id': '589e607532ed3535707f10eb', - 'metadata': {} - } - - def setUp(self): - self.parser = OptionParser() - - self.parser.add_option('--userid', dest='st2_userid') - self.parser.add_option('--passwd', dest='st2_passwd') - self.parser.add_option('--api-url', dest='api_url') - self.parser.add_option('--auth-url', dest='auth_url') - self.parser.add_option('--api_key', dest='api_key') - self.parser.add_option('--trigger', dest='trigger', default="zabbix.event_handler") - self.parser.add_option('--alert-sendto', dest="alert_sendto", default="") - self.parser.add_option('--alert-subject', dest="alert_subject", default="") - self.parser.add_option('--alert-message', dest="alert_message", default="") - self.parser.add_option('--skip-config', dest='skip_config', default=True) - self.parser.add_option('--config-file', dest='config_file') - - @mock.patch.object( - requests, 'post', - mock.MagicMock(return_value=FakeResponse(json.dumps(TOKEN), 200, 'OK'))) - def test_dispatch_trigger(self): - (options, _) = self.parser.parse_args([ - '--userid', 'foo', - '--passwd', 'bar', - '--api-url', 'https://localhost/api/v1', - '--auth-url', 'https://localhost/auth/v1', - ]) - - dispatcher = st2_dispatch.ZabbixDispatcher(options) - self.assertEqual(dispatcher.client.token, self.TOKEN['token']) - - resp = dispatcher.dispatch_trigger(args=[ - options.api_url, - options.auth_url, - options.st2_userid, - options.st2_passwd, - 'foo', 'bar', 'baz' - ]) - self.assertEqual(resp.status_code, 200) diff --git a/tests/test_test_credentials.py b/tests/test_verify_credentials.py similarity index 62% rename from tests/test_test_credentials.py rename to tests/test_verify_credentials.py index ed81abe..e48b979 100644 --- a/tests/test_test_credentials.py +++ b/tests/test_verify_credentials.py @@ -1,14 +1,14 @@ import mock from zabbix_base_action_test_case import ZabbixBaseActionTestCase -from test_credentials import TestCredentials +from verify_credentials import VerifyCredentials -from pyzabbix.api import ZabbixAPIException +from zabbix_utils.exceptions import APIRequestError -class TestCredentialsTestCase(ZabbixBaseActionTestCase): +class VerifyCredentialsTestCase(ZabbixBaseActionTestCase): __test__ = True - action_cls = TestCredentials + action_cls = VerifyCredentials @mock.patch('lib.actions.ZabbixBaseAction.connect') def test_run(self, mock_connect): @@ -19,6 +19,6 @@ def test_run(self, mock_connect): @mock.patch('lib.actions.ZabbixBaseAction.connect') def test_run_connection_error(self, mock_connect): action = self.get_action_instance(self.full_config) - mock_connect.side_effect = ZabbixAPIException('login error') - with self.assertRaises(ZabbixAPIException): + mock_connect.side_effect = APIRequestError('login error') + with self.assertRaises(APIRequestError): action.run() diff --git a/tests/zabbix_base_action_test_case.py b/tests/zabbix_base_action_test_case.py index f7c8e7a..f312965 100644 --- a/tests/zabbix_base_action_test_case.py +++ b/tests/zabbix_base_action_test_case.py @@ -12,6 +12,7 @@ def setUp(self): self._full_config = self.load_yaml('full.yaml') self._blank_config = self.load_yaml('blank.yaml') + self._token_config = self.load_yaml('token.yaml') def load_yaml(self, filename): return yaml.safe_load(self.get_fixture_content(filename)) @@ -26,3 +27,7 @@ def full_config(self): @property def blank_config(self): return self._blank_config + + @property + def token_config(self): + return self._token_config diff --git a/tools/register_st2_config_to_zabbix.py b/tools/register_st2_config_to_zabbix.py deleted file mode 100755 index b401c98..0000000 --- a/tools/register_st2_config_to_zabbix.py +++ /dev/null @@ -1,191 +0,0 @@ -#!/usr/bin/env python3 -import json -import sys - -from optparse import OptionParser -from zabbix.api import ZabbixAPI -from pyzabbix.api import ZabbixAPIException -from six.moves.urllib.error import URLError - -# This constant describes 'script' value of 'type' property in the MediaType, -# which is specified in the Zabbix API specification. -SCRIPT_MEDIA_TYPE = '1' - -# This is a constant for the metadata of MediaType to be registered -ST2_DISPATCHER_SCRIPT = 'st2_dispatch.py' -ST2_ACTION_NAME = 'Dispatching to StackStorm' - - -def get_options(): - parser = OptionParser() - - parser.add_option('-z', '--zabbix-url', dest="z_url", - help="The URL of Zabbix Server") - parser.add_option('-u', '--username', dest="z_userid", default='Admin', - help="Login username to login Zabbix Server") - parser.add_option('-p', '--password', dest="z_passwd", default='zabbix', - help="Password which is associated with the username") - parser.add_option('-s', '--sendto', dest="z_sendto", default='Admin', - help="Address, user name or other identifier of the recipient") - - (options, args) = parser.parse_args() - - if not options.z_url: - parser.error('Zabbix Server URL is not given') - - return (options, args) - - -def is_already_registered_mediatype(client, options): - """ - This method checks target MediaType has already been registered, or not. - """ - for mtype in client.mediatype.get(): - if mtype['type'] == SCRIPT_MEDIA_TYPE and mtype['exec_path'] == ST2_DISPATCHER_SCRIPT: - return mtype['mediatypeid'] - - -def is_already_registered_action(client, options): - """ - This method checks target Action has already been registered, or not. - """ - for action in client.action.get(): - if action['name'] == ST2_ACTION_NAME: - return action['actionid'] - - -def register_media_type(client, options, mediatype_id=None): - """ - This method registers a MediaType which dispatches alert to the StackStorm. - """ - mediatype_args = [ - '-- CHANGE ME : api_url (e.g. https://st2-node/api/v1)', - '-- CHANGE ME : auth_url (e.g. https://st2-node/auth/v1)', - '-- CHANGE ME : login uername of StackStorm --', - '-- CHANGE ME : login password of StackStorm --', - '{ALERT.SENDTO}', - '{ALERT.SUBJECT}', - '{ALERT.MESSAGE}', - ] - - # send request to register a new MediaType for StackStorm - params = { - 'description': 'StackStorm', - 'type': SCRIPT_MEDIA_TYPE, - 'exec_path': ST2_DISPATCHER_SCRIPT, - 'exec_params': "\n".join(mediatype_args) + "\n", - } - if mediatype_id: - params['mediatypeid'] = mediatype_id - - ret = client.mediatype.update(**params) - else: - ret = client.mediatype.create(**params) - - return ret['mediatypeids'][0] - - -def register_action(client, mediatype_id, options, action_id=None): - - if action_id: - client.action.delete(action_id) - - return client.action.create(**{ - 'name': ST2_ACTION_NAME, - 'esc_period': 360, - 'eventsource': 0, # means event created by a trigger - 'def_shortdata': '{TRIGGER.STATUS}: {TRIGGER.NAME}', - 'def_longdata': json.dumps({ - 'event': { - 'id': '{EVENT.ID}', - 'time': '{EVENT.TIME}', - }, - 'trigger': { - 'id': '{TRIGGER.ID}', - 'name': '{TRIGGER.NAME}', - 'status': '{TRIGGER.STATUS}', - }, - 'items': [{ - 'name': '{ITEM.NAME%s}' % index, - 'host': '{HOST.NAME%s}' % index, - 'key': '{ITEM.KEY%s}' % index, - 'value': '{ITEM.VALUE%s}' % index - } for index in range(1, 9)], - }), - 'operations': [{ - "operationtype": 0, - "esc_period": 0, - "esc_step_from": 1, - "esc_step_to": 1, - "evaltype": 0, - "opmessage_usr": [{"userid": "1"}], - "opmessage": { - "default_msg": 1, - "mediatypeid": mediatype_id, - } - }] - }) - - -def register_media_to_admin(client, mediatype_id, options): - major_version = int(client.apiinfo.version()[0]) - if major_version >= 4: - # This is because user.addmedia api was removed from Zabbix 4.0. - return client.user.update(**{ - "userid": "1", - "user_medias": [{ - "mediatypeid": mediatype_id, - "sendto": options.z_sendto, - "active": "0", - "severity": "63", - "period": "1-7,00:00-24:00", - }] - }) - else: - return client.user.addmedia(**{ - "users": [ - {"userid": "1"}, - ], - "medias": { - "mediatypeid": mediatype_id, - "sendto": options.z_sendto, - "active": "0", - "severity": "63", - "period": "1-7,00:00-24:00", - } - }) - - -def main(): - (options, _) = get_options() - - try: - client = ZabbixAPI(url=options.z_url, - user=options.z_userid, - password=options.z_passwd) - except URLError as e: - sys.exit('Failed to connect Zabbix server (%s)' % e) - except ZabbixAPIException as e: - sys.exit('Failed to authenticate Zabbix (%s)' % e) - - # get ID of MediaType for StackStorm if it exists, or None. - mediatype_id = is_already_registered_mediatype(client, options) - - # register a new MediaType or update one which is already registered to dispatch events - # to the StackStorm - mediatype_id = register_media_type(client, options, mediatype_id) - - # get ID of Action for StackStorm if it exists, or None. - action_id = is_already_registered_action(client, options) - - # register a Action which is associated with the registered MediaType - register_action(client, mediatype_id, options, action_id) - - # register a Media to the Admin user - register_media_to_admin(client, mediatype_id, options) - - print('Success to register the configurations for StackStorm to the Zabbix Server.') - - -if __name__ == '__main__': - main() diff --git a/tools/scripts/st2_dispatch.py b/tools/scripts/st2_dispatch.py deleted file mode 100755 index d2498a6..0000000 --- a/tools/scripts/st2_dispatch.py +++ /dev/null @@ -1,147 +0,0 @@ -#!/usr/bin/env python3 - -from st2client.base import BaseCLIApp - -from optparse import OptionParser - -import json - - -class ZabbixDispatcher(BaseCLIApp): - - def __init__(self, options): - self.options = options - - # make a client object to connect st2api - self.client = self.get_client(args=options) - - # If no API key was passed, get a token using user/pass - if not self.options.api_key: - self.client.token = self._get_auth_token(client=self.client, - username=options.st2_userid, - password=options.st2_passwd, - cache_token=False) - - def dispatch_trigger(self, args): - - # Validate if the Alert message is a valid JSON List or Dict and replace - # alert_message (string)with an object so that its correctly formatted. - try: - json_alert = json.loads(self.options.alert_message) - except: - pass - else: - setattr(self.options, 'alert_message', json_alert) - - body = { - 'trigger': self.options.trigger, - 'payload': { - 'alert_sendto': self.options.alert_sendto, - 'alert_subject': self.options.alert_subject, - 'alert_message': self.options.alert_message, - 'extra_args': args, - }, - } - - # API Key is preferred over User/Pass when both are present. - if self.options.api_key: - print('ST2 Auth Method: API Key') - auth_method = 'St2-Api-Key' - auth_value = self.options.api_key - else: - print('ST2 Auth Method: Auth Token') - auth_method = 'X-Auth-Token' - auth_value = self.client.token - - # send request to st2api to dispatch trigger of Zabbix - return self.client.managers['Webhook'].client.post('/webhooks/st2', body, headers={ - 'Content-Type': 'application/json', auth_method: auth_value}) - - -def get_options(): - parser = OptionParser() - - # Default values will be overridden by JSON Dict or poitional args. - # If a default is defined but its not a required opt (API key Vs User/Pass) - # it can cause issues. - parser.add_option('--st2-userid', dest="st2_userid", default="st2admin", - help="Login username of StackStorm") - parser.add_option('--st2-passwd', dest="st2_passwd", default="", - help="Login password associated with the user") - parser.add_option('--st2-api-url', dest="api_url", - help="Endpoint URL for API") - parser.add_option('--st2-auth-url', dest="auth_url", - help="Endpoint URL for auth") - parser.add_option('--api-key', dest="api_key", - help="ST2 API Key to be used when no user/pass defined") - parser.add_option('--alert-sendto', dest="alert_sendto", default="", - help="'Send to' value from user media configuration of Zabbix") - parser.add_option('--alert-subject', dest="alert_subject", default="", - help="'Default subject' value from action configuration of Zabbix") - parser.add_option('--alert-message', dest="alert_message", default="", - help="'Default message' value from action configuration of Zabbix") - parser.add_option('--trigger', dest="trigger", default="zabbix.event_handler", - help='Set the trigger name that dispatch should send to on St2') - parser.add_option('--skip-config', dest="skip_config", default=False, action='store_true', - help='Do NOT parse and use the CLI config file') - parser.add_option('--config-file', dest="config_file", - help='Path to the CLI config file') - - # Zabbix send argument as one string even though it includes whitespace - # (like $ st2_dispatch.py "foo bar" "hoge fuga" ...). - # And we can't specify keyward argument, we can only specify args. - # - # So it's hard for us to parse the argument of zabbix mediatype using optparse. - # Then, I decided to fix the order of the CLI arguemnts. - # - # See am_prepare_mediatype_exec_command in alert_manager.c in Zabbix src - - (options, args) = parser.parse_args() - - # Check if the very first positional argument is a valid JSON Dict. - try: - param_object = json.loads(args[0]) - except: - # First arg is not a JSON dict, assuming user/pass configuration - arg_list = ['api_url', 'auth_url', 'st2_userid', 'st2_passwd', - 'alert_sendto', 'alert_subject', 'alert_message'] - # Parse remaining positional args based on arg_list - for index, param in enumerate(arg_list): - if len(args) > index and args[index]: - setattr(options, param, args[index]) - - return (options, args[len(arg_list):]) - - else: - # First arg is a JSON dict, assuming apikey only - arg_list = ['alert_sendto', 'alert_subject', 'alert_message'] - # Since arg[0] is a JSON dict and we are handling it specifically, - # remove it from the list - args.pop(0) - # Assign all key/val in param_object to options - for k, v in param_object.items(): - setattr(options, k, v) - # Parse remaining positional args based on arg_list - for index, param in enumerate(arg_list): - if len(args) > index and args[index]: - setattr(options, param, args[index]) - - return (options, args[len(arg_list):]) - - -def main(): - # Parse and get arguments - print('Parsing Options') - (options, args) = get_options() - - # Instantiate st2 client and prepare data for dispatch to st2 - print('Preparing Dispatcher') - dispatcher = ZabbixDispatcher(options) - - # Dispatch data to trigger on st2 (default zabbix.event_handler) - print('Dispatching to ST2') - dispatcher.dispatch_trigger(args) - - -if __name__ == '__main__': - main() diff --git a/triggers/event_handler.yaml b/triggers/event_handler.yaml index 8748c75..4f433ee 100644 --- a/triggers/event_handler.yaml +++ b/triggers/event_handler.yaml @@ -1,20 +1,43 @@ --- name: event_handler pack: zabbix -description: 'Trigger type for zabbix event handler.' +description: "Trigger dispatched when Zabbix sends an alert via the direct StackStorm webhook." payload_schema: type: object properties: alert_sendto: type: string + description: "Recipient from Zabbix user media configuration ({ALERT.SENDTO})." alert_subject: type: string + description: "Alert subject from Zabbix action ({ALERT.SUBJECT})." alert_message: + description: "Alert message body ({ALERT.MESSAGE}). String or parsed JSON object." anyOf: - - type: array - type: object - type: string - extra_args: - type: array - items: - type: string + host: + type: string + description: "Host that triggered the event ({HOST.NAME})." + event_id: + type: string + description: "Zabbix event ID ({EVENT.ID})." + trigger_id: + type: string + description: "Zabbix trigger ID ({TRIGGER.ID})." + trigger_name: + type: string + description: "Name of the Zabbix trigger ({TRIGGER.NAME})." + trigger_status: + type: string + description: "PROBLEM or OK ({TRIGGER.STATUS})." + trigger_severity: + type: string + description: "Severity: Not classified, Information, Warning, Average, High, Disaster ({TRIGGER.SEVERITY})." + event_time: + type: string + description: "Time the event occurred ({EVENT.TIME})." + event_date: + type: string + description: "Date the event occurred ({EVENT.DATE})." + additionalProperties: true diff --git a/zabbix.yaml.example b/zabbix.yaml.example index bcf96c5..b49a95d 100644 --- a/zabbix.yaml.example +++ b/zabbix.yaml.example @@ -1,5 +1,5 @@ --- -zabbix: - url: http://localhost/zabbix - username: Admin - password: zabbix +url: http://localhost:8080 +username: Admin +password: zabbix +# api_token: "your-api-token-here" # preferred over username/password