Desarrollo de módulos de EC2Rescue para instancias de Linux de Amazon EC2 - Amazon Elastic Compute Cloud

Desarrollo de módulos de EC2Rescue para instancias de Linux de Amazon EC2

Los módulos se escriben en YAML, un estándar de serialización de datos. Un archivo YAML de un módulo consta de un único documento que representa el módulo y sus atributos.

Agregar atributos de módulo

En la tabla siguiente se muestran los atributos de módulo disponibles.

Atributo

Descripción

name (nombre)

Nombre del módulo. El nombre debe tener 18 caracteres o menos de longitud.

version

Número de versión del módulo.

title

Un título breve y descriptivo para el módulo. Este valor debe tener 50 caracteres o menos de longitud.

helptext

La descripción ampliada del módulo. Cada línea debe tener 75 caracteres o menos de longitud. Si el módulo consume argumentos, requeridos y opcionales, inclúyalos en el valor de helptext.

Por ejemplo:

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

placement

La fase en la que debe ejecutarse el módulo. Valores admitidos:

  • prediagnostic

  • run

  • postdiagnostic

language

El lenguaje en que está escrito el código del módulo. Valores admitidos:

  • bash

  • python

nota

El código Python debe ser compatible con Python 2.7.9+ y Python 3.2+.

remediation

Indica si el módulo admite remedio. Los valores admitidos son True o False.

El módulo tomará el valor predeterminado False si está ausente, lo que lo convertirá en un atributo opcional para los módulos que no admiten el remedio.

content

La totalidad del código de script.

constraint

El nombre del objeto que contiene los valores de restricción.

dominio

Un descriptor del modo en que el módulo se agrupa o clasifica. El conjunto de módulos incluidos usa los dominios siguientes:

  • revisiones de

  • net

  • os

  • performance

class

Un descriptor del tipo de tarea que realiza el módulo. El conjunto de módulos incluidos usa las clases siguientes:

  • collect (recopila el resultado de los programas)

  • diagnose (pase/error según un grupo de criterios)

  • gather (copia archivos y escribe en un archivo específico)

distro

La lista de distribuciones Linux que admite este módulo. El conjunto de módulos incluidos usa las distribuciones siguientes:

  • alami (Amazon Linux)

  • rhel

  • ubuntu

  • suse

obligatorio

Los argumentos requeridos que el módulo usa para las opciones de la CLI.

opcional

Los argumentos opcionales que el módulo puede usar.

software

Los ejecutables de software usados en el módulo. Este atributo tiene como finalidad especificar software que no está instalado de manera predeterminada. La lógica de EC2Rescue para Linux asegura que estos programas sean ejecutables y estén presentes antes de ejecutar el módulo.

package

El paquete de software de origen para un ejecutable. Este atributo tiene como finalidad proporcionar detalles ampliados sobre el paquete con el software, incluida una URL para descargar u obtener más información.

sudo

Indica si se requiere acceso raíz para ejecutar el módulo.

No necesita implementar las comprobaciones sudo en el script del módulo. Si el valor es verdadero, la lógica de EC2Rescue para Linux solo ejecuta el módulo cuando el usuario ejecutante tiene acceso raíz.

perfimpact

Indica si el módulo puede tener un impacto significativo de desempeño en el entorno en que se ejecuta. Si el valor es verdadero y el argumento --perfimpact=true no está presente, el módulo se omite.

parallelexclusive

Especifica un programa que requiere exclusividad mutua. Por ejemplo, todos los módulos que especifican "bpf" se ejecutan en serie.

Agregar variables de entorno

En la tabla siguiente se muestran las variables de entorno disponibles.

Variable de entorno Descripción

EC2RL_CALLPATH

La ruta a ec2rl.py. Esta ruta se puede usar para ubicar el directorio lib y usar los módulos de Python proporcionados.

EC2RL_WORKDIR

El directorio tmp principal de la herramienta de diagnóstico.

Valor predeterminado: /var/tmp/ec2rl.

EC2RL_RUNDIR

El directorio donde se almacenan todos los resultados.

Valor predeterminado: /var/tmp/ec2rl/<date&timestamp>.

EC2RL_GATHEREDDIR

El directorio raíz donde se colocan los datos recopilados del módulo.

Valor predeterminado:/var/tmp/ec2rl/<date&timestamp>/mod_out/gathered/.

EC2RL_NET_DRIVER

El controlador en uso para la primera interfaz de red no virtual en orden alfabético en la instancia.

Ejemplos:

  • xen_netfront

  • ixgbevf

  • ena

EC2RL_SUDO

Es verdadero si EC2Rescue para Linux se ejecuta como raíz; de lo contrario, es falso.

EC2RL_VIRT_TYPE

El tipo de virtualización según lo proporcionan los metadatos de la instancia.

Ejemplos:

  • default-hvm

  • default-paravirtual

EC2RL_INTERFACES

Una lista numerada de interfaces en el sistema. El valor es una cadena que contiene nombres como eth0, eth1, etcétera. Se genera mediante functions.bash y solo está disponible para los módulos de los que se obtiene.

Usar sintaxis YAML

Cuando se construyen los archivos YAML de un módulo, se debe tener en cuenta lo siguiente:

  • Tres guiones (---) denotan el inicio explícito de un documento.

  • La etiqueta !ec2rlcore.module.Module dice al analizador YAML a qué constructor llamar cuando se crea el objeto del flujo de datos. Encontrará el constructor dentro del archivo module.py.

  • La etiqueta !!str indica al analizador YAML que no intente determinar el tipo de datos y que interprete el contenido como un literal de cadena.

  • El carácter | indica al analizador YAML que el valor es un escalar de estilo literal. En este caso, el analizador incluye todos los espacios en blanco. Esto es importante para los módulos porque se mantienen la sangría y los caracteres de nueva línea.

  • La sangría estándar de YAML son dos espacios, como se puede ver en los ejemplos siguientes. Asegúrese de que mantiene la sangría estándar (por ejemplo, cuatro espacios para Python) para el script y después sangría de dos espacios para todo el contenido en el archivo del módulo.

Módulos de ejemplo

Ejemplo 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