2015-10-16 15 views
9

Mam szablony plików konfiguracyjnych przechowywane w repozytoriach mojego projektu. Chciałbym użyć modułu szablonu Ansible do utworzenia pliku konfiguracyjnego z użyciem tego szablonu na serwerze zdalnym po sklonowaniu projektu z repozytorium.Szablony zdalnego wyświetlania odpowiedzi

Przeglądając dokumentację modułu wydaje się, że atrybut src obsługuje tylko pliki lokalne.

Chciałem uniknąć przechowywania szablonu konfiguracji za pomocą mojego skryptu Ansible, ponieważ bardziej sensowne jest dla mnie przechowywanie tych szablonów w repozytorium projektu.

Czy istnieje alternatywa dla modułu szablonu, którego mogę użyć?

+1

Dlaczego nie pozwolić ansibl pociągnąć drugą repo, jak również? – ydaetskcoR

+0

Odpowiedzi klonuje repo do zdalnego serwera. Po sklonowaniu muszę dokonać zmian za pomocą szablonu, który był w repozytorium i jest teraz na zdalnym komputerze. – trajan

+0

Tak, ale dlaczego funkcja Reakcji nie może lokalnie pobierać repozytorium, a także klonować je na docelowym hoście? Następnie może użyć funkcji szablonu. Alternatywą jest użycie 'fetch', aby pobrać szablon z hosta, ale wydaje mi się to mniejszą metodą. – ydaetskcoR

Odpowiedz

13

Masz dwie opcje tutaj, jeśli szablon będzie na zdalnym hoście.

Po pierwsze, można użyć modułu fetch, który działa podobnie do modułu copy, aby przywrócić szablon po klonowaniu repo na zdalnym hoście.

playbook za to może wyglądać:

- 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 }} 

FETCH zadanie wykorzystuje run_once, aby upewnić się, że to tylko przeszkadza kopiowanie szablonu z pierwszego hosta to działa przeciw. Zakładając, że wszystkie te hosty w twojej grze mają takie samo repo, to powinno być dobrze, ale jeśli musisz upewnić się, że skopiowałeś je z bardzo konkretnego hosta, możesz połączyć go z delegate_to.

Alternatywnie można po prostu mieć ansibl sklonować repo lokalnie i używać go bezpośrednio z czymś takim:

- 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

Idealnie! Pierwsza opcja działa dobrze w moim przypadku użycia. – trajan