2014-11-12 15 views
9

Tôi muốn mở rộng cuốn sách playbook của mình để cài đặt/xác minh cài đặt các phantomj và wkhtmltopdf lên máy tính Debian 7 của tôi. Cả hai chương trình đều có sẵn dưới dạng gói tarball thông qua HTTP. Tôi biết module get_url, nhưng nó không giải nén các thứ, và nếu tôi thêm một số lệnh shell để giải nén và di chuyển các tập tin nhị phân, tôi nghi ngờ mỗi khi tôi chạy ansible, tarballs sẽ được tải xuống, giải nén và di chuyển một lần nữa, gây ra lưu lượng mạng không cần thiết.Ansible: Cài đặt tarball qua HTTP

Tôi làm cách nào để giải quyết vấn đề này? Tôi có nên tạo một tệp .deb và chạy tệp đó bằng lệnh apt hay tôi nên tạo mô-đun ansible mới để cài đặt tarballs hoặc có cái gì đó mà tôi đang xem?

Trả lời

10

Nếu bạn tải phiên bản cụ thể (ví dụ foo_1.2.3.tar.gz và không foo_latest.tar.gz), bạn có thể làm điều này bằng cách giữ tarball tải:

biến đổi
- 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 

theo môi trường của bạn.

+1

Nice, tôi không nhìn kỹ đủ tại các tài liệu GET_URL, họ nêu khá rõ ràng tập tin đó chỉ được tải về nếu không muốn nói có mặt tại dest. Có tài liệu về bộ lọc 'đã thay đổi' hay không, tôi chỉ có thể tìm thấy một ví dụ sử dụng bộ lọc đó, nhưng không có lời giải thích nào? – Simon

+0

Trên thực tế, 'đã thay đổi' là đúng nếu biến được đăng ký trong một tác vụ trả về 'đã thay đổi'. Nó có nghĩa là một cái gì đó đã "thay đổi" khi nhiệm vụ được chạy. Trong trường hợp của chúng tôi, nó có nghĩa là các tập tin đã không có mặt và tải xuống. Nó không cụ thể cho 'get_url', nó là một bộ lọc mà bạn có thể áp dụng cho các biến (xem http://docs.ansible.com/playbooks_variables.html#id21). – leucos

+0

Lưu ý rằng việc chuyển tập tin đã borked, bạn an toàn, vì 'get_url' sẽ chỉ sao chép các tập tin đến đích được chỉ định sau khi chuyển là thành công. Lưu ý bis: Tôi đã sửa tên tệp src không lưu trữ bị sai – leucos

2

Bạn cũng có thể sử dụng mô-đun hủy lưu trữ để giải nén tập tin tar trực tiếp từ nguồn HTTP.

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

Thông tin thêm về các module huỷ lưu trữ có thể được tìm thấy trên các tài liệu http://docs.ansible.com/ansible/unarchive_module.html

+1

Vui lòng cập nhật câu trả lời của bạn với 'version_added 2.0' và ghi nhớ rằng' copy = 'không được chấp nhận. –

+0

Cảm ơn bạn, Konstantin Suvorov. Tôi biết rằng 'copy =' bị phản đối vì lợi ích của 'remote_src'. Tuy nhiên, việc sử dụng 'remote_src = yes' sẽ loại bỏ'/'thứ hai trong' http: // 'cho tôi và vấn đề cũng đã được báo cáo bởi một người khác ở đây' https://github.com/ansible/ansible-modules-core/issue/4498' –

Các vấn đề liên quan