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
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
path
della risorsa, perciò l'esempio crea /srv/www/
e ne specifica le proprietà mode
, owner
e group
.
Per eseguire la ricetta
-
Creare una directory in
opsworks_cookbooks
denominatacreatedir
e aprirla. -
Inizializzare e configurare Test Kitchen come descritto in Esempio 1: installazione di pacchetti, quindi aggiungere una directory
recipes
all'interno dicreatedir
. -
Aggiungere un file
default.rb
con il codice della ricetta alla sottodirectoryrecipes
del libro di ricette. -
Eseguire
kitchen converge
per eseguire la ricetta. -
Eseguire
kitchen login
, individuare/srv
e verificare che includa una sottodirectorywww
. -
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
-
Sostituire il codice in
default.rb
con la ricetta precedente. -
Eseguire
kitchen converge
nella directorycreatedir
. -
Per verificare che la directory sia stata effettivamente creata, eseguire
kitchen login
, individuare/srv/www
e verificare che contenga una sottodirectoryshared
. -
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