2014-11-04 16 views
18

Làm cách nào để lưu Biến đã đăng ký vào một tệp? Tôi lấy số này từ số tutorial:Ansible - Lưu biến đăng ký vào tập tin

- hosts: web_servers 

    tasks: 

    - shell: /usr/bin/foo 
     register: foo_result 
     ignore_errors: True 

    - shell: /usr/bin/bar 
     when: foo_result.rc == 5 

Làm cách nào để lưu foo_result biến vào một tệp, ví dụ: foo_result.log sử dụng ansible?

+0

Tôi tự hỏi liệu bạn có tìm được giải pháp tốt hơn hay không vì tôi không thấy giải pháp nào cũng tạo ra tệp tạm thời. Việc phải mã hóa tên tệp sẽ là một vấn đề. – sorin

+0

Bạn cũng có thể sử dụng Biến trong đường dẫn đích của mình, ví dụ: '' -local_action: copy content = {{var}} dest =/path/to/{{var}}. Log', nhưng tôi không tìm thấy cái nào tốt hơn giải pháp nào được nêu ra/hoặc tôi không cần một giải pháp khác. –

+2

Có thể trùng lặp của [Ghi biến thành một tệp trong Ansible] (http://stackoverflow.com/questions/26638180/write-variable-to-a-file-in-ansible) – techraf

Trả lời

39

Bạn có thể sử dụng mô-đun copy, với thông số content=.

Tôi đưa ra câu trả lời chính xác cùng ở đây: Write variable to a file in Ansible

Trong trường hợp của bạn, có vẻ như bạn muốn biến này ghi vào một logfile địa phương, vì vậy bạn có thể kết hợp nó với các local_action ký hiệu:

- local_action: copy content={{ foo_result }} dest=/path/to/destination/file 
+0

Chính xác những gì tôi đang tìm kiếm. Bằng cách nào đó tôi đã không vấp phải câu hỏi trước. Thanx để trả lời một lần nữa –

+0

N.P. Tôi đã thực sự khá vui khi tìm thấy mô-đun sao chép hỗ trợ điều này, vì vậy "làm thế nào để tôi lưu vào tập tin" câu hỏi có xu hướng bắt mắt của tôi :-) –

7

Tôi đang sử dụng Ansible 1.9.4 và đây là những gì đã hiệu quả đối với tôi -

- local_action: copy content="{{ foo_result.stdout }}" dest="/path/to/destination/file" 
2

Hành động cục bộ sẽ chạy một lần cho mỗi máy chủ từ xa (song song). Nếu bạn muốn một tệp duy nhất cho mỗi máy chủ lưu trữ, hãy đảm bảo đặt tên inventory_hostname như một phần của tên tệp.

- local_action: copy content={{ foo_result }} dest=/path/to/destination/{{ inventory_hostname }}file 

Nếu bạn muốn có một tệp với thông tin của tất cả máy chủ, bạn sẽ phải thêm lần phát/vai trò/nhiệm vụ thứ hai vào sách chỉ chạy trên máy chủ cục bộ. Sau đó truy cập biến từ mỗi máy chủ nơi lệnh đăng ký chạy bên trong một mẫu Access Other Hosts Variables DocsTemplate Module Docs

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