Кукольный наследник с двойными кавычками в разных строках - PullRequest
0 голосов
/ 29 ноября 2018

Я хотел бы передать многострочную команду в ресурс Puppet (4.10.12) exec.Следующее не работает с «синтаксической ошибкой в« sudo »»:

exec { 'create databases':
  command => $("EOT")
    sudo -u postgres psql -c
    "CREATE DATABASE db1 ENCODING 'utf8' LC_COLLATE 'en_US.UTF-8' LC_CTYPE 'en_US.UTF-8';
    CREATE DATABASE db2 ENCODING 'utf8' LC_COLLATE 'en_US.UTF-8' LC_CTYPE 'en_US.UTF-8';
    CREATE DATABASE db3 ENCODING 'utf8' LC_COLLATE 'en_US.UTF-8' LC_CTYPE 'en_US.UTF-8'"
    |-EOT,
}

Я предполагаю, что сложным в этом случае является то, что две двойные кавычки появляются в разных строках.Так какой же правильный синтаксис heredoc для такого случая?

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Теперь работает следующее:

exec { 'create databases':
  command => @("EOT"/L)
    sudo -u postgres psql \
    -c "CREATE DATABASE db1 ENCODING 'utf8' LC_COLLATE 'en_US.UTF-8' LC_CTYPE 'en_US.UTF-8'" \
    -c "CREATE DATABASE db2 ENCODING 'utf8' LC_COLLATE 'en_US.UTF-8' LC_CTYPE 'en_US.UTF-8'" \
    -c "CREATE DATABASE db3 ENCODING 'utf8' LC_COLLATE 'en_US.UTF-8' LC_CTYPE 'en_US.UTF-8'"
    |-EOT
}

Следующие изменения были необходимы:

  • используйте `@ 'вместо' $ 'для ссылки на heredoc (опечатка)
  • используйте три -c опции вместо одной (во избежание ошибки CREATE DATABASE cannot be executed from a function or multi-command string)
  • используйте переключатель heredoc L (как предложено @mardotio)

Я приму другой ответ, поскольку он содержит важный элемент (и от нового участника: -)

0 голосов
/ 06 декабря 2018

Полагаю, вам нужно добавить переключатель L в свой heredoc и добавить \ в конец каждой строки, чтобы экранировать новую строку.

$command = $("EOT"/L)
  sudo -u postgres psql -c\
  "CREATE DATABASE db1 ENCODING 'utf8' LC_COLLATE 'en_US.UTF-8' LC_CTYPE 'en_US.UTF-8';\
  CREATE DATABASE db2 ENCODING 'utf8' LC_COLLATE 'en_US.UTF-8' LC_CTYPE 'en_US.UTF-8';\
  CREATE DATABASE db3 ENCODING 'utf8' LC_COLLATE 'en_US.UTF-8' LC_CTYPE 'en_US.UTF-8'"
  |-EOT

exec { 'create databases':
  command => $command,
}

Вы можете просмотреть документацию здесь в разделе «Подавление литеральных разрывов строк».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...