diff --git a/zabbix-repo/files/check-update.py b/zabbix-repo/files/check-update.py new file mode 100644 index 0000000000000000000000000000000000000000..8fdccd93e0ab3cbf24429bf06326ce556d4372c9 --- /dev/null +++ b/zabbix-repo/files/check-update.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python3 + +import urllib.request +import re + +PATTERN = r'<a\shref="(?P<link>\d\.\d/)">(?P<version>\d\.\d)/</a>\s+(?P<date>\d{2}-[A-Z][a-z]{2}-\d{4} \d{2}:\d{2})\s+-' + +def get_versions(): + response = urllib.request.urlopen("https://repo.zabbix.com/zabbix/") + page_content = response.read().decode("utf-8") + for match in re.findall(PATTERN, page_content): + link, version, date = match + major, minor = map(int, version.split(".")) + if minor % 2 == 0: + yield (major, minor), date + + +def main(): + import sys + current_version = sys.argv[1] + current_major, current_minor = map(int, current_version.split(".")) + highest_version, date = sorted(get_versions())[-1] + if (current_major, current_minor) < highest_version: + print( + "New Zabbix version is available: {} from {}, please upgrade!".format( + '.'.join(map(str, highest_version)), + date)) + +if __name__ == "__main__": + main() diff --git a/zabbix-repo/tasks/main.yml b/zabbix-repo/tasks/main.yml index d4a5af958e6faaeba87c107edfa6c0f1d413d05d..248aff1f997fcd0db94e3f4e686926193257b32e 100644 --- a/zabbix-repo/tasks/main.yml +++ b/zabbix-repo/tasks/main.yml @@ -17,9 +17,9 @@ repo: "{{ item }}" state: absent with_items: - - 'deb http://repo.zabbix.com/zabbix/3.0/debian {{ debian_version }} main' + - 'deb http://repo.zabbix.com/zabbix/{{old_zabbix_version}}/debian {{ debian_version }} main' # yamllint disable-line rule:line-length - - 'deb-src http://repo.zabbix.com/zabbix/3.0/debian {{ debian_version }} main' + - 'deb-src http://repo.zabbix.com/zabbix/{{old_zabbix_version}}/debian {{ debian_version }} main' notify: - update apt cache tags: @@ -31,9 +31,9 @@ repo: "{{ item }}" state: present with_items: - - 'deb http://repo.zabbix.com/zabbix/3.4/debian {{ debian_version }} main' + - 'deb http://repo.zabbix.com/zabbix/{{zabbix_version}}/debian {{ debian_version }} main' # yamllint disable-line rule:line-length - - 'deb-src http://repo.zabbix.com/zabbix/3.4/debian {{debian_version }} main' + - 'deb-src http://repo.zabbix.com/zabbix/{{zabbix_version}}/debian {{debian_version }} main' notify: - update apt cache tags: @@ -64,4 +64,32 @@ - zabbix - chr +- name: query installed packages + package_facts: + register: installed_packages + tags: + - repos + - zabbix + +- name: check for new packages + block: + - name: upload the version check script + copy: + src: check-update.py + dest: "/usr/local/sbin/check-update.py" + owner: root + group: root + mode: '0755' + - name: ensure the version check script is executed regularly + template: + src: crontab.j2 + dest: /etc/cron.d/check-zabbix-version + owner: root + group: root + mode: '0644' + when: '"zabbix-server-pgsql" in installed_packages.ansible_facts.packages' + tags: + - repos + - zabbix + - meta: flush_handlers diff --git a/zabbix-repo/templates/crontab.j2 b/zabbix-repo/templates/crontab.j2 new file mode 100644 index 0000000000000000000000000000000000000000..3e846570f20b2248f2a71fc6892acab4701ca425 --- /dev/null +++ b/zabbix-repo/templates/crontab.j2 @@ -0,0 +1 @@ +{{60|random(seed=inventory_hostname)}} {{6|random(seed=inventory_hostname)}} * * * root /usr/local/sbin/check-update.py {{zabbix_version}} diff --git a/zabbix-repo/vars/main.yml b/zabbix-repo/vars/main.yml new file mode 100644 index 0000000000000000000000000000000000000000..443d97049bc9d7ff53f73646395b38cb47a8fddf --- /dev/null +++ b/zabbix-repo/vars/main.yml @@ -0,0 +1,4 @@ +--- + +old_zabbix_version: "3.4" +zabbix_version: "4.0"