К сожалению, в настоящее время нет API, который позволил бы нам работать с томами докеров. На данный момент, если мне нужно скопировать данные в том докера (примечание: не в контейнер), я должен сначала убедиться, что какой-то контейнер может получить доступ к тому, а затем использовать ansible для запуска docker cp
. Но для такого рода задач может не быть даже докер-контейнеров с смонтированным томом. Это не идемпотент. Это запрещает подавляющее большинство замечательных API ansible. Это усложняет процесс, добавляя множество дополнительных шагов. Это не доступный способ. Что, если бы мы могли просто найти точки монтирования для каждого интересующего нас тома, а затем напрямую разговаривать с файловой системой хоста?
Итак, допустим, у нас есть список имен некоторых томов докеров, которые мы будем использовать. Для каждого элемента в списке мы хотели бы проверить его с помощью демона docker, а затем использовать 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"
}
]
Пособие продолжается:
- 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 }}"
Однако это не работает так, как я ожидал, поскольку это сообщение об ошибке ansible "The variable name '' is not valid. Variables must start with a letter or underscore character, and contain only letters, numbers and underscores.
Вероятно, это из-за синтаксиса используемого мной фильтра запросов JSON, но я не могу найти никакой документации о том, как я должен em> использовать его.
output
? Вы умеете пользоватьсяdebug
модулем ... - person techraf   schedule 07.02.2017volumes
? И какая задача не удается? Вы включилиThe following facts are now set
- я предполагаю, что это тот, который дает ошибку? Если предыдущий не прошел, с какой целью был включен последний в вопрос? - person techraf   schedule 07.02.2017