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
La AWS OpsWorks Stacks El 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 existentes. Recomendamos encarecidamente a los clientes que migren sus cargas de trabajo a otras soluciones lo antes posible. Si tiene preguntas sobre la migración, póngase en contacto con el AWS Support Equipo en AWS Re:post
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
Primeros pasos
-
Dentro del directorio
opsworks_cookbooks
, cree un directorio llamadoscript
y ábralo. -
Añada un archivo
metadata.rb
ascript
con el contenido siguiente.name "script" version "0.1.0"
-
Inicialice y configure Test Kitchen, tal y como se describe en Ejemplo 1: Instalación de paquetes, y elimine CentOS de la lista
platforms
. -
Dentro de
script
, cree un directorio llamadorecipes
.
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
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 bloquecode
.Este ejemplo tiene un comando,
touch somefile
, pero un bloquecode
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
-
Cree un archivo
default.rb
que contenga el código de ejemplo anterior y guárdelo enrecipes
. -
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
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
-
Añada un subdirectorio
files
ascript
y un subdirectoriodefault
afiles
. -
Cree un archivo llamado
touchfile
que contenga lo siguiente y añádalo afiles/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
-
Sustituya el código de
recipes/default.rb
por el ejemplo anterior. -
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 ysomefile
.
Cuando haya terminado, ejecute kitchen destroy
para cerrar la instancia. En la siguiente sección se utiliza un libro de recetas nuevo.