Ce fut un jeu d'enfant dans CFEngine ... Mais je suis maintenant dans un environnement Puppet , et je dois pouvoir assigner / assurer / vérifier certaines variables sysctl.conf. Dans le monde CFEngine, je pouvais simplement rechercher des lignes spécifiques dans un fichier de configuration ... J'ai trouvé une petite référence à un module sysctl sur le wiki Puppet et un projet dans github qui semble faire ce que je veux.
Mais ni l'un ni l'autre ne sont vraiment bien documentés. Je cherche simplement un moyen d'éditer quelques valeurs comme net.core.rmem_default
et net.core.wmem_max
. Au format du projet hébergé sur github , la configuration de mon manifeste init.pp devrait ressembler à:
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";
}
}
En parcourant les forums et les listes de diffusion, il semble y avoir confusion sur la différence entre les plugins et modules Puppet. Les termes sont presque utilisés de manière interchangeable ... J'ai fini par avoir besoin d'activer pluginsync sur mes clients afin de surmonter certaines erreurs poilues. Je pensais que c'était un module!
Les erreurs actuelles du client:
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
Avez-vous des idées sur la façon d'accomplir cela avec le moins de douleur possible?
Edit: Suis-je affecté par ce bug ?
Edit: Correction de l'utilisation de la bibliothèque Augeas comme suggéré par Jeff Ferland et du wiki Puppet .
J'ai créé un sysctl
module ...
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"],
}
}
... et un autre module pour définir les paramètres appropriés ...
class prod_sysctl {
include sysctl
sysctl::conf {
# increase PID rollover value
"kernel.pid_max": value => "1048576";
}
}
Réponses:
Réponse spécifique: Immédiatement, vous appelez sysctl :: value, mais value n'est pas déclarée dans votre classe sysctl. Voir cet exemple qui utilise une déclaration sysctl :: conf. Sans le
define value
, il n'y a pas de sous-classe sysctl :: value à appeler.Réponse générale et conseils: La construction Augeas (voir aussi sa documentation de référence de type ) qui fait partie des versions actuelles de Puppet permet de maintenir les lignes dans un fichier de configuration et respecte même le contexte, afin de pouvoir gérer des fichiers tels qu'une configuration git. L'exemple ci-dessous est à la fois pour démontrer la fonctionnalité et pour vous diriger vers une grande collection de référence de configurations de marionnettes - le magasin de configuration en direct pour les serveurs Wikipedia.
Un exemple simple de la documentation de configuration ci-dessus serait le suivant:
Donc, si vous souhaitez gérer votre /etc/sysctl.conf, entrez ce qui suit:
L' exemple Augeas a également une construction pour une classe sysctl basée sur Augeus qui est similaire à ce que vous avez posté dans votre question, ce qui peut également apporter un éclairage.
la source
value.pp
manifeste distribué avec lemodule-sysctl
module. Il ressemble àdefine sysctl::value ( $key = 'name', $value ) {
J'ai déjà utilisé ce module avec RHEL5: puppet-sysctl
Pour l'utiliser, vous devrez installer le module dans votre dossier modules (probablement / etc / puppet / modules / sysctl) inclure la classe sur votre nœud: (inclure sysctl) puis appeler la ressource def comme ceci:
Vous vous demandez donc peut-être où va ce code? J'aime organiser mon arbre de marionnettes comme ceci:
Ainsi, site-modules contient des données hiera, ou ajustables, et les modules restent génériques, enfichables et "modulaires".
la source
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
manifeste distribué avec lemodule-sysctl
module. On diraitdefine sysctl::value ( $key = 'name', $value ) {
Tant que vous n'avez pas à modifier la valeur (ou que vous êtes satisfait de l'ajout de lignes avec les nouvelles valeurs), vous pouvez utiliser Common's
line
. Vous pouvez utiliser une paire depresent
/absent
configurations lorsque vous modifiez la valeur.Pour modifier la valeur - en supposant que la ligne existe déjà -, vous pouvez utiliser
replace
dans le même module.Ou vous pouvez regarder comment ces définitions sont écrites pour en faire une adaptée à votre tâche - ce qui, je pense, est assez simple et commun pour qu'elle ait dû être fournie par les types de marionnettes par défaut.
Alors, pourquoi pas? Parce que Puppet attend de vous que vous gériez entièrement les choses que vous gérez. Autrement dit, vous devez distribuer l' intégralité du fichier sysctl, au lieu d'ajouter ou de supprimer simplement une valeur ou une autre. Je ne dis pas que c'est nécessairement une chose facile à faire, mais si vous pouvez vous en tirer, c'est la façon la plus simple de le faire.
la source
sysctl.conf
valeurs par défaut qui changent entre les versions de RHEL. Nous ne souhaitons peut-être pas les ignorer / les remplacer, plutôt que de nous assurer qu'un paramètre spécifique peut être défini / modifié.sysctl.conf
? Ou voulez-vous dire que vous avez différentes configurations selon la version? Dans ce dernier cas, vous pouvez créer un modèle et avoir des lignes sélectionnées en fonction de la version du système d'exploitation.