To było proste w CFEngine ... Ale teraz jestem w środowisku Puppet i muszę być w stanie przypisać / zapewnić / sprawdzić określone zmienne sysctl.conf. W świecie CFEngine mogłem po prostu sprawdzić określone linie w pliku konfiguracyjnym ... Znalazłem małe odniesienie do modułu sysctl na wiki Puppet i projektu w github, który wydaje się robić to, co chcę.
Ale żadne z nich nie jest tak naprawdę dobrze udokumentowane. Po prostu szukam sposobu na edycję kilku wartości, takich jak net.core.rmem_default
i net.core.wmem_max
. W formacie projektu hostowanym na githubie konfiguracja w moim manifeście init.pp powinna wyglądać następująco:
class sysctl {
sysctl::value {
"net.core.rmem_default": value => "9000000";
"net.core.wmem_default": value => "9000000";
"net.core.rmem_max": value => "16777216";
"net.core.wmem_max": value => "16777216";
}
}
Przechodząc przez fora i listy mailingowe, wydaje się, że istnieje zamieszanie co do różnicy między wtyczkami i modułami Puppet. Terminy są prawie używane zamiennie ... Skończyło się na tym, że musiałem włączyć pluginsync na moich klientach, aby ominąć włochate błędy. Myślałem, że to był moduł!
Bieżące błędy klienta:
info: Loading downloaded plugin /var/lib/puppet/lib/puppet/type/sysctl.rb
info: Loading downloaded plugin /var/lib/puppet/lib/puppet/provider/sysctl/parsed.rb
err: Could not retrieve catalog from remote server: Error 400 on SERVER: Puppet::Parser::AST::Resource failed with error
ArgumentError: Invalid resource type sysctl::value at /var/lib/puppet/base/modules/sysctl/manifests/init.pp:12 on node shimano.deore.abc.net
warning: Not using cache on failed catalog
err: Could not retrieve catalog; skipping run
Czy są jakieś przemyślenia na temat tego, jak to osiągnąć przy jak najmniejszym bólu?
Edycja: Czy ten błąd dotyczy mnie ?
Edycja: Naprawiono używanie biblioteki Augeas, jak zasugerował Jeff Ferland i wiki Puppet .
Stworzyłem sysctl
moduł ...
class sysctl {
# nested class/define
define conf ( $value ) {
# $name is provided by define invocation
# guid of this entry
$key = $name
$context = "/files/etc/sysctl.conf"
augeas { "sysctl_conf/$key":
context => "$context",
onlyif => "get $key != '$value'",
changes => "set $key '$value'",
notify => Exec["sysctl"],
}
}
file { "sysctl_conf":
name => $operatingsystem ? {
default => "/etc/sysctl.conf",
},
}
exec { "/sbin/sysctl -p":
alias => "sysctl",
refreshonly => true,
subscribe => File["sysctl_conf"],
}
}
... i kolejny moduł do ustawienia odpowiednich ustawień ...
class prod_sysctl {
include sysctl
sysctl::conf {
# increase PID rollover value
"kernel.pid_max": value => "1048576";
}
}
źródło
Odpowiedzi:
Konkretna odpowiedź: natychmiast wywołujesz sysctl :: wartość, ale wartość nie jest zadeklarowana w twojej klasie sysctl. Zobacz ten przykład, który używa deklaracji sysctl :: conf. Bez tego
define value
nie ma podklasy sysctl :: value, do której można by zadzwonić.Ogólna odpowiedź i wskazówki: Konstrukcja Augeas (patrz także jej dokumentacja referencyjna ), która jest częścią aktualnych wersji Puppet, pozwala utrzymywać linie w pliku konfiguracyjnym, a nawet szanuje kontekst, dzięki czemu może zarządzać plikami takimi jak konfiguracja git. Poniższy przykład ma na celu zarówno zademonstrowanie funkcjonalności, jak i wskazanie wspaniałego zbioru referencyjnego konfiguracji Puppet - sklepu z konfiguracjami na żywo dla serwerów Wikipedii.
Jednym prostym przykładem z powyższej dokumentacji konfiguracji byłoby:
Jeśli więc chcesz zarządzać plikiem /etc/sysctl.conf, wprowadź następujące dane:
Przykład Augeas ma również konstrukt dla klasy sysctl oparciu o Augeus, który jest podobny do tego, co napisali w swoim pytaniu, tak że mogą rzucić nieco światła.
źródło
value.pp
manifeście rozpowszechnianym zmodule-sysctl
modułem. Wygląda na todefine sysctl::value ( $key = 'name', $value ) {
W przeszłości korzystałem z tego modułu z RHEL5: puppet-sysctl
Aby z niego skorzystać, musisz zainstalować moduł w folderze modułów (prawdopodobnie / etc / puppet / modules / sysctl), dołącz klasę w węźle: (dołącz sysctl), a następnie wywołaj zasób def w następujący sposób:
Być może zastanawiasz się, dokąd właściwie ten kod idzie? Lubię organizować moje drzewo lalek w ten sposób:
W ten sposób moduły witryny zawierają dane hiera lub tuningi, a moduły pozostają ogólne, można je podłączać i „modułowo”.
źródło
err: Could not retrieve catalog from remote server: Error 400 on SERVER: Puppet::Parser::AST::Resource failed with error ArgumentError: Invalid resource type sysctl::value at /var/lib/puppet/base/modules/sysctl/manifests/init.pp:12 on node shimano.deore.abc.net
value.pp
manifeście rozpowszechnianym zmodule-sysctl
modułem. Wygląda na todefine sysctl::value ( $key = 'name', $value ) {
Dopóki nie musisz zmieniać wartości (lub jesteś zadowolony z dodawania wierszy z nowymi wartościami), możesz używać Common
line
. Podczas zmiany wartości można użyć parypresent
/absent
konfiguracji.Aby zmienić wartość - zakładając, że linia już istnieje - możesz użyć
replace
w tym samym module.Możesz też spojrzeć na to, jak te definicje zostały napisane, aby dopasować je do twojego zadania - co, myślę, uważam, że jest proste i na tyle powszechne, że powinno być dostarczone przez domyślne typy Puppet.
Dlaczego tak nie jest? Ponieważ Puppet oczekuje od Ciebie pełnego zarządzania rzeczami, którymi zarządzasz. Oznacza to, że należy rozpowszechniać cały plik sysctl, zamiast dodawać lub usuwać jedną lub inną wartość. Nie twierdzę, że jest to z pewnością łatwa rzecz, ale jeśli możesz sobie z tym poradzić, to najłatwiej to zrobić.
źródło
sysctl.conf
wartości domyślne, które zmieniają się między wersjami RHEL. Możemy nie chcieć ich ignorować / nadpisywać, zamiast zapewniać możliwość ustawienia / zmiany określonego parametru.sysctl.conf
? Czy masz na myśli, że masz różne konfiguracje w zależności od wydania? W tym drugim przypadku możesz utworzyć szablon i wybrać linie w zależności od wersji systemu operacyjnego.