2017-08-24 3 views
0

Ich möchte das Modul synchronize von Ansible verwenden, um Dateien auf einem Remote-Server basierend auf einer Bedingung zu übertragen. Die Bedingung ist, dass das Verzeichnis und seine Inhalte auf dem Quellserver vorhanden sind.Ansible Bedingt synchronisieren, wenn das Verzeichnis existiert

Zum Beispiel:

Erstes Spiel, prüfen Sie, ob das Verzeichnis auf dem lokalen Host existiert:

hosts: localhost 
stat: 
    path: some/path/to/dir/ 
register: st 

Dann, im zweiten Spiel, verwenden Sie diese Variable in einer when Anweisung bedingt das synchronize Modul zu verwenden :

hosts: remote_hosts 
synchronize: 
    src: some/path/to/dir/ 
    dest: some/dest/path 
when: st.stat.isdir is defined 

Mein Problem ist, dass die st Variable nicht zwischen Spielen verwendet werden können, so wie kann ich o Führen Sie den Task synchronize nur aus, wenn das Verzeichnis vorhanden ist.

Ich würde sie in das gleiche Spiel setzen, aber sie verwenden verschiedene Hosts, wie Sie sehen können.

Meine ansible Version 2.3.1.0

Antwort

1

Sie ein paar Optionen. Sie können den localhost-Task in Ihre Wiedergabe mit remote_users setzen und delegate_to: localhost verwenden.

stat: 
    path: some/path/to/dir/ 
register: st 
delegate_to: localhost 

Oder Sie können die localhost Spiel halten wie und Variablen des Referenzlocalhost hostvars in den remote_hosts mit spielen.

hosts: remote_hosts 
synchronize: 
    src: some/path/to/dir/ 
    dest: some/dest/path 
when: hostvars['localhost']['st'].stat.isdir is defined 
+0

Danke für die Bereitstellung mehrerer Ansätze; Ich habe diese Methoden nirgends gesehen. Ich war dabei, etwas wie https://stackoverflow.com/questions/33348077/how-to-conditional-execute-group-of-tasks-on-ansible zu versuchen, aber deins ist so viel prägnanter –

Verwandte Themen