Esempio 7: esecuzione di comandi e script - 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à.

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 AWS Support Team su AWS re:post o tramite Premium AWS Support.

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 esegue uno o più comandi. Supporta gli interpreti di comandi csh, bash, Perl, Python e Ruby, quindi può essere utilizzato sia su sistemi Linux che Windows, purché vi sia installato l'opportuno interprete. Questo argomento illustra come eseguire un semplice comando bash su un'istanza Linux. Chef supporta anche le risorse powershell_script e batch per l'esecuzione di script su Windows. Per ulteriori informazioni, consulta Esecuzione di uno PowerShell script di Windows.

Per iniziare
  1. Nella directory opsworks_cookbooks, creare una directory denominata script e aprirla.

  2. Aggiungere un file metadata.rb a script con il contenuto seguente.

    name "script" version "0.1.0"
  3. Inizializzare e configurare Test Kitchen come descritto in Esempio 1: installazione di pacchetti, quindi rimuovere CentOS dall'elenco platforms.

  4. In script, creare una directory denominata recipes.

È 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 per eseguire un semplice script 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 blocco code.

    Questo esempio contiene un solo comando, touch somefilema un blocco code 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
  1. Creare un file default.rb che contiene il codice di esempio precedente e salvarlo in recipes.

  2. 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 esegue uno specifico file eseguibile, inclusi i file di script, in Linux o Windows. Questo argomento modifica il libro di ricette 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
  1. Aggiungere la sottodirectory files a script e la sottodirectory default a files.

  2. Creare un file denominato touchfile che contenga quando segue e aggiungerlo a files/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
  1. Sostituire il codice in recipes/default.rb con l'esempio precedente.

  2. Eseguire kitchen converge, quindi effettuare l'accesso all'istanza per verificare che /tmp ora contenga il file script, con la modalità impostata su 0755, e somefile.

Al termine dell'operazione, eseguire kitchen destroy per chiudere l'istanza. La sezione successiva utilizza un nuovo libro di ricette.