--- - name: Install Software from SMB hosts: windows gather_facts: no # Не забываем про коллекции, если они нужны collections: - community.windows - ansible.windows vars: drive_letter: "Z" # smb_user, smb_pass, smb_path приходят из Semaphore Environment tasks: # 1. СНАЧАЛА УДАЛЯЕМ ДИСК (Принудительная зачистка) # Это гарантирует, что старые зависшие сессии не помешают - name: Force unmount Z drive community.windows.win_mapped_drive: letter: "{{ drive_letter }}" state: absent ignore_errors: yes # Не падать, если диска и так нет # 2. ТЕПЕРЬ МОНТИРУЕМ НАЧИСТО - name: Mount Network Drive community.windows.win_mapped_drive: letter: "{{ drive_letter }}" path: "{{ smb_path }}" username: "{{ smb_user }}" password: "{{ smb_pass }}" state: present # 3. Проверяем файлы (для отладки) - name: Check file existence win_stat: path: "{{ drive_letter }}:\\Stirling-PDF.msi" register: file_info # 4. Установка - name: Install Stirling-PDF (MSI) ansible.windows.win_package: path: "{{ drive_letter }}:\\Stirling-PDF.msi" state: present arguments: /quiet /norestart when: file_info.stat.exists # Пример 2: Установка EXE (Notepad++) - name: Install Notepad++ (EXE) ansible.windows.win_package: path: "{{ drive_letter }}:\\notepad.exe" state: present # Для EXE ключи тихой установки зависят от установщика (/S, /VERYSILENT и т.д.) arguments: /S product_id: Notepad++ # Помогает Ansible понять, установлен ли софт when: file_info.stat.exists # 5. Уборка - name: Unmount Network Drive community.windows.win_mapped_drive: letter: "{{ drive_letter }}" state: absent