Puppet: tester si la ressource est définie ou la créer


14

J'ai essayé de trouver un moyen de tester si une ressource est déjà définie dans un autre fichier, et sinon la créer? Un exemple rapide:

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

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

Réponses:


10

La meilleure façon de le faire est d'utiliser la fonction assure_resource de puppetlabs stdlib

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

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

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

Cela semble beaucoup plus propre, en passant la coche de cette façon. Merci pour le conseil!
gnarf

15

Vous voulez dire "tester si une ressource est déjà définie "? Si vous définissez une ressource (c'est-à-dire, file {}etc.), Puppet créera ce que vous décrivez si elle n'existe pas déjà (en supposant que vous réussissiez 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

Note: defined()est dépendante de l' ordre d'analyse syntaxique .


5
Cette partie "dépend de l'ordre d'analyse" la rend presque inutile.
joerx

2

Ou....

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

Et gardez un œil sur ces citations et accolades ...


-2

simplement,

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

Non, si le "$local_container"fichier a déjà été défini ailleurs (comme par exemple par quelque chose qui voulait contrôler les autorisations / propriétaire), vous ne pouvez pas définir deux fois la même ressource.
gnarf
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.