web-dev-qa-db-fra.com

Puppet: Test si la ressource est définie ou la crée

J'essaie de trouver un moyen de tester si une ressource est déjà définie dans un autre dossier, et si ce n'est pas la créer? Un exemple rapide:

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

Toutefois - File[$local_container] semble toujours évaluer à vrai. Y a-t-il un moyen de faire cela?

14
gnarf

La meilleure façon de procéder est en utilisant une fonction veille_reesource de pupePetLabs STDLIB

Il faut un type de ressource, un titre et une liste d'attributs décrivant une ressource en tant que paramètres.

dis que vous avez un cas de test pour créer uniquement la ressource si elle n'existe pas déjà-

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

Voulez-vous dire "test si une ressource est déjà définie "? Si vous définissez une ressource (c.-à-d., file {}, etc.) Puppet créera ce que vous décrivez si cela n'existe pas déjà (en supposant que vous passez ensure => present, bien sûr).

Pour vérifier si une ressource est déjà définie dans le catalogue ou non:

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

Remarque: defined() est dépendant de l'ordre d'analyse .

15
markdrayton

Ou....

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

Et gardez un œil sur ces citations et bretelles bouclées ....

2
nzidol