ansible git clone repository
ansible: el módulo git está colgando (7)
Hay un par de razones por las que el módulo git puede estar colgado, pero el más posible es que el comando git clone
esté esperando una confirmación si la clave de host debe agregarse a los hosts conocidos de su servidor. Para verificar si este es el problema, ejecute ansible con el indicador: --verbose
, para que se ejecute en modo detallado, esto le dará más información sobre el error.
Si confirma que los hosts conocidos es el problema, entonces tiene dos opciones:
Solución 1 :
Para evitar este problema con el módulo git
, use el parámetro accept_hostkey
.
- name: ensure jquery repo is available
git: [email protected]:jquery/jquery.git version=master accept_hostkey=True
Solución 2 :
Use el ansible-sshknownhosts
terceros ansible-sshknownhosts
antes de usar el módulo core git
:
- name: ensure github is a known host
action: sshknownhosts host=github.com state=present
- name: ensure jquery repo is available
git: [email protected]:jquery/jquery.git version=master accept_hostkey=True
Dado que el knownhosts
no es un módulo de núcleo de ansible, primero deberá instalarlo, consulte los ansible-sshknownhosts para obtener más información y cómo instalarlo.
otra solución sería deshabilitar la comprobación de la clave del host ssh, pero esto tiene implicaciones de seguridad, por lo que, a menos que realmente sepa lo que está haciendo, es mejor evitar esto.
Estoy usando Ansible y me cuesta mucho hacer que el módulo git funcione. He leído varias publicaciones de personas que tienen el mismo problema, miré el documento de ansible y probé casi todo. Encontré un tutorial claro que seguí hasta que usaron git, pero nuevamente tengo un problema cuando uso mi repositorio ...: / La tarea de git simplemente se bloquea ... no hay error, ¡simplemente está bloqueado!
Aquí está mi archivo de host:
[web]
dev1 ansible_ssh_host=10.0.0.101 ansible_ssh_user=root
Esta es una máquina virtual errante que se ejecuta en virtualbox en mi computadora.
Tomé el libro de jugadas de este tutorial e hice todos los pasos hasta el paso 08: https://github.com/leucos/ansible-tuto/tree/master/step-08
Lo ejecuto en mi VM, funciona bien, luego agrego una tarea "Implementar mi código" para usar mi repositorio ... pero esta tarea no funciona. Es un repositorio privado en bitbucket. ¿Hace alguna diferencia?
- hosts: web
tasks:
- name: Deploy our awesome application
action: git repo=https://github.com/leucos/ansible-tuto-demosite.git dest=/var/www/awesome-app
tags: deploy
- name: Deploy my code
action: git repo=https://[email protected]/YAmikep/djangotutorial.git dest=/var/www/my-app
tags: deploy
Puede haber algo con el usuario, o con el usuario ejecutando ansible, o las teclas, etc., pero lo intenté durante horas y ahora estoy aún más confundido ... Simplemente no sé qué hacer para depurar eso ahora Y averigua qué está mal y qué me estoy perdiendo.
Gracias.
Intenté básicamente todo (aceptando claves, cambio de configuración de ssh, archivo known_hosts, reenvío de ssh-agent y olvidé qué más) sin éxito.
Después de quitarme todo el cabello, finalmente resolví el problema para ser un hecho que la clave privada SSH puede requerir una frase de contraseña.
No lo noté antes porque el agente ssh local se encargó de usar la frase de contraseña almacenada en el llavero, así que todo funcionó localmente. Al usar Ansible en una máquina virtual Vagrant, este mecanismo no estaba disponible y el módulo git se atascó esperando que se ingresara la frase de contraseña. Una vez que me di cuenta de la posible causa, creé un par de llaves especial sin frase de contraseña (se conocen aspectos de seguridad, ¿verdad?) Y agregué la clave pública a bitbucket (/ github / cualquiera que sea). Al usar esta clave en particular, las cosas pasaron sin problemas.
Me he encontrado con esto, y en mi caso, git cuelga al confirmar la nueva clave ssh para un host (bitbucket.org). Esto podría ser resuelto por el módulo ansible-sshknownhosts , que se ejecuta antes de git para rellenar .ssh / known_hosts en el host, de modo que luego no es necesario que git se cuelgue de él.
Pero tenga cuidado con los posibles problemas de seguridad, lea la documentación del módulo.
Para mí, el problema fue especificar la ruta https a git en lugar de la ruta ssh.
https://gitlab.com/foo/bar.git # Incorrect
[email protected]:foo/bar.git # Correct
Si el usuario requiere una contraseña, el módulo git puede bloquearse si no se proporciona uno, mientras que el ejecutable git lo solicita en segundo plano. Para su parámetro de repo, intente usar https://YAmikep:{yourpassword}@bitbucket.org/YAmikep/djangotutorial.git
. O intente utilizar las teclas git / ssh en su lugar, por lo que no se requiere contraseña.
Tuve un problema similar cuando uso ansible con terraform. Los grupos de seguridad de Terraform no establecen de forma predeterminada "permitir todas las salidas" como lo hacen en la consola de AWS, por lo que la solicitud de clonación de git no se enviaría independientemente del cliente que cause el comportamiento de bloqueo.
Vea la nota en los documentos de terraform aquí: https://www.terraform.io/docs/providers/aws/r/security_group.html#description-2
fwiw También he tenido esto aparentemente causado por varios agentes ssh en ejecución (cliente osx). Arreglado por
killall ssh-agent && eval `ssh-agent` && ssh-add -K