Esempio 3: creazione di directory - 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 3: creazione di directory

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 AWS Supporto Premium.

Quando installi un pacchetto su un'istanza, spesso devi creare alcuni file di configurazione e inserirli nella directory appropriata. Tuttavia, tali directory potrebbero non esistere ancora. È inoltre possibile che sia necessario creare directory per dati, file di log e così via. Ad esempio, per prima cosa avvii il sistema Ubuntu che usi per la maggior parte degli esempi, la /srv directory non ha sottodirectory. Se stai installando un server delle applicazioni, è probabile che tu voglia una directory /srv/www/ e forse alcune sottodirectory per file di dati, log e così via. La ricetta seguente crea /srv/www/ su un'istanza.

directory "/srv/www/" do mode 0755 owner 'root' group 'root' action :create end

Una risorsa directory serve a creare e configurare directory su sistemi Linux e Windows, anche se alcuni attributi vengono utilizzati in modo diverso. Il nome della risorsa è il valore di default per l'attributo path della risorsa, perciò l'esempio crea /srv/www/ e ne specifica le proprietà mode, owner e group.

Per eseguire la ricetta
  1. Creare una directory in opsworks_cookbooks denominata createdir e aprirla.

  2. Inizializzare e configurare Test Kitchen come descritto in Esempio 1: installazione di pacchetti, quindi aggiungere una directory recipes all'interno di createdir.

  3. Aggiungere un file default.rb con il codice della ricetta alla sottodirectory recipes del libro di ricette.

  4. Eseguire kitchen converge per eseguire la ricetta.

  5. Eseguire kitchen login, individuare /srv e verificare che includa una sottodirectory www.

  6. Eseguire exit per tornare alla workstation, ma lasciare l'istanza in esecuzione.

Nota

Per creare una directory relativa alla directory principale dell'istanza, utilizzare #{ENV['HOME']} per rappresentare la directory principale. Ad esempio, quanto segue crea la directory ~/shared.

directory "#{ENV['HOME']}/shared" do ... end

Supponiamo di voler creare una directory nidificata più profondamente, ad esempio /srv/www/shared. È possibile modificare la ricetta precedente come segue.

directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' action :create end
Per eseguire la ricetta
  1. Sostituire il codice in default.rb con la ricetta precedente.

  2. Eseguire kitchen converge nella directory createdir.

  3. Per verificare che la directory sia stata effettivamente creata, eseguire kitchen login, individuare /srv/www e verificare che contenga una sottodirectory shared.

  4. Eseguire kitchen destroy per arrestare l'istanza.

Noterai che il comando kitchen converge è stato eseguito molto più velocemente. Questo perché l'istanza è già in esecuzione, quindi non è necessario avviare l'istanza, installare Chef e così via. Test Kitchen si limita a copiare il libro di ricette aggiornato nell'istanza e avvia un'esecuzione Chef.

Ora esegui nuovamente kitchen converge, che esegue la ricetta su una nuova istanza. Verrà visualizzato un risultato analogo al seguente.

Chef Client failed. 0 resources updated in 1.908125788 seconds [2014-06-20T20:54:26+00:00] ERROR: directory[/srv/www/shared] (createdir::default line 1) had an error: Chef::Exceptions::EnclosingDirectoryDoesNotExist: Parent directory /srv/www does not exist, cannot create /srv/www/shared [2014-06-20T20:54:26+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1) >>>>>> Converge failed on instance <default-ubuntu-1204>. >>>>>> Please see .kitchen/logs/default-ubuntu-1204.log for more details >>>>>> ------Exception------- >>>>>> Class: Kitchen::ActionFailed >>>>>> Message: SSH exited (1) for command: [sudo -E chef-solo --config /tmp/kitchen/solo.rb --json-attributes /tmp/kitchen/dna.json --log_level info] >>>>>> ----------------------

Che cos'è successo? Il problema è che, per impostazione predefinita, una risorsa directory può creare una sola directory alla volta, non una serie di directory. La ricetta ha funzionato in precedenza perché la prima ricetta eseguita sull'istanza aveva già creato /srv/www, perciò con la creazione di /srv/www/shared è stata creata una sola sottodirectory.

Nota

Quando esegui kitchen converge, verifica se stai eseguendo le ricette su un'istanza nuova o esistente, perché potresti ottenere risultati differenti.

Per creare una serie di sottodirectory, aggiungi un attributo recursive a directory e impostalo su true. La ricetta seguente crea /srv/www/shared direttamente su un'istanza pulita.

directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' recursive true action :create end