Struttura di una ricetta - AWS OpsWorks

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Struttura di una ricetta

Importante

Il AWS OpsWorks Stacks servizio ha raggiunto la fine del ciclo di vita il 26 maggio 2024 ed è stato disattivato sia per i clienti nuovi che per quelli esistenti. Consigliamo vivamente ai clienti di migrare i propri carichi di lavoro verso altre soluzioni il prima possibile. Se hai domande sulla migrazione, contatta il AWS Support Team su AWS re:post o tramite Premium AWS Support.

Un libro di ricette è principalmente un set di ricette, in grado di eseguire un'ampia gamma di attività su un'istanza. Per chiarire come funziona l'implementazione delle ricette, è utile guardare un semplice esempio. Di seguito è riportata la ricetta di configurazione per il livello HAProxy integrato. In questa fase soffermati solo sulla struttura generale, senza preoccuparti troppo dei dettagli, che saranno descritti nei successivi esempi.

package 'haproxy' do action :install end if platform?('debian','ubuntu') template '/etc/default/haproxy' do source 'haproxy-default.erb' owner 'root' group 'root' mode 0644 end end include_recipe 'haproxy::service' service 'haproxy' do action [:enable, :start] end template '/etc/haproxy/haproxy.cfg' do source 'haproxy.cfg.erb' owner 'root' group 'root' mode 0644 notifies :restart, "service[haproxy]" end
Nota

Per questo e altri esempi di utilizzo di ricette di lavoro e file correlati, consulta le ricette integrate di AWS OpsWorks Stacks.

L'esempio evidenzia gli elementi chiave della ricetta, che sono descritti nelle seguenti sezioni.

Risorse

Le Ricette consistono in gran parte in un set di risorse Chef. Ognuna di esse specifica un particolare aspetto dello stato finale dell'istanza, ad esempio un pacchetto da installare o un servizio da avviare. L'esempio presenta quattro risorse:

  • Una risorsa package, che rappresenta un pacchetto installato, in questo esempio un server HAProxy.

  • Una risorsa service, che rappresenta un servizio, in questo esempio il servizio HAProxy.

  • Due risorse template, che rappresentano i file che devono essere creati da un modello specificato, in questo esempio due file di configurazione HAProxy.

Le risorse forniscono un modo dichiarativo per specificare l'istanza. In background, a ogni risorsa è associato un provider che esegue le attività necessarie, ad esempio l'installazione di pacchetti, la creazione e la configurazione di directory, l'avvio di servizi e così via. Se i dettagli dell'attività dipendono dallo specifico sistema operativo, la risorsa ha più provider e usa il tipo appropriato per il sistema. Ad esempio, su un sistema Red Hat Linux, il provider package utilizza yum per l'installazione di pacchetti. In un sistema Ubuntu Linux, il provider package utilizza apt-get.

Una risorsa come un blocco di codice Ruby viene implementata con il seguente formato generale.

resource_type "resource_name" do attribute1 'value1' attribute2 'value2' ... action :action_name notifies : action 'resource' end

Gli elementi sono:

Tipo di risorsa

(Obbligatorio) L'esempio include tre tipi di risorse: package, service e template.

Nome risorsa

(Obbligatorio) Il nome identifica la particolare risorsa e talvolta viene usato come valore di default per uno degli attributi. Nell'esempio, package rappresenta una risorsa di pacchetto denominata haproxy e la prima risorsa template rappresenta un file di configurazione denominato /etc/default/haproxy.

Attributes

(Facoltativo) Gli attributi specificano la configurazione delle risorse e variano in base al tipo di risorsa e alla sua configurazione.

  • Le risorse template dell'esempio definiscono esplicitamente una serie di attributi che specifica l'origine del file creato nonché il proprietario, il gruppo e la modalità.

  • Le risorse package e service esempio non definiscono in modo esplicito alcun attributo.

    Il nome della risorsa in genere è il valore di default per un attributo obbligatorio ed è talvolta tutto ciò che è necessario. Ad esempio, il nome della risorsa è il valore di default per l'attributo package della risorsa package_name, che è l'unico attributo obbligatorio.

Ci sono anche alcuni attributi specializzati, denominati attributi di protezione, che specificano quando il provider di risorse deve eseguire un'azione. Ad esempio, l'attributo only_if indica al provider di risorse di eseguire un'azione solo se viene soddisfatta una condizione specificata. La ricetta HAProxy non utilizza gli attributi di protezione, che vengono però impiegati in molti degli esempi seguenti.

Operazioni e notifiche

(Facoltativo) Azioni e notifiche specificano quali attività deve eseguire il provider.

  • action indica al provider di eseguire un'operazione specifica, ad esempio un'installazione o una creazione.

    Ogni risorsa dispone di un set di operazioni che dipendono da quella particolare risorsa, una delle quali è l'operazione predefinita. Nell'esempio, l'operazione della risorsa package è install, che indica al provider di installare il pacchetto. La prima risorsa template non include alcun elemento action, perciò il provider esegue l'operazione predefinita create.

  • notifies indica un altro provider della risorsa di eseguire un'operazione, ma solo se lo stato della risorsa è stato modificato.

    notifies viene in genere utilizzato con risorse quali template e file per eseguire attività come il riavvio di un servizio dopo la modifica di un file di configurazione. Le risorse non prevedono notifiche di default. Per le notifica, la risorsa deve avere un elemento notifies esplicito. Nella ricetta HAProxy, la seconda risorsa template notifica alla risorsa haproxy service di riavviare il servizio HAProxy se il file di configurazione associato è stato modificato.

Le risorse talvolta dipendono dal sistema operativo.

  • Alcune risorse possono essere utilizzate solo su sistemi Linux o Windows.

    Ad esempio, package installa pacchetti sui sistemi Linux e windows_package installa pacchetti sui sistemi Windows.

  • Alcune risorse possono essere utilizzate con qualsiasi sistema operativo, ma dispongono di attributi specifici per un determinato sistema.

    Ad esempio, la risorsa file può essere utilizzata sia su sistemi Linux che Windows, ma dispone di set di attributi separati per la configurazione delle autorizzazioni.

Per le descrizioni delle risorse standard, inclusi gli attributi, le operazioni e le notifiche disponibili per ciascuna risorsa, consulta la pagina relativa alle informazioni su risorse e provider.

Controllo di flusso

Poiché le ricette sono applicazioni Ruby, è possibile utilizzare le strutture di controllo di Ruby per integrare il controllo del flusso in una ricetta. Ad esempio, è possibile usare logica condizionale di Ruby per far sì che la ricetta si comporti in modo diverso su sistemi differenti. La ricetta HAProxy include un blocco if che utilizza una risorsa template per creare un file di configurazione, ma solo se la ricetta è in esecuzione su un sistema Debian o Ubuntu.

È comune anche lo scenario che prevede l'uso di un loop per eseguire una risorsa più volte con diverse impostazioni di attributo. Ad esempio, è possibile creare un set di directory utilizzando un loop per eseguire una risorsa directory più volte con diversi nomi di directory.

Nota

Se non hai familiarità con Ruby, consulta l'articolo sulle nozioni di base su Ruby per Chef, che illustra le informazioni necessarie per la maggior parte delle ricette.

Ricette incluse

include_recipe include altre ricette nel codice per permetterti di suddividere in moduli le ricette e riutilizzare lo stesso codice in più ricette. Quando esegui la ricetta host, Chef sostituisce ciascun elemento include_recipe con il codice della ricetta specificato prima di eseguire la ricetta host. Puoi identificare una ricetta inclusa utilizzando la sintassi standard cookbook_name::recipe_name di Chef, dove recipe_name omette l'estensione .rb. L'esempio include una sola ricetta, haproxy::service, che rappresenta il servizio HAProxy.

Nota

Se utilizzi include_recipe in ricette in esecuzione su Chef 11.10 e versioni successive per includere una ricetta da un altro libro di ricette, devi utilizzare un'istruzione depends per dichiarare la dipendenza nel file metadata.rb del libro di ricette. Per ulteriori informazioni, consulta Implementazione delle ricette: Chef 11.10.