commit c11297ccf21f10e8e7dc4d9472afaed0b8c293e2 Author: Windneiro Date: Tue Mar 31 13:01:25 2026 +0500 Initial commit: Zabbix scripts and Ansible deploy diff --git a/.gitea/workflows/deploy.yaml b/.gitea/workflows/deploy.yaml new file mode 100644 index 0000000..124067f --- /dev/null +++ b/.gitea/workflows/deploy.yaml @@ -0,0 +1,19 @@ +name: Remote Deploy to Windows +on: + push: + branches: [main] + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Run Ansible Playbook + env: + # Пароли лучше хранить в Secrets Gitea + ANSIBLE_NETCONF_PASSWORD: ${{ secrets.WINRM_PASSWORD }} + run: | + cd ansible + ansible-playbook -i inventory.ini playbook.yml \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/ansible/inventory.ini b/ansible/inventory.ini new file mode 100644 index 0000000..3c2162e --- /dev/null +++ b/ansible/inventory.ini @@ -0,0 +1,9 @@ +[windows] +GUFK_ISERVER ansible_host=192.168.1.2 + +[windows:vars] +ansible_user=admin@efgufk.com +ansible_password=Sj032ssa! +ansible_connection=winrm +ansible_winrm_server_cert_validation=ignore +ansible_port=5985 \ No newline at end of file diff --git a/ansible/playbook.yml b/ansible/playbook.yml new file mode 100644 index 0000000..ae9cdac --- /dev/null +++ b/ansible/playbook.yml @@ -0,0 +1,8 @@ +--- +- name: Deploy FreeFileSync tasks to Windows servers + hosts: windows + tasks: + - name: Copy backup scripts + ansible.windows.win_copy: + src: ../scripts/ + dest: C:\CMD\ \ No newline at end of file diff --git a/scripts/autorun_for_ffs..j2 b/scripts/autorun_for_ffs..j2 new file mode 100644 index 0000000..f15c003 --- /dev/null +++ b/scripts/autorun_for_ffs..j2 @@ -0,0 +1,74 @@ +@echo off +chcp 65001 +setlocal enabledelayedexpansion +echo Запуск универсальной синхронизации FreeFileSync... +echo. + +:: --- НАСТРОЙКИ --- +set "FFS_PATH=C:\Program Files\FreeFileSync\FreeFileSync.exe" +set "Z_SENDER=C:\Program Files\Zabbix Agent\zabbix_sender.exe" +set "Z_SERVER=192.168.14.7" + +:: --- ЛОГИКА ИМЕНИ ХОСТА --- +set "Z_HOSTNAME={{ inventory_hostname }}" + +:: TLS параметры (убедись, что кавычки внутри кавычек не ломают строку) +set Z_TLS=--tls-connect psk --tls-psk-identity "%Z_HOSTNAME%" --tls-psk-file "C:\Program Files\Zabbix Agent\psk.key" + +:: Путь к логам +set "LOG_DIR=%~dp0Logs" +if not exist "%LOG_DIR%" mkdir "%LOG_DIR%" + +:: 1. СБОР СПИСКА ФАЙЛОВ И ОТПРАВКА DISCOVERY +echo Поиск файлов .ffs_batch в %~dp0... + +set "JSON={\"data\":[" +set "first=1" + +:: Собираем JSON для Zabbix +for %%F in ("%~dp0*.ffs_batch") do ( + if !first! == 0 (set "JSON=!JSON!,") + set "JSON=!JSON!{\"{#FFS_NAME}\":\"%%~nF\"}" + set "first=0" +) +set "JSON=!JSON!]}" + +if !first! == 1 ( + echo [%date% %time%] Ошибка: Файлы .ffs_batch не найдены! >> "%LOG_DIR%\sync_errors.log" + exit /b 1 +) + +echo Отправка списка задач в Zabbix для автообнаружения... +"%Z_SENDER%" %Z_TLS% -z %Z_SERVER% -s "%Z_HOSTNAME%" -k ffs.discovery -o "%JSON%" + +echo Ожидание синхронизации Zabbix (30 сек)... +timeout /t 30 /nobreak >nul + +:: 2. ОСНОВНОЙ ЦИКЛ ЗАПУСКА +:: Используем поиск файлов напрямую в цикле, чтобы избежать проблем с переменной FOUND_TASKS +for %%F in ("%~dp0*.ffs_batch") do ( + set "T=%%~nF" + echo ------------------------------------------- + echo Запуск задачи: !T!... + + :: Запуск FreeFileSync + "%FFS_PATH%" "%%F" + + :: Сохраняем код возврата + set "RET_CODE=!errorlevel!" + + echo Задача !T! завершена с кодом !RET_CODE!. Отправка в Zabbix... + + :: Отправка в Zabbix + "%Z_SENDER%" %Z_TLS% -z %Z_SERVER% -s "%Z_HOSTNAME%" -k ffs.status[!T!] -o !RET_CODE! -vv + + :: Безопасное логирование без использования ELSE внутри скобок цикла + echo [%date% %time%] !T! завершен с кодом !RET_CODE! >> "%LOG_DIR%\sync_log.txt" + if !RET_CODE! NEQ 0 ( + echo [%date% %time%] !T! ошибка !RET_CODE! >> "%LOG_DIR%\sync_errors.log" + ) +) + +echo. +echo Все найденные задачи выполнены. +pause \ No newline at end of file