パペットで、defineコマンドが80文字を超える場合、どうすれば2行に折り返すことができますか?
exec { 'create_domain':
command => "some command exceed 80 character...........................................................how to do how to do?.......",
}
ちょっと醜いですが、文字列の最後の文字が '\'の後に改行が続く場合、文字列は次の行に続きます。私の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
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
データの大きなチャンクの場合、ヒアドキュメントは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',
}
あなたが本当に80colsの制限を気にしているなら、あなたはいつでもテンプレートを乱用してその目標を達成することができます
exec {'VeryLongExec':
command => template("${module}/verylongexec")
}
次に、実際のコマンドをそのテンプレートファイルに入れます。
クレジットはJan Vansteenkisteに移動して計算する必要があります