Posted a similar question a few days ago, got the right answer.
Now I can better explain what I’m looking for.
I’m building a EC2 system from two types of servers:
- cluster nodes
- loader nodes
Each loader is generating traffic to ALL cluster nodes.
My goal is a playbook which collect private-ip from each the first group, and use it as part of a command to be executed on the second group.
I assume it should look something like:
`
Here’s a quick sample playbook that should do what you are trying to do. Keep in mind that the ec2.py dynamic inventory script will gather the private IPs for you, you shouldn’t need an explicit task.
`
`
You could also write a custom jinja2 filter to make this a single task.
Thanks James
Works like a charm. register is what I was looking for.
What should I use in production instead of the first debug?
I need the data, not the output to the screen.
Sorry, I’m not sure of a way to suppress that, outside of using a custom filter.
Sorry, was a bit confused by your comment “What should I use in production instead of the first debug?”
If you mean, not to use “debug” in your first task because it’s too verbose, you don’t have to. But using it is not going to harm anything even on production. If you want to do it in a less verbose way:
`
-
hosts: localhost
tasks:
-
command: echo “{{ hostvars[item].ec2_private_ip_address }}”
with_items: groups.tag_Name_ClusterNodes
register: output
changed_when: no
-
debug: msg=“{{ output.results|map(attribute=‘stdout’)| join(’ ') }}”
`
as far as the second debug goes, you could, as bcoca pointed out, use set_fact:
`
- set_fact: ip_list=“”{{ output.results|map(attribute=‘stdout’)| join(’ ') }}"
`
And subsequent tasks could then reference the list as “{{ ip_list }}”
Thanks James, Brain
This is precisely what I was looking for!