2016-12-16 16 views
18

Tôi có một số tác vụ Ansible thực hiện các thao tác không may dài - những thứ như chạy một hoạt động đồng bộ hóa với một thư mục S3. Nó không phải luôn luôn rõ ràng nếu họ đang tiến triển, hoặc chỉ bị mắc kẹt (hoặc kết nối ssh đã chết), do đó, nó sẽ được tốt đẹp để có một số loại đầu ra tiến độ hiển thị. Nếu lệnh stdout/stderr được hiển thị trực tiếp, tôi sẽ thấy điều đó, nhưng Ansible bắt đầu ra.Tôi làm cách nào để hiển thị tiến trình cho tác vụ Ansible chạy dài?

Đầu ra ống trở lại is a difficult problem for Ansible to solve in its current form. Nhưng có bất kỳ thủ thuật Ansible tôi có thể sử dụng để cung cấp một số loại chỉ dẫn rằng mọi thứ vẫn đang di chuyển?

vé hiện tại là https://github.com/ansible/ansible/issues/4870

Trả lời

8

Có một vài điều bạn có thể làm, nhưng khi bạn đã đúng chỉ ra, Ansible trong hình thức hiện tại của nó không thực sự cung cấp một giải pháp tốt.

giải pháp chính thức-ish:

Một ý tưởng là để đánh dấu nhiệm vụ như async và thăm dò ý kiến ​​nó. Rõ ràng điều này chỉ phù hợp nếu nó có khả năng chạy theo cách như vậy mà không gây ra thất bại ở nơi khác trong playbook của bạn. Các tài liệu async là here và đây là một ví dụ dỡ bỏ từ họ:

- hosts: all 
    remote_user: root 
    tasks: 
    - name: simulate long running op (15 sec), wait for up to 45 sec, poll every 5 sec 
    command: /bin/sleep 15 
    async: 45 
    poll: 5 

này ít nhất có thể cung cấp cho bạn một 'ping' để biết rằng nhiệm vụ không phải là treo.

Phương thức xác nhận chính thức khác duy nhất là Ansible Tower, có thanh tiến trình cho các tác vụ nhưng không miễn phí.

Hacky-ish giải pháp:

Ngoài việc trên, bạn đang khá nhiều sẽ phải cuộn của riêng bạn. Ví dụ cụ thể của bạn về đồng bộ một thùng S3 có thể được theo dõi khá dễ dàng với một kịch bản định kỳ gọi AWS CLI và đếm số lượng các mục trong một thùng, nhưng đó không phải là một giải pháp chung tốt.

Điều duy nhất tôi có thể tưởng tượng là phần nào hiệu quả sẽ xem phiên ssh đến từ một trong các nút của bạn.

Để làm điều đó, bạn có thể định cấu hình người dùng an toàn trên máy đó để kết nối qua màn hình và chủ động xem nó. Hoặc có thể sử dụng tùy chọn log_output trong mục nhập sudoers cho người dùng đó, cho phép bạn kết nối tệp. Thông tin chi tiết về log_output có thể được tìm thấy trên sudoers man page

10

Tôi gặp phải vấn đề này ngày hôm nay trên OSX, nơi tôi đang chạy lệnh docker shell mất nhiều thời gian để xây dựng và không có đầu ra trong khi nó được xây dựng. Nó rất bực mình khi không hiểu liệu lệnh đó có treo hay đang tiến triển chậm chạp.

Tôi quyết định đặt đầu ra (và lỗi) của lệnh shell vào cổng, sau đó có thể được nghe qua netcat trong một thiết bị đầu cuối riêng biệt.

myplaybook.yml 

- name: run some long-running task and pipe to a port 
    shell: myLongRunningApp > /dev/tcp/localhost/4000 2>&1 

Và trong một cửa sổ terminal riêng biệt:

$ nc -lk 4000 
Output from my 
long 
running 
app will appear here 

Lưu ý rằng tôi ống lỗi ra vào cổng tương tự; Tôi có thể dễ dàng đi đến một cảng khác.

Ngoài ra, tôi đã thiết lập một biến gọi là nc_port sẽ cho phép thay đổi cổng trong trường hợp cổng đó đang được sử dụng. Nhiệm vụ ansible sau đó trông giống như:

shell: myLongRunningApp > /dev/tcp/localhost/{{nc_port}} 2>&1 

Lưu ý rằng lệnh myLongRunningApp đang được thực hiện trên localhost (ví dụ đó là các máy chủ thiết lập trong hàng tồn kho) đó là lý do tôi nghe localhost với nc.

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