Reading into it more, 'post_tasks' in `site.yml` seems like the right place 
for this, and is working fine.

I'd *prefer* to have the role be able to dictate the value of `ssh_port`, 
but I can't seem to figure out a way to use that variable from `post_tasks` 
in `site.yml`.  Not the end of the world I guess.  

Thanks for the help though!

On Saturday, June 25, 2016 at 10:00:51 AM UTC-6, William George wrote:
>
> That looks sensible.  I guess the reason I didn't go this route to begin 
> with is I was hoping to have something that was more tied to the state of 
> the earlier steps, but in the end I suppose it doesn't matter.
>
> Would it be sane to include this in a role?  Or should this be outside of 
> the role?
>
> Also, if the ssh_port were dynamic/randomly assigned and I registered it 
> in earlier steps, would the above still work?
>
> On Saturday, June 25, 2016 at 7:25:00 AM UTC-6, Matt Martz wrote:
>>
>> With add_host, generally speaking you want to use a `with_items` loop.  
>> You could do something like:
>>
>> - name:  add containers as hosts
>>   add_host:
>>     name:  "{{ item }}-container"
>>     ansible_host:  "{{ hostvars[item].ansible_eth0.ipv4.address }}"
>>     ansible_port:  "{{ hostvars[item].ssh_port }}"
>>     groups:  workers
>>   with_items: "{{ groups['docker-hosts'] }}"
>>
>> That should do what you need.
>>
>> On Fri, Jun 24, 2016 at 8:49 PM, William George <[email protected]> 
>> wrote:
>>
>>> You know what, I tried to be civil and do this the right way, but you've 
>>> simply pushed me *too far*.
>>>
>>> So, until I have some kind of answer about why add_host bypasses the 
>>> host loop and what the idiomatic way to accomplish this is, I'm just going 
>>> to say 'to hell with it' and unbypass that shizz.
>>>
>>> That's right, *I LIVE DANGEROUS*. Deal with it.
>>>
>>> ansible/plugins/action/add_host.py, line 40:
>>>     BYPASS_HOST_LOOP = False  # biatch!
>>>
>>> which yields:
>>>
>>> TASK [docker_host : run deployable image] ************************
>>> ok: [h2]
>>> ok: [h1]
>>>
>>> TASK [docker_host : add container as host] ******************************
>>> changed: [h1]
>>> changed: [h2]
>>>
>>> I'm still certain there's some perfectly valid reason they have this 
>>> disabled, but what we've got here is failure to communicate. Some 
>>> developers you just can't reach. So you get what we have here, which is the 
>>> way they wants it. Well, they gets it. I don't like it any more than you.
>>>
>>> On Friday, June 24, 2016 at 8:06:26 AM UTC-6, William George wrote:
>>>>
>>>> So I've got to manage a relatively dynamic fleet of machines in the 
>>>> wild.  
>>>>
>>>> Wanting to keep the running environment of these things as bare-bones 
>>>> as possible, so decision was made to have all the complex bits inside of 
>>>> docker containers, what-for relative immutability and the like.  
>>>>
>>>> Clearly we want to use ansible to make sure the containers are doing 
>>>> what they ought to do when they're supposed to be doing it.
>>>>
>>>> Likewise, getting the hardware setup is a bit of a pain, so we use 
>>>> Ansible for this as well.  
>>>>
>>>> My first attempt goes something like this:
>>>>
>>>> - name:  apply docker role
>>>>   hosts:  docker-hosts
>>>>   roles:
>>>>     - role:  docker_host  # role that make sure docker is up to date, 
>>>>  running, deploys the right images, starts containers
>>>>
>>>>
>>>> - name: apply worker role
>>>>   hosts:  workers  # group that contains all the containers started on 
>>>> the docker-hosts
>>>>   roles:
>>>>     - role:  worker
>>>>
>>>>
>>>> And of course the final tasks in the docker_host role is:
>>>>
>>>>
>>>> - name:  add container as host
>>>>   add_host:
>>>>     name:  "{{ inventory_hostname }}-container"
>>>>     ansible_host:  "{{ ansible_eth0.ipv4.address }}"
>>>>     ansible_port:  "{{ ssh_port }}"
>>>>     groups:  workers
>>>>
>>>> Of course, this doesn't work because add_host bypasses the host loop 
>>>> and only runs once.  
>>>>
>>>> Now I can't imagine I'm the first person that's wanted to spin up 
>>>> containers on multiple hosts, so there's got to be a sane way to go about 
>>>> this.
>>>>
>>>> I *could* just statically create both the host and the container in 
>>>> `ansible_hosts`, but that feels like exactly the sort of error-prone 
>>>> kludge 
>>>> we're trying to avoid in the first place.  
>>>>
>>>> What am I missing?  Is there a more sensible way to go about this? 
>>>>
>>> -- 
>>> 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/b88113ac-5125-42f1-8853-623d77a48d49%40googlegroups.com
>>>  
>>> <https://groups.google.com/d/msgid/ansible-project/b88113ac-5125-42f1-8853-623d77a48d49%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>>
>>
>> -- 
>> Matt Martz
>> @sivel
>> sivel.net
>>
>

-- 
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/df23b96d-4491-48db-9595-13322b407e18%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to