

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

# Sviluppo dei moduli EC2Rescue per le istanze Linux Amazon EC2
<a name="ec2rl_moduledev"></a>

I moduli sono scritti in YAML, uno standard di serializzazione dei dati. Il file YAML di un modulo è formato da un singolo documento che rappresenta il modulo e i relativi attributi.

## Aggiunta di attributi di modulo
<a name="ec2rl-adding-modules"></a>

Nella tabella seguente vengono elencati gli attributi di modulo disponibili.


| Attributo | Descrizione | 
| --- | --- | 
| name | Il nome del modulo. Il nome non deve superare i 18 caratteri. | 
| version | Il numero di versione del modulo. | 
| title | Un breve titolo descrittivo del modulo. Questo valore non deve superare i 50 caratteri. | 
| helptext |  La descrizione estesa del modulo. Ogni riga non deve superare i 75 caratteri. Se il modulo consuma argomenti, obbligatori o facoltativi, includili nel valore helptext. Ad esempio: <pre>helptext: !!str |<br />  Collect output from ps for system analysis<br />  Consumes --times= for number of times to repeat<br />  Consumes --period= for time period between repetition</pre> | 
| placement | La fase in cui eseguire il modulo. Valori supportati: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/AWSEC2/latest/UserGuide/ec2rl_moduledev.html)  | 
| linguaggio | Il linguaggio in cui è scritto il codice del modulo. Valori supportati: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/AWSEC2/latest/UserGuide/ec2rl_moduledev.html)  Il codice Python deve essere compatibile con Python 2.7.9 e versioni successive e Python 3.2 e versioni successive.   | 
| remediation |  Indica se il modulo supporta le azioni di correzione. I valori supportati sono `True` o `False`. Il modulo viene impostato su `False` per impostazione predefinita se questo valore è assente, rendendo l'attributo facoltativo per i moduli che non supportano le azioni di correzione.  | 
| content | L'interezza del codice dello script. | 
| vincolo | Il nome dell'oggetto contenente i valori di vincolo. | 
| domain | Un descrittore del raggruppamento o della classificazione del modulo. L'insieme dei moduli inclusi utilizza i domini seguenti:  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/AWSEC2/latest/UserGuide/ec2rl_moduledev.html) | 
| classe | Un descrittore del tipo di attività effettuato dal modulo. L'insieme dei moduli inclusi utilizza le classi seguenti: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/AWSEC2/latest/UserGuide/ec2rl_moduledev.html) | 
| distro | L'elenco delle distribuzioni Linux supportate da questo modulo. Il set di moduli inclusi utilizza le distribuzioni seguenti: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/AWSEC2/latest/UserGuide/ec2rl_moduledev.html) | 
| obbligatorio | Gli argomenti obbligatori che il modulo consuma dalle opzioni della CLI. | 
| facoltativo | Gli argomenti facoltativi che il modulo può utilizzare. | 
| software | I file eseguibili del software utilizzati nel modulo. Questo attributo è progettato per specificare un software non installato per impostazione predefinita. La logica di EC2 Rescue for Linux assicura che questi programmi siano presenti ed eseguibili prima di eseguire il modulo. | 
| package | Il pacchetto software di origine di un file eseguibile. Questo attributo è progettato per fornire dettagli estesi sul pacchetto con il software, incluso un URL per ottenere o scaricare ulteriori informazioni. | 
| sudo | Indica se l'accesso root è obbligatorio per l'esecuzione del modulo.  Non è necessario implementare i controlli sudo nello script del modulo. Se il valore è true, la logica di EC2 Rescue for Linux esegue il modulo solo quando l'utente che esegue l'esecuzione ha accesso root. | 
| perfimpact | Indica se il modulo può avere un significativo impatto sulle prestazioni nell'ambiente in cui viene eseguito. Se il valore è true e l'argomento `--perfimpact=true` non è presente, il modulo viene ignorato. | 
| parallelexclusive | Specifica un programma che richiede reciproca esclusività. Ad esempio, tutti i moduli con la specifica "bpf" vengono eseguiti in modo seriale. | 

## Aggiunta di variabili di ambiente
<a name="ec2rl_adding_envvars"></a>

Nella tabella seguente vengono elencate le variabili di ambiente disponibili.


| Variabile di ambiente | Descrizione | 
| --- | --- | 
|  `EC2RL_CALLPATH`  | Il percorso a ec2rl.py. Questo percorso può essere utilizzato per individuare la directory lib e per utilizzare i moduli Python gestiti da un fornitore. | 
|  `EC2RL_WORKDIR`  |  La directory tmp principale dello strumento di diagnostica. Valore predefinito: `/var/tmp/ec2rl`. | 
|  `EC2RL_RUNDIR`  |  La directory in cui viene archiviato tutto l'output. Valore predefinito: `/var/tmp/ec2rl/<date&timestamp>`.  | 
|  `EC2RL_GATHEREDDIR`  |  La directory root in cui inserire i dati raccolti sul modulo. Valore predefinito:`/var/tmp/ec2rl/<date&timestamp>/mod_out/gathered/`.  | 
|  `EC2RL_NET_DRIVER`  |  Il driver in uso per la prima interfaccia di rete non virtuale sull'istanza (in ordine alfabetico). Esempi: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/AWSEC2/latest/UserGuide/ec2rl_moduledev.html)  | 
|  `EC2RL_SUDO`  |  Vero se EC2 Rescue for Linux è in esecuzione come root; in caso contrario, falso.  | 
|  `EC2RL_VIRT_TYPE`  |  Il tipo di virtualizzazione fornito dai metadati dell'istanza. Esempi: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/AWSEC2/latest/UserGuide/ec2rl_moduledev.html)  | 
|  `EC2RL_INTERFACES`  |  Un elenco enumerato delle interfacce sul sistema. Il valore è una stringa contenente nomi, come `eth0`, `eth1` e così via. Viene generato tramite `functions.bash` ed è disponibile soltanto per i moduli da cui ha avuto origine.  | 

## Utilizzo della sintassi YAML
<a name="ec2rl_yamlsyntax"></a>

Annota quanto riportato di seguito durante la costruzione dei file YAML del modulo:
+ I trattini tripli (`---`) denotano l'inizio esplicito di un documento.
+ Il tag `!ec2rlcore.module.Module` comunica al parser YAML il costruttore da richiamare durante la creazione dell'oggetto dal flusso di dati. È possibile trovare il costruttore nel file `module.py`.
+ Il tag `!!str` comunica al parser YAML di non tentare di determinare il tipo di dati, ma di interpretare i contenuti come un valore letterale di stringa.
+ Il carattere barra verticale (`|`) comunica al parser YAML che il valore è un valore scalare di stile letterale. In questo caso, il parser include tutti gli spazi vuoti. Ciò è importante per i moduli perché vengono mantenuti i caratteri di rientro e nuova riga.
+ Come puoi vedere negli esempi seguenti, il rientro standard di YAML è di due spazi. Assicurati di mantenere il rientro standard (ad esempio, quattro spazi per Python) nello script e di far rientrare di due spazi tutto il contenuto all'interno del file del modulo.

## Moduli di esempio
<a name="ec2rl_example"></a>

Esempio uno (`mod.d/ps.yaml`):

```
--- !ec2rlcore.module.Module
# Module document. Translates directly into an almost-complete Module object
name: !!str ps
path: !!str
version: !!str 1.0
title: !!str Collect output from ps for system analysis
helptext: !!str |
  Collect output from ps for system analysis
  Requires --times= for number of times to repeat
  Requires --period= for time period between repetition
placement: !!str run
package: 
  - !!str
language: !!str bash
content: !!str |
  #!/bin/bash
  error_trap()
  {
      printf "%0.s=" {1..80}
      echo -e "\nERROR:	"$BASH_COMMAND" exited with an error on line ${BASH_LINENO[0]}"
      exit 0
  }
  trap error_trap ERR

  # read-in shared function
  source functions.bash
  echo "I will collect ps output from this $EC2RL_DISTRO box for $times times every $period seconds."
  for i in $(seq 1 $times); do
      ps auxww
      sleep $period
  done
constraint:
  requires_ec2: !!str False
  domain: !!str performance
  class: !!str collect
  distro: !!str alami ubuntu rhel suse
  required: !!str period times
  optional: !!str
  software: !!str
  sudo: !!str False
  perfimpact: !!str False
  parallelexclusive: !!str
```