chef git: sync UnresolvableGitReference

Estoy enfrentando un extraño problema con el recurso git en chef. UnresolvableGitReference error UnresolvableGitReference aunque exista el repository y la label.

recurso comstackdo en la receta: git("/opt/some-repo") do action [:sync] retries 0 retry_delay 2 default_guard_interpreter :default destination "/opt/some-repo" enable_checkout true revision "tags/v3.0.4" remote "origin" checkout_branch "deploy" declanetworking_type :git cookbook_name :"some-cookbook" recipe_name "install" user "ubuntu" repository "[email protected]github.com:someUser/some-repo.git" end

La instancia puede acceder al repository git y a la reference.

git ls-remote '[email protected]:someUser/some-repo.git' 'tags/v3.0.4*' me devuelve la identificación de confirmación.

El libro de cocina funciona bien en el chef v11.8.2, pero falla en chef v12.5.1

Con el recurso git puedes usar solo el nombre de la label 'v3.0.4' . Si necesita especificar que es una label, también puede usar la ruta completa: 'refs/tags/v3.0.4' .

Esto funcionó antes porque Chef 11 comtesting contra el sufijo de reference :

 found = refs.find { |m| m[1].end_with?(@new_resource.revision) } 

Pero esto puede ser problemático como podrías imaginar. Creo que 'tags/v3.0.4' funcionar nunca fue un comportamiento esperado.

De todos modos, en Chef 12 la implementación ha cambiado , y ahora busca por prefijo, agregando 'ref/tags/' y 'refs/heads/' para search tags y twigs respectivamente:

 def find_revision(refs, revision, suffix="") found = refs_search(refs, rev_match_pattern('refs/tags/', revision) + suffix) found = refs_search(refs, rev_match_pattern('refs/heads/', revision) + suffix) if found.empty? found = refs_search(refs, revision + suffix) if found.empty? found end def rev_match_pattern(prefix, revision) if revision.start_with?(prefix) revision else prefix + revision end end 

Entonces, jugué un poco y descubrí el problema. la tag de un git repo para la revision propiedad no necesita estar precedida por tags/ . No sé en qué versión del chef cambió, pero confirmo que funcionó en la versión 11.8.2 chef.

Por lo tanto, la revision "tags/v3.0.4" cambia a la revision "v3.0.4"