Puppet 在不同的行中使用双引号的木偶
我想将一个多行命令传递给Puppet(4.10.12)Puppet 在不同的行中使用双引号的木偶,puppet,Puppet,我想将一个多行命令传递给Puppet(4.10.12)execresource。以下操作因“sudo处的语法错误”而失败: 我认为这个案例的挑战在于两个双引号出现在不同的行上。那么,对于这种情况,正确的语法是什么呢 我认为您需要将L开关添加到您的heredoc中,并在每行末尾添加一个\以跳出新行 $command = $("EOT"/L) sudo -u postgres psql -c\ "CREATE DATABASE db1 ENCODING 'utf8' LC_COLLATE '
exec
resource。以下操作因“sudo处的语法错误”而失败:
我认为这个案例的挑战在于两个双引号出现在不同的行上。那么,对于这种情况,正确的语法是什么呢 我认为您需要将
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,
}
您可以在“抑制文字换行符”下查看文档。以下功能现在可以正常工作:
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
)无法从函数或多命令字符串执行创建数据库
- 使用
(按照@mardotio的建议)L
我会接受另一个答案,因为它包含一个重要的元素(并且是由一个新的参与者:-)我建议将命令放在模块
files
目录中的一个文件中,然后使用file
函数()返回一个字符串作为command
属性的值。然后,您将删除格式问题。你觉得这可行吗?
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
}