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.
Obtención directa de los valores de atributo
importante
La AWS OpsWorks Stacks El servicio llegó al final de su vida útil el 26 de mayo de 2024 y se ha inhabilitado 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
nota
Este enfoque solo funciona en pilas de Linux.
Simulación de los atributos de configuración e implementación de pila en Vagrant muestra cómo obtener los datos de configuración e implementación de pila mediante el uso de la sintaxis de nodo para hacer referencia directamente a atributos concretos. Con frecuencia este suele ser el mejor enfoque. Sin embargo, en el caso de una determinada pila, muchos atributos se definen en colecciones o listas cuyo contenido y nombres pueden variar de pila a pila y a lo largo del tiempo. Por ejemplo, el atributo deploy
contiene una lista de atributos de aplicación, cuyos nombres son el nombre corto de la aplicación. Esta lista, incluidos los nombres de los atributos de aplicación, normalmente varía de pila a pila, incluso de implementación a implementación.
Suele ser más útil, a veces incluso necesario, para obtener los datos necesarios mediante la enumeración de los atributos de una lista o colección. Por ejemplo, supongamos que desea conocer las direcciones IP públicas de las instancias de la pila. Esta información se encuentra en el atributo ['opsworks']['layers']
, que está establecido en una tabla hash que contiene un elemento para cada capa de la pila, cuyo nombre es el nombre corto de la capa. Cada elemento de la capa está establecido en una tabla hash que contiene los atributos de la capa, uno de los cuales es ['instances']
. En cambio, el elemento está establecido en otra tabla hash, que contiene un atributo para cada una de las instancias de la capa, cuyo nombre es el nombre corto de la capa. Cada atributo de instancia también está establecido en otra tabla hash, que contiene los atributos la instancia incluido ['ip']
, que representa la dirección IP pública. Si tiene problemas para visualizarlo, el siguiente procedimiento incluye un ejemplo en JSON formato.
En este ejemplo se muestra cómo obtener datos de la configuración y el despliegue de la pila JSON para las capas de una pila.
Para configurar el libro de recetas
-
Cree un directorio dentro de
opsworks_cookbooks
llamadolistip
y ábralo. -
Inicialice y configure Test Kitchen tal y como se describe en Ejemplo 1: Instalación de paquetes.
-
Añada dos directorios a
listip
:recipes
yenvironments
. -
Cree una JSON versión editada de los atributos de MyStack configuración e implementación que contenga los atributos relevantes. Debería parecerse a lo siguiente.
{ "opsworks": { "layers": { "php-app": { "name": "PHP App Server", "id": "efd36017-ec42-4423-b655-53e4d3710652", "instances": { "php-app1": { "ip": "192.0.2.0" } } }, "db-master": { "name": "MySQL", "id": "2d8e0b9a-0d29-43b7-8476-a9b2591a7251", "instances": { "db-master1": { "ip": "192.0.2.5" } } }, "lb": { "name": "HAProxy", "id": "d5c4dda9-2888-4b22-b1ea-6d44c7841193", "instances": { "lb1": { "ip": "192.0.2.10" } } } } } }
-
Cree un archivo de entorno con un nombre
test.json
, pegue el ejemplo y guárdelo JSON endefault_attributes
laenvironments
carpeta del libro de cocina. El archivo debería tener un aspecto similar al siguiente (por motivos de brevedad, la mayor parte del ejemplo JSON se representa con puntos suspensivos).{ "default_attributes" : { "opsworks": { "layers": {
...
} } }, "chef_type" : "environment", "json_class" : "Chef::Environment" } -
Sustituya el texto de
.kitchen.yml
por lo siguiente.--- driver: name: vagrant provisioner: name: chef_zero environments_path: ./environment platforms: - name: ubuntu-12.04 suites: - name: listip provisioner: client_rb: environment: test run_list: - recipe[listip::default] attributes:
Después de configurar el libro de cocina, puedes usar la siguiente receta para registrar la capa. IDs
node['opsworks']['layers'].each do |layer, layerdata| log "#{layerdata['name']} : #{layerdata['id']}" end
La receta enumera las capas de ['opsworks']['layers']
y registra sus nombres e ID.
Para ejecutar la receta de registro de ID de capa
-
Cree un archivo llamado
default.rb
con la receta de ejemplo y guárdelo en el directoriorecipes
. -
Ejecute
kitchen converge
.
La parte relevante del documento de salida debería parecerse a lo siguiente.
Recipe: listip::default * log[PHP App Server : efd36017-ec42-4423-b655-53e4d3710652] action write[2014-07-17T22:56:19+00:00] INFO: Processing log[PHP App Server : efd36017-ec42-4423-b655-53e4d3710652] action write (listip::default line 4) [2014-07-17T22:56:19+00:00] INFO: PHP App Server : efd36017-ec42-4423-b655-53e4d3710652 * log[MySQL : 2d8e0b9a-0d29-43b7-8476-a9b2591a7251] action write[2014-07-17T22:56:19+00:00] INFO: Processing log[MySQL : 2d8e0b9a-0d29-43b7-8476-a9b2591a7251] action write (listip::default line 4) [2014-07-17T22:56:19+00:00] INFO: MySQL : 2d8e0b9a-0d29-43b7-8476-a9b2591a7251 * log[HAProxy : d5c4dda9-2888-4b22-b1ea-6d44c7841193] action write[2014-07-17T22:56:19+00:00] INFO: Processing log[HAProxy : d5c4dda9-2888-4b22-b1ea-6d44c7841193] action write (listip::default line 4) [2014-07-17T22:56:19+00:00] INFO: HAProxy : d5c4dda9-2888-4b22-b1ea-6d44c7841193
Para enumerar las direcciones IP de las instancias, necesitará un bucle anidado como el siguiente.
node['opsworks']['layers'].each do |layer, layerdata| log "#{layerdata['name']} : #{layerdata['id']}" layerdata['instances'].each do |instance, instancedata| log "Public IP: #{instancedata['ip']}" end end
El bucle interior itera sobre las instancias de la capa y registra las direcciones IP.
Para ejecutar la receta de registro de IP de instancia
-
Sustituya el código de
default.rb
por la receta de ejemplo. -
Ejecute
kitchen converge
para ejecutar la receta.
La parte relevante del documento de salida debería parecerse a lo siguiente.
* log[PHP App Server : efd36017-ec42-4423-b655-53e4d3710652] action write[2014-07-17T23:09:34+00:00] INFO: Processing log[PHP App Server : efd36017-ec42-4423-b655-53e4d3710652] action write (listip::default line 2) [2014-07-17T23:09:34+00:00] INFO: PHP App Server : efd36017-ec42-4423-b655-53e4d3710652 * log[Public IP: 192.0.2.0] action write[2014-07-17T23:09:34+00:00] INFO: Processing log[Public IP: 192.0.2.0] action write (listip::default line 4) [2014-07-17T23:09:34+00:00] INFO: Public IP: 192.0.2.0 * log[MySQL : 2d8e0b9a-0d29-43b7-8476-a9b2591a7251] action write[2014-07-17T23:09:34+00:00] INFO: Processing log[MySQL : 2d8e0b9a-0d29-43b7-8476-a9b2591a7251] action write (listip::default line 2) [2014-07-17T23:09:34+00:00] INFO: MySQL : 2d8e0b9a-0d29-43b7-8476-a9b2591a7251 * log[Public IP: 192.0.2.5] action write[2014-07-17T23:09:34+00:00] INFO: Processing log[Public IP: 192.0.2.5] action write (listip::default line 4) [2014-07-17T23:09:34+00:00] INFO: Public IP: 192.0.2.5 * log[HAProxy : d5c4dda9-2888-4b22-b1ea-6d44c7841193] action write[2014-07-17T23:09:34+00:00] INFO: Processing log[HAProxy : d5c4dda9-2888-4b22-b1ea-6d44c7841193] action write (listip::default line 2) [2014-07-17T23:09:34+00:00] INFO: HAProxy : d5c4dda9-2888-4b22-b1ea-6d44c7841193 * log[Public IP: 192.0.2.10] action write[2014-07-17T23:09:34+00:00] INFO: Processing log[Public IP: 192.0.2.10] action write (listip::default line 4) [2014-07-17T23:09:34+00:00] INFO: Public IP: 192.0.2.10
Cuando haya terminado, ejecute kitchen destroy
; el siguiente tema utiliza un libro de recetas nuevo.
nota
Una de las razones más comunes para enumerar la configuración de una pila y una JSON recopilación de despliegues es obtener datos para una aplicación implementada en particular, como su directorio de implementación. Para ver un ejemplo, consulte Recetas de implementación.