Chef - Scripts pour les sacs de données

Dans certaines conditions, il n'est pas possible de placer le serveur sous le contrôle total de Chef. Dans de tels cas, il peut être nécessaire d'accéder aux valeurs des sacs de données Chef à partir de scripts. Pour ce faire, il faut stocker les valeurs du sac de données dans un fichier JSON et laisser le script ajouté accéder à ces valeurs.

Pour cela, il faut avoir un livre de cuisine. Dans notre cas, nous utiliserions test_cookbook comme précédemment et devrions avoir la liste d'exécution du nœud, y compris la définition de test_cookbook.

Méthode de travail

Step 1 - Créez un sac de données.

[email protected]:~/chef-repo $ mkdir data_bags/servers 
[email protected]:~/chef-repo $ knife data bag create servers 
Created data_bag[servers]

Step 2 - Créez un élément de sac de données.

[email protected]:~/chef-repo $ subl data_bags/servers/Storage.json { 
   "id": "storage", 
   "host": "10.0.0.12" 
}

Step 3 - Mettez à jour l'élément du sac de données.

[email protected]:~/chef-repo $ subl data_bags/servers/Storage.json { 
   "id": "storage", 
   "host": "10.0.0.12" 
}

Utilisation dans le livre de recettes

Step 1 - Vous devez créer un fichier JSON contenant des valeurs de sac de données à l'aide du livre de recettes ci-dessus afin que les scripts externes puissent accéder à ces valeurs.

[email protected]:~/chef-repo $ subl cookbooks/test_cookbook/recipes/default.rb 
file "/etc/backup_config.json" do 
   owner "root"
   group "root" 
   mode 0644 
   content data_bag_item('servers', 'backup')['host'].to_json 
end

Step 2 - Téléchargez test_cookbook sur le serveur Chef.

[email protected]:~/chef-repo $ knife cookbook upload test_cookbook 
Uploading my_cookbook [0.1.0]

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

[email protected]:~$ sudo chef-client 
...TRUNCATED OUTPUT... 
[2013-03-14T20:30:33+00:00] INFO: Processing 
file[/etc/backup_config.json] action create 
(my_cookbook::default line 9) 
[2013-03-14T20:30:34+00:00] INFO: entered create 
[2013-03-14T20:30:34+00:00] INFO: 
file[/etc/backup_config.json] owner changed to 0 
[2013-03-14T20:30:34+00:00] INFO: 
file[/etc/backup_config.json] group changed to 0 
[2013-03-14T20:30:34+00:00] INFO: 
file[/etc/backup_config.json] mode changed to 644 
[2013-03-14T20:30:34+00:00] INFO: 
file[/etc/backup_config.json] created file 
/etc/backup_config.json 
...TRUNCATED OUTPUT...

Step 4 - Validation du contenu du fichier JSON généré.

[email protected]:~$ cat /etc/backup_config.json 
"10.0.0.12"

Flux de travail des scripts

Dans la commande ci-dessus, la ressource de fichier que nous avons utilisée qui crée un fichier JSON dans le /etcLe répertoire est défini dans le livre de recettes par défaut. Il obtient le contenu du fichier directement à partir du sac de données à l'aide de la méthode data_bag_item. Nous accédons aux valeurs d'hôte à partir de l'élément de sac de données et le convertissons en JSON. La ressource de fichier utilise les valeurs converties JSON comme contenu et les écrit sur le disque.