Wir verwenden das Rollen/Profile-Muster. Im folgenden Beispiel möchte ich optional einen Parameter von Hiera übergeben, sodass, wenn kein Wert angegeben wird, der Standardwert der ::apache-Klasse verwendet wird (den es intern von seiner ::apache::params-Klasse erhält). Dies würde es uns ermöglichen, den Keepalive-Wert auf einigen Servern festzulegen, aber der ::apache-Klasse erlauben, den Wert selbst zu bestimmen, wenn wir dies nicht tun.
common.yaml
-----------
profiles::apache::keepalive : On
profiles::apache::keepalive_timeout : 5
apache.pp
---------
class profiles::apache {
$apache_keepalive = hiera('profiles::apache::keepalive')
$apache_keepalive_timeout = hiera('profiles::apache::keepalive_timeout')
class {'::apache':
keepalive => $apache_keepalive,
keepalive_timeout => $apache_keepalive_timeout,
}
}
Ich habe versucht, den Standardwert der Hiera-Suche auf „undef“ zu setzen, aber dann erhalte ich leere Werte in der Konfiguration.
Antwort1
Diesen Effekt erreichen Sie durchautomatische Parametersuche.
Ihre Hiera-Daten zielen auf dietatsächlichApache-Modul, nicht Ihr Apache-Profil.
apache::keepalive: true
Dies funktioniert nur, wenn class apache
ein $keepalive
Parameter vorhanden ist.
Und ja, der Standard hierfür sollte von übernommen werden apache::params
.
class apache($keepalive = $::apache::params::keepalive)
inherits ::apache::params {
...
}
Antwort2
Ich persönlich bevorzuge es, alle meine Variablen explizit zu deklarieren. In diesem Fall würde ich den Standardwert auf deklarieren common.yaml
und dann andere YAML-Dateien verwenden, um Werte zu deklarieren, die vom Standard abweichen, wie
common.yaml
-----------
profiles::apache::keepalive : On
profiles::apache::keepalive_timeout : 5
servertype.yaml
---------------
profiles::apache::keepalive : On
profiles::apache::keepalive_timeout : 30
Legen Sie dann die Hierarchie fest aufhiera.yaml
:hierarchy: - servertype.yaml
- common.yaml
Wenn Sie dies nicht möchten, dann denke ich, dass der einzige andere Ansatz darin besteht, if-Anweisungen zu verwenden
apache.pp
---------
class profiles::apache {
$apache_keepalive = hiera('profiles::apache::keepalive')
$apache_keepalive_timeout = hiera('profiles::apache::keepalive_timeout')
if ($apache_keepalive == undef) {
class {'::apache': }
}
else {
class {'::apache':
keepalive => $apache_keepalive,
keepalive_timeout => $apache_keepalive_timeout,
}
}
}