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 il 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 Squadra su AWS Re:post o tramite
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 HAProxylivello 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 ricette di lavoro e file correlati, consultate il AWS OpsWorks Accumula ricette
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
package
risorsa, che rappresenta un pacchetto installato, un HAProxyserverper questo esempio. -
Una
service
risorsa, che rappresenta un servizio, il HAProxy servizio di questo esempio. -
Due
template
risorse, che rappresentano file che devono essere creati da un modello specificato, due file di HAProxy configurazione per questo esempio.
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
" doattribute1
'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
etemplate
. - 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 denominatahaproxy
e la prima risorsatemplate
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
eservice
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 risorsapackage_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 HAProxy ricetta non utilizza gli attributi guard, ma vengono utilizzati in molti dei seguenti esempi. -
- 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 risorsatemplate
non include alcun elementoaction
, perciò il provider esegue l'operazione predefinitacreate
. -
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 qualitemplate
efile
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 elementonotifies
esplicito. Nella HAProxy ricetta, la secondatemplate
risorsa notifica alla risorsa haproxyservice
di riavviare il HAProxy servizio se il file di configurazione associato è cambiato.
-
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 HAProxy ricetta include un if
blocco che utilizza una template
risorsa 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
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 ricettahaproxy::service
, che rappresenta il HAProxy servizio.
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.