community.zabbix.zabbix_maintenance module – Create Zabbix maintenance windows

Note

This module is part of the community.zabbix collection (version 4.1.1).

You might already have this collection installed if you are using the ansible package. It is not included in ansible-core. To check whether it is installed, run ansible-galaxy collection list.

To install it, use: ansible-galaxy collection install community.zabbix. You need further requirements to be able to use this module, see Requirements for details.

To use it in a playbook, specify: community.zabbix.zabbix_maintenance.

Synopsis

  • This module will let you create Zabbix maintenance windows.

Requirements

The below requirements are needed on the host that executes this module.

  • python >= 3.9

Parameters

Parameter

Comments

active_since

string

Time when the maintenance becomes active.

The given value will be rounded down to minutes.

Uses `datetime.datetime.now() if not specified.

NOTE - This time will not update across multiple runs unless explicitly set.

Default: ""

active_till

string

Time when the maintenance stops being active.

The given value will be rounded down to minutes.

Gets calculated from minutes if not specified when using minutes only.

When using time_periods defaults to one year from active_since

Default: ""

append

boolean

Whether to append hosts and host groups to the existing maintenance.

Choices:

  • false ← (default)

  • true

collect_data

boolean

Type of maintenance. With data collection, or without.

Choices:

  • false

  • true ← (default)

desc

aliases: description

string

Short description of maintenance window.

Default: "Created by Ansible"

host_groups

aliases: host_group

list / elements=string

Host groups to manage maintenance window for.

Required option when state=present and host_names is not used.

host_names

aliases: host_name

list / elements=string

Hosts to manage maintenance window for.

Required option when state=present and host_groups is not used.

http_login_password

string

Basic Auth password

http_login_user

string

Basic Auth login

minutes

integer

Length of maintenance window in minutes.

Will default to 10 minutes if not explicitly set

This argument has been DEPRECATED and replaced by the time_periods argument and will be removed in 4.0.0

Use of this argument only allows for the creation of a single one-time maintenance window.

name

string / required

Unique name of maintenance window.

state

string

Create or remove a maintenance window.

Maintenance window to remove is identified by name.

Choices:

  • "present" ← (default)

  • "absent"

tags

list / elements=dictionary

List of tags to assign to the hosts in maintenance.

Requires collect_data=yes.

operator

integer

Condition operator.

Possible values is

0 - Equals

2 - Contains

Default: 2

tag

string / required

Name of the tag.

value

string

Value of the tag.

Default: ""

time_periods

aliases: time_period

list / elements=dictionary

List scheduled outages within the maintenance period.

This argument replaces the minutes argument.

day_of_month

integer

The day of the month the maintenance window will occur.

This argument is required if frequency=monthly when day_of_week is not set.

day_of_week

list / elements=string

The day of the week the maintenance window will occur.

This argument is required if frequency=weekly.

This argument is required if frequency=monthly when day_of_month is not set.

duration

integer

The duration of this maintenance window in minutes.

Default: 10

every

string

The interval between each event.

For a frequency of daily or weekly this must be an integer.

For example when frequency=daily and every=2 the outage would occur every other day.

For I’(frequency=monthly) with day_of_week set, valid options include first, second, third, forth, last (week)

frequency

string / required

The frequency that this maintenance window will occur.

Choices:

  • "once"

  • "daily"

  • "weekly"

  • "monthly"

months

aliases: month

list / elements=string

The months that the maintenance window will occur.

This argument is required when the frequency=monthly

start_date

string

The date that the outage will occur on.

for a frequency of once only.

Uses `datetime.date.today() if not specified.

start_time

string / required

The time that this outage will start on.

Times should be entered in the HH:MM format using a 24-hour clock

visible_name

boolean

Type of zabbix host name to use for identifying hosts to include in the maintenance.

visible_name=yes to search by visible name, visible_name=no to search by technical name.

Choices:

  • false

  • true ← (default)

Notes

Note

  • Useful for setting hosts in maintenance mode before big update, and removing maintenance window after update.

  • Module creates maintenance window from now() to now() + minutes, so if Zabbix server’s time and host’s time are not synchronized, you will get strange results.

Examples

# If you want to use Username and Password to be authenticated by Zabbix Server
- name: Set credentials to access Zabbix Server API
  ansible.builtin.set_fact:
    ansible_user: Admin
    ansible_httpapi_pass: zabbix

# If you want to use API token to be authenticated by Zabbix Server
# https://www.zabbix.com/documentation/current/en/manual/web_interface/frontend_sections/administration/general#api-tokens
- name: Set API token
  ansible.builtin.set_fact:
    ansible_zabbix_auth_key: 8ec0d52432c15c91fcafe9888500cf9a607f44091ab554dbee860f6b44fac895

- name: Create a named maintenance window for host www1 for 90 minutes
  # set task level variables as we change ansible_connection plugin here
  vars:
    ansible_network_os: community.zabbix.zabbix
    ansible_connection: httpapi
    ansible_httpapi_port: 443
    ansible_httpapi_use_ssl: true
    ansible_httpapi_validate_certs: false
    ansible_zabbix_url_path: "zabbixeu"  # If Zabbix WebUI runs on non-default (zabbix) path ,e.g. http://<FQDN>/zabbixeu
    ansible_host: zabbix-example-fqdn.org
  community.zabbix.zabbix_maintenance:
    name: Update of www1
    host_name: www1.example.com
    state: present
    time_periods:
      - frequency: once
        duration: 90
        start_date: 2025-01-01
        start_time: 17:00

- name: Create a  maintenance window that occurs every other day for host www1 and host groups Office and Dev
  # set task level variables as we change ansible_connection plugin here
  vars:
    ansible_network_os: community.zabbix.zabbix
    ansible_connection: httpapi
    ansible_httpapi_port: 443
    ansible_httpapi_use_ssl: true
    ansible_httpapi_validate_certs: false
    ansible_zabbix_url_path: "zabbixeu"  # If Zabbix WebUI runs on non-default (zabbix) path ,e.g. http://<FQDN>/zabbixeu
    ansible_host: zabbix-example-fqdn.org
  community.zabbix.zabbix_maintenance:
    name: Update of www1
    host_name: www1.example.com
    host_groups:
      - Office
      - Dev
    state: present
    tags:
      - tag: ExampleHostsTag
      - tag: ExampleHostsTag2
        value: ExampleTagValue
      - tag: ExampleHostsTag3
        value: ExampleTagValue
        operator: 0
    time_periods:
      - frequency: daily
        start_time: 17:00
        every: 2

- name: Create a monthly (on the second Monday of the month) maintenance window for hosts www1 and db1, without data collection.
  # set task level variables as we change ansible_connection plugin here
  vars:
    ansible_network_os: community.zabbix.zabbix
    ansible_connection: httpapi
    ansible_httpapi_port: 443
    ansible_httpapi_use_ssl: true
    ansible_httpapi_validate_certs: false
    ansible_zabbix_url_path: "zabbixeu"  # If Zabbix WebUI runs on non-default (zabbix) path ,e.g. http://<FQDN>/zabbixeu
    ansible_host: zabbix-example-fqdn.org
  community.zabbix.zabbix_maintenance:
    name: update
    host_names:
      - www1.example.com
      - db1.example.com
    state: present
    collect_data: false
    time_periods:
      - frequency: monthly
        start_time: 17:00
        day_of_week: Monday
        every: second

- name: Remove maintenance window by name
  # set task level variables as we change ansible_connection plugin here
  vars:
    ansible_network_os: community.zabbix.zabbix
    ansible_connection: httpapi
    ansible_httpapi_port: 443
    ansible_httpapi_use_ssl: true
    ansible_httpapi_validate_certs: false
    ansible_zabbix_url_path: "zabbixeu"  # If Zabbix WebUI runs on non-default (zabbix) path ,e.g. http://<FQDN>/zabbixeu
    ansible_host: zabbix-example-fqdn.org
  community.zabbix.zabbix_maintenance:
    name: Test1
    state: absent

- name: Create maintenance window by date.  Window will occur on the 1st of January, April, July, and October
  # set task level variables as we change ansible_connection plugin here
  vars:
    ansible_network_os: community.zabbix.zabbix
    ansible_connection: httpapi
    ansible_httpapi_port: 443
    ansible_httpapi_use_ssl: true
    ansible_httpapi_validate_certs: false
    ansible_zabbix_url_path: "zabbixeu"  # If Zabbix WebUI runs on non-default (zabbix) path ,e.g. http://<FQDN>/zabbixeu
    ansible_host: zabbix-example-fqdn.org
  community.zabbix.zabbix_maintenance:
    name: TestDate
    state: present
    host_names:
      - host.example.org
    active_since: "1979-09-19 09:00"
    active_till: "1979-09-19 17:00"
    time_periods:
      - frequency: monthly
        months:
          - January
          - April
          - July
          - October
        day_of_month: 1
        start_time: 17:00

Authors

  • Alexander Bulimov (@abulimov)