Ansible: объявление переменных, доступных для всей игры, в разделе «задачи»

#ansible

#ansible

Вопрос:

Я пытаюсь объявить некоторые переменные на основе значения, возвращаемого задачей внутри игры. Это то, что у меня есть.

   tasks:
    - name: search for file
      find:
        paths: "{{path}}"
        patterns: "*{{pattern}}*"
        recurse: "yes"
        file_type: "file"
      register: result
      vars:
        file_path: result.files.0.path
        file_name: file_path.split("/")[-1]
        file_model: file_name.split("_")[0]
        file_version: file_name.split("_")[1]
    - debug:
        msg: "info: {{file_path}} : {{file_name}} : {{file_model}} : {{file_version}}"
 

Основываясь на ошибке неопределенной переменной, вызванной задачей отладки, я предполагаю, что переменные, объявленные в рамках задачи, ограничены этой конкретной задачей.

Если да, есть ли какой-либо способ объявить переменные, доступные для всей игры, в разделе «задачи»?

Ответ №1:

Попробуйте это

   tasks:
    - name: search for file
      find:
        paths: "{{ path }}"
        patterns: "*{{ pattern }}*"
        recurse: yes
        file_type: file
      register: result
    - set_fact:
        file_path: "{{ result.files.0.path }}"
        file_name: "{{ file_path.split('/')[-1] }}"
        file_model: "{{ file_name.split('_')[0] }}"
        file_version: "{{ file_name.split('_')[1] }}"
    - debug:
        msg: "info: {{ file_path }} :
                    {{ file_name }} :
                    {{ file_model }} :
                    {{ file_version }}"
 

Комментарии:

1. Они неизменны, правильно? Это означает, что я не мог затем установить одни и те же факты с разными значениями в последующей игре?