2017-02-21 3 views
2

J'ai jeté un oeil sur BerkShelf documentation. J'ai été capable de comprendre que cela signifie gérer les dépendances de livres de recettes. Donc, je suppose que je voudrais construire une machine avec Java. J'ai d'abord généré mon livre de recettes personnalisé:confondu avec berkshelf, chef et vagabond

chef generate cookbook custom-java 

Mon Berksfile est:

source 'https://supermarket.chef.io' 
metadata 

cookbook 'java' 

et mon metadata.rb est:

name 'custom-java' 
... 
version '0.1.0' 

Après cela, je suis tout simplement courir berks install, alors toutes les dépendances ont été résolues et situées sous ~\.berkshelf\cookbooks.

Néanmoins, je ne comprends pas très bien comment utiliser mon custom-java dans ma configuration vagabonde. Que dois-je faire pour que le vagabond dispose ce livre de recettes dans mes machines?

Ma structure est errante:

VagrantFile 
├───chef 
│ ├───cookbooks 
│ │ ├───(((1))) <<<<<<<<<<<<<<<<<<<<<< 
│ ├───roles 
│ │ ├───java-dev-workstation.rb 

contenu Vagrantfile est:

Vagrant.configure("2") do |config| 
    config.vm.box = "centos/7" 
    config.vm.provision "chef_solo" do |chef| 
    chef.roles_path = "chef/roles" 
    chef.cookbooks_path = "chef/cookbooks" 
    chef.add_role "java-dev-workstation" 
    end 
end 

Et java-dev-workstation.rb:

name "java-dev-workstation" 

default_attributes( 
    # Because it's Oracle, we need to agree to the terms and conditions. 
    :custom-java => { >>>>>>>>> (((2))) 
    :install_flavor => 'oracle', 
    :jdk_version => '8', 
    :accept_license_agreement => true, 
    :oracle => { "accept_oracle_download_terms" => true } 
    } 

) 

run_list(
    "recipe[java]" 
) 

J'utilise chef 18/12/31.

  1. Sur (((1))): Ai-je besoin "importer" mon livre de recettes custom-java, comment? Où est-il situé?
  2. Sur (((2))): Comment configurer java?

EDIT J'ai mis chef.cookbooks_path:

config.vm.provision "chef_solo" do |chef| 
    chef.roles_path = "chef/roles" 
    chef.cookbooks_path = 'D:\projects\living\vagrant\production\berk\custom-java' 
    chef.add_role "java-dev-workstation" 
end 

EDIT2

Néanmoins, custom-java dépendances ne sont pas résolus aujourd'hui:

================================================================================ 
Error Resolving Cookbooks for Run List: 
================================================================================ 

Missing Cookbooks: 
------------------ 
No such cookbook: yum 

Expanded Run List: 
------------------ 
* custom-java 

Platform: 
--------- 
x86_64-linux 

Mon contenu metadata.rb est:

name 'berk' 
... 
version '0.1.0' 

supports 'centos' 

depends 'yum' 

Actuellement, toutes les dépendances sont situées dans ~/.berkshelf/cookbooks. Il semble shef-solo ne cherche pas dans ce ...

+0

Vous pouvez ajouter 'custom-java' à la liste run_list du rôle' java-dev-workstation.rb'. –

+0

Comment le vagabond va-t-il résoudre le livre de recettes 'custom-java' si je ne l'ai pas uploadé ailleurs? – Jordi

+0

vous approvisionnez avec 'chef_solo' et fournissez' cookbooks_path' - c'est suffisant. –

Répondre

0

Vous avez pris vers l'arrière pour un modèle de livre de cuisine emballage , votre custom_java devrait dépend de java et modifier son comportement par défaut (remplaçant les attributs de nœud).

Vos métadonnées personnalisées Java.rb devrait contenir une ligne comme celle-ci, ce qui est dans le fichier berks ne sera jamais interprété par l'exécution chef-client, c'est un résolveur de dépendance externe pour créer des paquets cohérents.

depends 'java', '~> 1.47' 

Et la default.rb une ligne

include_recipe 'java' 

Ensuite, votre Berksfile peut omettre la ligne de livre de cuisine (à moins que vous tiriez une version ailleurs que la source en haut)

Suivant votre rôle doit utiliser custom-java comme recette et non java, puis le chef-client exécuter (la partie vagabonde avant éditer sonne bien et devrait tirer les deux livres de cuisine) va calculer les attributs des coobooks java, overwri te ceux définis dans custom-java et vous devriez vous retrouver avec le comportement désiré.

Alternativement, vous pouvez simplement définir la liste de diffusion à custom-java et éviter le rôle tout à fait, cela fonctionnera.

Je vous recommande vivement de parcourir tous les tutoriels sur https://learn.chef.io pour avoir un meilleur aperçu.