Обновить playbooks/install_software_win.yml
This commit is contained in:
1 parent
3a09e9373b
commit
e2c6acaef8
1 file changed
+37
-29
@@ -20,62 +20,70 @@
|
|||||||
|
|
||||||
vars:
|
vars:
|
||||||
installer_args: "/S"
|
installer_args: "/S"
|
||||||
unc_file: "{{ smb_path | regex_replace('\\\\+$', '') }}\\{{ installer_file }}"
|
local_dir: 'C:\Windows\Temp\ansible_install'
|
||||||
|
local_file: "{{ local_dir }}\\{{ installer_file }}"
|
||||||
|
|
||||||
tasks:
|
tasks:
|
||||||
- name: Check installer on share and list folder
|
- name: Copy installer from share to local temp
|
||||||
ansible.windows.win_powershell:
|
ansible.windows.win_powershell:
|
||||||
parameters:
|
parameters:
|
||||||
Share: "{{ smb_path }}"
|
Share: "{{ smb_path }}"
|
||||||
User: "{{ smb_user }}"
|
User: "{{ smb_user }}"
|
||||||
Pass: "{{ smb_pass }}"
|
Pass: "{{ smb_pass }}"
|
||||||
File: "{{ installer_file }}"
|
File: "{{ installer_file }}"
|
||||||
|
Dest: "{{ local_dir }}"
|
||||||
script: |
|
script: |
|
||||||
param($Share, $User, $Pass, $File)
|
param($Share, $User, $Pass, $File, $Dest)
|
||||||
$ErrorActionPreference = 'Continue'
|
$ErrorActionPreference = 'Continue'
|
||||||
$res = @{ exists = $false; files = @(); error = '' }
|
$res = @{ copied = $false; files = @(); error = '' }
|
||||||
try {
|
try {
|
||||||
& net.exe use $Share /delete /y 2>&1 | Out-Null
|
& net.exe use $Share /delete /y 2>&1 | Out-Null
|
||||||
$out = & net.exe use $Share "/user:$User" $Pass 2>&1 | Out-String
|
$out = & net.exe use $Share "/user:$User" $Pass 2>&1 | Out-String
|
||||||
if ($LASTEXITCODE -ne 0) {
|
if ($LASTEXITCODE -ne 0) {
|
||||||
$res.error = "net use failed (code $LASTEXITCODE): $out"
|
$res.error = "net use failed (code $LASTEXITCODE): $out"
|
||||||
} else {
|
} else {
|
||||||
$names = @(Get-ChildItem -LiteralPath $Share -ErrorAction Stop | Select-Object -ExpandProperty Name)
|
$res.files = @(Get-ChildItem -LiteralPath $Share -ErrorAction Stop | Select-Object -ExpandProperty Name)
|
||||||
$res.files = $names
|
$src = Join-Path $Share $File
|
||||||
$res.exists = [bool]($names -contains $File)
|
if (-not (Test-Path -LiteralPath $src)) {
|
||||||
|
$res.error = "Файл $File не найден на шаре"
|
||||||
|
} else {
|
||||||
|
New-Item -ItemType Directory -Path $Dest -Force | Out-Null
|
||||||
|
Copy-Item -LiteralPath $src -Destination $Dest -Force -ErrorAction Stop
|
||||||
|
$res.copied = $true
|
||||||
|
}
|
||||||
& net.exe use $Share /delete /y 2>&1 | Out-Null
|
& net.exe use $Share /delete /y 2>&1 | Out-Null
|
||||||
}
|
}
|
||||||
} catch {
|
} catch {
|
||||||
$res.error = $_.Exception.Message
|
$res.error = $_.Exception.Message
|
||||||
}
|
}
|
||||||
$Ansible.Result = $res
|
$Ansible.Result = $res
|
||||||
register: share_check
|
register: copy_result
|
||||||
no_log: true
|
no_log: true
|
||||||
|
changed_when: false
|
||||||
failed_when: false
|
failed_when: false
|
||||||
|
|
||||||
- name: Show share check result
|
- name: Show copy result
|
||||||
ansible.builtin.debug:
|
ansible.builtin.debug:
|
||||||
msg:
|
msg:
|
||||||
error: "{{ share_check.result.error | default(share_check.msg | default('нет данных')) }}"
|
error: "{{ copy_result.result.error | default(copy_result.msg | default('нет данных')) }}"
|
||||||
files: "{{ share_check.result.files | default([]) }}"
|
files: "{{ copy_result.result.files | default([]) }}"
|
||||||
|
|
||||||
- name: Fail if share unavailable or file missing
|
- name: Fail if copy did not succeed
|
||||||
ansible.builtin.fail:
|
ansible.builtin.fail:
|
||||||
msg: >-
|
msg: "Не удалось скопировать {{ installer_file }}: {{ copy_result.result.error | default('неизвестная ошибка') }}"
|
||||||
{{ 'Ошибка доступа к шаре: ' ~ share_check.result.error
|
when: not (copy_result.result.copied | default(false))
|
||||||
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))
|
|
||||||
|
|
||||||
- name: Install {{ installer_file }}
|
- name: Install and clean up
|
||||||
ansible.windows.win_package:
|
block:
|
||||||
path: "{{ unc_file }}"
|
- name: Install {{ installer_file }}
|
||||||
username: "{{ smb_user }}"
|
ansible.windows.win_package:
|
||||||
password: "{{ smb_pass }}"
|
path: "{{ local_file }}"
|
||||||
state: present
|
state: present
|
||||||
arguments: "{{ installer_args }}"
|
arguments: "{{ installer_args }}"
|
||||||
product_id: "{{ product_id | default(omit) }}"
|
product_id: "{{ product_id | default(omit) }}"
|
||||||
creates_path: "{{ creates_path | default(omit) }}"
|
creates_path: "{{ creates_path | default(omit) }}"
|
||||||
no_log: true
|
always:
|
||||||
|
- name: Remove local installer copy
|
||||||
|
ansible.windows.win_file:
|
||||||
|
path: "{{ local_dir }}"
|
||||||
|
state: absent
|
||||||
Reference in new issue
Block a user