So I actually got this working.  It think some of my confusion comes from 
how to specify 'list' variables.  The docker module, says the 'volumes' 
parameter was a 'list'.  Being new to Ansible and with no volumes example, 
I dug around a bit.  EC2 module has a 'list' var of instance-ids and this 
example:

vars:
    instance_ids:
      - 'i-xxxxxx'
      - 'i-xxxxxx'
      - 'i-xxxxxx'
    region: us-east-1
  tasks:
    - name: Start the sandbox instances
      local_action:
        module: ec2
        instance_ids: '{{ instance_ids }}'

So I tried to copy that with docker:

  vars: 
    theVolumes:
      - '/etc/foo:/foo'
      - '/etc/bar:/bar'
  tasks:
    - name: run bash
      docker: 
        image=centos
        volumes='{{ theVolumes }}'
        state=running
        stdin_open=yes tty=yes
        command=/bin/bash

But docker client does not like that.

<96.119.0.167> REMOTE_MODULE docker image=centos volumes='['/etc/foo:/foo', 
> '/etc/bar:/boo']' state=running stdin_open=yes tty=yes command=/bin/bash
> msg: Docker API error: Cannot start container 
> 35fb847fdc84ff5bcbdce19b9a443a4eb86de5018d96fd620ca22dcb7dc4f3b0:  /etc/bar 
> must be an absolute path
>

Despite the fact that it appears to have parse the volumes correctly, I get 
the absolute path error seen above.  If I change the command to:

  tasks:
    - name: run bash
      docker: 
        image=centos
        volumes='/etc/foo:foo,/etc/bar:bar'
        state=running
        stdin_open=yes tty=yes
        command=/bin/bash



My guess is that this works with ec2 because that's running locally, but 
docker has to serialize the list to the server?  I think my other issues 
were red-herrings and I was getting confused reading the code.  How does 
the docker module know that a string with commas in it is a list?

        if self.module.params.get('volumes'):
            self.binds = {}
            self.volumes = {}
            vols = self.module.params.get('volumes')
            for vol in vols:


Is the fact that it is annotated a 'list' in the module spec (volumes= 
dict(default=None, type='list')) make Ansible 'pre-parse' that String into 
a List?  Should the user really have to change how they specify a list 
based on whether it is executed locally or remotely?  I am able to use var 
if I do this:

  vars: 
    theVolumes:
      - '/etc/foo:/foo'
      - '/etc/bar:/bar'
  tasks:
    - name: run bash
      docker: 
        image=centos
        volumes={{ theVolumes | join(',') }}
        state=running
        stdin_open=yes tty=yes
        command=/bin/bash



But IMO if their is Ansible magic with lists going on, it should do that 
already.


On Tuesday, September 9, 2014 12:43:38 PM UTC-4, Michael DeHaan wrote:
>
> Ok can you please file a ticket on this one so we can investigate?
>
> Thanks!
>
> On Mon, Sep 8, 2014 at 5:44 PM, Matt Hughes <hughe...@gmail.com 
> <javascript:>> wrote:
>
>> [clduser@docker-registry ~]$ sudo docker -v
>> Docker version 1.1.2, build d84a070/1.1.2
>>
>> [clduser@docker-registry ~]$ pip list | grep docker
>> docker-py (0.4.0)
>>
>> Using the latest ‘devel’ branch of Ansible.  Just repulled now and still 
>> experiencing this as of commit c610783f900586b170a6dfa3a02696f568a11728.
>>
>>
>> On September 8, 2014 at 5:41:18 PM, Michael DeHaan (mic...@ansible.com 
>> <javascript:>) wrote:
>>
>> Can you share the version of Ansible, docker-py, and Docker being used in 
>> this case? 
>>
>> Thanks!
>>
>>
>>  
>> On Mon, Sep 8, 2014 at 12:09 PM, Matt Hughes <hughe...@gmail.com 
>> <javascript:>> wrote:
>>
>>> Volumes also don't appear to be working for me either.  I can start the 
>>> container, but the mounted volume is always empty inside the container, 
>>> despite the host having two volumes.  As the original poster says, if I 
>>> just use the docker command directly, the volume mount works as expected.
>>>
>>> - name: Start Registry
>>>   docker: image={{docker_image}} state=running 
>>> volumes="/etc/docker-registry/keys:/etc/docker-registry/keys" name=registry
>>>
>>> See anything wrong?
>>>
>>> On Tuesday, August 26, 2014 8:27:59 PM UTC-4, James Cammarata wrote: 
>>>>
>>>> I merged in support for specifying :ro/:rw a few weeks ago, and it was 
>>>> included in the 1.7.1 release.
>>>>
>>>>
>>>>  On Tue, Aug 26, 2014 at 2:26 PM, Steven Truong <djatl...@gmail.com> 
>>>> wrote:
>>>>  
>>>>>   TASK: [echo $myhome] 
>>>>> ********************************************************** 
>>>>> ok: [localhost] => {
>>>>>     "myhome": {
>>>>>         "changed": true, 
>>>>>         "cmd": "echo $HOME", 
>>>>>         "delta": "0:00:00.165168", 
>>>>>         "end": "2014-08-26 19:22:36.055947", 
>>>>>         "invocation": {
>>>>>             "module_args": "echo $HOME", 
>>>>>             "module_name": "shell"
>>>>>         }, 
>>>>>         "rc": 0, 
>>>>>         "start": "2014-08-26 19:22:35.890779", 
>>>>>         "stderr": "", 
>>>>>         "stdout": "/root", 
>>>>>         "stdout_lines": [
>>>>>             "/root"
>>>>>         ]
>>>>>     }
>>>>> }
>>>>>
>>>>>
>>>>> I removed :rw and :ro and it still did not work. I think that Ansible 
>>>>> does not support these third fields yet.
>>>>>
>>>>> Steven.
>>>>>
>>>>> On Tuesday, August 26, 2014 12:16:30 PM UTC-7, James Cammarata wrote:
>>>>>
>>>>>>  If you remove the variables and hard-code the paths, does it work 
>>>>>> for you then? I'm curious if things like spaces/newlines in the stdout 
>>>>>> variables you're using are causing the problem. 
>>>>>>
>>>>>> You might want to put in a "- debug: var=myhome" before the docker 
>>>>>> task to view the value of stdout there.
>>>>>>  
>>>>>>
>>>>>>  On Tue, Aug 26, 2014 at 2:05 PM, Steven Truong <djatl...@gmail.com> 
>>>>>> wrote:
>>>>>>  
>>>>>>>   Hi all,
>>>>>>>
>>>>>>> I tried to use the volumes option and nothing seems to work for me.
>>>>>>>   
>>>>>>> I want to mount 2 directories ~/dockerstorage/model and 
>>>>>>> ~/repo/ops/ansible to the container and I used either of these commands 
>>>>>>> and 
>>>>>>> nothing worked.
>>>>>>>
>>>>>>>   docker: image=registry.my.com:5000/steven/centos65_prod_ready:v1 
>>>>>>> docker_url=tcp://{{ ansible_default_ipv4.address }}:7777 
>>>>>>> publish_all_ports=True state=running volumes=/home/kafka/models:{{ 
>>>>>>> myhome.stdout }}/dockerstorage/models:rw,/usr/local/src/ansible:{{ 
>>>>>>> myhome.stdout }}/repo/ops/ansible:ro   
>>>>>>>
>>>>>>>  docker: image=registry.my.com:5000/steven/centos65_prod_ready:v1 
>>>>>>> docker_url=tcp://{{ ansible_default_ipv4.address }}:7777 
>>>>>>> publish_all_ports=True state=running volumes={{ myhome.stdout 
>>>>>>> }}/dockerstorage/models:/home/kafka/models:rw,{{ myhome.stdout 
>>>>>>> }}/repo/ops/ansible:/usr/local/src/ansible:ro
>>>>>>>  
>>>>>>> I sshed into the containers and the mounted points in either case 
>>>>>>> were all empty.
>>>>>>>
>>>>>>> I ran using docker directly and it worked for me:
>>>>>>>  
>>>>>>>
>>>>>>>  
>>>>>>>  docker run -d -P  -v 
>>>>>>> /home/steven/dockerstorage/models:/home/kafka/models:rw -v 
>>>>>>> /home/steven/repo/ops/ansible:/usr/local/src/ansible:ro 
>>>>>>> registry.my.com:5000/steven/centos65_prod_ready:v1
>>>>>>>
>>>>>>>
>>>>>>>  
>>>>>>>  
>>>>>>> Please let me know what is the right ways to use "volumes" for 
>>>>>>> docker.  From the comments in the docker module, it appears to me that 
>>>>>>> the 
>>>>>>> /mnt:/tmp is in reversed orders from those of the docker command line 
>>>>>>> because of the case when we just want to create a volume such as /mnt 
>>>>>>> and 
>>>>>>> there is no equivalent mounted point from the host.  I think that this 
>>>>>>> is 
>>>>>>> confusing and users have to read the codes to find out.
>>>>>>>
>>>>>>> Thanks,
>>>>>>> Steven.
>>>>>>>
>>>>>>> [root@sc2-dock1 cloud]# pwd
>>>>>>> /usr/local/ansible/library/cloud
>>>>>>>
>>>>>>>
>>>>>>>  class DockerManager:
>>>>>>>
>>>>>>>     counters = {'created':0, 'started':0, 'stopped':0, 'killed':0, 
>>>>>>> 'removed':0, 'restarted':0, 'pull':0}
>>>>>>>
>>>>>>>     def __init__(self, module):
>>>>>>>         self.module = module  
>>>>>>>
>>>>>>>         self.binds = None
>>>>>>>         self.volumes = None
>>>>>>>         if self.module.params.get('volumes'):
>>>>>>>             self.binds = {}
>>>>>>>             self.volumes = {}
>>>>>>>             vols = self.module.params.get('volumes')
>>>>>>>             for vol in vols:
>>>>>>>                 parts = vol.split(":")
>>>>>>>                 # host mount (e.g. /mnt:/tmp, bind mounts host's 
>>>>>>> /tmp to /mnt in the container)
>>>>>>>                 if len(parts) == 2:
>>>>>>>                     self.volumes[parts[1]] = {}
>>>>>>>                     self.binds[parts[0]] = parts[1]
>>>>>>>                 # docker mount (e.g. /www, mounts a docker volume 
>>>>>>> /www on the container at the same location)
>>>>>>>                 else:
>>>>>>>                     self.volumes[parts[0]] = {}
>>>>>>>
>>>>>>>  
>>>>>>>
>>>>>>>   --
>>>>>>> You received this message because you are subscribed to the Google 
>>>>>>> Groups "Ansible Project" group.
>>>>>>>  To unsubscribe from this group and stop receiving emails from it, 
>>>>>>> send an email to ansible-proje...@googlegroups.com.
>>>>>>> To post to this group, send email to ansible...@googlegroups.com. 
>>>>>>>
>>>>>>> To view this discussion on the web visit 
>>>>>>> https://groups.google.com/d/msgid/ansible-project/40310529-7426-4321-b9a6-20a9f73d9005%40googlegroups.com
>>>>>>>  
>>>>>>> <https://groups.google.com/d/msgid/ansible-project/40310529-7426-4321-b9a6-20a9f73d9005%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>>> .
>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>
>>>>>>  
>>>>>>  --
>>>>> You received this message because you are subscribed to the Google 
>>>>> Groups "Ansible Project" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>>> an email to ansible-proje...@googlegroups.com.
>>>>> To post to this group, send email to ansible...@googlegroups.com.
>>>>>  To view this discussion on the web visit 
>>>>> https://groups.google.com/d/msgid/ansible-project/5f1b7eb9-d3b1-4907-b01f-ae291f16b636%40googlegroups.com
>>>>>  
>>>>> <https://groups.google.com/d/msgid/ansible-project/5f1b7eb9-d3b1-4907-b01f-ae291f16b636%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>> . 
>>>>>
>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>  
>>>>  
>>>>  --
>>> You received this message because you are subscribed to the Google 
>>> Groups "Ansible Project" group.
>>> To unsubscribe from this group and stop receiving emails from it, send 
>>> an email to ansible-proje...@googlegroups.com <javascript:>.
>>> To post to this group, send email to ansible...@googlegroups.com 
>>> <javascript:>.
>>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/ansible-project/b1f989cf-6b9b-4e6c-972c-861b72fa1da6%40googlegroups.com
>>>  
>>> <https://groups.google.com/d/msgid/ansible-project/b1f989cf-6b9b-4e6c-972c-861b72fa1da6%40googlegroups.com?utm_medium=email&utm_source=footer>.
>>>  
>>>
>>>
>>> For more options, visit https://groups.google.com/d/optout.
>>>  
>>  
>> --
>> You received this message because you are subscribed to a topic in the 
>> Google Groups "Ansible Project" group.
>> To unsubscribe from this topic, visit 
>> https://groups.google.com/d/topic/ansible-project/tjBFAN1Qc7w/unsubscribe
>> .
>> To unsubscribe from this group and all its topics, send an email to 
>> ansible-proje...@googlegroups.com <javascript:>.
>> To post to this group, send email to ansible...@googlegroups.com 
>> <javascript:>.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/ansible-project/CA%2BnsWgzkekA9EK%2BOQzUGQ2P0EvE%3Dqh0hGuVum06L4S0Fxpj%2B1Q%40mail.gmail.com
>>  
>> <https://groups.google.com/d/msgid/ansible-project/CA%2BnsWgzkekA9EK%2BOQzUGQ2P0EvE%3Dqh0hGuVum06L4S0Fxpj%2B1Q%40mail.gmail.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>>  -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Ansible Project" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to ansible-proje...@googlegroups.com <javascript:>.
>> To post to this group, send email to ansible...@googlegroups.com 
>> <javascript:>.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/ansible-project/etPan.540e2353.836c40e.1a8%40Matthews-MacBook-Pro.local
>>  
>> <https://groups.google.com/d/msgid/ansible-project/etPan.540e2353.836c40e.1a8%40Matthews-MacBook-Pro.local?utm_medium=email&utm_source=footer>
>> .
>>
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to ansible-project+unsubscr...@googlegroups.com.
To post to this group, send email to ansible-project@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/9c9fc37d-fa1e-490a-8d35-2f1f2a84f5f4%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to