在 puppet 中,如果定义命令 > 80 个字符,我该如何换行成两行?
exec { 'create_domain':
command => "some command exceed 80 character...........................................................how to do how to do?.......",
}
在 puppet 中,如果定义命令 > 80 个字符,我该如何换行成两行?
exec { 'create_domain':
command => "some command exceed 80 character...........................................................how to do how to do?.......",
}
这有点难看,但如果字符串中的最后一个字符是 a\
后跟换行符,那么该字符串将在下一行继续。我的sample.pp
清单如下:
exec { 'wrapped_string_example':
command => "/bin/echo 12345678901234567890123456789012345678901234567890\
wrapped > /var/tmp/test.txt";
}
运行它puppet apply sample.pp
会给出以下输出
$ puppet apply sample.pp
notice: /Stage[main]/Exec[wrapped_string_example]/returns: executed successfully
notice: Finished catalog run in 0.10 seconds
并且 catting 创建的文件显示行已换行:
$ cat /var/tmp/test.txt
12345678901234567890123456789012345678901234567890wrapped
请参阅https://github.com/puppetlabs/puppet/blob/9fbb36de/lib/puppet/parser/lexer.rb#L537(自 Puppet v2.7.0 起)
对于大块数据,heredocs 是处理 Puppet manifest 中长行的最佳方式。/L
插值选项特别有用。/L
导致\
在行尾删除换行符。例如,以下内容符合您的预期,去除缩进和换行符,包括尾随换行符。
sshkey { 'example.com':
ensure => present,
type => 'ssh-rsa',
key => @(KEY/L),
RfrXBrU1T6qMNllnhXsJdaud9yBgWWm6OprdEQ3rpkTvCc9kJKH0k8MNfKxeBiGZVsUn435q\
e83opnamtGBz17gUOrzjfmpRuBaDDGmGGTPcO8Dohwz1zYuir93bJmxkNldjogbjAWPfrX10\
8aoDw26K12sK61lOt6GTdR9yjDPdG4zL5G3ZjXCuDyQ6mzcNHdAPPFRQdlRRyCtG2sQWpWan\
3AlYe6h6bG48thlo6vyNvOD8s9K0YBnwl596DJiNCY6EsxnSAhA3Uf9jeKqlVqqrxhEzHufx\
07iP1nXIXCMUV
|-KEY
target => '/home/user/.ssh/authorized_keys',
}
或者要保留最后的换行符,请省略-
结束文本之前的内容:
exec { 'create_domain':
command => @(CMD/L),
/bin/echo 123456789012345678901234567890123456789012345678901234567890123456\
wrapped > /var/tmp/test.txt
| CMD
}
从 Puppet 3.5 开始,您有几个我使用过的选项。Ruby 允许您在几行上连接字符串。
string = "line #1"\
"line #2"\
"line #3"
p string # => "line #1line #2line #3"
另一种选择,从 Puppet 3.5 开始,他们添加了 HereDoc 功能。这将允许您将字符串放在源代码文件的一部分中,该部分被视为一个单独的文件。
$mytext = @(EOT)
This block of text is
visibly separated from
everything around it.
| EOT
木偶文档在这里:https ://docs.puppet.com/puppet/4.9/lang_data_string.html#heredocs
如果您真的关心 80cols 的限制,您可以随时滥用模板来实现该目标
exec {'VeryLongExec':
command => template("${module}/verylongexec")
}
然后将实际命令放入该模板文件中
学分应该归功于 Jan Vansteenkiste 来计算