28

在 puppet 中,如果定义命令 > 80 个字符,我该如何换行成两行?

  exec { 'create_domain':
    command => "some command exceed 80 character...........................................................how to do how to do?.......",
  }
4

4 回答 4

21

这有点难看,但如果字符串中的最后一个字符是 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 起)

这也是一个已知问题:http ://projects.puppetlabs.com/issues/5022

于 2012-07-10T06:09:00.633 回答
9

对于大块数据,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
}
于 2018-06-20T09:49:16.423 回答
7

从 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

于 2017-03-06T21:54:13.883 回答
4

如果您真的关心 80cols 的限制,您可以随时滥用模板来实现该目标

exec {'VeryLongExec':
    command => template("${module}/verylongexec")
 }

然后将实际命令放入该模板文件中

学分应该归功于 Jan Vansteenkiste 来计算

于 2012-07-31T20:12:11.310 回答