2014-11-12 20 views
9

vorrei estendere il mio playbook ansible per installare/verificare l'installazione di phantomjs e wkhtmltopdf alla mia macchina Debian 7. Entrambi i programmi sono disponibili come pacchetti tarball via HTTP. So che il modulo GET_URL, ma non disfare cose, e se mi piacerebbe aggiungere alcuni comandi di shell per il disimballaggio e lo spostamento dei file binari, ho il sospetto ogni volta che corro ansible, i tarball sarebbero scaricati, scompattato e si trasferì di nuovo, causando traffico di rete non necessario.Ansible: Installare tarball via HTTP

Come posso risolvere questo? Dovrei creare un file .deb ed eseguirlo usando il comando apt, o dovrei creare un nuovo modulo ansible per installare i tarball, o c'è qualcosa che sto trascurando?

risposta

10

Se si scaricano versioni specifiche (ad esempio foo_1.2.3.tar.gz e non foo_latest.tar.gz), è possibile farlo mantenendo il tarball scaricato:

- name: Gets tarball 
    sudo: yes 
    sudo_user: "{{ deploy_user }}" 
    get_url: 
    url="http://some.host/some_tarball-{{ tarball_version }}.tar.gz" 
    dest="/home/{{ deploy_user }}/" 
    register: new_archive 

- name: Unarchive source 
    sudo: yes 
    sudo_user: "{{ deploy_user }}" 
    unarchive: 
    src="/home/{{ deploy_user }}/some_tarball-{{ tarball_version }}.tar.gz" 
    dest="/home/{{ deploy_user }}/app/" 
    copy=no 
    when: new_archive|changed 

variabili cambiano in base al proprio ambiente.

+1

bello, non ho guardato abbastanza da vicino la documentazione GET_URL, essi affermano molto chiaramente che file, solo se non presente a dest. C'è una documentazione sul filtro 'changed', posso solo trovare un esempio che la usa, ma non c'è spiegazione? – Simon

+0

In effetti, 'changed' è true se la variabile è registrata in un'attività che restituisce 'changed'. Significa che qualcosa è "cambiato" quando è stata eseguita l'attività. Nel nostro caso, significa che il file non era presente e scaricato. Non è specifico per 'get_url', è un filtro che puoi applicare alle variabili (vedi http://docs.ansible.com/playbooks_variables.html#id21). – leucos

+0

Nota che il trasferimento del file ha borked, sei al sicuro, poiché 'get_url' copierà il file solo nella destinazione specificata solo dopo che il trasferimento avrà avuto successo. Nota bis: ho risolto il nome del file src unarchive che era sbagliato – leucos

2

È anche possibile utilizzare il modulo unarchive per decomprimere il file tar direttamente dalla fonte HTTP.

- name: Download and unpack directly from HTTP source unarchive: src: "http://your_tarball_to_download.tar.gz" dest: "/home/dest_directory" copy: no

Maggiori informazioni sul modulo unarchive può essere trovato sui documenti http://docs.ansible.com/ansible/unarchive_module.html

+1

Si prega di aggiornare la vostra risposta con 'version_added 2.0' e tenere a mente che' 'copia = è deprecato. –

+0

Grazie, Konstantin Suvorov. Sono consapevole che 'copy =' è deprecato a favore di 'remote_src'. Tuttavia, l'uso di 'remote_src = yes' rimuove il secondo'/'in' http: // 'per me e il problema è stato segnalato anche da qualcun altro qui' https://github.com/ansible/ansible-modules-core/temi/4498' –

Problemi correlati