2014-10-15 19 views
12

Intro Sto imparando Chef per automatizzare la gestione del server al lavoro. Ho scaricato chefdk 3.0 da here e ora sto cercando di costruire il mio primo libro di cucina usando lo chef.Perché lo chef non può risolvere i miei libri di cucina?

Importante Sto usando questo in un ambiente Windows a scopo di test, mi aspetto che a fallire dal momento che Windows non ha iptables, ma non mi aspetto il fallimento dicendo che non riesce a trovare il libro di cucina . Ho provato a utilizzare Windows cookbook e funziona.

Il problema io sono in grado di creare il libro di cucina ed eseguirlo, ma non sono in grado di fare riferimento a dipendenze da supermercato.

ho provato due alternative:

Alternativa 1

ho usato il seguente comando per creare il libro di cucina

chef generate cookbook learn_chef_httpd 

(da this tutorial)

ero in grado di completa il tutorial e ora vorrei testare il riferimento a un altro libro di cucina, quindi ho scelto simple_iptables

ho aggiunto questa linea

cookbook 'simple_iptables', '~> 0.7.0' 

Con mia Berksfile, come descritto nel supermercato.

poi ho aggiunto queste righe al mio file default.rb:

include_recipe 'simple_iptables' 

# Allow HTTP, HTTPS 
simple_iptables_rule "http" do 
    rule [ "--proto tcp --dport 80", 
     "--proto tcp --dport 443" ] 
    jump "ACCEPT" 
end 

e corro il libro di cucina utilizza:

chef-client --local-mode --runlist 'recipe[learn_chef_httpd]' 

Il problema è che lo Chef non trova il libro di cucina

Chef::Exceptions::CookbookNotFound 
---------------------------------- 
Cookbook simple_iptables not found. If you're loading simple_iptables from anoth er cookbook, make sure you configure the dependency in your metadata 

Ho provato ad aggiungerlo ai metadati:

depends 'simple_iptables', '~> 0.7.0' 

Ma ho ancora un errore:

Error Resolving Cookbooks for Run List: 
Missing Cookbooks: 

No such cookbook: simple_iptables 

Alternativa 2

sto ancora cercando di farlo funzionare così ho anche provato a fare "il modo in cui berkshelf", così ho creato un nuovo libro di cucina.

berks cookbook test 

E ho aggiunto questa linea

cookbook 'simple_iptables', '~> 0.7.0' 

Con mia Berksfile, come descritto nel supermercato.

poi ho aggiunto queste righe al mio file default.rb:

include_recipe 'simple_iptables' 

# Allow HTTP, HTTPS 
simple_iptables_rule "http" do 
    rule [ "--proto tcp --dport 80", 
     "--proto tcp --dport 443" ] 
    jump "ACCEPT" 
end 

Berks Eseguiti installare:

berks install

e corse:

chef-client --local-mode --runlist 'recipe[test]' 

Lo stesso errore è tornato

Chef::Exceptions::CookbookNotFound 
---------------------------------- 
Cookbook simple_iptables not found. If you're loading simple_iptables from anoth er cookbook, make sure you configure the dependency in your metadata 

Ho provato ad aggiungere alla metadati:

depends 'simple_iptables', '~> 0.7.0' 

Ma ho ancora un errore:

Error Resolving Cookbooks for Run List: 
Missing Cookbooks: 

No such cookbook: simple_iptables 

ho guardato la cartella ~/berkshelf ei libri di cucina ci sono.

** Alternativa 3 **

ho iniziato una CentOS 6.5 istanza EC2 su Amazon, installato rubino 2.1.3 e Chef. ha creato un ~/chef-repo/cartella di libri di cucina

ho creato un libro di cucina con berkshelf, corse

bundle install 

aggiunto il riferimento/codice come negli altri alterantives poi

berks install 

e Ho corso nello stesso modo in cui l'ho fatto l'ultima volta.

Ho gli stessi problemi.

Cosa mi manca? Di cosa ho bisogno per farlo funzionare?

+0

State aggiungendo queste righe '' a vostra berksfile o la vostra ricetta default.rb? –

+0

Alla ricetta default.rb – JSBach

+0

Potrei sbagliarmi, ma non hai menzionato l'installazione di 'berks' dopo aver modificato il file berks. Si consiglia inoltre di utilizzare il fornitore di berks per creare una directory che raccolga tutti i libri di cucina necessari e indicando il percorso repo chef-client in questa directory. Tutto sommato, i tuoi libri di cucina sono sul tuo disco, ma non da qualche parte a cui chef-zero guarda. – Tensibai

risposta

13

Assicurarsi di aver configurato lo chef_repo_path come descritto in docs.

Fondamentalmente local-mode ha bisogno di sapere dove trovare i tuoi libri di cucina, ruoli, ambienti, borse di dati, ecc Purtroppo, la documentazione non è super chiaro su dove/come si imposta chef_repo_path

Ecco quello che posso dire dal codice.

  1. se client.rb è trovato e contiene cookbook_path, chef_repo_path = "#{cookbook_path}/.."
  2. se knife.rb è trovato e contiene cookbook_path, chef_repo_path = "#{cookbook_path}/.."
  3. Chef può cercare di indovinare il percorso. The code cercherà da pwd verso l'alto alla ricerca di una directory denominata cookbooks. Se lo trova, allora cookbooks/.. verrà impostato come chef_repo_path.
  4. Se tutto il resto fallisce, pwd saranno utilizzati come chef_repo_path

Se si utilizza Berkshelf, la cosa migliore è fare un berks vendor al fine di ottenere una singola directory saranno tutti dei libri di cucina che vi serve. È quindi possibile indicare chef_repo_path al parent della directory cookbooks che contiene i libri di cucina venduti.

Attenzione, questo è da 10 minuti di ricerca nel codice sorgente, quindi potrei non averlo abbastanza bene.

+0

Se ho usato Berkshelf, dovrebbe trovarsi in ~/.berkshelf, giusto? Non dovrebbe cercare questo percorso? Ho provato ad usare altri libri di cucina (come questo https://supermarket.getchef.com/cookbooks/windows) e funziona ... – JSBach

+0

Non posso dirlo con certezza, perché non uso la modalità locale. Il mio suggerimento è che si usi 'berks vendor' per raggruppare tutte le proprie dipendenze in una singola cartella di libri di cucina, e quindi assegnare il percorso di ricettario esplicitamente. Anche se è impostato su ~/.berkshelf, non vorrai usare quella posizione a lungo. Abbastanza rapidamente avrai più versioni di libri di cucina e avrai bisogno di borse, ruoli o ambienti dati. Il tuo approccio migliore è un luogo dedicato a queste cose. –

+0

Capisco, il problema è che ho intenzione di caricare questo libro di cucina su Amazon OpsWorks, quindi non sarò in grado di impostare il percorso e così via. Sfortunatamente deve funzionare "out of the box" :( – JSBach

1

Dopo qualche ora di rompere la mia mente cercando una combinazione di risposte @kilian e @ di gratzy da here, questo ha aiutato,

cmd /c E: && cd /d E:\Items_CI Exploration\chef\chef-repo\cookbooks\ && chef-client --local-mode --runlist 'recipe[cisamplecookbooks::web]'

Sì, senza le virgolette. Notare anche la "E:" aggiunta prima. Il numero di '&' non ha fatto alcuna differenza però.

"E:\Items_CI Exploration\chef\chef-repo\cookbooks\" questo è il percorso in cui sono stati eseguiti i miei libri di cucina. Credo che l'ultima barra ("\") accanto a cookbooks sia anche importante.

1

Mentre cercavo di eseguire localmente per i test, mi sono imbattuto nello stesso errore "non riesco a risolvere il ricettario". Dal momento che potenzialmente voglio eseguire libri di cucina senza un server Chef ma anche senza ChefDK installato per gli sviluppatori non Chef per eseguire una semplice configurazione della workstation una volta, ho creato il seguente flusso di lavoro.

Il tuo ricettario deve vivere in una cartella sotto una cartella chiamata libri di cucina, questo sembra essere "magico", ma sembra essere in grado di vivere ovunque, ad esempio userdir/projects/cookbooks/my_cookbook_name/.

Se si dispone di un Berksfile per le dipendenze necessarie per farli localmente prima di poter eseguire in modo chef-client -z -o my_cookbook_name correre berks vendor per tirare le dipendenze in una directory cookbooks nella cartella corrente.

Il comando berks vendor estrae le altre dipendenze nella directory dei libri di cucina in modo che chef-zero/chef-solo possa trovarle. Eseguire quanto segue in un prompt di PowerShell dell'amministratore, potrebbe essere compatibile con lo standard Command Prompt ma non è consigliabile incoraggiare l'utilizzo di cmd.exe.

cd /path/to/cookbooks/my_cookbook_name berks vendor . chef-client -z -o my_cookbook_name

La bellezza di utilizzare il nuovo chef zero integrato nel client è che non hanno necessariamente bisogno il pieno ChefDK alla prova, anche se sarà necessario berkshelf per le Berks comando su almeno 1 macchina come ottenere quello installato senza ChefDK è un incubo. Una volta ottenuto berks è possibile eseguire berks package e copiare il file creato su una macchina con solo lo chef-client e aggiungerlo da qualche parte, quindi eseguire lo chef-client -z -o your_cookbook nella directory contenente la cartella cookbooks.

Per ottenere solo un cuoco, utilizzare l'installer omnibus e disporre del numero sufficiente per eseguire il bootstrap di un nodo o eseguire la ricetta.

. { iwr -useb https://omnitruck.chef.io/install.ps1 } | iex; install -channel stable -project chef

Se avete bisogno dei vostri Berks e volete un modo rapido per ottenere il ChefDK, questo farà il trucco.

. { iwr -useb https://omnitruck.chef.io/install.ps1 } | iex; install -channel stable -project chefdk