diff --git a/playbooks/install_software_win.yml b/playbooks/install_software_win.yml index c72348b..b12c7b6 100644 --- a/playbooks/install_software_win.yml +++ b/playbooks/install_software_win.yml @@ -1,28 +1,41 @@ --- -- name: Install Software from SMB - hosts: windows +- name: Prepare target host + hosts: localhost gather_facts: no - - # Не забываем про коллекции, если они нужны + tasks: + - name: Add target host from survey + ansible.builtin.add_host: + name: "{{ target_ip }}" + groups: dynamic_windows + ansible_connection: winrm + ansible_port: "{{ winrm_port | default(5985) }}" + ansible_winrm_transport: "{{ winrm_transport | default('ntlm') }}" + ansible_winrm_server_cert_validation: ignore + ansible_user: "{{ win_user }}" + ansible_password: "{{ win_pass }}" + +- name: Install Software from SMB + hosts: dynamic_windows + gather_facts: no + collections: - community.windows - ansible.windows vars: drive_letter: "Z" - # smb_user, smb_pass, smb_path приходят из Semaphore Environment + # target_ip, installer_file приходят из Survey + # smb_user, smb_pass, smb_path, win_user, win_pass приходят из Environment + installer_args: "/S" # можно переопределить в Survey tasks: - # 1. СНАЧАЛА УДАЛЯЕМ ДИСК (Принудительная зачистка) - # Это гарантирует, что старые зависшие сессии не помешают - - name: Force unmount Z drive + - name: Force unmount drive community.windows.win_mapped_drive: letter: "{{ drive_letter }}" state: absent - ignore_errors: yes # Не падать, если диска и так нет + ignore_errors: yes - # 2. ТЕПЕРЬ МОНТИРУЕМ НАЧИСТО - - name: Mount Network Drive + - name: Mount network drive community.windows.win_mapped_drive: letter: "{{ drive_letter }}" path: "{{ smb_path }}" @@ -30,39 +43,27 @@ password: "{{ smb_pass }}" state: present - # 3. Проверяем файлы (для отладки) - - name: Check file existence - win_stat: - path: "{{ drive_letter }}:\\freecad.exe" + - name: Check installer exists + ansible.windows.win_stat: + path: "{{ drive_letter }}:\\{{ installer_file }}" 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 (mango) - #- name: Install mango (EXE) - # ansible.windows.win_package: - # path: "{{ drive_letter }}:\\mango.exe" - # state: present - # Для EXE ключи тихой установки зависят от установщика (/S, /VERYSILENT и т.д.) - # arguments: /--silent - # product_id: mango # Помогает Ansible понять, установлен ли софт + - name: Fail if installer not found + ansible.builtin.fail: + msg: "Файл {{ installer_file }} не найден в {{ smb_path }}" + when: not file_info.stat.exists - - name: Install freecad (EXE) + - name: Install {{ installer_file }} ansible.windows.win_package: - path: "{{ drive_letter }}:\\freecad.exe" + path: "{{ drive_letter }}:\\{{ installer_file }}" state: present - # Для EXE ключи тихой установки зависят от установщика (/S, /VERYSILENT и т.д.) - arguments: /--silent - product_id: mango - - # 5. Уборка - - name: Unmount Network Drive + arguments: "{{ installer_args }}" + product_id: "{{ product_id | default(omit) }}" + creates_path: "{{ creates_path | default(omit) }}" + + post_tasks: + - name: Unmount network drive community.windows.win_mapped_drive: letter: "{{ drive_letter }}" - state: absent \ No newline at end of file + state: absent + ignore_errors: yes \ No newline at end of file