Cómo usar el módulo de shell Ansible

Cómo usar el módulo de shell Ansible
Ansible se usa ampliamente como motor de automatización para necesidades de TI, como la administración de configuración, el aprovisionamiento en la nube y mucho más. La automatización suena genial, pero ¿cómo lo logra Ansible?? Utiliza "módulos" que son responsables de la automatización. Sin estos módulos, un usuario tendría que usar comandos ad hoc para realizar tareas.

Sin embargo, los comandos ad hoc no son reutilizables. Claro, le proporcionan una forma de ejecutar rápidamente tareas individuales, pero no se pueden reutilizar. Se podría dibujar una analogía donde el modo de libro de jugadas es como un script de shell, mientras que los comandos individuales son frases individuales.

Hablando de shell, Ansible también tiene un módulo de shell. Este módulo se utiliza para ejecutar comandos de shell en los sistemas de destino. En esta guía, repasaremos el módulo de shell Ansible y demostraremos ejemplos de cómo se puede usar.

¿Cuál es el módulo de shell??

El módulo de shell Ansible permite al usuario ejecutar comandos complejos con redirección, tuberías, etc. Toma un nombre de comando, sus discusiones con delimitadores de espacios en blanco y lo ejecuta en hosts remotos.

Puede sonar exactamente lo mismo que el módulo de comando Ansible, pero la diferencia es que ejecuta los comandos en el host usando un shell. El módulo de shell también tiene acceso a variables de entorno y operadores especiales como | &; etc. Aún mejor, puede ejecutar scripts completos usando el módulo de shell. No obstante, es de conocimiento común entre los usuarios de Ansible que el módulo de comando sea una opción más segura y predecible que el módulo de shell.

Finalmente, es importante tener en cuenta que este módulo solo funciona con Linux Systems. Los usuarios de Windows pueden usar Ansible.Windows.win_shell en su lugar. Dicho esto, entremos en los detalles del módulo de shell Ansible.

Usando el módulo de shell Ansible

Antes de comenzar a ejecutar comandos y scripts, echemos un vistazo a los parámetros a los que deberá pasar valores mientras usa este módulo.

  • CHDIR: cambia el directorio actual antes de la ejecución.
  • CMD: una cadena que contiene el comando que se ejecutará, junto con sus argumentos.
  • Ejecutable: requiere una ruta absoluta para cambiar el shell que está usando.
  • elimina - toma un nombre de archivo. Se usa para excluir pasos cuando no existe un archivo.
  • stdin: permite al usuario establecer el stdin de un comando en un valor específico.
  • Advertencia: toma sí (predeterminado) o no, habilitando o deshabilitando advertencias de tareas.

Con eso fuera del camino, vamos a algunos ejemplos de cómo usar la carcasa Ansible.

Ejemplo 1: Cambiar el directorio de trabajo

Si desea cambiar el directorio de trabajo antes de ejecutar un comando, así es como se haría.

- Nombre: Cambiar el directorio de trabajo a MyDir

ansible.incorporado.Shell: MyScript.sh >> mylog.TXT

Args:

Chdir: MyDir/

Ahora que hemos creado un libro de jugadas, puede ejecutarlo usando el terminal de Linux ejecutando:

Ansible-Playbook Testbook.YML

Ejemplo 2: Extracción de la salida de comandos

Si desea capturar y almacenar el valor de retorno de un comando shell, se puede usar la palabra clave de registro.

- Nombre: Creación de un .Archivo TXT en $ Home

Shell: Echo "Sálvame!"> $ Home/Test.TXT

Registrarse: shell_output

- Debug: var = shell_output

Ejemplo 3: Verificar la fecha

Comencemos por verificar la fecha en nuestro servidor remoto llamado prueba. Tenga en cuenta cómo la sintaxis del módulo de shell es diferente aquí. Esta es solo otra forma de usar el módulo de shell Ansible.

- Nombre: Verificar la fecha

caparazón:

"fecha"

Registrarse: Datecmd

Etiquetas: Datecmd

- debug: msg = "datecmd.stdout "

Hemos utilizado el comando de fecha simple para verificar la fecha en un sistema remoto. Además, la salida del comando (la fecha en sí) se devuelve a un registro llamado DataCmd. Finalmente, mostramos el contenido de la variable de registro DataCmd imprimiendo su atributo STDOUT.

Ejemplo 4: Ejecutando múltiples comandos

En este ejemplo, crearemos algunos archivos de texto en un directorio temporal.

tareas:

- Nombre: Creación de múltiples archivos

ansible.incorporado.Shell: |

echo "I Am File 1"> /tmp /myFile1.TXT
echo "I Am File 2"> /TMP /MyFile2.TXT
echo "I Am File 3"> /TMP /MyFile3.TXT
hecho realidad
Args:
chdir: /var /log

Aquí, hemos usado el código de shell para crear tres archivos, a saber, myFile1, myFile2, y myfile3. La línea verdadera convertida: verdadera le permite "convertirse" en el usuario del host remoto. Finalmente, pasamos un argumento de Chdir y cambiamos el directorio.

Ejemplo 5: Aplicación de redirección y tubería

Ahora, veamos cómo funcionan las tuberías y la redirección en el módulo de shell Ansible. Ejecutaremos un comando LS simple con algunos preprocesamiento a través de AWK. Además, usamos SED para eliminar líneas vacías. Al final, redirigiremos la salida a un archivo de texto.

- Nombre: tome una lista del directorio y alimente a un archivo

caparazón:

"LS -LRT/APPS | AWK 'Imprimir $ 9' | Sed '/^$/d'>/tmp/myDir.TXT "

Registrarse: LSOUT

Etiquetas: lSout

- Nombre: Muestra el archivo

Shell: Cat /TMP /Dirlist.TXT

Registrarse: DisplayList

- Debug: msg = "displaylist.stdout_lines "

Primero, ejecutamos el comando mencionado anteriormente y almacenamos su resultado en MyDir.TXT. Posteriormente, usamos otro comando CAT para guardar el contenido del archivo en un registro. Finalmente, se muestra esta variable de registro.

Cómo prevenir la inyección de comando?

Como mencionamos anteriormente, el módulo de comando se considera una forma más segura de hacer las cosas. Sin embargo, tiene una funcionalidad algo limitada. Entonces, ¿cómo se usa el módulo de shell de manera segura??

Puede usar el filtro de cotización para proteger los nombres variables que pasa al módulo de shell desde la inyección de comando. A continuación se muestra un ejemplo de esta desinfección.

- Nombre: Creación de un .txt con el filtro de cotización

shell: echo "I Am Safe"> $ Home/Safefile | cita .TXT

Es una buena práctica usar siempre el filtro de cotización con sus variables. Esto evitará que los hackers cambien el comando en el tiempo de ejecución. Es muy parecido a la inyección de SQL, pero mientras tome precauciones de seguridad, no tiene que preocuparse!

Conclusión

El módulo de shell Ansible es un módulo versátil y potente que aumenta el control del usuario y hace que la configuración remota sea mucho más fácil. En este artículo, hemos analizado lo que hace, qué parámetros tiene y qué argumentos requiere, y más. Con suerte, ahora está bien equipado para usar el módulo de shell Ansible.