353 lines
11 KiB
YAML
353 lines
11 KiB
YAML
---
|
|
- name: "Windows | Set default architecture"
|
|
ansible.builtin.set_fact:
|
|
windows_arch: 32
|
|
tags:
|
|
- always
|
|
|
|
- name: "Windows | Override architecture if 64-bit"
|
|
ansible.builtin.set_fact:
|
|
windows_arch: 64
|
|
when:
|
|
- ansible_architecture == "64-bit"
|
|
tags:
|
|
- always
|
|
|
|
- name: "Windows | Set path to zabbix.exe"
|
|
ansible.builtin.set_fact:
|
|
zabbix_win_exe_path: '{{ zabbix_win_install_dir }}\bin\win{{ windows_arch }}\zabbix_agentd.exe'
|
|
tags:
|
|
- always
|
|
|
|
- name: "Windows | Set variables specific to Zabbix"
|
|
ansible.builtin.set_fact:
|
|
zabbix_win_svc_name: Zabbix Agent
|
|
zabbix_win_exe_path: '{{ zabbix_win_install_dir }}\bin\zabbix_agentd.exe'
|
|
zabbix_win_config_name: "zabbix_agentd.conf"
|
|
zabbix2_win_svc_name: Zabbix Agent 2
|
|
zabbix2_win_exe_path: '{{ zabbix_win_install_dir }}\bin\zabbix_agent2.exe'
|
|
zabbix2_win_config_name: "zabbix_agent2.conf"
|
|
tags:
|
|
- always
|
|
|
|
- name: "Windows | Check if Zabbix agent is present"
|
|
ansible.windows.win_stat:
|
|
path: "{{ item }}"
|
|
with_items:
|
|
- "{{ zabbix_win_exe_path }}"
|
|
- "{{ zabbix2_win_exe_path }}"
|
|
register: agent_file_info
|
|
tags:
|
|
- always
|
|
|
|
- name: "Windows | Get Installed Zabbix Agent Version"
|
|
community.windows.win_file_version:
|
|
path: "{{ item.item }}"
|
|
register: zabbix_win_exe_info
|
|
when:
|
|
- item.stat.exists | bool
|
|
with_items: "{{ agent_file_info.results }}"
|
|
tags:
|
|
- always
|
|
|
|
- name: "Windows | Set facts current zabbix agent installation"
|
|
ansible.builtin.set_fact:
|
|
zabbix_agent_1_binary_exist: true
|
|
zabbix_agent_1_version: zabbix_win_exe_info.results[0].win_file_version.product_version
|
|
when:
|
|
- zabbix_win_exe_info.results[0] is defined
|
|
- zabbix_win_exe_info.results[0].item.stat.exists
|
|
- zabbix_win_exe_info.results[0].item.stat.path == zabbix_win_exe_path
|
|
- zabbix_win_exe_info.results[0].win_file_version.product_version
|
|
tags:
|
|
- always
|
|
|
|
- name: "Windows | Set facts current zabbix agent installation (agent 2)"
|
|
ansible.builtin.set_fact:
|
|
zabbix_agent_2_binary_exist: true
|
|
zabbix_agent_2_version: zabbix_win_exe_info.results[1].win_file_version.product_version
|
|
when:
|
|
- zabbix_win_exe_info.results[1] is defined
|
|
- zabbix_win_exe_info.results[1].item.stat.exists
|
|
- zabbix_win_exe_info.results[1].item.stat.path == zabbix2_win_exe_path
|
|
- zabbix_win_exe_info.results[1].win_file_version.product_version
|
|
tags:
|
|
- always
|
|
|
|
- name: "Windows | Check Zabbix service"
|
|
ansible.windows.win_service:
|
|
name: "{{ (item.item.stat.path == zabbix_win_exe_path ) | ternary(zabbix_win_svc_name,zabbix2_win_svc_name) }}"
|
|
register: zabbix_service_info
|
|
when: item.item.stat.exists
|
|
with_items: "{{ zabbix_win_exe_info.results }}"
|
|
tags:
|
|
- always
|
|
|
|
- name: "Windows | Set facts about current zabbix agent service state"
|
|
ansible.builtin.set_fact:
|
|
zabbix_agent_1_service_exist: true
|
|
when:
|
|
- zabbix_service_info.results[0].exists is defined
|
|
- zabbix_service_info.results[0].exists
|
|
- zabbix_service_info.results[0].display_name == zabbix_win_svc_name
|
|
tags:
|
|
- always
|
|
|
|
- name: "Windows | Set facts about current zabbix agent service state (agent 2)"
|
|
ansible.builtin.set_fact:
|
|
zabbix_agent_2_service_exist: true
|
|
when:
|
|
- zabbix_service_info.results[1].exists is defined
|
|
- zabbix_service_info.results[1].exists
|
|
- zabbix_service_info.results[1].display_name == zabbix2_win_svc_name
|
|
tags:
|
|
- always
|
|
|
|
- name: "Windows | Set fact about version change requirement"
|
|
ansible.builtin.set_fact:
|
|
zabbix_agent_version_change: true
|
|
when: >
|
|
(zabbix_agent_1_binary_exist | default(false) and
|
|
zabbix_win_exe_info.results[0].win_file_version.product_version is version(zabbix_version_long, '<>'))
|
|
or
|
|
(zabbix_agent_2_binary_exist | default(false) and
|
|
zabbix_win_exe_info.results[1].win_file_version.product_version is version(zabbix_version_long, '<>'))
|
|
or (zabbix_agent_1_binary_exist | default(false) and zabbix_agent2)
|
|
or (zabbix_agent_2_binary_exist | default(false) and not zabbix_agent2)
|
|
tags:
|
|
- always
|
|
|
|
##################
|
|
# delete section #
|
|
##################
|
|
|
|
- name: "Windows | Stop Zabbix agent v1"
|
|
ansible.windows.win_service:
|
|
name: "{{ zabbix_win_svc_name }}"
|
|
start_mode: auto
|
|
state: stopped
|
|
when:
|
|
- zabbix_agent_version_change | default(false) or zabbix_agent2
|
|
- zabbix_agent_1_service_exist | default(false)
|
|
|
|
- name: "Windows | Stop Zabbix agent v2"
|
|
ansible.windows.win_service:
|
|
name: "{{ zabbix2_win_svc_name }}"
|
|
start_mode: auto
|
|
state: stopped
|
|
when:
|
|
- zabbix_agent_version_change | default(false) or not zabbix_agent2
|
|
- zabbix_agent_2_service_exist | default(false)
|
|
|
|
- name: "Windows | Uninstall Zabbix v1"
|
|
ansible.windows.win_command: '"{{ zabbix_win_exe_path }}" --config "{{ zabbix_win_install_dir_conf }}\{{ zabbix_win_config_name }}" --uninstall'
|
|
when:
|
|
- zabbix_agent_version_change | default(false) or zabbix_agent2
|
|
- zabbix_agent_1_service_exist | default(false)
|
|
|
|
- name: "Windows | Uninstall Zabbix v2"
|
|
ansible.windows.win_command: '"{{ zabbix2_win_exe_path }}" --config "{{ zabbix_win_install_dir_conf }}\{{ zabbix2_win_config_name }}" --uninstall'
|
|
when:
|
|
- zabbix_agent_version_change | default(false) or not zabbix_agent2
|
|
- zabbix_agent_2_service_exist | default(false)
|
|
|
|
- name: "Windows | Removing Zabbix Directory"
|
|
ansible.windows.win_file:
|
|
path: "{{ zabbix_win_install_dir }}"
|
|
state: absent
|
|
when:
|
|
((zabbix_agent_version_change | default(false) or zabbix_agent2) and zabbix_agent_1_binary_exist | default(false)) or
|
|
((zabbix_agent_version_change | default(false) or not zabbix_agent2) and zabbix_agent_2_binary_exist | default(false))
|
|
|
|
###################
|
|
# install section #
|
|
###################
|
|
|
|
- name: "Windows | Create directory structure"
|
|
ansible.windows.win_file:
|
|
path: "{{ item }}"
|
|
state: directory
|
|
with_items:
|
|
- "{{ zabbix_win_install_dir }}"
|
|
tags:
|
|
- install
|
|
|
|
- name: "Windows | Create directory structure, includes"
|
|
ansible.windows.win_file:
|
|
path: "{{ item }}"
|
|
state: directory
|
|
with_items:
|
|
- "{{ zabbix_agent_win_include }}"
|
|
when:
|
|
- ('.conf' not in zabbix_agent_win_include)
|
|
tags:
|
|
- install
|
|
|
|
- name: "Windows | Set installation settings (agent 2)"
|
|
ansible.builtin.set_fact:
|
|
zabbix_win_package: "{{ zabbix2_win_package }}"
|
|
zabbix_win_download_link: "{{ zabbix2_win_download_link }}"
|
|
zabbix_win_exe_path: "{{ zabbix2_win_exe_path }}"
|
|
zabbix_win_config_name: "{{ zabbix2_win_config_name }}"
|
|
zabbix_win_svc_name: "{{ zabbix2_win_svc_name }}"
|
|
when: zabbix_agent2 | bool
|
|
tags:
|
|
- install
|
|
|
|
- name: "Windows | Check if agent file is already downloaded"
|
|
ansible.windows.win_stat:
|
|
path: '{{ zabbix_win_install_dir }}\{{ zabbix_win_package }}'
|
|
register: file_info
|
|
tags:
|
|
- install
|
|
|
|
- name: "Windows | Check if agent binaries in place"
|
|
ansible.windows.win_stat:
|
|
path: "{{ zabbix_win_exe_path }}"
|
|
register: zabbix_windows_binaries
|
|
tags:
|
|
- install
|
|
|
|
- name: "Windows | Download Zabbix Agent Zip file"
|
|
ansible.windows.win_get_url:
|
|
url: "{{ zabbix_win_download_link }}"
|
|
dest: '{{ zabbix_win_install_dir }}\{{ zabbix_win_package }}'
|
|
url_username: "{{ zabbix_download_user | default(omit) }}"
|
|
url_password: "{{ zabbix_download_pass | default(omit) }}"
|
|
force: false
|
|
follow_redirects: all
|
|
proxy_url: "{{ zabbix_https_proxy | default(None) | default(omit) }}"
|
|
validate_certs: "{{ zabbix_download_validate_certs | default(False) | bool }}"
|
|
timeout: "{{ zabbix_download_timeout | default(120) | int }}"
|
|
when:
|
|
- not file_info.stat.exists
|
|
- not zabbix_windows_binaries.stat.exists
|
|
register: zabbix_agent_win_download_zip
|
|
until: zabbix_agent_win_download_zip is succeeded
|
|
throttle: "{{ zabbix_download_throttle | default(5) | int }}"
|
|
tags:
|
|
- install
|
|
|
|
- name: "Windows | Unzip file"
|
|
community.windows.win_unzip:
|
|
src: '{{ zabbix_win_install_dir }}\{{ zabbix_win_package }}'
|
|
dest: "{{ zabbix_win_install_dir }}"
|
|
creates: "{{ zabbix_win_exe_path }}"
|
|
tags:
|
|
- install
|
|
|
|
- name: "Windows | Cleanup downloaded Zabbix Agent Zip file"
|
|
ansible.windows.win_file:
|
|
path: '{{ zabbix_win_install_dir }}\{{ zabbix_win_package }}'
|
|
state: absent
|
|
when:
|
|
- zabbix_agent_win_download_zip.changed
|
|
tags:
|
|
- install
|
|
|
|
- name: "Windows | Copy binary files to expected location"
|
|
ansible.windows.win_copy:
|
|
src: "{{ zabbix_win_install_dir }}\\bin\\{{ item }}"
|
|
dest: "{{ zabbix_win_install_dir_bin }}\\{{ item }}"
|
|
remote_src: yes
|
|
loop:
|
|
- zabbix_agentd.exe
|
|
- zabbix_sender.exe
|
|
when:
|
|
- zabbix_win_install_dir_bin is defined
|
|
- not (zabbix_agent2 | bool)
|
|
tags:
|
|
- install
|
|
|
|
- name: "Windows | Copy binary files to expected location (zabbix-agent2)"
|
|
ansible.windows.win_copy:
|
|
src: "{{ zabbix_win_install_dir }}\\bin\\{{ item }}"
|
|
dest: "{{ zabbix_win_install_dir_bin }}\\{{ item }}"
|
|
remote_src: yes
|
|
loop:
|
|
- zabbix_agent2.exe
|
|
when:
|
|
- zabbix_win_install_dir_bin is defined
|
|
- zabbix_agent2 | bool
|
|
tags:
|
|
- install
|
|
|
|
- set_fact:
|
|
zabbix_win_exe_path: "{{ zabbix_win_install_dir_bin }}\\zabbix_agentd.exe"
|
|
when:
|
|
- zabbix_win_install_dir_bin is defined
|
|
- not (zabbix_agent2 | bool)
|
|
tags:
|
|
- install
|
|
|
|
- set_fact:
|
|
zabbix_win_exe_path: "{{ zabbix_win_install_dir_bin }}\\zabbix_agent2.exe"
|
|
when:
|
|
- zabbix_win_install_dir_bin is defined
|
|
- zabbix_agent2 | bool
|
|
tags:
|
|
- install
|
|
|
|
- name: "Create directory for PSK file if not exist."
|
|
ansible.windows.win_file:
|
|
path: "{{ zabbix_agent_tlspskfile | win_dirname }}"
|
|
state: directory
|
|
when:
|
|
- zabbix_agent_tlspskfile is defined
|
|
- zabbix_agent_tlspskfile
|
|
- not (zabbix_agent2 | bool)
|
|
tags:
|
|
- config
|
|
|
|
- name: "Create directory for PSK file if not exist (zabbix-agent2)"
|
|
ansible.windows.win_file:
|
|
path: "{{ zabbix_agent2_tlspskfile | win_dirname }}"
|
|
state: directory
|
|
when:
|
|
- zabbix_agent2_tlspskfile is defined
|
|
- zabbix_agent2_tlspskfile
|
|
- zabbix_agent2 | bool
|
|
tags:
|
|
- config
|
|
|
|
- name: "Place TLS PSK File"
|
|
ansible.windows.win_copy:
|
|
dest: "{{ zabbix_agent_tlspskfile }}"
|
|
content: "{{ zabbix_agent_tlspsk_secret }}"
|
|
when:
|
|
- zabbix_agent_tlspskfile is defined
|
|
- zabbix_agent_tlspskfile
|
|
- zabbix_agent_tlspsk_secret is defined
|
|
- not (zabbix_agent2 | bool)
|
|
notify:
|
|
- restart win zabbix agent
|
|
tags:
|
|
- config
|
|
|
|
- name: "Place TLS PSK File (zabbix-agent2)"
|
|
ansible.windows.win_copy:
|
|
dest: "{{ zabbix_agent2_tlspskfile }}"
|
|
content: "{{ zabbix_agent2_tlspsk_secret }}"
|
|
when:
|
|
- zabbix_agent2_tlspskfile is defined
|
|
- zabbix_agent2_tlspskfile
|
|
- zabbix_agent2_tlspsk_secret is defined
|
|
- zabbix_agent2 | bool
|
|
notify:
|
|
- restart win zabbix agent
|
|
tags:
|
|
- config
|
|
|
|
- name: "Windows | Check if windows service exist"
|
|
ansible.windows.win_service:
|
|
name: "{{ zabbix_win_svc_name }}"
|
|
register: zabbix_windows_service
|
|
tags:
|
|
- service
|
|
|
|
- name: "Windows | Register Service"
|
|
ansible.windows.win_command: '"{{ zabbix_win_exe_path }}" --config "{{ zabbix_win_install_dir_conf }}\{{ zabbix_win_config_name }}" --install'
|
|
when: not zabbix_windows_service.exists
|
|
tags:
|
|
- service
|