13 votes

Comment copier des fichiers sur toutes les machines en utilisant Puppet master ?

J'ai installé puppetmaster dans ubuntu 11.04 et j'ai installé Puppet dans tous mes clients. J'ai joint tous mes clients Puppet à Puppet master. Est-il possible de copier un fichier vers tous ces clients Puppet à partir de Puppet master ?

Par exemple :

J'ai le fichier nommé datas.xls sur mon bureau (Puppet Master). Comment puis-je copier ce fichier sur tous mes clients Puppet à l'emplacement suivant ( /home/operator1/Desktop/Backup/) ?

Mise à jour :

  • Bonjour, le fichier n'est toujours pas partagé.
  • Comment modifier cette ligne puppet:///modules/module_name/datas.xls le fichier à copier se trouve à cet emplacement /etc/puppet/modules/mymodule/manifests/datas.xls ?

Erreur sur le client : (Résolu)

root@testing:~# puppetd --test 
err: Could not retrieve catalog from remote server: Error 400 on SERVER: Could not find class sudo at /etc/puppet/manifests/site.pp:2 on node testing.chn.jd.com
warning: Not using cache on failed catalog
err: Could not retrieve catalog; skipping run

Erreur 2 sur le client :

root@tme13:~# puppetd --test
err: Could not run Puppet configuration client: Could not retrieve local facts: bad URI(is not URI?): http://169.254.169.254/2008-02-01/meta-data/<HTML><HEAD><TITLE>HTTP access denied</TITLE></HEAD><BODY><img src/

Nouvelle mise à jour :

Comment appliquer ce module à tous les nœuds ? De manière à ce que le fichier soit copié sur tous les nœuds.

27voto

ESV Points 4591

Puppet est un peu un monstre dont il faut s'imprégner, alors apprendre par l'exemple n'est pas une mauvaise chose. Dans le texte qui suit, je suppose que vous utilisez des modules. Si ce n'est pas le cas ou si vous avez besoin de plus de détails sur la façon d'assembler le module, veuillez le signaler dans un commentaire.

Disons que vous démarrez un nouveau module appelé mymodule . Dans le répertoire d'origine de Puppet (généralement /etc/puppet ) sur le maître de Puppet, vous devez créer le répertoire des manifestes et des fichiers du module :

mkdir -p modules/mymodule/manifests
mkdir -p modules/mymodule/files

Ensuite, créez un fichier dans ce répertoire nommé init.pp et entrez :

class myfile {
    file { '/home/operator1/Desktop/Backup':
        ensure => directory,
        mode => '0755',
        owner => 'operator1',
        group => 'operator1',
    }

    file { "/home/operator1/Desktop/Backup/datas.xls":
        mode => "0644",
        owner => 'operator1',
        group => 'operator1',
        source => 'puppet:///modules/module_name/datas.xls',
    }
}

Ensuite, mettez le datas.xls dans le fichier files dans le répertoire - dans cet exemple dans modules/mymodule/files/ . (Notez qu'il peut aussi y avoir un templates pour modèles ).

Dans le manifests/site.pp vous devez importer le module et inclure la classe en faisant quelque chose comme :

import 'mymodule'

node base {
    include myfile
}

node server1 inherits base {}
node server2 inherits base {
    # extra config here
}

Assurez-vous que tous vos nœuds héritent de base et cela devrait être tout ce que vous avez à faire. Depuis la version 0.25 de Puppet, vous pouvez utiliser des expressions régulières dans le nom du nœud, par exemple :

node server[0-9] inherits base {}

Faites-moi savoir dans les commentaires si vous avez besoin de plus de précisions.

Configurer un client pour parler au maître de Puppet

Sur le client, vous devez faire :

sudo apt-get install puppet

Puis modifier /etc/default/puppet et le changement START=no à START=yes .

Modifier également /etc/puppet/puppet.conf et ajoutez une ligne à la [main] pour lui dire où trouver le maître des marionnettes :

server=puppet.mydomain.com

Ensuite, nous pouvons faire un test avec sudo puppetd --test . Si vous obtenez des erreurs de clé, vous devrez peut-être vous rendre sur le serveur maître de Puppet et signer la clé du client. Pour vérifier le nom exact, vous pouvez faire sudo puppetca --list et ensuite sudo puppetca --sign server1.mydomain.com (ou le nom du serveur indiqué par la commande list).

Maintenant, démarrez le service Puppet avec sudo service puppet start et tu devrais être loin. Le service Puppet s'exécute toutes les heures, donc si vous mettez à jour vos recettes Puppet, tous vos clients seront également mis à jour.

Suppression de fichiers

Je note que dans la question initiale, vous vouliez savoir comment supprimer des fichiers. Vous devez modifier le manifests/init.pp à être

file { "/home/operator1/Desktop/Backup/datas.xls":
    ensure => absent,
}

Autres conseils utiles

Si vous rencontrez des difficultés, il y a plusieurs choses que vous pouvez faire. Sur toute machine sur laquelle Puppet est installé, vous pouvez vérifier votre syntaxe en exécutant

puppet --parseonly --ignoreimport myfile.pp

ou vérifier l'ensemble en sortant le --ignoreimport bien que cela puisse conduire à de drôles de messages d'erreur qui ne sont pas vraiment des erreurs, comme je l'ai constaté. Vous pouvez également exécuter Puppet en direct sur une machine cliente de Puppet en faisant :

sudo puppetd --test

qui affiche divers résultats utiles, avec les erreurs et les avertissements mis en évidence dans différentes couleurs. Si vous voulez encore plus de détails, vous pouvez exécuter :

sudo puppetd --test --debug

mais cela génère généralement tellement de résultats qu'il est difficile de s'y retrouver, alors ne le faites que si vous avez déjà essayé les étapes précédentes et que vous êtes bloqué et avez besoin de voir tout ce qui est fait.

Notez que ceci est basé sur Puppet 0.25.x qui est ce que j'utilise actuellement au travail, et qui est aussi la version dans Ubuntu 10.04. Le code de Puppet dans la section principale fonctionnera certainement encore, mais les versions ultérieures de Puppet ont de nouveaux drapeaux qui peuvent aider à déboguer la sortie.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X