--- - 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