Приведенная ниже Ansible «проблемная игра» работает нормально, когда вы запускаете блок кода ps непосредственно в powershell. Однако при запуске через Ansible он падает с:
ERROR! failed at splitting arguments, either an unbalanced jinja2 block or quotes: $iExit = 0
Более простые блоки кода запускаются без проблем (также включены ниже)
Я попытался обернуть блок вjinja2 многострочное экранирование с использованием {% raw%} и {% endraw%}. Ошибка всегда с первой строкой:
ERROR! failed at splitting arguments, either an unbalanced jinja2 block or quotes: {% raw %}
Проблемное воспроизведение
tasks:
- name: Purge all rotated logs
win_shell: |
$iExit = 0
Get-ChildItem D:\application*|? {$_.PSIsContainer -eq $true}|% {
Get-ChildItem log* -Path "$_\logs\" -ErrorAction Stop |? {$_.Name -match "log\d{4}-\d{2}-\d{2}\.\d{2}\.txt"}|% {
Write-Host Removing $_.FullName which is $_.Length Bytes and last written to on $_.LastWriteTime
Try {
Remove-Item $_.FullName -ErrorAction Stop
}
Catch [Exception] {
$iExit = 1
Write-Host "[ERROR removing file: $($_.Exception.Message)]"
}}}
Exit $iExit
Игра без проблем
tasks:
- name: Purge all rotated logs
win_shell: |
Get-Childitem log* -Recurse -path D:\logs\ |
Where{$_.Name -match "log\d{4}-\d{2}-\d{2}\.\d{2}\.txt"} |
Foreach-Object {
Write-Host Removing $_.FullName which is $_.Length Bytes and last written to on $_.LastWriteTime
Remove-Item $_.FullName
}