Обновить playbooks/install_software_win.yml

This commit is contained in:
ogrechko committed 2026-10-02 12:02:57 +03:00
1 parent cda39fc1f9
commit 64316ed83c
1 file changed
+41 -40
+41 -40
View File
@@ -1,28 +1,41 @@
--- ---
- name: Install Software from SMB - name: Prepare target host
hosts: windows hosts: localhost
gather_facts: no 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: collections:
- community.windows - community.windows
- ansible.windows - ansible.windows
vars: vars:
drive_letter: "Z" 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: tasks:
# 1. СНАЧАЛА УДАЛЯЕМ ДИСК (Принудительная зачистка) - name: Force unmount drive
# Это гарантирует, что старые зависшие сессии не помешают
- name: Force unmount Z drive
community.windows.win_mapped_drive: community.windows.win_mapped_drive:
letter: "{{ drive_letter }}" letter: "{{ drive_letter }}"
state: absent state: absent
ignore_errors: yes # Не падать, если диска и так нет ignore_errors: yes
# 2. ТЕПЕРЬ МОНТИРУЕМ НАЧИСТО - name: Mount network drive
- name: Mount Network Drive
community.windows.win_mapped_drive: community.windows.win_mapped_drive:
letter: "{{ drive_letter }}" letter: "{{ drive_letter }}"
path: "{{ smb_path }}" path: "{{ smb_path }}"
@@ -30,39 +43,27 @@
password: "{{ smb_pass }}" password: "{{ smb_pass }}"
state: present state: present
# 3. Проверяем файлы (для отладки) - name: Check installer exists
- name: Check file existence ansible.windows.win_stat:
win_stat: path: "{{ drive_letter }}:\\{{ installer_file }}"
path: "{{ drive_letter }}:\\freecad.exe"
register: file_info register: file_info
# 4. Установка - name: Fail if installer not found
#- name: Install Stirling-PDF (MSI) ansible.builtin.fail:
# ansible.windows.win_package: msg: "Файл {{ installer_file }} не найден в {{ smb_path }}"
# path: "{{ drive_letter }}:\\Stirling-PDF.msi" when: not file_info.stat.exists
# 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: Install freecad (EXE) - name: Install {{ installer_file }}
ansible.windows.win_package: ansible.windows.win_package:
path: "{{ drive_letter }}:\\freecad.exe" path: "{{ drive_letter }}:\\{{ installer_file }}"
state: present state: present
# Для EXE ключи тихой установки зависят от установщика (/S, /VERYSILENT и т.д.) arguments: "{{ installer_args }}"
arguments: /--silent product_id: "{{ product_id | default(omit) }}"
product_id: mango creates_path: "{{ creates_path | default(omit) }}"
# 5. Уборка post_tasks:
- name: Unmount Network Drive - name: Unmount network drive
community.windows.win_mapped_drive: community.windows.win_mapped_drive:
letter: "{{ drive_letter }}" letter: "{{ drive_letter }}"
state: absent state: absent
ignore_errors: yes