Назад | Перейти на главную страницу

Как я могу выполнять действия с каждым файлом в определенном месте с помощью Ansible?

Я создаю playbooks для развертывания приложения Windows, для которого требуются некоторые предварительные условия (среда выполнения Visual C ++ и платформа dotNet), которые должны быть установлены до самого приложения. Эти предварительные требования представляют собой файлы .EXE, и все они содержатся в определенной папке.

Я хочу создать сборник воспроизведения Ansible, который (среди прочего) будет выполнять каждый из файлов .EXE в папке необходимых компонентов с параметрами «/ install / passive».

Я не хочу указывать каждое имя файла в моей книге.

Моя идея заключалась в том, чтобы сначала найти файлы установки предварительных условий с помощью модуля «win_file», присвоить результат переменной, и они перебирают переменную и запускают модуль «win_command» для каждого содержащегося в нем файла.

К сожалению, я не могу присвоить результат win_find переменной с помощью оператора register, он просто ничего не делает.

Вот что я пробовал:

- hosts: "{{ target }}"

  tasks:

  - name: Find files in path
    win_find:
      register: myvar
      paths: E:\Temp\Prognosis_11.2\Prerequisites

  - name: debug
    debug:
      msg: "{{ myvar }}"

И вывод playbook при запуске с -v (подробный режим):

ЗАДАЧА [Найти файлы в пути] ****************************************** ************************************************* ************************************************* ***********

ok: [SMN001] => {"изменено": false, "изучено": 5, "файлы": [{"атрибуты": "Архив", "контрольная сумма": "3049a85843eaf65e89e2336d5fe6e85e416797be", "время создания": 1550942958.6690862, "расширение ":" .exe "," filename ":" NDP46-KB3045557-x86-x64-AllOS-ENU.exe "," isarchive ": true," isdir ": false," ishidden ": false," islnk ": false , "isreadonly": false, "isshared": false, "lastaccesstime": 1550942958.6690862, "lastwritetime": 1459427148, "owner": "BUILTIN \ Administrators", "path": "E: \ Temp \ Prognosis_11.2 \ Prerequisites \ NDP46-KB3045557-x86-x64-AllOS-ENU.exe "," размер ": 65444688}, {" атрибуты ":" Архив "," контрольная сумма ":" 8bf41ba9eef02d30635a10433817dbb6886da5a2 "," время создания ": 15509423958.7627 ".exe", "filename": "vcredist2013_x64.exe", "isarchive": true, "isdir": false, "ishidden": false, "islnk": false, "isreadonly": false, "isshared": false , "lastaccesstime": 1550942958.7627323, "lastwritetime": 1489501866, "owner": "BUILTIN \ Administrators", "path": "E: \ Temp \ Prognosis_11.2 \ Prerequisite" s \ vcredist2013_x64.exe "," размер ": 7194312}, {" атрибуты ":" Архив "," контрольная сумма ":" df7f0a73bfa077e483e51bfb97f5e2eceedfb6a3 "," время создания ": 1550942958.7779777," расширение ":" имя файла ". «vcredist2013_x86.exe», «isarchive»: true, «isdir»: false, «ishidden»: false, «islnk»: false, «isreadonly»: false, «isshared»: false, «lastaccesstime»: 1550942958.7779777, «lastwritetime» ": 1489501866," владелец ":" ВСТРОЙКА \ Администраторы "," путь ":" E: \ Temp \ Prognosis_11.2 \ Prerequisites \ vcredist2013_x86.exe "," размер ": 6503984}, {" атрибуты ":" Архив " , «контрольная сумма»: «007064d974a55940838f19cd0b0e3aaf27ca06a7», «creationtime»: 1550942958.7939014, «extension»: «.exe», «filename»: «vcredist2017_x64.exe», «isarchive»: true, «isdir ish»: false, false, «islnk»: false, «isreadonly»: false, «isshared»: false, «lastaccesstime»: 1550942958.7939014, «lastwritetime»: 1488965662, «owner»: «BUILTIN \ Administrators», «path»: «E: \ Temp \ Prognosis_11.2 \ Prerequisites \ vcredist2017_x64.exe "," размер ": 15261400}, {" атрибут utes ":" Архив "," контрольная сумма ":" ba1f7e7cace62f7c55ab948cd3b29acc4e8e2329 "," creationtime ": 1550942958.8406758," extension ":" .exe "," filename ":" vcredist2017_x86.exe "," isarchive ": true false, «ishidden»: false, «ishidden»: false, «isreadonly»: false, «isshared»: false, «lastaccesstime»: 1550942958.8406758, «lastwritetime»: 1488965662, «owner»: «BUILTIN \ Administrators», «путь» ":" E: \ Temp \ Prognosis_11.2 \ Prerequisites \ vcredist2017_x86.exe "," size ": 14401656}]," matched ": 5}

ЗАДАЧА [отладка] ********************************************* ************************************************* ************************************************* *********************

фатальный: [SMN001]: НЕ ВЫПОЛНЕНО! => {"msg": "Задача включает параметр с неопределенной переменной. Ошибка была: 'myvar' is undefined \ n \ nОшибка, по-видимому, была в '/etc/ansible/playbooks/test_find_files.yaml': строка 18, столбец 5, но может \ n быть где-нибудь в файле в зависимости от точной синтаксической проблемы. \ n \ nСтрока с нарушением выглядит так: \ n \ n \ n - name: debug \ n ^ here \ n "}

Как видите, файлы найдены правильно, но переменная myvar не существует, хотя она должна была быть назначена.

Согласно этой странице, эта логика действительно работает на хостах Linux: http://www.mydailytutorials.com/using-ansible-find-module-search-filesfolder/ (см. «Сохранение имен файлов в реестре» внизу страницы).

Может быть проблема в самом модуле win_find? Есть предположения?

Спасибо!

Это просто опечатка, твоя register: слишком глубокий отступ.

Он должен выглядеть так:

  - name: Find files in path
    win_find:
      paths: E:\Temp\Prognosis_11.2\Prerequisites
    register: myvar