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à.
Esempio 7: esecuzione di comandi e script
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 Supporto AWS Team su AWS re:post
Le risorse di Chef possono gestire un'ampia gamma di attività su un'istanza, ma talvolta è preferibile usare un comando shell o uno script. Ad esempio, se hai già script che utilizzi per eseguire determinate attività, sarà più semplice continuare a utilizzar questi ultimi, piuttosto che implementare un nuovo codice. Questa sezione illustra come eseguire comandi o script in un'istanza.
Esecuzione di comandi
La risorsa script
Per iniziare
-
Nella directory
opsworks_cookbooks, creare una directory denominatascripte aprirla. -
Aggiungere un file
metadata.rbascriptcon il contenuto seguente.name "script" version "0.1.0" -
Inizializzare e configurare Test Kitchen come descritto in Esempio 1: installazione di pacchetti, quindi rimuovere CentOS dall'elenco
platforms. -
In
script, creare una directory denominatarecipes.
È possibile eseguire comandi utilizzando la stessa risorsa script, ma Chef supporta anche un set di versioni della risorsa specifico per interprete di comandi; tali versioni vengono denominate a seconda dell'interprete. La seguente ricetta utilizza una risorsa bash
bash "install_something" do user "root" cwd "/tmp" code <<-EOH touch somefile EOH not_if do File.exists?("/tmp/somefile") end end
La risorsa bash è configurata come segue.
-
Utilizza l'operazione di default,
run, che esegue i comandi nel bloccocode.Questo esempio contiene un solo comando,
touch somefilema un bloccocodepuò contenere più comandi. -
L'attributo
userspecifica l'utente che esegue il comando. -
L'attributo
cwdspecifica la directory di lavoro.Per questo esempio,
touchcrea un file nella directory/tmp. -
L'attributo di protezione
not_ifindica alla risorsa di non eseguire alcuna operazione se il file è già esistente.
Per eseguire la ricetta
-
Creare un file
default.rbche contiene il codice di esempio precedente e salvarlo inrecipes. -
Eseguire
kitchen converge, quindi accedere all'istanza per verificare che il file sia presente in/tmp.
Esecuzione di script
La risorsa script è pratica, soprattutto se hai bisogno di eseguire solo uno o due comandi; spesso è però preferibile archiviare lo script in un file ed eseguire il file stesso. La risorsa executescript dell'esempio precedente per usare execute al fine di eseguire un semplice script shell. È possibile estendere facilmente l'esempio a script più complessi o ad altri tipi di file eseguibile.
Per configurare il file script
-
Aggiungere la sottodirectory
filesascripte la sottodirectorydefaultafiles. -
Creare un file denominato
touchfileche contenga quando segue e aggiungerlo afiles/default. In questo esempio viene utilizzata una comune riga di interpretazione Bash, ma puoi sostituire l'interprete con quello più adatto al tuo ambiente shell, se necessario.#!/usr/bin/env bash touch somefileIl file script può contenere un numero qualsiasi di comandi. Per comodità, questo script di esempio include un solo comando
touch.
La seguente ricetta esegue lo script.
cookbook_file "/tmp/touchfile" do source "touchfile" mode 0755 end execute "touchfile" do user "root" cwd "/tmp" command "./touchfile" end
La risorsa cookbook_file copia il file script su /tmp e imposta la modalità per rendere il file eseguibile. La risorsa execute esegue quindi il file come indicato di seguito:
-
L'attributo
userspecifica l'utente del comando (rootin questo esempio). -
L'attributo
cwdspecifica la directory di lavoro (/tmpin questo esempio). -
L'attributo
commandspecifica lo script da eseguire (touchfilein questo esempio), che si trova nella directory di lavoro.
Per eseguire la ricetta
-
Sostituire il codice in
recipes/default.rbcon l'esempio precedente. -
Eseguire
kitchen converge, quindi effettuare l'accesso all'istanza per verificare che/tmpora contenga il file script, con la modalità impostata su 0755, esomefile.
Al termine dell'operazione, eseguire kitchen destroy per chiudere l'istanza. La sezione successiva utilizza un nuovo libro di ricette.