2017-01-23 4 views
0

Ich versuche, den Wert der role_path Variable zu bewerten, um es in anderen Rollen als Referenzpunkt zu verwenden. Das Problem ist jedoch, wenn meine Variable in einer anderen Rolle verwendet wird, hat sie den Wert der anderen Rolle und nicht, wann sie deklariert wurde.Ansible - wie role_path Variable auszuwerten

Ich komme um dies mit einem echo Befehl der aktuellen Variablen Wert und Registrierung der Ausgabe wie folgt.

- name: get ansible base path from current role_path 
    command: echo {{ role_path }}/../../ 
    register: ansible_base_path_out 

- name: save ansible base path variable for future use 
    set_fact: 
    ansible_base_path: "{{ ansible_base_path_out.stdout }}" 

Ist dies der beste Weg dies zu tun oder gibt es eine eloquentere Lösung?

+0

@techraf - die Variable ist 'role_path', nicht' roles_path'. Es gibt kein 's' am Ende der Wortrolle. Während 'roles_path' eine Liste gibt, gibt' role_path' nur den Pfad der aktuellen Rolle. –

+0

@techraf Ich bin anderer Meinung - während 'roles_path' eine Liste gibt, gibt' role_path' nur den Pfad der aktuellen Rolle an. –

+0

Ich stimme ab, diese Frage als Off-Topic zu schließen, weil "wie man einen Arbeitscode verbessert" -Fragen sind Off-Topic auf StackOverflow und sollten stattdessen in Code Review SE – techraf

Antwort

5

Sie können sicher set_fact verwenden. Variablen (Fakt), die über set_fact zugewiesen sind, werden während der Ausführungszeit der Task ausgewertet. Shrink Ihren Code nur eine Aufgabe:

- name: save ansible base path variable for future use 
    set_fact: 
    ansible_base_path: "{{ role_path }}/../../" 

diese Rolle Nehmen auf den ersten, und Sie werden ansible_base_path Tatsache unverändert im gesamten gesamten Textbuch Ausführung erhalten.

+1

Dank dafür, hatte ein Gehirn verblassen! –