Chef-cliente que no actualiza un libro de cocina desde el servidor

9

Tengo un libro de cocina del chef (para apache2). No funciona en un nodo. Así que estoy tratando de modificarlo y actualizarlo, pero el nodo no parece descargar la nueva versión. He podido cargar todo al servidor de chef desde mi máquina local con knife upload .éxito, e imprime que cargó los bits del libro de cocina apache2 que cambié.

Cuando ejecuto manualmente (como root) chef-clienten el nodo, puedo verlo contactando al servidor, obteniendo la lista de ejecución, etc. Sin embargo, los archivos de recetas /var/cache/chef/cookbooks/apache2son los archivos antiguos. Y la receta falla (porque no tiene los cambios que hice).

¿Cómo consigo que el cliente chef en el nodo use la nueva versión actualizada del libro de cocina apache2? ¿Debo agregar el número de versión en el libro de cocina (no he estado haciendo esto)?

chef-client -l debug salida:

[2015-01-30T10:51:31+01:00] DEBUG: Synchronizing cookbook apache2
[2015-01-30T10:51:31+01:00] DEBUG: Not storing cookbooks/apache2/recipes/mod_ldap.rb, as the cache is up to date.
[2015-01-30T10:51:31+01:00] DEBUG: Not storing cookbooks/apache2/recipes/mod_xsendfile.rb, as the cache is up to date.
[2015-01-30T10:51:31+01:00] DEBUG: Not storing cookbooks/apache2/recipes/mod_auth_openid.rb, as the cache is up to date.
[2015-01-30T10:51:31+01:00] DEBUG: Not storing cookbooks/apache2/recipes/mod_setenvif.rb, as the cache is up to date.
[2015-01-30T10:51:31+01:00] DEBUG: Not storing cookbooks/apache2/recipes/mod_python.rb, as the cache is up to date.
[2015-01-30T10:51:31+01:00] DEBUG: Not storing cookbooks/apache2/recipes/mod_authz_host.rb, as the cache is up to date.
[2015-01-30T10:51:31+01:00] DEBUG: Not storing cookbooks/apache2/recipes/mod_proxy_ajp.rb, as the cache is up to date.
[2015-01-30T10:51:31+01:00] DEBUG: Not storing cookbooks/apache2/recipes/mod_expires.rb, as the cache is up to date.
(lots of this for all files)

Soy nuevo en el chef, por lo que podría haber cometido un error de principiante.

Rory
fuente
Vaya a la interfaz web del chef-servidor y verifique si los cambios en el libro de cocina están ahí.
Draco Ater
1
Asegúrate de correr knife cookbook upload <cookbook_name>. Si eso no lo resuelve, intenta knife cookbook list <cookbook_name>subir la versión y luego ejecutar para asegurarte de que realmente la estás cargando correctamente. Alternativamente, ejecute knife cookbook download(en otro directorio) para desplegar lo que el servidor cree que es el código correcto.
Tejay Cardon

Respuestas:

6

Hay un par de cosas en las que puedo pensar que podrían ayudarte.

  1. Verifique que la versión del libro de cocina que está cargando sea la versión más reciente

    Un problema común con el control de versiones del libro de cocina es que puede estar modificando localmente la versión del libro de cocina 1.0.0 y cargándola, pero el Servidor Chef ya tiene cargada la versión del libro de cocina 1.0.1. En ese caso, los Clientes Chef normalmente recuperarán la última versión (a menos que se les indique lo contrario) y sus cambios nunca se sincronizarán con el caché local.

    Puede ver todas las versiones actuales del libro de cocina en Chef Server a través de: knife cookbook show apache2

    Una solución a esto es la que mencionó: aumente su número de versión más allá de lo que existe en Chef Server, es decir, 1.0.2 y cárguelo.

    Otro método es eliminar cualquier otro libro de cocina apache2 del Chef Server y volver a cargar el que desee. Esto no necesita ninguna actualización de número de versión, y el resultado final es que Chef Server tendría un solo libro de cocina apache2.

  2. Valide que sus cambios realmente están llegando a Chef Server

    Usando knife cookbook show apache2 <cookbook version> recipes default.rb Reemplazar versión, ruta y nombre de archivo, por ejemplo, si desea ver una plantilla llamada foo.erb:knife cookbook show apache2 0.1.0 templates foo.erb

    Este comando solicitará el archivo del Servidor Chef y mostrará la salida en su terminal. Esta es una manera simple de determinar que los cambios que realizó se están cargando a través de knife cookbook upload.

Más allá de esto, si esto no ayuda, agregar los detalles de la knifeversión, la chef-serverversión, la chef-clientversión, así como un registro de depuración de knife cookbook upload apache2 -VVsería útil para la depuración adicional.

Mike Fiedler
fuente
1
Muchas gracias por esta respuesta ... ¡me llevó a ver que teníamos limitaciones en los libros de cocina en nuestro entorno de producción, no en nuestros entornos / production.rb sino en berkshelf! Ni siquiera sabía que podía hacer eso. De todos modos, después de volver a cargar nuestro entorno de producción.rb, una nueva ejecución del chef recogió nuestro último libro de cocina de aplicaciones.
Colin Curtin
2

Primero depure todas las versiones de libros de cocina en el servidor y luego verifique qué versión de libro de cocina está descargando el cliente. si es antiguo, solo verifique si el servidor tiene una versión actualizada. si también es sí, vaya a la interfaz de usuario del servidor de chef y compruebe si hay env. es posible que haya configurado un entorno en el que se especifiquen las restricciones de los libros de cocina. Actualice la versión allí y comenzará a funcionar nuevamente.

zedfauji
fuente
1

Otra causa de esto puede ser que no todas las dependencias del libro de cocina están presentes en el servidor del chef. Me encontré con esto justo ahora, y la nueva versión de mi libro de cocina aparecía knife cookbooks listpero mi cliente no estaba usando la nueva versión. Después de algunas depuraciones, descubrí que Berkshelf, ni el cuchillo habían subido la nueva dependencia para mi libro de cocina. Después de cargar eso, el cliente comenzó a usar la versión más nueva.

Michael Grubb
fuente
Asegúrese de ejecutar la carga del libro de cocina de cuchillo <cookbook_name>
Net Runner