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/CAD8N0v80ozYy9TDpycq7ToOFcx4Zk9rpOm0QJ%3D0Rz8BWPGAeag%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.