Как сказать Ansible win_shell не пытаться интерпретировать многострочные команды - PullRequest
1 голос
/ 06 ноября 2019

Приведенная ниже 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
        }

1 Ответ

1 голос
/ 06 ноября 2019

Похоже, проблема в этой строке:

...
Get-ChildItem log* -Path "$_\logs\" -ErrorAction Stop ...
...

И, в частности, последняя цитата:

"$_\logs\"

Случайно, если путь к файлу с косой чертой, выслучайно говорит Ansible, что нужно экранировать последнюю кавычку с \", которая выглядит так, как будто она закрывает строку, что приводит к ошибке «несбалансированные кавычки».

Удаление косой черты должно устранить ошибку.

...