The user does not have to change how they specify a list based on it being local or remote - that is not a thing in Ansible.
You do need to use the ":" form in the arguments though, any time you want to pass structured data to a module. On Fri, Sep 26, 2014 at 3:41 PM, James Cammarata <[email protected]> wrote: > @Matt - the issue you're seeing is due to the fact that your missing YAML > lists with the k=v syntax for modules. If you used the "complex arguments" > syntax for the module, you wouldn't have to do the join. For example: > > 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 > > should work without any issues. > > On Fri, Sep 12, 2014 at 8:08 AM, Matt Hughes <[email protected]> > wrote: > >> 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]> 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 c610783f900586b170a6dfa3a02696 >>>> f568a11728. >>>> >>>> >>>> On September 8, 2014 at 5:41:18 PM, Michael DeHaan ([email protected]) >>>> 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]> >>>> 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]. >>>>> 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/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]. >>>> 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/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]. >>>> 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/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 >> <https://groups.google.com/d/msgid/ansible-project/9c9fc37d-fa1e-490a-8d35-2f1f2a84f5f4%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/CAMFyvFjo8WQMeciaKdFOZuwCP5SZ7ojHAAy8%2BBCLMSTgmnw7Xg%40mail.gmail.com > <https://groups.google.com/d/msgid/ansible-project/CAMFyvFjo8WQMeciaKdFOZuwCP5SZ7ojHAAy8%2BBCLMSTgmnw7Xg%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]. 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/CA%2BnsWgwqpw9b8mz4-NDViuY05QO_B8c8-jwTfoWx2k%2BZ16oMSw%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
