2016-08-02 20 views
3

Ich habe ein folgenden PuppenmodulInline if-Anweisung für Puppen Parameter

class base (
    $someBoolean=false, 
) 
{ 
    exec { 'Do something': 
    command  => '/usr/bin/someStuff', 
    timeout  => (someBoolean) ? 100000000 : 300 
    } 
} 

Die timeout =>() ? : ist enssentially, was ich tun will, aber was ist die richtige Syntax, es zu tun? Ist es überhaupt möglich?

Antwort

7

Puppet-Version des ternären Betreibers ist die allgemeinere "selector". Die Syntax für den Fall, sieht wie folgt aus:

exec { 'Do something': 
    command => '/usr/bin/someStuff', 
    timeout => $someBoolean ? { true => 100000000, default => 300 } 
} 

die Expressionskontroll ($someBoolean in der oben) kann in der Tat jeder Ausdruck, der einen Wert erzeugt, und eine beliebige Anzahl von Fällen entsprechen, bereitgestellt werden.

+0

So überprüfen Sie einige Bedingungen inline statt Variablen. zB: exec {'Mach was': command => '/ usr/bin/someStuff', timeout => (1 <2)? {true => 100000000, Standard => 300} } – user2885077

+0

@ user2885077, der Steuerelementausdruck eines Selektors muss keine Variablenreferenz sein. Es kann ein beliebiger Ausdruck sein, der einen Wert ergibt, und der Wert, der dafür verwendet wird, bestimmt, welche Option als resultierender Wert des gesamten Selektors ausgewählt wird. In der Tat erscheint das Beispiel, das Sie präsentieren, wohlgeformt. Es sollte funktionieren, zumindest bei Puppet 4+ (während ich dies schreibe, das neueste ist v5.4), aber ich bin unsicher, ob es bei früheren veralteten Versionen wie gewünscht funktionieren wird, da es Änderungen in Bezug auf die Typisierung gab . –