Esempio 6: creazione di file - 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 6: creazione di file

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.

Dopo aver creato le directory, spesso è necessario aggiungervi file di configurazione, file di dati e così via. Questo argomento mostra due modi per installare i file su un'istanza.

Installazione di un file da un libro di ricette

Il modo più semplice di installare un file su un'istanza è utilizzando una risorsa cookbook_file, che copia un file dal libro di ricette a un percorso specificato sull'istanza, per sistemi sia Linux che Windows. Questo esempio estende la ricetta da Esempio 3: creazione di directory per aggiungere un file di dati /srv/www/shared dopo la creazione della directory. Ecco la ricetta originale come riferimento.

directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' recursive true action :create end
Per configurare il libro di ricette
  1. Nella directory opsworks_cookbooks, creare una directory denominata createfile e aprirla.

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

    name "createfile" 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. Aggiungere la sottodirectory recipes a createfile.

Il file da installare contiene i seguenti dati JSON.

{ "my_name" : "myname", "your_name" : "yourname", "a_number" : 42, "a_boolean" : true }
Per configurare il file di dati
  1. Aggiungere la sottodirectory files a createfile e la sottodirectory default a files. Qualsiasi file installato con cookbook_file deve trovarsi in una sottodirectory di files, come files/default in questo esempio.

    Nota

    Per specificare diversi file per sistemi differenti, è possibile inserire ogni file specifico in una sottocartella denominata secondo il sistema, ad esempio files/ubuntu. La risorsa cookbook_file copia l'appropriato file specifico per il sistema, se esistente, altrimenti utilizza il file default. Per ulteriori informazioni, consulta cookbook_file.

  2. Creare un file denominato example_data.json con il JSON dell'esempio precedente e aggiungerlo a files/default.

La seguente ricetta copia example_data.json in un percorso specificato.

directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' recursive true action :create end cookbook_file "/srv/www/shared/example_data.json" do source "example_data.json" mode 0644 action :create_if_missing end

Dopo che la risorsa della directory crea /srv/www/shared, la risorsa cookbook_file copia example_data.json in tale directory e imposta anche l'utente, il gruppo e la modalità del file.

Nota

La risorsa cookbook_file introduce una nuova operazione: create_if_missing. È inoltre possibile utilizzare un'operazione create, che però sovrascrive un file esistente. Se non si desidera sovrascrivere nulla, utilizzare create_if_missing, che installa example_data.json solo se non è già esistente.

Per eseguire la ricetta
  1. Eseguire kitchen destroy per iniziare con un'istanza nuova.

  2. Creare un file default.rb che contiene la ricetta precedente e salvarlo in recipes.

  3. Eseguire kitchen converge, quindi accedere all'istanza per verificare che /srv/www/shared contenga example_data.json.

Creazione di un file da un modello

La risorsa cookbook_file è utile per alcuni scopi, ma si limita a installare qualsiasi file presente nel libro di ricette. Una risorsa template offre un modo più flessibile di installare un file su un'istanza di Windows o Linux tramite creazione dinamica da un modello. È quindi possibile determinare i dettagli del contenuto del file in fase di runtime e apportare modifiche in base alle esigenze. Ad esempio, potresti volere che un file di configurazione abbia una determinata impostazione all'avvio dell'istanza per poi modificare l'impostazione in seguito all'aggiunta di altre istanze allo stack.

Questo esempio modifica il libro di ricette createfile perché sia utilizzata una risorsa template per installare una versione di example_data.json leggermente modificata.

Ecco come apparirà il file installato.

{ "my_name" : "myname", "your_name" : "yourname", "a_number" : 42, "a_boolean" : true, "a_string" : "some string", "platform" : "ubuntu" }

Le risorse del modello sono in genere utilizzate in combinazione con i file attributo, quindi l'esempio ne utilizza uno per definire i seguenti valori.

default['createfile']['my_name'] = 'myname' default['createfile']['your_name'] = 'yourname' default['createfile']['install_file'] = true
Per configurare il libro di ricette
  1. Eliminare la directory createfile del libro di ricette files e il relativo contenuto.

  2. Aggiungere la sottodirectory attributes a createfile e aggiungere a default.rb il file attributes che contiene le definizioni degli attributi precedenti.

Un modello è un file .erb che è fondamentalmente una copia del file finale, con alcuni dei contenuti rappresentati da segnaposti. Quando la risorsa template crea il file, copia i contenuti del modello nel file specificato e sovrascrive i segnaposto con i relativi valori assegnati. Ecco il modello per example_data.json.

{ "my_name" : "<%= node['createfile']['my_name'] %>", "your_name" : "<%= node['createfile']['your_name'] %>", "a_number" : 42, "a_boolean" : <%= @a_boolean_var %>, "a_string" : "<%= @a_string_var %>", "platform" : "<%= node['platform'] %>" }

I valori <%=...%> sono i segnaposto.

  • <%=node[...]%> rappresenta un nodo valore attributo.

    In questo esempio, il valore "your_name" è un segnaposto che rappresenta uno dei valori attributo del file attributo del libro di ricette.

  • <%=@...%> rappresenta il valore di una variabile definita nella risorsa del modello, come illustreremo più avanti.

Per creare il file del modello
  1. Aggiungere la sottodirectory templates al libro di ricette createfile e la sottodirectory default a templates.

    Nota

    La directory templates funziona in modo analogo alla directory files. È possibile inserire modelli specifici per il sistema in una sottodirectory, ad esempio ubuntu, con nome assegnato a seconda del sistema. La risorsa template usa l'appropriato modello specifico per il sistema, se esistente, altrimenti utilizza il modello default.

  2. Creare un file denominato example_data.json.erb e salvarlo nella directory templates/default. Il nome del modello è arbitrario, ma è in genere si crea aggiungendo .erb al nome del file, incluse le estensioni.

La seguente ricetta utilizza una risorsa template per creare /srv/www/shared/example_data.json.

directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' recursive true action :create end template "/srv/www/shared/example_data.json" do source "example_data.json.erb" mode 0644 variables( :a_boolean_var => true, :a_string_var => "some string" ) only_if {node['createfile']['install_file']} end

La risorsa template crea example_data.json da un modello e lo installa in /srv/www/shared.

  • Il nome del modello, /srv/www/shared/example_data.json, specifica il percorso e il nome del file installato.

  • L'attributo source specifica il modello utilizzato per creare il file.

  • L'attributo mode specifica la modalità di installazione del file.

  • La risorsa definisce due variabili: a_boolean_var e a_string_var.

    Quando la risorsa crea example_data.json, sovrascrive la variabile segnaposto del modello con i valori corrispondenti della risorsa.

  • L'attributo di only_ifprotezione indica alla risorsa di creare il file solo se ['createfile']['install_file'] è impostato su true.

Per eseguire la ricetta
  1. Eseguire kitchen destroy per iniziare con un'istanza nuova.

  2. Sostituire il codice in recipes/default.rb con l'esempio precedente.

  3. Eseguire kitchen converge, quindi effettuare l'accesso all'istanza per verificare che il file sia presente in /srv/www/shared con i contenuti corretti.

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