2015-06-29 13 views
6

Sto cercando di installare un pacchetto da un repo git privato utilizzando il modulo pip di ansible questo modo:Ansible: Installare il pacchetto con pip da un repo git privato

- name: Install my package 
    pip: name='git+ssh://[email protected]/mycompany/my-repo.git#egg=0.1.0' 
     virtualenv=/path/to/venv 

Ma questo si blocca quando provo a disposizione questo con vagabondo, molto probabilmente perché richiede la conferma per aggiungere la chiave alla lista degli host conosciuti. In effetti quando ho eseguito questo vagabondo:

pip install git+ssh://[email protected]/mycompany/my-repo.git#egg=0.1.0 

Si richiede la conferma per aggiungere GitHub per i padroni di casa conoscono e quindi funziona bene.

Se ho clonarlo con accept_hostkey=yes:

- name: Clone repo 
    git: [email protected]:mycompany/my-repo.git 
     dest=/path/to/dest 
     accept_hostkey=yes 
     recursive=no 

funziona bene perché accetti la chiave host che viene copiato sul vagabondo. Con il modulo pip non esiste questa opzione, in ogni modo? In alternativa, potrei fare un clone e poi un python setup.py install ma preferirei farlo in un solo passaggio con pip.

+0

Cosa succede quando si esegue 'pip install git + ssh: // git @ github.com/mycompany/my-repo.git # egg = 0.1.0' manualmente? –

+0

Funziona bene, sì scusa avrei dovuto aggiungere questa informazione – Tristan

+0

E lo fa altrettanto bene quando esegui il comando all'esterno di bash, cioè quando i comandi dell'ambiente non sono definiti? Prova a 'disinserire HOME' ed eseguire di nuovo il comando pip. –

risposta

0

Se questo problema riguarda le chiavi host autorizzate e non si dispone di una chiave privata corretta, è possibile eseguire quanto segue.

È sempre possibile autorizzare manualmente le chiavi host in "~/.ssh/authorized_keys" prima di eseguire pip.

Esempio:

https://stackoverflow.com/a/24305223/315168

Per avere una chiave privata corretta per accedere repository privato Github è possibile utilizzare l'inoltro agente SSH.

+0

Avete un esempio di utilizzo dell'agent di ssh forward in questo contesto? – Tristan

1

Esegui questa operazione per aggiungere il HOSTKEY al file known_hosts:

- name: Whitelist github.com 
    shell: if [ ! -n "$(grep "^github.com " ~/.ssh/known_hosts)" ]; then ssh-keyscan github.com >> ~/.ssh/known_hosts 2>/dev/null; fi 
+0

Puoi scegliere quale chiave generare da host con 'ssh-keycan'? – Tristan

+0

Cosa intendi con "quale chiave"? Un host ha solo una chiave = la sua identità. – udondan

3

I checkout comando si blocca a causa github.com non è tra gli host conosciuti del vostro utente Ansible. È necessario aggiungere l'impronta digitale della chiave SSH github.com al file /home/user/.ssh/known_hosts. Fortunatamente, known_hosts è ora un modulo disponibile in Ansible 1.9: http://docs.ansible.com/known_hosts_module.html

- known_hosts: path=/home/user/.ssh/known_hosts name=github.com key="|1|ba0yHIHdbaD9nswn12xSOyD8DFE=|EVZBrcr46cYcmx6qFRIrzTvWUX4= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==" 

Se si utilizza Ansible < 1.9, è possibile utilizzare standard di ssh-keygen comandi:

- shell: ssh-keygen -l -f /home/user/.ssh/known_hosts -F github.com 
    register: github_host_is_known 
- shell: ssh-keyscan -H github.com >> /home/user/.ssh/known_hosts 
    when: github_host_is_known|failed 
+0

Funzionerebbe, ma preferirei non avere la chiave codificata nella playbook – Tristan

+0

Modificata per non avere la chiave hardcoded nel playbook. –