Yeah basically - it's Jinja2 templated down to a string, losing any type info.
On Mon, Sep 29, 2014 at 9:25 AM, Matt Hughes <[email protected]> wrote: > Ah, so = does an implicit 'toString' on the variable I presume? > > > On Saturday, September 27, 2014 9:39:24 AM UTC-4, Michael DeHaan wrote: >> >> 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/ste >>>>>>>>>>> ven/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/ste >>>>>>>>>>> ven/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/to >>>>>> pic/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%3Dqh0hG >>>>>> uVum06L4S0Fxpj%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/CAMFyvFjo8WQMeciaKdFOZuwCP5SZ7 >>> ojHAAy8%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/b9e18518-8235-4961-ba86-aa772f74198e%40googlegroups.com > <https://groups.google.com/d/msgid/ansible-project/b9e18518-8235-4961-ba86-aa772f74198e%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/CA%2BnsWgz77-DwX6PNUUow2Ba12vqLoCwLKqSnk8ZmRtsZwvaJwA%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
