2016-03-24 9 views
0

Ich möchte Puppet einen anderen Variablennamen abhängig von der Hierarchie-Datei mit der Umgebung verbunden erstellen. Ich möchte dies tun, weil ich möchte, dass Puppet die mit einer bestimmten Netzwerkschnittstelle verknüpfte IP-Adresse verwendet. Im Idealfall befindet sich die Netzwerkschnittstelle in der Hiera-Datei. Auf diese Weise können Sie den Variablennamen ip_address mit der in der Hiera-Datei definierten Netzwerkschnittstelle verketten, die ungefähr so ​​aussehen würde.Puppet erstellen Variablennamen mit Hiera

::ipaddress_{$network_interface_from_hiera_file}

Ist das möglich?

Im Moment habe ich eine der folgenden, aber ich denke, es gibt eine bessere Implementierung. Wenn sich die Netzwerkschnittstellen ändern, müsste ich einen weiteren Fall hinzufügen.

if $environment == 'production' { 
    $client_address = $::ipaddress_enp130s0f0 
} else { 
    $client_address = $::ipaddress_eth2 
} 

Antwort

0

Es klingt wie Sie nach einem eval in Puppet sind, wie bei jeder anderen Shell und Perl anderen Sprachen haben, und soweit ich weiß, gibt es nicht ein.

Ich würde wahrscheinlich nur eine benutzerdefinierte Tatsache verwenden, die immer die IP-Adresse zurückgibt, die mir wichtig ist. Natürlich müssen Sie dann das Problem lösen, wie Sie die Custom Facts an Ihre Flotte weitergeben können.

In hiera.yaml:

:hierarchy: 
    - %{::node_environment} 
    - common 

In common.yaml:

--- 
myclass::client_address: "%{::ipaddress_eth2}" 

In production.yaml:

könnten andere Lösung Hiera hierarchische Suche verwendet werden

--- 
myclass::client_address: "%{::ipaddress_enp130s0f0}" 

Beachten Sie, dass Sie Werte innerhalb von Hiera nachschlagen können, siehe here. Möglicherweise könnte das hilfreich sein.