

# Desenvolver módulos do EC2Rescue para instâncias do Amazon EC2 no Linux
<a name="ec2rl_moduledev"></a>

Os módulos são gravados em YAML, um padrão de serialização de dados. O arquivo YAML de um módulo consiste em um único documento, representando o módulo e seus atributos.

## Adicionar atributos de módulo
<a name="ec2rl-adding-modules"></a>

A tabela a seguir lista os atributos de módulo disponíveis.


| Atributo | Descrição | 
| --- | --- | 
| name | O nome do módulo. O nome precisa ter 18 caracteres ou menos. | 
| versão | O número da versão do módulo. | 
| title | Um título curto e descritivo para o módulo. Esse valor precisa ter 50 caracteres ou menos. | 
| helptext |  A descrição estendida do módulo. Cada linha precisa ter 75 caracteres ou menos. Se o módulo utilizar argumentos, obrigatórios ou opcionais, inclua-os no valor helptext. Por exemplo: <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> | 
| posicionamento | O estágio no qual o módulo deve ser executado. Valores com suporte: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/ec2rl_moduledev.html)  | 
| linguagem | A linguagem em que o código do módulo está escrito. Valores com suporte: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/ec2rl_moduledev.html)  O código Python deve ser compatível com o Python 2.7.9\$1 e o Python 3.2\$1.   | 
| correção |  Indica se o módulo dá suporte a correão. Os valores compatíveis são `True` ou `False`. Os padrões do módulo de `False` se estiver ausente, tornando-o um atributo opcional para esses módulos que não dão suporte a correção.  | 
| conteúdo | A totalidade do código do script. | 
| restrição | O nome do objeto que contém os valores de limite. | 
| domínio | Um descritor de como o módulo é agrupado ou classificado. O conjunto de módulos incluídos usa os seguintes domínios:  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/ec2rl_moduledev.html) | 
| classe | Um descritor do tipo da tarefa executada pelo módulo. O conjunto de módulos incluídos usa as seguintes classes: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/ec2rl_moduledev.html) | 
| distro | A lista de distribuições Linux às quais esse módulo oferece suporte. O conjunto de módulos usa as seguintes distribuições: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/ec2rl_moduledev.html) | 
| obrigatório | Os argumentos necessários que o módulo está consumindo das opções de CLI. | 
| opcional | Os argumentos opcionais que o módulo pode usar. | 
| software | Os executáveis de software usados no módulo. Esse atributo deve especificar o software que não é instalado por padrão. A lógica do EC2Rescue para Linux garante que esses programas estejam presentes e executáveis antes de executar o módulo. | 
| pacote | O pacote de software de origem para um executável. Esse atributo deve fornecer detalhes estendidos sobre o pacote com o software, incluindo uma URL para fazer download ou obter mais informações. | 
| sudo | Indica se o acesso raiz é necessário para executar o módulo.  Não é necessário implementar verificações sudo no script do módulo. Se o valor for verdadeiro, a lógica do EC2Rescue para Linux só executará o módulo quando o usuário que estiver executando tiver acesso raiz. | 
| perfimpact | Indica se o módulo pode ter impacto significativo no desempenho no ambiente no qual ele está sendo execução. Se o valor for verdadeiro e o argumento `--perfimpact=true` não estiver presente, o módulo será ignorado. | 
| parallelexclusive | Especifica um programa que exija exclusividade mútua. Por exemplo, todos os módulos que especificam "bpf" executados de maneira serial. | 

## Adicionar variáveis de ambiente
<a name="ec2rl_adding_envvars"></a>

A tabela a seguir lista as variáveis de ambiente disponíveis.


| Variável de ambiente | Descrição | 
| --- | --- | 
|  `EC2RL_CALLPATH`  | O caminho para ec2rl.py. Esse caminho pode ser usado para encontrar o diretório lib e utilizar os módulos Python do fornecedor. | 
|  `EC2RL_WORKDIR`  |  O diretório tmp principal para a ferramenta de diagnóstico. Valor padrão: `/var/tmp/ec2rl`. | 
|  `EC2RL_RUNDIR`  |  O diretório no qual a saída é armazenada. Valor padrão: `/var/tmp/ec2rl/<date&timestamp>`.  | 
|  `EC2RL_GATHEREDDIR`  |  O diretório raiz para colocar os dados de módulo reunidos. Valor padrão:`/var/tmp/ec2rl/<date&timestamp>/mod_out/gathered/`.  | 
|  `EC2RL_NET_DRIVER`  |  O driver em uso na primeira interface de rede não virtual, ordenada alfabeticamente, na instância. Exemplos: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/ec2rl_moduledev.html)  | 
|  `EC2RL_SUDO`  |  Verdadeiro se EC2Rescue para Linux estiver em execução como raiz; caso contrário, falso.  | 
|  `EC2RL_VIRT_TYPE`  |  O tipo de virtualização conforme fornecido pelos metadados da instância. Exemplos: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/ec2rl_moduledev.html)  | 
|  `EC2RL_INTERFACES`  |  Uma lista enumerada de interfaces no sistema. O valor é uma string que contém nomes, como `eth0``eth1`, etc. É gerada pelo `functions.bash` e está disponível somente para os módulos que a originaram.  | 

## Usar sintaxe de YAML
<a name="ec2rl_yamlsyntax"></a>

Os seguintes itens devem ser observados ao construir os arquivos YAML do módulo:
+ O hífen triplo (`---`) denota o início explícito de um documento.
+ A tag `!ec2rlcore.module.Module` indica para o analisador YAML qual construtor chamar ao criar o objeto do fluxo de dados. Você pode localizar o construtor no arquivo `module.py`.
+ A tag `!!str` diz para o analisador YAML não tentar determinar o tipo de dados e, em vez disso, interpretar o conteúdo como um literal de string.
+ O caractere pipe (`|`) informa ao analisador YAML que o valor é um escalar de estilo literal. Nesse caso, o analisador inclui todos os espaços em branco. É importante para os módulos porque o recuo e os caracteres de nova linha são mantidos.
+ O recuo padrão YAML é dois espaços, que podem ser vistos nos exemplos a seguir. Certifique-se de manter o recuo padrão (por exemplo, quatro espaços para Python) para o script e, em seguida, defina o recuo de dois espaços para todo o conteúdo no arquivo do módulo.

## Exemplos de módulos
<a name="ec2rl_example"></a>

Exemplo 1 (`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
```