К сожалению, нет текущего API, который бы позволил нам работать с тонами докеров. На данный момент, если мне нужно скопировать данные в объем докеров (NB: не докер container) Я должен сначала убедиться, что какой-то контейнер может получить доступ к тому, а затем использовать доступный для запуска docker cp
. Но для таких задач не может быть даже докеров, у которых установлен объем. Это не идемпотент. Это исключает подавляющее большинство типичных API-интерфейсов. Это усложняет процесс, добавляя много дополнительных шагов. Это не вопрос. Что делать, если мы могли бы просто найти точки монтирования для каждого тома, который нам интересен, а затем напрямую поговорить с файловой системой хоста?Поиск точек монтирования томов для списка тонов докеров в незаменимом
Итак, скажем, у нас есть список имен некоторых объемов докеров, которые мы будем использовать. Для каждого элемента в списке мы хотели бы его осмотреть с помощью демона докеров, а затем использовать ansible, чтобы установить факт о его точке монтирования. Это то, что я до сих пор:
- name: Get docker volume information
command: "docker volume inspect {{ item }}"
register: output
with_items: "{{ volumes }}"
NB: Команда возвращает что-то вроде этого:
[
{
"Name": "docker_sites-enabled",
"Driver": "local",
"Mountpoint": "/var/lib/docker/volumes/docker_sites-enabled/_data",
"Labels": null,
"Scope": "local"
}
]
Playbook продолжает:
- name: Set volume facts
set_fact:
"{{ item.stdout|from_json|json_query('Name') }}": "{{ item.stdout|from_json|json_query('Mountpoint') }}"
with_items: "{{ output.results }}"
- name: The following facts are now set
debug:
var: "{{ item }}"
with_items:
- "{{ volumes }}"
Однако, это не работает, как я ожидал это как отчет о необратимых сообщениях "The variable name '' is not valid. Variables must start with a letter or underscore character, and contain only letters, numbers and underscores.
Вероятно, из-за синтаксиса фильтра запросов JSON, который я использую, но я не могу найти никакой документации о том, как я должен должен использовать его.
Вместо «* что-то вроде этого *» вы можете показать ** точно **, что находится в переменной 'output'? Вы знаете, как использовать модуль 'debug' ... – techraf
И какова ценность' томов'? И какая задача терпит неудачу? Вы включили «Следующие факты теперь установлены» - я должен предположить, что это тот, который дает ошибку? Если предыдущая неудача, какова была цель включить последнюю в вопрос? – techraf