Étape 1 : récupération de la MAC • VLAN dédié • DHCP avec un boot PXE par défaut • FreeBSD minimale • Au boot, lance un dmidecode et fait une requête HTTP pour associer la MAC de l’interface principale au serial dans Chef
Étape 2 : génération des fichiers d’installation • Sur le serveur d’installation, run Chef qui va écrire les fichiers d’installation : • Configuration DHCP pour boot spécifique selon la MAC • Preseed debian • ...
Évolutions • Contrôle automatique des reboot/boot PXE/... • Boot PXE sur un OS qui met à jour les divers firmwares automatiquement • Utilisation de iPXE pour éviter l’étape de détection de la MAC
Chef Server Infra Server DNS DHCP Proxy ... VM Linux VM Linux VM FreeBSD ... VMs VirtualBox Gérées par Vagrant Addresses dans 10.251.X.0/24 VBoxNet X Environnement X
Chef Server Infra Server DNS DHCP Proxy ... VM Linux VM Linux VM FreeBSD ... VMs VirtualBox Gérées par Vagrant Addresses dans 10.251.X.0/24 VBoxNet X Firewall Backbone Environnement X
Chef Server Infra Server DNS DHCP Proxy ... VM Linux VM Linux VM FreeBSD ... VMs VirtualBox Gérées par Vagrant Addresses dans 10.251.X.0/24 VBoxNet X Firewall Quagga Backbone Annonce des routes 10.251.0.0/16 Environnement X
Chef Server Infra Server DNS DHCP Proxy ... VM Linux VM Linux VM FreeBSD ... VMs VirtualBox Gérées par Vagrant Addresses dans 10.251.X.0/24 VBoxNet X Firewall Quagga Backbone Annonce des routes 10.251.0.0/16 Autres environnements Environnement X
~ $ knife sharp align master production On server sandboxnico Aligning cookbooks * tacacs is not up-to-date (local: 0.0.6/remote: 0.0.5) Update tacacs cookbook item on server ? Y/N/(A)ll/(Q)uit [N] A * Uploading cookbook(s) tacacs * Bumping tacacs to 0.0.6 for environment production Aligning data bags Data bags are up-to-date. Aligning roles * Infrastructure role is not up-to-date (run list) Update Infrastructure role on server ? Y/N/(A)ll/(Q)uit [N] * Skipping Infrastructure role
Exemple : collectd # cookbooks/collectd/recipes/default.rb template "/etc/collectd/collectd.conf" do source "collectd.conf.erb" variables( :auto_plugins => node.run_state[:collectd][:plugins] ) end # cookbooks/collectd/templates/default/collectd.conf.erb <% @auto_plugins.keys.sort.each do |name| %> LoadPlugin "<%= name %>" <% end %>
Exemple : nginx # cookbooks/nginx/definitions/default.rb define :register_nginx_virtualhost do name = params[:name] template "/etc/nginx/vhosts.d/#{name}.conf" do source "vhosts/#{name}.conf.erb" cookbook "nginx" end node.run_state[:nginx][:vhosts] << name end # cookbooks/nginx/recipes/static_fotolia.rb include_recipe 'nginx::default' register_nginx_virtualhost 'static_fotolia' # cookbooks/nginx/templates/default/nginx.conf.erb http { <% node.run_state[:nginx][:vhosts].each do |vhost| %> include "vhosts.d/<%= vhost %>.conf"; <% end %> }
Avantages • Reste un databag, donc : • Stockés à un endroit centralisé • Versionnables • Multi-valués • Il suffit de copier la clé sur la machine et le databag devient lisible