2014-11-12 10 views
9

Chciałbym rozszerzyć mój ansibliotek, aby zainstalować/zweryfikować instalację phantomjs i wkhtmltopdf na moim komputerze z Debianem 7. Oba programy są dostępne w postaci spakowanych archiwów za pośrednictwem protokołu HTTP. Znam moduł get_url, ale nie rozpakowuję rzeczy, a gdybym dodał kilka poleceń powłoki do rozpakowywania i przenoszenia plików binarnych, podejrzewam, że za każdym razem, gdy uruchomię ansibl, paczki zostaną pobrane, rozpakowane i przeniesione ponownie, powodując niepotrzebny ruch w sieci.Odpowiedz: instaluj archiwum przez HTTP

Jak mogę to rozwiązać? Czy powinienem utworzyć plik .deb i uruchomić go za pomocą komendy apt, czy też powinienem utworzyć nowy moduł ansibli do instalowania archiwów lub czy jest coś, co przeoczyłem?

Odpowiedz

10

Jeśli pobierzesz konkretne wersje (np foo_1.2.3.tar.gz i nie foo_latest.tar.gz), można to zrobić poprzez utrzymywanie pobranego archiwum:

- 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 

Zmień zmienne w zależności od środowiska.

+1

miły, ja nie wyglądają na tyle uważnie docs GET_URL, stwierdzają całkiem wyraźnie, że plik tylko wtedy, gdy nie obecny w dest. Czy istnieje dokumentacja na filtrze 'zmienionym', mogę znaleźć tylko przykład z jego użyciem, ale nie ma żadnego wyjaśnienia? – Simon

+0

W rzeczywistości "zmieniony" jest prawdziwy, jeśli zmienna jest zarejestrowana w zadaniu, które zwraca "zmieniony". Oznacza to, że coś "zmieniło się", gdy zadanie zostało uruchomione. W naszym przypadku oznacza to, że plik nie był obecny i pobrany. Nie jest to specyficzne dla 'get_url', jest to filtr, który możesz zastosować do zmiennych (zobacz http://docs.ansible.com/playbooks_variables.html#id21). – leucos

+0

Zauważ, że transfer pliku został zakorkowany, jesteś bezpieczny, ponieważ 'get_url' skopiuje plik tylko do określonego miejsca docelowego dopiero po pomyślnym przeniesieniu. Uwaga: Naprawiłem unarchive src filename, która była nieprawidłowa – leucos

2

Możesz także użyć modułu unarchive, aby rozpakować plik tar bezpośrednio ze źródła HTTP.

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

Więcej informacji na temat modułu Zdezarchiwizuj można znaleźć w docs http://docs.ansible.com/ansible/unarchive_module.html

+1

Proszę zaktualizuj swoją odpowiedź za pomocą 'version_added 2.0' i miej na uwadze, że' copy = 'jest przestarzałe. –

+0

Dziękuję, Konstantin Suworow. Mam świadomość, że 'copy =' jest przestarzałe na rzecz 'remote_src'. Jednak użycie 'remote_src = yes' powoduje usunięcie drugiego'/'in' http: // ', a problem został zgłoszony przez kogoś innego tutaj' https://github.com/ansible/ansible-modules-core/issues/4498' –