My Rackspace cloud servers are under managed services and under RackConnect services. This means than when they are built, first 2 other scripts need to run before I can actually use the server to provision it.
The peculiar thing is that during the RackConnect script the public ip of the server changes, so it in validates the data you “register” using the rax module when adding a server.
The fact is that we do not know precise when these build scripts have finished running. The only way to figure it out is either through the presence of a file in the servers /tmp directory or by querying the fact data received through the rackspace api. It should have a NVP set in the metatags field.
So basically what I want to do is:
create cloud server
poll factsdata until certain values are set
provision the server
The documentation of the rax_facts module does not provide a lot of info, event when copying the sample is fails due to “{{ rax_accessipv4 }}” not existing…
So who can help me out here or me into the right direction?
My current playbook:
name: Wait for Rackspace Managed Service provisioning completion
hosts: raxtest
gather_facts: False
remote_user: root
tasks:
name: Get meta data and check for completion of setup
local_action:
module: rax_facts
api_key:
username:
register: result
name: “{{ inventory_hostname }}”
set_fact: managed_done = “{{rax_metadata.rax_service_level_automation}}”
set_fact: ansible_ssh_host = “{{ rax_accessipv4 }}”
until: managed_done = “Complete”
I have some sample plays that show how to wait for RackConnect automation and the Managed Cloud automation to complete before moving on. I haven’t gotten around to adding it to the Rackspace guide, but hope to do so soon.
On another note, you cannot call a module from within another module. So your attempts at running set_fact inside of a local_action for rax_facts just can’t work.
The “|default(‘’)” should handle individual meta data keys not being available.
I’ve never seen this happen. You might try running with -v to see what the calls to rax_facts are returning. rax_metadata should always be present and should always be a dict.