# knife: Bootstrap avec des Modèles personnalisés {{INLINETOC}} Le modèle par défaut de chef-full utilise le programme d'installation de Chef. Pour la plupart des opérations d'amorçage, quelle que soit la plate-forme sur laquelle le nœud cible est exécuté, l'utilisation de la distribution chef-full est la meilleure approche pour installer le chef-client sur un nœud cible. Cependant l'opération d'amorçage par défaut repose sur une connexion Internet pour obtenir la distribution sur le nœud cible. Si un nœud cible ne peut pas accéder à Internet, on peut utiliser un modèle personnalisé pour définir un emplacement spécifique pour la distribution afin que le nœud cible puisse y accéder pendant l'opération d'amorçage. Dans les cas où vous avez une configuration avec pare-feu qui ne permet pas d’obtenir des paquets sur Internet, il y a deux façons de résoudre ce problème. # Utilisation de --bootstrap-install-command ## Pour les distributions utilisant apt $ knife bootstrap chefnode -N MyNewNode --bootstrap-install-command "curl http://your-internal-server/chef.deb -o /tmp/chef.deb && dpkg -i /tmp/chef.deb ## Pour les distributions utilisant yum $ knife bootstrap chefnode -N MyNewNode --bootstrap-install-command "yum install -y http://your-internal-server/chef.rpm" Cette méthode est un bon choix pour les machines uniques ou pour un très petit nombre de machines, mais si on gère plus, l'option la plus appropriée consiste à créer un modèle de bootstrap. # Utilisation d'un modèle de bootstrap personnalisé Les modèles d'amorçage sont simplement des fichiers erb utilisés par Chef pour déterminer comment amorcer un nœud. On peut remplacer celui par défaut avec l'option de knife **--bootstrap-template** Les modèles d'ammorçage doivent être placés dans ~/chef-repo/.chef/bootstrap. Le moyen le plus simple de créer un modèle consiste à utiliser le modèle par défaut de Chef et à le modifier pour qu'il contienne les commandes d'amorçage dont on a besoin, ## Création du magazin d'atefacts ### Prérequis Un magasin d'artefacts doit contenir au minimum, les packages suivants: * ChefDK * Chef client * Chef Supermarket * Un script d'installation pour le client Chef ### Créer le script d'installation Le script d'installation est utilisé pour installer le client Chef lors de l'amorçage d'un nouveau noeud. Il extrait simplement le package client Chef de votre magasin d'artefacts, puis l'installe. Par exemple, sur les systèmes Linux basés sur Debian, cela ressemblerait à ceci: #!/bin/bash cd /tmp/ wget http://packages.example.com/chef_13.2.20-1_amd64.deb dpkg -i chef_13.2.20-1_amd64.deb Le script d'installation doit être accessible à partir du magasin d'artefacts. ## Création du modèle d'ammorçage ### Créer le dossier bootsrap/ Pour que les clients puissent utiliser le fichier de modèle d'amorçage personnalisé, celui-ci doit être situé dans un répertoire **.chef/bootstrap** du poste de travail (workstation) : $ mkdir ~/.chef/bootstrap **Note de sécurité:** Lorsqu'on veut permettre aux utilisateurs l'accès aux dossiers dans le répertoire .chef, on ne doit pas exposer le contenu de celui-ci car il contient des clés privées. Au lieu de créer le répertoire dans le dossier.chef on peut utiliser les liens symboliques: $ ln -s /path/to/chef-repo/client.d ~/.chef/ ### Créer le modèle d'ammorçage Dans le répertoire client.d et créer un fichier modèle vierge. Cet exemple utilisera template.erb comme nom de modèle: touch template.erb ### Copier la configuration chef-full Toujours dans le répertoire bootstrap, lancer la commande suivante pour copier la configuration chef-full dans votre nouveau modèle: find /opt/chefdk/embedded/lib/ruby -type f -name chef-full.erb -exec cat {} \; > template.erb Cette commande recherche le fichier de modèle **chef-full** sous **/opt/chefdk/embedded/lib/ruby**, puis renvoie le contenu du fichier dans template.erb. ### Modifier le fichier template.erb Mettre à jour template.erb pour remplacer **omnitruck.chef.io** par l'URL d'un script install.sh sur le magasin d'artefacts local : install_sh="<%= knife_config[:bootstrap_url] ? knife_config[:bootstrap_url] : "http://packages.example.com/install.sh" %>" Localiser la ligne suivante au bas de votre fichier template.erb : cat > /etc/chef/client.rb <<'EOP' <%= config_content %> EOP En dessous, ajouter ce qui suit en remplaçant gems.example.com par l’URL de votre miroir gem: cat >> /etc/chef/client.rb <<'EOP' rubygems_url "http://gems.example.com" EOP Cela ajoute le paramètre rubygems_url approprié au fichier /etc/chef/client.rb créé lors de l’amorçage, ce qui garantit que les nœuds utiliseront le miroir de gem interne. ## Utilisation du modèle d'ammorçage Une fois créé et enregistré on peut utiliser utiliser l'option **--bootstrap-template** avec la sous-commande **knife bootstrap** pour spécifier le nom du fichier de modèle d'amorçage: $ knife bootstrap 123.456.7.8 -x username -P password --sudo --bootstrap-template "template" On peut également utiliser l’option **knife[:bootstrap_template]** dans config.rb pour spécifier le modèle que knife bootstrap utilisera par défaut lors de l’amorçage d’un nœud. Il devrait pointer sur le modèle personnalisé dans le répertoire bootstrap : knife[:bootstrap_template] = "#{current_dir}/bootstrap/template.erb"