2012-11-01 18 views
7

Ho una risorsa in una ricetta da chef che mi piacerebbe essere facoltativa. Cioè, quando la ricetta viene eseguita, se la risorsa fallisce, voglio che tutto il resto continui. Mi piacerebbe comunque sapere che c'è stato un fallimento con quella risorsa, ovviamente, è solo che non è una risorsa critica e nulla dipende da esso, quindi preferirei continuare il resto della corsa.Come si rende facoltativa una risorsa chef?

Sono abituato a lavorare con Puppet dove devi dichiarare esplicitamente le tue dipendenze, e le risorse vengono ignorate solo quando si verificano delle dipendenze, invece di un errore che causa il mancato funzionamento dell'intero resto del file.

Non so perché questo è stato chiuso come non una vera domanda (anche dopo aver letto le FAQ), ma aggiungerò del codice di esempio per illustrare quello che sto chiedendo, speriamo che qualcun altro possa votare per riaprire o rispondere.

Sto usando lo chef per impostare un ambiente di sviluppo, e parte di questo è solo la clonazione di alcuni repository di Git per essere installato. Niente dipende da loro, e occasionalmente c'è un repository privato a cui alcuni sviluppatori non hanno accesso. Se non riesce a clonare, mi piacerebbe che le altre risorse continuassero a essere eseguite.

Così, per le seguenti risorse:

["foo", "bar", "baz"].each do |repo| 
    git repo do 
    repository "[email protected]/example/#{repo}" 
    reference "master" 
    action  :sync 
    depth  1 
    user  'dev' 
    group  'dev' 
    destination "#{node[:src_dir]}/#{repo}" 
    end 
end 

Se l'utente che esegue questo non ha il permesso di clonare foo, vorrei foo a fallire, ma bar e baz per clonare ancora. Come è possibile?

+1

opzioni veloce e sporco: ignore_failure vero, only_if "http://github.com/repo ricciolo" – agross

+1

ignore_failure è quello che stavo cercando. arricciare non funzionerebbe davvero dal momento che si tratta di un repository privato che sto cercando di ottenere, quindi mi affido alle chiavi ssh per renderlo accessibile. Inoltre, only_if semplicemente ignorerà la risorsa senza farmi sapere che qualcosa non va, mentre ignore_failure mi dà un buon messaggio nel registro: 'STDERR: ERRORE: Repository non trovato. ignore_failure è impostato, continua' – mmrobins

risposta

6

È possibile impostare ignore_failure true

0

Una possibilità è quella di creare una classe di provider che sottoclassi Chef::Provider::Git e modificare il comportamento non desiderato nella sottoclasse. È possibile utilizzare il metodo di attributo provider in una risorsa per impostare la classe del provider per tale risorsa, in questo caso, per la classe del provider. Probabilmente posizionerai la classe del tuo fornitore in un file di librerie.