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 <[email protected] 
> <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 ([email protected] 
>> <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 <[email protected] 
>> <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 <[email protected]> 
>>>> 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 <[email protected]> 
>>>>>> 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 [email protected].
>>>>>>> To post to this group, send email to [email protected]. 
>>>>>>>
>>>>>>> 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 [email protected].
>>>>> To post to this group, send email to [email protected].
>>>>>  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 [email protected] <javascript:>.
>>> To post to this group, send email to [email protected] 
>>> <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 
>> [email protected] <javascript:>.
>> To post to this group, send email to [email protected] 
>> <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 [email protected] <javascript:>.
>> To post to this group, send email to [email protected] 
>> <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 [email protected].
To post to this group, send email to [email protected].
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