2017-02-07 15 views
0

К сожалению, нет текущего 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, который я использую, но я не могу найти никакой документации о том, как я должен должен использовать его.

+0

Вместо «* что-то вроде этого *» вы можете показать ** точно **, что находится в переменной 'output'? Вы знаете, как использовать модуль 'debug' ... – techraf

+0

И какова ценность' томов'? И какая задача терпит неудачу? Вы включили «Следующие факты теперь установлены» - я должен предположить, что это тот, который дает ошибку? Если предыдущая неудача, какова была цель включить последнюю в вопрос? – techraf

ответ

1

Не знаете, почему вы хотите генерировать переменные уровня корня для каждого тома.

Вы можете сделать так:

- hosts: docker_host 
    become: true 
    gather_facts: false 
    vars: 
    volumes: 
     - vol1 
     - vol2 
     - vol4 
    tasks: 
    - shell: docker volume inspect {{ volumes | join(' ') }} 
     register: vlm_res 

    - set_fact: mountpoints={{ dict(vlm_res.stdout | from_json | json_query('[].[Name,Mountpoint]')) }} 

    - debug: var=mountpoints['vol2'] 

mountpoints является ДИКТ, так что мы можем получить доступ к mountpoints['vol2'] для доступа vol2 «s точек монтирования.

+0

Да, строго говоря, необходимость в том, чтобы переменные были корневыми. Спасибо за ответ! –

 Смежные вопросы

  • Нет связанных вопросов^_^