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

Этот сценарий PowerShell работает:

$serverInstance = "100.200.300.400,2211"

$database = "myDatabase"

Backup-SqlDatabase -ServerInstance $serverInstance -BackupSetName "$database Ansible Deployment Backup" -Database $database -verbose

Однако, когда я пытаюсь преобразовать это для работы в Ansible, он завершается неудачно, потому что хочет, чтобы переменная экземпляра сервера была заключена в кавычки из-за запятой для порта. И он хочет, чтобы имя резервного набора указывалось в кавычках из-за пробелов (я думаю).

- name: Call PowerShell Module to backup database
  win_shell: Backup-SqlDatabase -ServerInstance “{{ serverInstance }}” -BackupSetName “{{ backupSetName }}” -Database {{ database }} -Verbose"
  register: backup_result

Этот синтаксис дает мне такую ​​ошибку:

"cmd": "Backup-SqlDatabase-ServerInstance \ "100.200.300.400,2211 \" -BackupSetName \ "myDatabase Резервное копирование для развертывания \" -Database myDatabase -Verbose "

" stderr ":" Backup-SqlDatabase: возникла исключительная ситуация при выполнении Transact-SQL \ r \ nstatement или batch. \ R \ nAt строка: 1 символ: 65 \ r \ n + [Console] :: InputEncoding = New-Object Text.UTF8Encoding $ false; \ r \ nBackup-SqlDataba ... \ r \n +

Мне кажется, я хочу получить этот результат для cmd:

"cmd": Backup-SqlDatabase -ServerInstance «100.200.300.400,2211» -BackupSetName «myDatabase AnsibleРезервное копирование развертывания »-Database myDatabase -Verbose

Я прочитал все вопросы, похожие на мою проблему на этом сайте, и попробовал каждый пример. Я пробовал каждую комбинацию одинарных и двойных кавычек, экранирование кавычек и фильтр цитатбезрезультатно. Я уверен, что этопросто. Любая помощь будет принята с благодарностью. Спасибо.

ОБНОВЛЕНИЕ


ServerInstance является дополнительной переменной

serverInstance: "100.200.300.400,2211"

BackupSetName является фактомобъединить дополнительную переменную базы данных и строку.

  • set_fact: backupSetName: "{{database}} Ansible Deployment Backup"

Я изменил win_shell на следующее, основываясь наВаша рекомендация фильтра цитат:

win_shell: Backup-SqlDatabase -ServerInstance {{serverInstance |цитата}} -BackupSetName {{backupSetName |quote}} -Database {{database}} -Verbose

Это был результат, обратите внимание, что backupSetName указан в кавычках, а serverInstance - нет, потому что он считает его списком, а не строкой?

"cmd": "Backup-SqlDatabase -ServerInstance 100.200.300.400,2211 -BackupSetName 'myDatabase Ansible Deployment Backup' -Database myDatabase -Verbose",

Ошибка была вызвана тем, что запятая и номер порта былиудалено из переменной serverInstance.

"stderr": "Backup-SqlDatabase: не удалось подключиться к серверу 100.200.300.400. \ r

Мы приближаемся, спасибо за вашу помощь.

...