Chef - Plateforme multiplateforme pour les livres de cuisine

Les livres de recettes multiplateformes sont ces livres de recettes qui adoptent un environnement sous-jacent sur lequel il va s'exécuter. Chef fournit une foule de fonctionnalités, qui aident à écrire des livres de recettes multiplateformes capables de s'exécuter sur n'importe quel système d'exploitation, sur lequel il va être déployé. Cela aide un développeur à écrire un livre de recettes complètement opérationnel.

Pour ce faire, nous avons besoin d'un livre de cuisine. Dans notre cas, ce sera test_cookbook et une liste d'exécution qui contiendra la définition du livre de recettes.

Méthode de travail

La récupération des détails de la plate-forme de nœuds et l'exécution de la logique conditionnelle dans notre livre de recettes dépendent de la plate-forme. Dans notre cas, nous allons le tester pour Ubuntu.

Step 1 - Enregistrez un message si le nœud est Ubuntu.

[email protected]:~/chef-repo $ subl cookbooks/test_cookbook/recipes/default.rb 
Log.info("Running on ubuntu") if node.platform['ubuntu']

Step 2 - Téléchargez le livre de cuisine sur le serveur Chef.

[email protected]:~/chef-repo $ subl cookbooks/test_cookbook/recipes/default.rb 
Uploading my_cookbook [0.1.0] 
Uploaded 1 cookbook.

Step 3 - Exécutez le client Chef sur le nœud.

[email protected]:~$ sudo chef-client 
...TRUNCATED OUTPUT... 
[2013-03-03T20:07:39+00:00] INFO: Running on Ubuntu 
...TRUNCATED OUTPUT...

Alternativement, si l'on n'est pas intéressé par une plate-forme spécifique mais a seulement besoin de savoir quel déclaratif on utilise, l'instruction suivante peut être utilisée.

Log.info("Running on a debian derivative") if 
platform_family?('debian')

Le téléchargement du livre de recettes modifié et l'exécution du client Chef sur le nœud Ubuntu afficheront le résultat suivant.

[2013-03-03T20:16:14+00:00] INFO: Running on a debian 
derivative

Flux de travail des scripts

Dans la commande ci-dessus, Ohai découvrira l'état actuel du système d'exploitation du nœud et le stockera en tant qu'attribut de plate-forme avec l'objet nœud.

node['platform']

Ou, vous pouvez utiliser la syntaxe de style de méthode -

node.platform

Définition des valeurs spécifiques à la plate-forme

Afin de définir des valeurs spécifiques à la plate-forme, chef propose des méthodes pratiques value_for_platform et value_for_platform_family. Ils peuvent être utilisés pour éviter les instructions de cas complexes et utiliser un simple hachage à la place.

Exemple de livre de recettes

execute "start-runsvdir" do 
   command value_for_platform( 
      "debian" => { "default" => "runsvdir-start" }, 
      "ubuntu" => { "default" => "start runsvdir" }, 
      "gentoo" => { "default" => "/etc/init.d/runit-start start" } 
   ) 
   action :nothing 
end

Dans l'exemple ci-dessus, la commande est spécifique au système d'exploitation tel que défini.

  • Pour Debian, "runsvdir-start" fonctionnera
  • Pour Ubuntu, "start runsvdir" fonctionnera
  • Pour Gentoo, "/etc/init.d/runit-start" fonctionnera