Может ли кто-нибудь пролить свет на то, как нижеследующее может быть достигнуто с помощью ansible:
В настоящее время я рекурсивно ищу файл с помощью модуля win_find (это окно Windows):
- win_find:
paths:
- C:\Apps
patterns: [ 'specific.file' ]
recurse: yes
register: apps_found
Это дает следующий список:
"apps_found": {
"changed": false,
"examined": 785,
"failed": false,
"files": [
{
"attributes": "Archive",
"checksum": "67a43ebf47567ba43a29573a28479180392168d5",
"creationtime": 1560515765.3164558,
"extension": ".file",
"filename": "specific.file",
"isarchive": true,
"isdir": false,
"ishidden": false,
"islnk": false,
"isreadonly": false,
"isshared": false,
"lastaccesstime": 1560515765.2705016,
"lastwritetime": 1560515765.2944584,
"owner": "BUILTIN\\Administrators",
"path": "C:\\Apps\\App1\\specific.file",
"size": 247
},
{
"attributes": "Archive",
"checksum": "64dea9b49819fa4eee34dce52d2dc589a6f9667b",
"creationtime": 1560769272.8943222,
"extension": ".file",
"filename": "specific.file",
"isarchive": true,
"isdir": false,
"ishidden": false,
"islnk": false,
"isreadonly": false,
"isshared": false,
"lastaccesstime": 1560769272.847435,
"lastwritetime": 1560769272.8788242,
"owner": "BUILTIN\\Administrators",
"path": "C:\\Apps\\App2\\specific.file",
"size": 246
}
],
"matched": 2
}
Что я хочу сделать:
Для каждого найденного файла, пары ключ / значение «путь», мне нужно проанализировать имя подпапки (в данном случае App1, App2) и отобразить его вместе с содержимым файла specific.file.
Так что в конце моя playbook выдаст такое сообщение, как:
«найдено приложение app1 с содержимым:» «распечатать содержимое файла».
Как это легко сделать в Ansible? Большое спасибо заранее.
У меня нет компьютера с Windows для тестирования, поэтому я кратко проверил приведенное ниже решение в отношении вашей текущей структуры данных и некоторых тестов, которые я провел на моем локальном хосте Linux.
Чтобы выполнить ваше требование, я сначала использовал json_query
фильтр чтобы извлечь пути из вашего результата. Это используется как вход петли в slurp
модуль чтобы получить представление base64 каждого файла в зарегистрированной переменной.
Наконец, я использовал комбинацию win_dirname
и win_basename
фильтры для извлечения имени вашего приложения в последнем цикле отладки.
Вот последний пример учебника (не полностью протестирован, как рекомендовано выше):
---
- name: Show found app files
hosts: whatever_group
tasks:
- name: Look for files on host
win_find:
paths:
- C:\Apps
patterns: [ 'specific.file' ]
recurse: yes
register: apps_found
- name: Get the content of found files from host
slurp:
src: "{{ item }}"
loop: "{{ apps_found | json_query('files[].path') }}"
register: slurped_files
- name: Display result
debug:
msg: "Found application {{ item.item | win_dirname | win_basename }} with contents: {{ item.content | b64decode }}"
loop: "{{ slurped_files.results }}"