2015-10-16 15 views
9

Tôi có các mẫu cho tệp cấu hình được lưu trữ trong kho lưu trữ của dự án của tôi. Những gì tôi muốn làm là sử dụng mô-đun mẫu của Ansible để tạo ra một tập tin cấu hình bằng cách sử dụng mẫu đó trên máy chủ từ xa, sau khi dự án đã được nhân bản từ kho lưu trữ.Mẫu từ xa an toàn

Xem tài liệu cho mô-đun template có vẻ như thuộc tính src chỉ hỗ trợ tệp cục bộ.

Tôi muốn tránh lưu trữ mẫu cấu hình với Playbook Ansible của tôi vì nó có ý nghĩa hơn đối với tôi để giữ các mẫu cụ thể của dự án này trong kho lưu trữ dự án.

Có cách nào thay thế cho mô-đun mẫu mà tôi có thể sử dụng không?

+1

Tại sao không cho phép Ansible để kéo repo khác của bạn không? – ydaetskcoR

+0

Ansible nhái repo vào máy chủ từ xa. Một khi nó đã nhân bản, tôi cần phải thực hiện thay đổi bằng cách sử dụng các mẫu trong repo và bây giờ là trên máy từ xa. – trajan

+0

Có nhưng tại sao Ansible không thể kéo repo của bạn cục bộ cũng như nhân bản nó trên máy chủ đích? Sau đó, nó có thể sử dụng chức năng mẫu. Cách khác của bạn là sử dụng 'fetch' để kéo mẫu trở lại từ máy chủ nhưng nó cảm thấy giống như một phương thức kém sạch hơn đối với tôi. – ydaetskcoR

Trả lời

13

Bạn có hai tùy chọn ở đây nếu mẫu của bạn sắp có trên máy chủ từ xa.

Thứ nhất, bạn có thể sử dụng mô-đun fetch hoạt động như đối diện với mô-đun copy để đưa mẫu trở lại sau khi nhân bản repo trên máy chủ từ xa.

Một playbook cho điều này có thể giống như thế:

- name : clone repo on remote hosts 
    git : 
    repo : {{ git_repo_src }} 
    dest : {{ git_repo_dest }} 

- name  : fetch template from single remote host 
    run_once : true 
    fetch : 
    src    : {{ template_path }}/{{ template_file }} 
    dest   : /tmp/{{ template_file }} 
    flat   : yes 
    fail_on_missing : yes 

- name  : template remote hosts 
    template : 
    src : /tmp/{{ template_file }} 
    dest : {{ templated_file_dest }} 
    owner : {{ templated_file_owner }} 
    group : {{ templated_file_group }} 
    mode : {{ templated_file_mode }} 

Các lấy nhiệm vụ sử dụng run_once để đảm bảo rằng nó chỉ làm phiền sao chép các mẫu từ các máy chủ đầu tiên nó chạy chống lại. Giả sử tất cả các máy chủ này trong trò chơi của bạn đều nhận được cùng một repo thì điều này sẽ ổn nhưng nếu bạn cần đảm bảo rằng nó được sao chép từ một máy chủ rất cụ thể thì bạn có thể kết hợp nó với delegate_to.

Hoặc bạn chỉ có thể có Ansible bản sao repo địa phương và sử dụng nó trực tiếp với một cái gì đó như:

- name : clone repo on remote hosts 
    git : 
    repo : {{ git_repo_src }} 
    dest : {{ git_repo_dest }} 

- name  : clone repo on Ansible host 
    hosts  : localhost 
    connection : local 
    git : 
    repo : {{ git_repo_src }} 
    dest : {{ git_repo_local_dest }} 

- name  : template remote hosts 
    template : 
    src : {{ template_local_src }} 
    dest : {{ templated_file_dest }} 
    owner : {{ templated_file_owner }} 
    group : {{ templated_file_group }} 
    mode : {{ templated_file_mode }} 
+0

Hoàn hảo! Tùy chọn thứ nhất hoạt động tốt cho trường hợp sử dụng của tôi. – trajan

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