Puppet:リソースが定義されているかどうかをテストするか、作成します


14

リソースが別のファイルで既に定義されているかどうかをテストし、作成していない場合はテストする方法を見つけようとしましたか?簡単な例:

  if File[$local_container] {
    alert("Testing - It existed $local_container")
  } else {
    file{ "$local_container":
      ensure => directory,
    }
  }

ただし、File[$local_container]常に真と評価されるようです。これを行う方法はありますか?

回答:


10

これを行うより良い方法は、puppetlabs stdlibの ensure_resource関数を利用することです

リソースタイプ、タイトル、およびリソースをパラメーターとして記述する属性のリストを受け取ります。

リソースがまだ存在しない場合にのみリソースを作成するテストケースがあるとします-

ensure_resource('package', 'test-pkg', {'ensure' => 'present'})

これはずっときれいに見え、このようにチェックマークを渡します。ヒントをありがとう!
-gnarf

15

「リソースが既に定義されているかどうかをテストする」という意味ですか?リソース(つまり、file {}など)を定義すると、Puppetは、もしまだ存在しない場合、説明しているものを作成します(ensure => presentもちろん、パスすると仮定します)。

リソースがカタログで既に定義されているかどうかを確認するには:

mark-draytons-macbook:~ mark$ cat test.pp 
file { "/tmp/foo": ensure => present }

if defined(File["/tmp/foo"]) {
  alert("/tmp/foo is defined")
} else {
  alert("/tmp/foo is not defined")
}

if defined(File["/tmp/bar"]) {
  alert("/tmp/bar is defined")
} else {
  alert("/tmp/bar is not defined")
}

mark-draytons-macbook:~ mark$ puppet test.pp 
alert: Scope(Class[main]): /tmp/foo is defined
alert: Scope(Class[main]): /tmp/bar is not defined
notice: //File[/tmp/foo]/ensure: created

注:defined()解析順序に依存します


5
その「解析順序に依存する」部分は、ほとんど役に立たなくなります。
joerx

2

または....

unless File["${local_container}"] {
  file{ "${local_container}":
     ensure => directory,
  }
}

そして、それらの引用と中括弧に注意してください....


-2

単に、

file{ "$local_container":
  ensure => directory,
  replace => false,
}

いいえ、"$local_container"ファイルが既に別の場所で定義されている場合(アクセス許可/所有者を制御したかったなど)、同じリソースを2回定義することはできません。
gnarf
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.