Resolver dependencias recursivas de libros de cocina git con Berkshelf
dependencies chef (2)
Mi contramedida es usar un servidor Berkshelf API . En lugar de cargar los repositorios de los repositorios Git, apunto el servidor API Berks a nuestro servidor Chef.
Versión de tl; dr: ¿Berkshelf puede resolver dependencias recursivas dentro de los libros de cocina basados en Git y, en caso afirmativo, cómo?
Intento administrar mis dependencias de libros de cocina Chef con Berkshelf. Los libros de cocina están todos almacenados en repositorios internos de Git. Las dependencias son las siguientes:
env_dockerhub_dev
>>depends on>> app_dockerhub
>>depends on>> app_docker
El archivo Berksfile principal en mi proyecto se ve así:
source "https://supermarket.chef.io"
cookbook "env_dockerhub_dev", git: "git@URL_TO_GIT_SERVER/chef_env_dockerhub_dev.git"
El recetario env_dockerhub_dev
tiene un metadata.rb
como este:
name ''env_dockerhub_dev''
...
depends ''app_dockerhub''
depends ''base_ubuntu''
y un Berksfile
como este:
source "https://supermarket.chef.io"
cookbook "app_dockerhub", git: "git@URL_TO_GIT_SERVER/chef_app_dockerhub.git"
cookbook "base_ubuntu", git: "git@URL_TO_GIT_SERVER/chef_base_ubuntu.git"
Cuando ahora berks install
el siguiente mensaje de error:
Resolving cookbook dependencies...
Fetching ''env_dockerhub_dev'' from git@URL_TO_GIT_SERVER/chef_env_dockerhub_dev.git (at master)
Fetching cookbook index from https://supermarket.chef.io...
Unable to satisfy constraints on package app_dockerhub, which does not exist, due to solution constraint (env_dockerhub_dev = 0.1.0). Solution constraints that may result in a constraint on app_dockerhub: [(env_dockerhub_dev = 0.1.0) -> (app_dockerhub >= 0.0.0)]
Missing artifacts: app_dockerhub,base_ubuntu
Demand that cannot be met: (env_dockerhub_dev = 0.1.0)
Unable to find a solution for demands: env_dockerhub_dev (0.1.0)
Puedo solucionar el problema, cuando agrego todas las URL de Git para todos mis libros de cocina internos en el Berksfile "principal" (el archivo Berks en la raíz de mi proyecto) de esta manera:
source "https://supermarket.chef.io"
# the main cookbook
cookbook "env_dockerhub_dev", git: "git@URL_TO_GIT_SERVER/chef_env_dockerhub_dev.git"
# the cookbooks that are "recursively"
cookbook "app_dockerhub", git: "git@gURL_TO_GIT_SERVER/chef_app_dockerhub.git"
cookbook "app_docker", git: "git@URL_TO_GIT_SERVER/chef_app_docker.git"
De todos modos, creo que esta no debería ser la solución para este problema.
¡Mucho por tu ayuda!
Ok, leyendo esto https://github.com/berkshelf/berkshelf/pull/304 Creo que descubrí que esto realmente no es posible. Todavía no entiendo por qué, pero ese es otro problema :-)
Como mencioné en mi pregunta, una solución es agregar todas las dependencias de libros de cocina y su URL de git en el archivo Berksfile topevel:
source "https://supermarket.chef.io"
# the main cookbook
cookbook "env_dockerhub_dev", git: "git@URL_TO_GIT_SERVER/chef_env_dockerhub_dev.git"
# other cookbook dependencies (resolved recursively)
cookbook "app_dockerhub", git: "git@gURL_TO_GIT_SERVER/chef_app_dockerhub.git"
cookbook "app_docker", git: "git@URL_TO_GIT_SERVER/chef_app_docker.git"