diff --git a/playbooks/install_software_win.yml b/playbooks/install_software_win.yml index b2e17b0..ee592f5 100644 --- a/playbooks/install_software_win.yml +++ b/playbooks/install_software_win.yml @@ -23,7 +23,7 @@ unc_file: "{{ smb_path | regex_replace('\\\\+$', '') }}\\{{ installer_file }}" tasks: - - name: Check installer on share and list folder + - name: Check installer on share and list folder ansible.windows.win_powershell: parameters: Share: "{{ smb_path }}" @@ -32,35 +32,40 @@ File: "{{ installer_file }}" script: | param($Share, $User, $Pass, $File) - $ErrorActionPreference = 'Stop' - net use $Share /delete /y 2>&1 | Out-Null - $out = net use $Share /user:$User $Pass 2>&1 - if ($LASTEXITCODE -ne 0) { throw "net use failed: $out" } - $names = Get-ChildItem -LiteralPath $Share | Select-Object -ExpandProperty Name - $Ansible.Result = @{ - exists = [bool]($names -contains $File) - files = $names + $ErrorActionPreference = 'Continue' + $res = @{ exists = $false; files = @(); error = '' } + try { + & net.exe use $Share /delete /y 2>&1 | Out-Null + $out = & net.exe use $Share "/user:$User" $Pass 2>&1 | Out-String + if ($LASTEXITCODE -ne 0) { + $res.error = "net use failed (code $LASTEXITCODE): $out" + } else { + $names = @(Get-ChildItem -LiteralPath $Share -ErrorAction Stop | Select-Object -ExpandProperty Name) + $res.files = $names + $res.exists = [bool]($names -contains $File) + & net.exe use $Share /delete /y 2>&1 | Out-Null + } + } catch { + $res.error = $_.Exception.Message } - net use $Share /delete /y 2>&1 | Out-Null + $Ansible.Result = $res + error_action: continue register: share_check no_log: true + failed_when: false - - name: Show files on share + - name: Show share check result ansible.builtin.debug: - var: share_check.result.files + msg: + error: "{{ share_check.result.error | default(share_check.msg | default('нет данных')) }}" + files: "{{ share_check.result.files | default([]) }}" - - name: Fail if installer not found + - name: Fail if share unavailable or file missing ansible.builtin.fail: - msg: "Файл {{ installer_file }} не найден в {{ smb_path }}" - when: not share_check.result.exists - - - name: Install {{ installer_file }} - ansible.windows.win_package: - path: "{{ unc_file }}" - username: "{{ smb_user }}" - password: "{{ smb_pass }}" - state: present - arguments: "{{ installer_args }}" - product_id: "{{ product_id | default(omit) }}" - creates_path: "{{ creates_path | default(omit) }}" - no_log: true \ No newline at end of file + msg: >- + {{ 'Ошибка доступа к шаре: ' ~ share_check.result.error + if (share_check.result.error | default('')) != '' + else 'Файл ' ~ installer_file ~ ' не найден в ' ~ smb_path }} + when: >- + (share_check.result.error | default('x')) != '' or + not (share_check.result.exists | default(false)) \ No newline at end of file