2015-03-13 13 views
9

Tôi muốn xác định một cuốn sách hướng dẫn thiết lập sự thật về máy chủ của tôi có thể được sử dụng trong các lần phát khác. Mô-đun set_fact tuyên bố để có thể thực hiện điều này ... http://docs.ansible.com/set_fact_module.html - tuy nhiên nó không hoạt động ... Các sự kiện tôi xác định có sẵn sau khi cuộc gọi đến set_fact trong một loạt sách vở - tôi sẽ mong đợi có thể sử dụng tất cả các thiết lập -một cách an toàn và xem thực tế được xác định ở đâu đó trong các sự kiện được thu thập cho mỗi máy chủ ...sử dụng mô-đun set_fact ansible để xác định sự kiện liên tục?

Tôi đã thử xem mã cho mô-đun set_fact - nhưng tất cả tôi tìm thấy là chuỗi tài liệu ... https://github.com/ansible/ansible-modules-core/blob/19b328c4df2157b6c0191e9144236643ce2be890/utilities/logic/set_fact.py

+0

Câu hỏi hay và tôi không biết 'set_fact' _should_ làm việc liên tục.Tôi đã cố gắng để tìm mã thực tế, chỉ tìm thấy một tham chiếu rằng 'set_fact' là một plugin hành động nhưng không thể tìm thấy các plugin hành động ngay bây giờ mà tất cả mọi thứ được chia thành 3 repos. Tôi tìm thấy [chủ đề này từ danh sách gửi thư] (http://grokbase.com/p/gg/ansible-devel/149rhwqtxy/persistent-set-fact) đề cập đến tham số 'persistent' không có giấy tờ. Có thể chơi với điều đó. – udondan

Trả lời

2

Thứ nhất, mô-đun set_fact chỉ đặt các sự kiện khả dụng trong khi chạy. Đối với sự kiện dai dẳng, bạn sẽ cần một trong hai:

--Static--

  • xác định chúng trong một trong các cách sau:
    • vars/
    • group_vars/
    • host_vars/

--Dynamic--

Sau đó là những gì tôi thường chọn để làm, vì nó khá đơn giản để thiết lập, và các sự kiện luôn có sẵn trên tất cả các host, ngay cả khi bạn đang làm một cái gì đó như:

  • nhận được tất cả các sự kiện cho tất cả các máy chủ trong khi kết nối với máy chủ lưu trữ nagios để tạo các tệp cấu hình của nó.
+0

Thực ra tôi nên quay trở lại câu hỏi này để cập nhật sau khi học câu trả lời (tài liệu cho module set_fact gây nhầm lẫn cho người mới - ít nhất nó làm tôi bối rối khi tôi bắt đầu với ansible). Các biến được xác định thông qua set_fact chỉ tồn tại giữa các lần phát _within cùng một runbook play_. – Ben

+0

Đồng ý. Các tài liệu có thể khá khó hiểu lúc đầu. – senorsmile

+1

set_fact bây giờ có thể được sử dụng để lưu các biến và lưu giữ chúng giữa các lần thực thi. Xem http://docs.ansible.com/ansible/latest/playbooks_variables.html#fact-caching và http://docs.ansible.com/ansible/latest/set_fact_module.html – Petro026

1

Bạn đang sử dụng phiên bản Ansible nào? Kể từ phiên bản 1.8, có một số tích hợp là fact caching capability nhưng được tắt theo mặc định. Bạn sẽ cần phải kích hoạt nó trong tập tin ansible.cfg của bạn, và bạn cũng cần phải có một máy chủ redis chạy vì đó là những gì thực sự lưu trữ các sự kiện.

+0

Tôi đang sử dụng ansible 1.8.4. Tôi đã hiểu tài liệu của mô-đun set_fact khá khác ... Tôi nghĩ rằng nó đang làm một cái gì đó giống như tạo một số trạng thái trên máy chủ thực hiện nhiệm vụ để lưu trữ giá trị thực tế - một cái gì đó giống như tạo hoặc cập nhật tệp trong/etc/facts .d/sẽ nắm bắt các thông số được truyền đến set_fact. Thats có vẻ như giải thích tự nhiên của 'Những biến này sẽ tồn tại giữa các lượt chơi' với tôi ... – Ben

+0

Tôi thực sự không cố gắng sử dụng sự kiện từ các nút từ xa - mà là tôi đang cố gắng nắm bắt và đóng băng một phần của trạng thái một máy chủ (khóa công khai máy chủ ssh của nó) để tôi có thể phát hiện nếu điều đó thay đổi và nếu nó có, tôi muốn tạo ra một lỗi. Mục tiêu của tôi là xác định quy trình làm việc để tôi có thể dễ dàng thu thập tất cả khóa công khai của máy chủ ssh từ các nút được thêm vào cơ sở hạ tầng của tôi, xác minh và đăng xuất trên chúng, sau đó dễ dàng phát hiện nếu có bất kỳ thay đổi nào từ giá trị được phê duyệt tập trung – Ben

+0

. về việc này hơi khác - (1) nhận giá trị của bản sao hợp lệ của máy chủ công cộng của máy chủ từ xa cho ansible_hostname từ máy điều khiển vào biến bằng cách sử dụng cơ chế 'tra cứu' (2) nhận giá trị của/etc/ssh/ssh_host_rsa_key .pub sử dụng shell: cat và đăng ký (3) tạo ra lỗi nếu không khớp trừ khi được ghi đè rõ ràng Cảm ơn sự giúp đỡ. Sẽ đánh giá cao bất kỳ đề xuất nếu điều này nghe có vẻ như một cách tiếp cận xấu. – Ben

0

Nếu một hệ thống quản lý từ xa có một thư mục /etc/ansible/facts.d, bất kỳ tập tin trong thư mục này kết thúc bằng .fact, có thể là JSON, INI, hoặc các tập tin thực thi trở về JSON, và những thể cung cấp các sự kiện địa phương trong Ansible, kể từ 1.3. Một thư mục thay thế có thể được chỉ định bằng cách sử dụng chỉ thị play fact_path.

http://docs.ansible.com/ansible/playbooks_variables.html#local-facts-facts-d

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