2017-01-23 16 views
0

Я пытаюсь оценить значение переменной role_path, чтобы использовать ее в других ролях в качестве контрольной точки. Проблема в том, что, когда моя переменная используется в другой роли, она имеет значение другой роли, а не того, когда она была объявлена.Ansible - как оценить переменную role_path

Я обойду это с помощью команды echo значения текущей переменной и регистрации вывода в соответствии с ниже.

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

Это лучший способ сделать это или есть более красноречивое решение?

+0

@techraf - переменная 'role_path', а не' role_path'. В конце роли слова нет 's'. В то время как 'role_path' предоставляет список,' role_path' предоставляет только путь текущей роли. –

+0

@techraf Я прошу отличия - тогда как 'role_path' дает список,' role_path' дает только путь текущей роли. –

+0

Я голосую, чтобы закрыть этот вопрос как не относящийся к теме, потому что «как улучшить рабочий код» - запросы не относятся к теме в StackOverflow и должны быть опубликованы в обзоре кода SE – techraf

ответ

5

Вы можете безопасно использовать set_fact. Переменные (факт), назначенные через set_fact, оцениваются во время выполнения задачи. Термоусадочная код только одну задачу:

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

Нанести эту роль в первом, и вы получите ansible_base_path факт неизменным на протяжении всего исполнения PlayBook.

+1

благодарю за это, был мозг угасать! –