2012-03-12 13 views
14

Uso chef-solo per testare i miei libri di cucina a livello locale, ma voglio essere in grado di eseguire solo i libri di cucina che sto testando. Attualmente, sembra che lo chef-solista eseguirà tutti i libri di cucina nella directory dei libri di cucina specificata in solo.rb. Ho specificato la lista di esecuzione nel file degli attributi JSON e specificato la posizione del file JSON in solo.rb, ma non sembra essere di aiuto. Analizza almeno gli attributi di tutti gli altri libri di cucina, perché ne ho uno che non funziona per la mia configurazione locale e fallisce l'intera esecuzione.Specificare quali libri di cucina utilizzare con Chef Solo

La soluzione migliore che ho trovato finora è spostare il (i) libro (i) di cucina che ho bisogno di testare in una directory diversa e specificarlo in solo.rb. C'è un modo migliore per farlo?

risposta

27

Aggiornamento: chef-solista non è più uno strumento "separato" dallo chef-cliente. Dal documentation:

chef-solo is a command that executes chef-client in a way that does not require the Chef server in order to converge cookbooks. chef-solo uses chef-client’s Chef local mode, and does not support the following functionality present in chef-client/server configurations

Questa modifica è stata implementata in Chef version 12.11, che soddisfa il community RFC. Questo è stato rilasciato l'8 giugno 2016. Il vecchio comportamento, che è descritto di seguito (anche se da 4 anni fa in questo momento), è disponibile con l'argomento --legacy-mode su chef-solo.

Per la più aggiornate e informazioni aggiornate in merito a Chef Solo, si prega di leggere the official documentation

La mia risposta originale è qui sotto:

Chef (solista o client) non "RUN" tutti i libri di cucina .

It carichi tutti i file del libro di cucina di Ruby nelle seguenti directory, in questo ordine:...

  • librerie/* rb
  • fornitori/* rb
  • risorse/* RB
  • attributi/*. rb
  • definizioni/*. rb

Quindi carica tutte le ricette presenti nell'elenco di esecuzione espansa del nodo.Con chef-solo, questo viene da un file JSON fornito con -j o può essere fatto nei file attributi, tuttavia quest'ultimo è deprecato e non consigliato.

Vengono caricate anche le ricette incluse da quelle nell'elenco di esecuzione espanso tramite include_recipe. Lo chef carica le ricette valutandole come codice Ruby. Quando incontra il codice ruby ​​che riconosce essere una risorsa, o una definizione, aggiunge la risorsa alla Raccolta risorse, che è un hash indicizzato ordinato numericamente di tutte le risorse. Le definizioni sono speciali, in quanto Chef aggiunge le risorse che contengono, non la definizione stessa, alla Raccolta risorse. Le risorse delle ricette incluse tramite include_recipe vengono inserite in posizione, quindi Chef continua con la ricetta inclusa.

Una volta che Chef ha elaborato tutte le ricette per tutte le loro risorse, percorre la raccolta delle risorse eseguendo l'azione specificata su ciascuna nell'ordine in cui è stata aggiunta alla raccolta.

Consiglio vivamente di leggere la documentazione su questo processo. Si applica a Chef Solo; viene saltata solo la parte in cui i libri di cucina vengono scaricati dal server.

per garantire che solo le ricette che si desidera testare sono testati, li includono nella lista di esecuzione del nodo tramite un file JSON. Ecco come si presenta:

{ "run_list": ["recipe[mything]", "recipe[anotherthing]"] } 

lista La corsa è solo una matrice, e gli elementi può essere recipe[cookbookname] o role[somerole]. Puoi leggere ulteriori informazioni su come utilizzare i ruoli con Chef Solo nella documentazione di Chef Solo.

Se si dispone di sistema di cambiamenti in atto quando Chef sta caricando i componenti Cookbook (i file di rubino in ogni libro di cucina), quindi "Stai facendo male" (tm) e dovrebbe refactoring quelle cose da fare in una risorsa chiamata da una ricetta.

+0

tutti i link sono rotti – freedev

5

Purtroppo, non penso ci sia. Lo chef esegue una modalità a due passaggi: in primo luogo, analizza e crea un modello dei tuoi libri di cucina (la fase di "compilazione"), quindi esegue solo i libri di cucina specificati nell'elenco di esecuzione. Credo che lo faccia per assicurarsi che colga le dipendenze tra i libri di cucina nella fase di compilazione. La fase di compilazione deve essere coerente o altrimenti viene eliminata.

Per capire questo, guarda la risorsa ruby block. Qualsiasi rubino che gira attorno alle tue ricette verrà valutato al compilando il tempo; qualsiasi rubino che si desidera eseguire alla valutazione deve essere inserito in una risorsa di blocco rubino. Una volta che lo fai, la natura della valutazione in due passaggi diventa evidente.

Penso che le tue uniche opzioni siano di portare i tuoi libri di cucina uno alla volta, come fai tu, o di correggere i tuoi attributi.

13

Vale anche la pena notare che durante il test si può facilmente ignorare l'elenco di esecuzione

chef-solo --override-runlist "role["somerole"],recipe[mycookbook::recipe]" 
+0

Se i libri di cucina sono definiti in '/ etc.chef-solo.rb' puoi abbreviare anche in questo modo '$ sudo chef-solo -o nginx :: start' – JREAM

+0

questo comando mi dà il Errore di visualizzazione: nessun ricettario. Il nome del libro di cucina è ok e anche il nome della ricetta è ok. – Lechucico

Problemi correlati