web-dev-qa-db-ja.com

パペット:> 80文字の場合、コマンドを2行にラップするにはどうすればよいですか?

パペットで、defineコマンドが80文字を超える場合、どうすれば2行に折り返すことができますか?

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

ちょっと醜いですが、文字列の最後の文字が '\'の後に改行が続く場合、文字列は次の行に続きます。私のsample.ppマニフェストは以下の通りです:

class test {
        exec { 'create_domain':
                command => "/bin/echo 1234567890123456789012345678901234567890123456789012345678901234567890\
wrapped > /var/tmp/test.txt";
        }
}

node 'pwan-central' {
        include test
}

これを「puppet apply sample.pp」で実行し、Puppet 2.7.1を搭載したUbuntu 11.10で次の出力を取得します。

mrpwan@pwan-central:~$ puppet apply sample.pp
notice: /Stage[main]/Test/Exec[create_domain]/returns: executed successfully
notice: Finished catalog run in 0.10 seconds

作成されたファイルをcattingすると、行が折り返されていることが示されます。

mrpwan@pwan-central:~$ cat /var/tmp/test.txt 
1234567890123456789012345678901234567890123456789012345678901234567890wrapped

参照 https://github.com/puppetlabs/puppet/blob/9fbb36de/lib/puppet/parser/lexer.rb#L537 (Puppet v2.7.0以降)

また、これは一種の既知の問題です: http://projects.puppetlabs.com/issues/5022

19
pwan

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

7
mccartjm

データの大きなチャンクの場合、ヒアドキュメントはPuppetマニフェストの長い行を処理する最良の方法です。 /L補間オプションは特に便利です。 /Lを指定すると、行末の\で改行が削除されます。たとえば、次の例では、インデントと末尾の改行を含む改行を取り除いて、期待どおりの結果が得られます。

  sshkey { 'example.com':
    ensure  => present,
    type    => 'ssh-rsa',
    key     => @(KEY/L),
      RfrXBrU1T6qMNllnhXsJdaud9yBgWWm6OprdEQ3rpkTvCc9kJKH0k8MNfKxeBiGZVsUn435q\
      e83opnamtGBz17gUOrzjfmpRuBaDDGmGGTPcO8Dohwz1zYuir93bJmxkNldjogbjAWPfrX10\
      8aoDw26K12sK61lOt6GTdR9yjDPdG4zL5G3ZjXCuDyQ6mzcNHdAPPFRQdlRRyCtG2sQWpWan\
      3AlYe6h6bG48thlo6vyNvOD8s9K0YBnwl596DJiNCY6EsxnSAhA3Uf9jeKqlVqqrxhEzHufx\
      07iP1nXIXCMUV
      |-KEY
    target  => '/home/user/.ssh/known_hosts',
  }
6
Jon

あなたが本当に80colsの制限を気にしているなら、あなたはいつでもテンプレートを乱用してその目標を達成することができます

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

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

クレジットはJan Vansteenkisteに移動して計算する必要があります

4
KrisBuytaert