Ejemplo 7: Ejecución de comandos o scripts - AWS OpsWorks

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Ejemplo 7: Ejecución de comandos o scripts

importante

El AWS OpsWorks Stacks servicio llegó al final de su vida útil el 26 de mayo de 2024 y se ha desactivado tanto para los clientes nuevos como para los actuales. Recomendamos encarecidamente a los clientes que migren sus cargas de trabajo a otras soluciones lo antes posible. Si tienes preguntas sobre la migración, ponte en contacto con el AWS Support equipo en AWS Re:post o a través de Premium AWS Support.

Los recursos de Chef pueden gestionar una amplia variedad de tareas en una instancia, aunque a veces es preferible utilizar un comando de shell o un script. Por ejemplo, es posible que ya disponga de scripts que utilice para realizar determinadas tareas y es más fácil continuar usándolos en vez de implementar código de nuevo. En esta sección se muestra cómo ejecutar comandos o scripts en una instancia.

Ejecución de comandos

El recurso script ejecuta uno o varios comandos. Admite los intérpretes de comandos csh, bash, Perl, Python y Ruby, por lo que puede utilizarse en sistemas Linux o Windows siempre y cuando tenga los intérpretes adecuados instalados. En este tema se muestra cómo ejecutar un comando bash sencillo en una instancia de Linux. Chef también admite recursos powershell_script y batch para ejecutar scripts en Windows. Para obtener más información, consulte Ejecución de un PowerShell script de Windows.

Primeros pasos
  1. Dentro del directorio opsworks_cookbooks, cree un directorio llamado script y ábralo.

  2. Añada un archivo metadata.rb a script con el contenido siguiente.

    name "script" version "0.1.0"
  3. Inicialice y configure Test Kitchen, tal y como se describe en Ejemplo 1: Instalación de paquetes, y elimine CentOS de la lista platforms.

  4. Dentro de script, cree un directorio llamado recipes.

Puede ejecutar comandos mediante el recurso script, pero Chef también admite un conjunto de versiones específicas de intérpretes de comandos del recurso que se llaman según el intérprete. En la siguiente receta se utiliza un recurso bash para ejecutar un script bash sencillo.

bash "install_something" do user "root" cwd "/tmp" code <<-EOH touch somefile EOH not_if do File.exists?("/tmp/somefile") end end

El recurso bash está configurado como se indica a continuación.

  • Utiliza la acción predeterminada run, que ejecuta los comandos en el bloque code.

    Este ejemplo tiene un comando, touch somefile, pero un bloque code puede llegar a contener varios comandos.

  • El atributo user especifica el usuario que ejecuta el comando.

  • El atributo cwd especifica el directorio de trabajo.

    En este ejemplo, touch crea un archivo en el directorio /tmp.

  • El atributo de protección not_if indica al recurso que no ejecute ninguna acción si el archivo ya existe.

Para ejecutar la receta
  1. Cree un archivo default.rb que contenga el código de ejemplo anterior y guárdelo en recipes.

  2. Ejecute kitchen converge y, a continuación, inicie sesión en la instancia para comprobar que el archivo se encuentre en /tmp.

Ejecución de scripts

El recurso script es cómodo, especialmente si solo tiene que ejecutar uno o dos comandos, pero a menudo es preferible almacenar el script en un archivo y ejecutar el archivo. El recurso execute ejecuta un script ejecutable especificado, incluidos archivos de script, en Linux o Windows. En este tema se modifica el libro de recetas script del ejemplo anterior a fin de que utilice execute para ejecutar un script de shell sencillo. Es fácil ampliar el ejemplo a scripts más complejos u otros tipos de archivos ejecutables.

Para configurar el archivo de script
  1. Añada un subdirectorio files a script y un subdirectorio default a files.

  2. Cree un archivo llamado touchfile que contenga lo siguiente y añádalo a files/default. En este ejemplo se utiliza una línea de intérprete Bash habitual, pero, si es necesario, puede sustituir el intérprete que trabaja para su entorno de shell.

    #!/usr/bin/env bash touch somefile

    El archivo de script puede contener cualquier número de comandos. Para mayor comodidad, este script de ejemplo solo tiene un único comando touch.

La receta siguiente ejecuta el script.

cookbook_file "/tmp/touchfile" do source "touchfile" mode 0755 end execute "touchfile" do user "root" cwd "/tmp" command "./touchfile" end

El recurso cookbook_file copia el archivo de script en /tmp y establece el modo para que el archivo sea ejecutable. A continuación, el recurso execute ejecuta el archivo de la siguiente manera:

  • El atributo user especifica el usuario del comando (root en este ejemplo).

  • El atributo cwd especifica el directorio de trabajo (/tmp en este ejemplo).

  • El atributo command especifica el script que se va a ejecutar (touchfile en este ejemplo), que se encuentra en el directorio de trabajo.

Para ejecutar la receta
  1. Sustituya el código de recipes/default.rb por el ejemplo anterior.

  2. Ejecute kitchen converge y, a continuación, inicie sesión en la instancia para verificar que /tmp ahora contenga archivo de script con el modo establecido en 0755 y somefile.

Cuando haya terminado, ejecute kitchen destroy para cerrar la instancia. En la siguiente sección se utiliza un libro de recetas nuevo.