Coding style Puppet:如果>;我如何将命令包装成两行;80个字符?

Coding style Puppet:如果>;我如何将命令包装成两行;80个字符?,coding-style,puppet,Coding Style,Puppet,在puppet中,若define命令大于80个字符,我如何将其换行成两行呢 exec { 'create_domain': command => "some command exceed 80 character...........................................................how to do how to do?.......", } 这有点难看,但是如果字符串中的最后一个字符是一个\,后跟一个换行符,那么该字符串将

在puppet中,若define命令大于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
对创建的文件进行CATT显示已换行:

$ cat /var/tmp/test.txt 
12345678901234567890123456789012345678901234567890wrapped
请参见(从Puppet v2.7.0开始)


另外,这也是一个已知的问题:

如果你真的关心80cols的限制,你总是可以滥用模板来实现这个目标

exec {'VeryLongExec':
    command => template("${module}/verylongexec")
 }
然后将实际命令放入该模板文件中


从Puppet 3.5开始,积分应该归Jan Vansteenkiste计算。

我已经使用了几个选项。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文档在这里:

对于大数据块,heredocs是处理puppet清单中的长行的最佳方法。
/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
}

GVIM只在命令的中间使用Ruby语法高亮空间不重要,那么您仍然可以在反斜杠之后继续命令下一行到“正确”列……这不是问题的答案,但是您可以在本地使用“<代码> > LILT来忽略傀儡皮内抱怨:忽略:140CARS < /代码>,如中所述,实际上您需要使用
$module\u name
,而不是
$module
(至少对于Puppet 3.7而言)。请记住,您提供的HereDoc示例保留了换行符。问题是关于将清单中属于一行的命令拆分为几行。@(KEY/L)后面的逗号是否为键入错误?@Flo否,逗号不是键入错误。它看起来很奇怪,但由于解析器处理遗传的方式,它是必需的。