web-dev-qa-db-ja.com

Puppet .ppファイルで文字列を連結するにはどうすればよいですか?

私の素朴なアプローチは次のとおりです。

# puppet/init.pp
$x = 'hello ' + 
     'goodbye'

これは動作しません。 does Puppetで文字列を連結する方法は?

49
rlandster

キーワード変数補間:

$value = "${one}${two}"

ソース: http://docs.puppetlabs.com/puppet/4.3/reference/lang_variables.html#interpolation

中括弧なしでも機能する可能性がありますが、常に中括弧を使用する必要があることに注意してください。

68
czervik

値を配列に入れてから「結合」する構造を使用します。この例では、私の入力は配列であり、それらが「:2181」で結合された後、結果の値は再びセパレーターとして空の文字列で結合された配列に入れられます。

$zookeeperservers = [ 'node1.example.com', 'node2.example.com', 'node3.example.com' ]
$mesosZK = join([ "zk://" , join($zookeeperservers,':2181,') ,":2181/mesos" ],'')

結果の値$ mesosZK

zk://node1.example.com:2181,node2.example.com:2181,node3.example.com:2181/mesos
22
Niels Basjes

他の回答で言及されていない別のオプションは、 Puppetのsprintf() 関数を使用することです。この関数は、その背後の Ruby function 。例:

$x = sprintf('hello user %s', 'CoolUser')

パペットで完全に動作することを確認しました。 chutzで述べたように、このアプローチは関数の出力を連結するのにも役立ちます。

16
Mifeet

次は私のために働いた。

puppet apply -e ' $y = "Hello" $z = "world" $x = "$y $z" notify { "$x": } '
notice: Hello world
notice: /Stage[main]//Notify[Hello world]/message: defined 'message' as 'Hello world'
notice: Finished catalog run in 0.04 seconds

以下も同様に機能します。

$abc = "def"

file { "/tmp/$abc":
1
Albert Turri

docs で述べたように、$ {varname}補間を使用できます。そしてそれは関数呼び出しでも機能します:

$mesosZK = "zk://${join($zookeeperservers,':2181,')}:2181/mesos"
$x = "${dirname($file)}/anotherfile"

ただし、関数引数で{}を使用できませんでした:Syntax error at '}'

0
Andrey Regentov

Puppetlabs-stdlibのjoin()関数を使用できます。私はそこに文字列連結関数があるべきだと思っていましたが、私はそれを見ません。簡単に作成できます。

0
mc0e