

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à.

# Ottenimento diretto dei valori degli attributi
<a name="cookbooks-101-opsworks-opsworks-stack-config-node"></a>

**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 Supporto AWS Team su [AWS re:post](https://repost.aws/) o tramite Premium [AWS Support](https://aws.amazon.com/support).

**Nota**  
Questo approccio funziona solo per gli stack Linux.

[Simulazione degli attributi di configurazione e distribuzione dello stack su Vagrant](opsworks-opsworks-mock.md) mostra come ottenere i dati di configurazione e distribuzione dello stack utilizzando la sintassi del nodo per fare riferimento direttamente ad attributi particolari. Questo è talvolta l'approccio migliore. Tuttavia, molti attributi vengono definiti in raccolte o elenchi di cui i contenuti e i nomi possono variare da stack a stack e nel corso del tempo per un determinato stack. Ad esempio, l'attributo `deploy` contiene un elenco di attributi di app denominati con il nome breve dell'app. Questo elenco, che include i nomi degli attributi dell'app, in genere varia da stack a stack e anche da distribuzione a distribuzione. 

Spesso è quindi più utile, e talvolta anche necessario, ottenere i dati richiesti mediante l'enumerazione degli attributi in un elenco o una raccolta. Ad esempio, supponiamo che desideri conoscere gli indirizzi IP pubblici delle istanze del tuo stack. Questa informazione è nell'attributo `['opsworks']['layers']`, che è impostato su una tabella hash contenente un elemento per ogni livello dello stack, denominato con il nome breve del livello. Ogni elemento del livello è impostato su una tabella hash contenente gli attributi del livello, uno dei quali è `['instances']`. A sua volta, questo elemento è impostato su un'ulteriore tabella hash contenente un attributo per ognuna delle istanze del livello, denominate con il nome breve dell'istanza. Ogni attributo dell'istanza è impostato su ancora un'altra tabella hash che contiene gli attributi dell'istanza, incluso `['ip']`, che rappresenta l'indirizzo IP pubblico. In caso di problemi di visualizzazione, la procedura seguente include un esempio in formato JSON.

Questo esempio illustra come ottenere i dati dal JSON di configurazione e distribuzione dello stack per i livelli di uno stack.

**Per configurare il libro di ricette**

1. Creare una directory in `opsworks_cookbooks` denominata `listip` e accedervi.

1. Inizializzare e configurare Test Kitchen, come descritto in [Esempio 1: installazione di pacchetti](cookbooks-101-basics-packages.md).

1. Aggiungere due directory a `listip`: `recipes` ed `environments`.

1. Crea una versione JSON modificata degli attributi di MyStack configurazione e distribuzione che contenga gli attributi pertinenti. Avrà un aspetto simile al seguente.

   ```
   {
     "opsworks": {
       "layers": {
         "php-app": {
           "name": "PHP App Server",
           "id": "efd36017-ec42-4423-b655-53e4d3710652",
           "instances": {
             "php-app1": {
               "ip": "192.0.2.0"
             }
           }
         },
         "db-master": {
           "name": "MySQL",
           "id": "2d8e0b9a-0d29-43b7-8476-a9b2591a7251",
           "instances": {
             "db-master1": {
               "ip": "192.0.2.5"
             }
           }
         },
         "lb": {
           "name": "HAProxy",
           "id": "d5c4dda9-2888-4b22-b1ea-6d44c7841193",
           "instances": {
             "lb1": {
               "ip": "192.0.2.10"
             }
           }
         }
       }
     }
   }
   ```

1. Creare un file di ambiente denominato `test.json`, incollare il JSON di esempio in `default_attributes` e salvare il file nella cartella `environments` del libro di ricette. Il file deve avere un aspetto simile al seguente (per brevità, la maggior parte del JSON di esempio è rappresentato da un'ellissi).

   ```
   {
     "default_attributes" : {
       "opsworks": {
         "layers": {
           ...
         }
       }
     },
     "chef_type" : "environment",
     "json_class" : "Chef::Environment"
   }
   ```

1. Sostituire il testo in `.kitchen.yml` con il seguente.

   ```
   ---
   driver:
     name: vagrant
   
   provisioner:
     name: chef_zero
     environments_path: ./environment
   
   platforms:
     - name: ubuntu-12.04
   
   suites:
     - name: listip 
       provisioner:
         client_rb:
           environment: test
       run_list:
         - recipe[listip::default]
       attributes:
   ```

Dopo aver impostato il ricettario, puoi utilizzare la seguente ricetta per registrare il layer. IDs

```
node['opsworks']['layers'].each do |layer, layerdata|
  log "#{layerdata['name']} : #{layerdata['id']}"
end
```

La ricetta enumera i livelli in `['opsworks']['layers']` e registra il nome e l'ID di ogni livello.

**Per eseguire la ricetta di registrazione degli ID di livello**

1. Creare un file denominato `default.rb` con la ricetta di esempio e salvarlo nella directory `recipes`.

1. Esegui `kitchen converge`.

La parte pertinente dell'output deve essere simile a quanto riportato di seguito.

```
Recipe: listip::default       
  * log[PHP App Server : efd36017-ec42-4423-b655-53e4d3710652] action write[2014-07-17T22:56:19+00:00] INFO: Processing log[PHP App Server : efd36017-ec42-4423-b655-53e4d3710652] action write (listip::default line 4)       
[2014-07-17T22:56:19+00:00] INFO: PHP App Server : efd36017-ec42-4423-b655-53e4d3710652       
       
       
  * log[MySQL : 2d8e0b9a-0d29-43b7-8476-a9b2591a7251] action write[2014-07-17T22:56:19+00:00] INFO: Processing log[MySQL : 2d8e0b9a-0d29-43b7-8476-a9b2591a7251] action write (listip::default line 4)       
[2014-07-17T22:56:19+00:00] INFO: MySQL : 2d8e0b9a-0d29-43b7-8476-a9b2591a7251       
       
       
  * log[HAProxy : d5c4dda9-2888-4b22-b1ea-6d44c7841193] action write[2014-07-17T22:56:19+00:00] INFO: Processing log[HAProxy : d5c4dda9-2888-4b22-b1ea-6d44c7841193] action write (listip::default line 4)       
[2014-07-17T22:56:19+00:00] INFO: HAProxy : d5c4dda9-2888-4b22-b1ea-6d44c7841193
```

Per visualizzare l'elenco degli indirizzi IP delle istanze, sarà necessario un ciclo nidificato come il seguente.

```
node['opsworks']['layers'].each do |layer, layerdata|
  log "#{layerdata['name']} : #{layerdata['id']}"
  layerdata['instances'].each do |instance, instancedata|
    log "Public IP: #{instancedata['ip']}"
  end
end
```

Il ciclo interno esegue iterazioni sulle istanze di ciascun livello e registra gli indirizzi IP.

**Per eseguire la ricetta di registrazione degli IP dell'istanza**

1. Sostituire il codice in `default.rb` con la ricetta di esempio.

1. Eseguire `kitchen converge` per eseguire la ricetta.

La parte pertinente dell'output deve essere simile a quanto riportato di seguito.

```
  * log[PHP App Server : efd36017-ec42-4423-b655-53e4d3710652] action write[2014-07-17T23:09:34+00:00] INFO: Processing log[PHP App Server : efd36017-ec42-4423-b655-53e4d3710652] action write (listip::default line 2)       
[2014-07-17T23:09:34+00:00] INFO: PHP App Server : efd36017-ec42-4423-b655-53e4d3710652       
       
       
  * log[Public IP: 192.0.2.0] action write[2014-07-17T23:09:34+00:00] INFO: Processing log[Public IP: 192.0.2.0] action write (listip::default line 4)       
[2014-07-17T23:09:34+00:00] INFO: Public IP: 192.0.2.0       
       
       
  * log[MySQL : 2d8e0b9a-0d29-43b7-8476-a9b2591a7251] action write[2014-07-17T23:09:34+00:00] INFO: Processing log[MySQL : 2d8e0b9a-0d29-43b7-8476-a9b2591a7251] action write (listip::default line 2)       
[2014-07-17T23:09:34+00:00] INFO: MySQL : 2d8e0b9a-0d29-43b7-8476-a9b2591a7251       
       
       
  * log[Public IP: 192.0.2.5] action write[2014-07-17T23:09:34+00:00] INFO: Processing log[Public IP: 192.0.2.5] action write (listip::default line 4)       
[2014-07-17T23:09:34+00:00] INFO: Public IP: 192.0.2.5       
       
       
  * log[HAProxy : d5c4dda9-2888-4b22-b1ea-6d44c7841193] action write[2014-07-17T23:09:34+00:00] INFO: Processing log[HAProxy : d5c4dda9-2888-4b22-b1ea-6d44c7841193] action write (listip::default line 2)       
[2014-07-17T23:09:34+00:00] INFO: HAProxy : d5c4dda9-2888-4b22-b1ea-6d44c7841193       
       
       
  * log[Public IP: 192.0.2.10] action write[2014-07-17T23:09:34+00:00] INFO: Processing log[Public IP: 192.0.2.10] action write (listip::default line 4)       
[2014-07-17T23:09:34+00:00] INFO: Public IP: 192.0.2.10
```

Al termine, eseguire `kitchen destroy`; l'argomento successivo utilizza un nuovo libro di ricette.

**Nota**  
Uno dei motivi più comuni per l'enumerazione di una raccolta JSON di configurazione e distribuzione di uno stack è ottenere i dati di una determinata app distribuita, ad esempio la relativa directory di distribuzione. Per vedere un esempio, consulta [Ricette di ditribuzione](create-custom-deploy.md).