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 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
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 denominatascript
e aprirla. -
Aggiungere un file
metadata.rb
ascript
con 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 somefile
ma un bloccocode
può contenere più comandi. -
L'attributo
user
specifica l'utente che esegue il comando. -
L'attributo
cwd
specifica la directory di lavoro.Per questo esempio,
touch
crea un file nella directory/tmp
. -
L'attributo di protezione
not_if
indica alla risorsa di non eseguire alcuna operazione se il file è già esistente.
Per eseguire la ricetta
-
Creare un file
default.rb
che 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 execute
script
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
files
ascript
e la sottodirectorydefault
afiles
. -
Creare un file denominato
touchfile
che 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 somefile
Il 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
user
specifica l'utente del comando (root
in questo esempio). -
L'attributo
cwd
specifica la directory di lavoro (/tmp
in questo esempio). -
L'attributo
command
specifica lo script da eseguire (touchfile
in questo esempio), che si trova nella directory di lavoro.
Per eseguire la ricetta
-
Sostituire il codice in
recipes/default.rb
con l'esempio precedente. -
Eseguire
kitchen converge
, quindi effettuare l'accesso all'istanza per verificare che/tmp
ora 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.