---
- 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/d8ab9712-21f2-44fa-b07a-b312fa9cec59%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.