Desenvolver módulos do EC2Rescue - Amazon Elastic Compute Cloud

Desenvolver módulos do EC2Rescue

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 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:

helptext: !!str | Collect output from ps for system analysis Consumes --times= for number of times to repeat Consumes --period= for time period between repetition

posicionamento

O estágio no qual o módulo deve ser executado. Valores com suporte:

  • pré-diagnóstico

  • executar

  • pós-diagnóstico

linguagem

A linguagem em que o código do módulo está escrito. Valores com suporte:

  • bash

  • python

nota

O código Python deve ser compatível com o Python 2.7.9+ e o Python 3.2+.

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:

  • aplicativo

  • net

  • os

  • desempenho

classe

Um descritor do tipo da tarefa executada pelo módulo. O conjunto de módulos incluídos usa as seguintes classes:

  • coletar (coleta a saída dos programas)

  • diagnosticar (é aprovado/falha com base em um conjunto de critérios)

  • recolher (copia os arquivos e grava em um arquivo específico)

distro

A lista de distribuições Linux às quais esse módulo oferece suporte. O conjunto de módulos usa as seguintes distribuições:

  • alami (Amazon Linux)

  • rhel

  • ubuntu

  • suse

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 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:

  • xen_netfront

  • ixgbevf

  • ena

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:

  • default-hvm

  • default-paravirtual

EC2RL_INTERFACES

Uma lista enumerada de interfaces no sistema. O valor é uma string que contém nomes, como eth0eth1, etc. É gerada pelo functions.bash e está disponível somente para os módulos que a originaram.

Usar sintaxe de YAML

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

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