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 6: Creación de archivos
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 existentes. 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
Una vez que ha creado los directorios, a menudo necesita llenarlos con archivos de configuración, archivos de datos, etc. En este tema se muestran dos formas de instalar archivos en una instancia.
Temas
Instalación de un archivo a partir de un libro de recetas
La forma más sencilla de instalar un archivo en una instancia es utilizar un recurso cookbook_file
/srv/www/shared
después de crear el directorio. Como referencia, aquí tenemos la receta original.
directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' recursive true action :create end
Para configurar el libro de recetas
-
Dentro del directorio
opsworks_cookbooks
, cree un directorio llamadocreatefile
y ábralo. -
Añada un archivo
metadata.rb
acreatefile
con el contenido siguiente.name "createfile" 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
. -
Añada un subdirectorio
recipes
acreatefile
.
El archivo que va a instalar contiene los datos JSON siguientes.
{ "my_name" : "myname", "your_name" : "yourname", "a_number" : 42, "a_boolean" : true }
Para configurar el archivo de datos
-
Añada un subdirectorio
files
acreatefile
y un subdirectoriodefault
afiles
. Todos los archivos que instale concookbook_file
deben estar en un subdirectorio defiles
; por ejemplo,files/default
en este ejemplo.nota
Si quiere especificar archivos diferentes para sistemas diferentes, puede colocar cada archivo específico del sistema en una subcarpeta con el nombre del sistema, como, por ejemplo,
files/ubuntu
. El recursocookbook_file
copia el archivo específico del sistema adecuado, si existe; de no ser así, utiliza el archivodefault
. Para obtener más información, consulte cookbook_file. -
Cree un archivo llamado
example_data.json
con el JSON del ejemplo anterior y añádalo afiles/default
.
La receta siguiente copia example_data.json
en una ubicación especificada.
directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' recursive true action :create end cookbook_file "/srv/www/shared/example_data.json" do source "example_data.json" mode 0644 action :create_if_missing end
Cuando el recurso del directorio crea /srv/www/shared
, el recurso cookbook_file
copia example_data.json
en dicho directorio y también establece el usuario, el grupo y el modo del archivo.
nota
El recurso cookbook_file
introduce una nueva acción: create_if_missing
. También puede utilizar una acción create
, pero sobrescribe un archivo ya existente. Si no quiere sobrescribir nada, utilice create_if_missing
, que instala example_data.json
solo si todavía no existe.
Para ejecutar la receta
-
Ejecute
kitchen destroy
para comenzar por una instancia nueva. -
Cree un archivo
default.rb
que contenga la receta anterior y guárdelo enrecipes
. -
Ejecute
kitchen converge
y, a continuación, inicie sesión en la instancia para comprobar que/srv/www/shared
contieneexample_data.json
.
Creación de un archivo a partir de una plantilla
El recurso cookbook_file
es útil para algunos fines, pero solo instala el archivo que tenga en el libro de recetas. Un recurso template
En este ejemplo se modifica el libro de recetas createfile
para utilizar un recurso template
para instalar una versión ligeramente modificada de example_data.json
.
Este es el aspecto que tendrá el archivo instalado.
{ "my_name" : "myname", "your_name" : "yourname", "a_number" : 42, "a_boolean" : true, "a_string" : "some string", "platform" : "ubuntu" }
Normalmente, los recursos de la plantilla se usan junto con los archivos de atributos, por lo que el ejemplo utiliza uno para definir los valores siguientes.
default['createfile']['my_name'] = 'myname' default['createfile']['your_name'] = 'yourname' default['createfile']['install_file'] = true
Para configurar el libro de recetas
-
Elimine el directorio
createfile
del libro de recetasfiles
y su contenido. -
Añada un subdirectorio
attributes
acreatefile
y añada un archivodefault.rb
aattributes
que contenga las definiciones de atributo anteriores.
Una plantilla es un archivo .erb
que es básicamente una copia del archivo final, con parte del contenido representado por comodines. Cuando el recurso template
crea el archivo, copia el contenido de la plantilla en el archivo especificado y sobrescribe los comodines con los valores que tiene asignados. Aquí está la plantilla para example_data.json
.
{ "my_name" : "<%= node['createfile']['my_name'] %>", "your_name" : "<%= node['createfile']['your_name'] %>", "a_number" : 42, "a_boolean" : <%= @a_boolean_var %>, "a_string" : "<%= @a_string_var %>", "platform" : "<%= node['platform'] %>" }
Los valores <%=...%>
son los comodines.
-
<%=node[...]%>
representa un valor de atributo de nodo.En este ejemplo, el valor "your_name" es un comodín que representa uno de los valores de atributo del archivo de atributos del libro de recetas.
-
<%=@...%>
representa el valor de una variable que está definida en el recurso template, que trataremos en breve.
Para crear el archivo de plantilla de
-
Añada un subdirectorio
templates
al libro de cocinacreatefile
y un subdirectoriodefault
atemplates
.nota
El directorio
templates
tiene un funcionamiento muy similar al del directoriofiles
. Puede poner plantillas específicas de un sistema en un subdirectorio comoubuntu
que se llama como dicho sistema. El recursotemplate
utiliza la plantilla específica del sistema adecuado si existe; de no ser así, utiliza la plantilladefault
. -
Cree un archivo llamado
example_data.json.erb
y póngalo en el directoriotemplates/default
. El nombre de la plantilla es arbitrario, pero normalmente se crea anexando.erb
al nombre del archivo, incluidas las extensiones.
La siguiente receta utiliza un recurso template
para crear /srv/www/shared/example_data.json
.
directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' recursive true action :create end template "/srv/www/shared/example_data.json" do source "example_data.json.erb" mode 0644 variables( :a_boolean_var => true, :a_string_var => "some string" ) only_if {node['createfile']['install_file']} end
El recurso template
crea example_data.json
a partir de una plantilla y lo instala en /srv/www/shared
.
-
El nombre de la plantilla,
/srv/www/shared/example_data.json
, especifica el nombre y la ruta del archivo instalado. -
El atributo
source
especifica la plantilla utilizada para crear el archivo. -
El atributo
mode
especifica el modo de archivo instalado. -
El recurso define dos variables,
a_boolean_var
ya_string_var
.Cuando el recurso crea
example_data.json
, sobrescribe los comodines de las variables de la plantilla con los valores correspondientes del recurso. -
El atributo
only_if
de protección indica al recurso que cree el archivo solo si['createfile']['install_file']
está establecido entrue
.
Para ejecutar la receta
-
Ejecute
kitchen destroy
para comenzar por una instancia nueva. -
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 comprobar que el archivo se encuentre en/srv/www/shared
y su contenido sea correcto.
Cuando haya terminado, ejecute kitchen destroy
para cerrar la instancia. En la siguiente sección se utiliza un libro de recetas nuevo.