Marionette: Testen Sie, ob die Ressource definiert ist, oder erstellen Sie sie


14

Ich habe versucht, eine Möglichkeit zu finden, um zu testen, ob eine Ressource bereits in einer anderen Datei definiert ist, und ob sie nicht erstellt wird. Ein kurzes Beispiel:

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

Allerdings - File[$local_container]scheint immer wahr zu bewerten. Gibt es eine Möglichkeit, dies zu tun?

Antworten:


10

Die bessere Möglichkeit besteht darin, die Funktion verify_resource von puppetlabs stdlib zu verwenden

Es werden ein Ressourcentyp, ein Titel und eine Liste von Attributen benötigt, die eine Ressource als Parameter beschreiben.

Angenommen, Sie haben einen Testfall, um die Ressource nur dann zu erstellen, wenn sie noch nicht vorhanden ist.

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

Dies scheint viel sauberer zu sein und das Häkchen auf diese Weise zu überschreiten. Danke für den Tipp!
Zwerg

15

Meinen Sie "testen, ob eine Ressource bereits definiert ist "? Wenn Sie eine Ressource definieren (z. B. file {}usw.), erstellt Puppet das, was Sie beschreiben, wenn es noch nicht existiert (vorausgesetzt, Sie haben bestanden ensure => present).

So überprüfen Sie, ob eine Ressource bereits im Katalog definiert ist:

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

Hinweis: defined()ist abhängig von Parsing - Reihenfolge .


5
Dieser Teil "hängt von der Syntaxanalyse ab" macht ihn fast unbrauchbar.
Joerx

2

Oder....

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

Und behalten Sie diese Anführungszeichen und geschweiften Klammern im Auge ...


-2

einfach,

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

Nein, wenn die "$local_container"Datei bereits an einer anderen Stelle definiert wurde (z. B. durch etwas, das die Berechtigungen / den Eigentümer kontrollieren wollte), können Sie dieselbe Ressource nicht zweimal definieren.
Gnarf
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.