Übergeben Sie optional Parameter an Puppet mit Hiera

Übergeben Sie optional Parameter an Puppet mit Hiera

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 apacheein $keepaliveParameter 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.yamlund 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,
    }
  }

}

verwandte Informationen