Próbuję rozwiązać następujący problem z Puppet:Zamawianie biegunów dla klas opcjonalnych
Mam wiele węzłów. Każdy węzeł zawiera kolekcję klas. Na przykład istnieje klasa mysql
i klasa webserver
. node1 to tylko serwer WWW, node2 to webserver + mysql.
Chcę określić, że jeśli węzeł ma zarówno serwer WWW, jak i mysql, instalacja mysql nastąpi przed serwerem WWW. Nie można mieć zależności Class[mysql] -> Class[webserver]
, ponieważ obsługa MySQL jest opcjonalna.
Próbowałem używać etapów, ale wydają się wprowadzać zależności między moimi klasami, więc jeśli mam np. to:
Stage[db] -> Stage[web]
class {
'webserver':
stage => web ;
'mysql':
stage => db ;
}
i obejmują klasę serwera WWW w moim węzła
node node1 {
include webserver
}
.. klasa mysql zostaje zawarte, jak również! Nie tego chcę.
Jak mogę zdefiniować porządek na lekcjach opcjonalnych?
Edycja: tutaj jest rozwiązanie:
class one {
notify{'one':}
}
class two {
notify{'two':}
}
stage { 'pre': }
Stage['pre'] -> Stage['main']
class {
one: stage=>pre;
# two: stage=>main; #### BROKEN - will introduce dependency even if two is not included!
}
# Solution - put the class in the stage only if it is defined
if defined(Class['two']) {
class {
two: stage=>main;
}
}
node default {
include one
}
Wynik:
notice: one
notice: /Stage[pre]/One/Notify[one]/message: defined 'message' as 'one'
notice: Finished catalog run in 0.04 seconds
~
Dlaczego twoja klasa serwera sieciowego w ogóle zależy od twojej klasy mysql? Jaka jest rzeczywista zależność? –
@CodeGnome Próbowałem wyjaśnić to bardzo prosto. Mam etapy w przybliżeniu równoważne "nagiej maszynie" - "cała sieć w górę" - "wszystkie dostępne źródła danych" - "różne narzędzia wsparcia lalek zainstalowane" - "teraz możemy wykonać rzeczywistą pracę". –