28

puppetで、defineコマンドが80文字を超える場合、2行に折り返してそれを行うにはどうすればよいですか?

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

4 に答える 4

21

ちょっと醜いですが、文字列の最後の文字の\後に改行が続く場合、文字列は次の行に続きます。私の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

于 2012-07-10T06:09:00.633 に答える
9

データの大きなチャンクの場合、ヒアドキュメントは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
}
于 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以降、ヒアドキュメント機能が追加されています。これにより、別のファイルであるかのように扱われるソースコードファイルのセクションに文字列を配置できます。

$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")
 }

次に、実際のコマンドをそのテンプレートファイルに入れます

クレジットはJanVansteenkisteに送って計算する必要があります

于 2012-07-31T20:12:11.310 に答える