Agreed with James, dynamically adding hosts to groups is the way to go. I believe that the hosts: lines are evaluated before the playbook is run, so the only variables you can use there are ones set with -e vmname=something
On 20 January 2015 at 18:04, James Martin <[email protected]> wrote: See my original response. You'll need to use the add_host module to add {{ > vmname }} to the inventory if you want to use it on the next play. Also, > you playbook will be much cleaner if you use the URI module rather than > shelling out to curl. > > - James > > > On Tuesday, January 20, 2015 at 10:58:23 AM UTC-5, Piet83 wrote: >> >> --- >> - hosts: all >> >> pre_tasks: >> >> # Task creates a vm through an api. Register output with vm name >> - name: Create vm from emplate >> command: 'curl https://vm.example.nl/api/create' >> delegate_to: localhost >> register: vm >> >> # Filter out exact vm name >> - name: Define vm variable >> set_fact: vmname="{{ (vm.stdout.split(' ')[2]) | regex_replace('}, >> >> ,'') }}" >> delegate_to: localhost >> >> - name: Wait for running vm >> shell: 'curl https://vm.example.nl/api/{{ vmname }}' >> delegate_to: localhost >> register: result >> until: result.stdout.find("running") != -1 >> retries: 15 >> delay: 20 >> >> # This tasks makes sure the newly created vm is in the inventory file >> - name: Regenerate vm inventory >> shell: /scripts/generate_vm_invantory.sh >> delegate_to: localhost >> >> # Continue play on newly created vm, the problem is here. vmname is not >> getting passed to hosts: >> - hosts: '{{ vmname }}' >> >> # Roles to configure newly created vm >> roles: >> - common >> - apt-updates >> - webserver >> >> >> >> Ok, the above is more like my actual playbook. I'm using a shell script >> to regenerate the inventory file which I use to run the above playbook. The >> variable vmname is set and contains the vmname but it won't get passed to: >> hosts: '{{ vmname }}' >> >> >> >> >> >> Op dinsdag 20 januari 2015 15:39:00 UTC+1 schreef James Martin: >>> >>> Assuming your first task returns an ip address, if you want to reference >>> it, you'd need to use {{ ip.stdout }}. Alternately, you could use the >>> http://docs.ansible.com/uri_module.html instead of using curl, and you >>> could just use {{ ip }}. >>> >>> You'll also have to add it to the inventory before you could use it on >>> the following play, see the http://docs.ansible.com/add_host_module.html >>> module. >>> >>> >>> If you want extra credit, write a module for your API that provisions >>> instances and a dynamic inventory script :). >>> >>> - James >>> >>> >>> On Tuesday, January 20, 2015 at 8:37:03 AM UTC-5, Piet83 wrote: >>>> >>>> --- >>>> - hosts: all >>>> >>>> pre_tasks: >>>> >>>> # Task creates a vm through an api. Register output with vm name >>>> - name: Create vm from emplate >>>> command: 'curl https://vm.example.nl/api/create' >>>> delegate_to: localhost >>>> register: ip >>>> >>>> # Continue play on newly created vm >>>> - hosts: '{{ ip }}' >>>> >>>> # Roles to configure newly created vm >>>> roles: >>>> - common >>>> - apt-updates >>>> - webserver >>>> >>>> >>>> I'm trying to create a playbook to provision a virtual machine and >>>> apply some roles to that vm without knowing name or ip. When provisioning >>>> the vm through our API it spits out the vmname and ipadress to the stdout. >>>> When I register the stdout to a variable I can't pass it as you see above >>>> to: - hosts: '{{ ip }}' >>>> it always says: skipping: no hosts matched >>>> >>>> Is the above possible? Or is it possible to use delegate_to for a role. >>>> Maybe there a other ways? >>>> >>> -- > 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/357a7e9c-f468-47cc-b038-8b7a228e2584%40googlegroups.com > <https://groups.google.com/d/msgid/ansible-project/357a7e9c-f468-47cc-b038-8b7a228e2584%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/CAAnNz0P_YRfETnxu_HgMur5HcGJEB1yLpz_f_98-WEoYmv9x6g%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
