在 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?.......",
}
如果字符串的最后一个字符是\
,并且紧跟着一个换行符,则该字符串将继续到下一行。虽然不太美观,但我的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
并且连接所创建的文件会显示行已经被换行:
$ cat /var/tmp/test.txt
12345678901234567890123456789012345678901234567890wrapped
请参见https://github.com/puppetlabs/puppet/blob/9fbb36de/lib/puppet/parser/lexer.rb#L537(截至 Puppet v2.7.0)。
此外,这是一个已知问题:http://projects.puppetlabs.com/issues/5022
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
这里是 Puppet 的文档:https://docs.puppet.com/puppet/4.9/lang_data_string.html#heredocs
如果你真的关心80列限制,你总是可以滥用模板来达到这个目标。
exec {'VeryLongExec':
command => template("${module}/verylongexec")
}
然后将实际命令放入该模板文件中
感谢Jan Vansteenkiste的贡献,他解决了这个问题
$module_name
而不是$module
(至少对于Puppet 3.7)。 - Thom4
# lint:ignore:140chars
在本地忽略 puppet-lint 的警告,具体方法请参考 http://puppet-lint.com/controlcomments/ - Peterino