marionetka - zdefiniuj host wieloznaczny w nodes.pp

10

Czy istnieje sposób na zdefiniowanie hostów wieloznacznych w nodes.pp puppetmaster?

powiedz, że chcę, aby wszystkie hosty w jednej domenie otrzymały zestaw klas, czy mogę zrobić coś takiego:

# nodes.pp
#

node basenode {
  include  admina, adminb, admic
  }


node "*.acme.com" {
    include adminc
    }
lepole
źródło

Odpowiedzi:

9

Nie w ten sposób. Możesz utworzyć „domyślny” węzeł, który będzie stosowany do każdego podpisanego klienta.

node "default" {
   include foo
}

Ale możesz mieć tylko 1 wartość domyślną. Jeśli chcesz powielić opisaną funkcjonalność, możesz użyć metody klasyfikacji external_nodes. Zasadniczo piszesz skrypt, który zwraca prawidłowy yaml, gdy klient się łączy. Ten skrypt może to zrobić w dowolny sposób, sprawdzić fqdn, wykonać zapytanie do bazy danych, nacisnąć ldap itp.

Kij
źródło
+1 Zgadzam się z external_nodes
David Pashley
16

Wyrażenia regularne są teraz możliwe w Puppet 0.25, więc to, czego chcesz, byłoby możliwe:

node /^(foo|bar)\.example\.com$/ {
include blah
}
Pheezy
źródło
3

Jak dotąd niewiele dystrybucji zawiera 0,25, więc w moim Centos5 z wersją 2.24.8 z repozytorium EPEL musiałem zrobić coś takiego dla moich węzłów roboczych z nazwami hostów takimi jak wn10.example.com:

node  default {
    $node_type = regsubst($hostname, '^([a-z]+).*$', '\1')
    case $node_type{
        wn: {include worker_node}
        default: {include generic_node}
    }
}

źródło
Szybka aktualizacja - puppet-2.6.12-1.el5.noarch jest teraz dostępny w EPEL (obsługuje wyrażenia regularne w nazwach węzłów).
plazmid87,