This is just an example, and although I haven't run it, it seems somewhat
sane.

It does the following (using fake commands as an example):

1. makes a determination of the database function of the host, by running
some command that can tell you
2. creates in memory groups based on the above info using group_by
3. targets groups in subsequent plays to ensure master and slave
configurations.

This prevents you from having to record, which server is which.  You check
for functionality, instead of relying on potentially wrong documentation,
to perform things such as replica work on replicas.  Following this you
could easily expand to more complicated setups, that could even be used as
automated remediation when an alert is fired that a host dies.

The 'databases' group is a list of all database servers and is specified in
inventory.

- hosts: databases
  tasks:
    # Example script, may return 'master', 'replica', or 'none'
    - name: Check database server functionality
      command: /usr/bin/master_or_replica
      register: database_function

    - name: Create in memory groups for database_function
      group_by: key="database_{{database_function.stdout|trim}}"

- hosts: database_none
  tasks:
    - name: Add host to master group if there is no master
      add_host: name="{{ inventory_hostname }}" groups=database_master
      when: groups['master']|default([])|len == 0

- hosts: database_master
  tasks:
    - name: Ensure master config and if needed become the master
      command: /usr/bin/config_master

- hosts: database_none:database_replica
  tasks:
    - name: ensure replica config
      command: /usr/bin/config_replica
      when: inventory_hostname != groups['master'][0]

This is largely how my team handles our mongodb replicaset. I don't
personally care which is the master, I just care that ansible can figure it
out and performs the right tasks on the right hosts.


On Wed, Oct 8, 2014 at 11:58 AM, Graham Hay <[email protected]> wrote:

> I'm not sure I understand how that would work. Take the db example, if I
> want one primary and one replica, how would I go about that?
>
> Currently, I'm using two different groups with exact_count, which is a bit
> weird. If there's a better way, I'm keen to know about it.
>
>
> On 8 October 2014 17:46, Matt Martz <[email protected]> wrote:
>
>> At this moment I'm not sure about adding it.  In the end a name is just
>> an uniqueness identifier.  I personally tend to not track
>> masters/slaves/replicas based on names, but instead check for functionality
>> to make that determination.  Connect to them all, run a check to see what
>> they function is, use group_by to allow for easily targeting based on that
>> check.
>>
>> I wouldn't consider a rename as something that should happen often.
>>
>> On Wed, Oct 8, 2014 at 11:26 AM, Graham Hay <[email protected]> wrote:
>>
>>> 1) isn't really an option (I want to rename my db replica after
>>> failover), so 2) will have to do for now. Is there any interest in adding
>>> this as a feature (somewhere)?
>>>
>>> On 8 October 2014 17:20, Matt Martz <[email protected]> wrote:
>>>
>>>> There is not.  You have a few options:
>>>>
>>>> 1. Delete it and build a new one with the new name
>>>> 2. Change the name in control panel, novaclient or similar
>>>>
>>>> The 'rax' module doesn't make changes to the servers after they are
>>>> built, but rather that the servers themselves exist or not, which is in
>>>> part why rax_meta exists for manipulating metadata at a later time.
>>>>
>>>> On Wed, Oct 8, 2014 at 11:17 AM, Graham Hay <[email protected]> wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> Is there any way to rename a rax server, using an ansible module? It
>>>>> doesn't seem to be possible using the rax_meta module, and I couldn't see
>>>>> anything else appropriate. I can do it in the control panel easily enough,
>>>>> so I assume it can be done through the API.
>>>>>
>>>>> Thanks,
>>>>>
>>>>> Graham
>>>>>
>>>>> --
>>>>> 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/ffb709b8-0504-45a1-b5a8-dd9f686a54c0%40googlegroups.com
>>>>> <https://groups.google.com/d/msgid/ansible-project/ffb709b8-0504-45a1-b5a8-dd9f686a54c0%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 a topic in the
>>>> Google Groups "Ansible Project" group.
>>>> To unsubscribe from this topic, visit
>>>> https://groups.google.com/d/topic/ansible-project/9C4IovYNw_A/unsubscribe
>>>> .
>>>> To unsubscribe from this group and all its topics, 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/CAD8N0v_hJxJJiauByM-BRbaSq0V2mUjchh33Xtcfpdk70hE6Sw%40mail.gmail.com
>>>> <https://groups.google.com/d/msgid/ansible-project/CAD8N0v_hJxJJiauByM-BRbaSq0V2mUjchh33Xtcfpdk70hE6Sw%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>>  --
>>> 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/CAGz4HndQqT9z5vrCJraOMuYbXKO-3dK9nJ6yg-h6QNCGUhqugA%40mail.gmail.com
>>> <https://groups.google.com/d/msgid/ansible-project/CAGz4HndQqT9z5vrCJraOMuYbXKO-3dK9nJ6yg-h6QNCGUhqugA%40mail.gmail.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 a topic in the
>> Google Groups "Ansible Project" group.
>> To unsubscribe from this topic, visit
>> https://groups.google.com/d/topic/ansible-project/9C4IovYNw_A/unsubscribe
>> .
>> To unsubscribe from this group and all its topics, 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/CAD8N0v9Bp0EbReUdxEPNLE8r6chkiTLAK4qrTQ6LfjZ5jdEY9Q%40mail.gmail.com
>> <https://groups.google.com/d/msgid/ansible-project/CAD8N0v9Bp0EbReUdxEPNLE8r6chkiTLAK4qrTQ6LfjZ5jdEY9Q%40mail.gmail.com?utm_medium=email&utm_source=footer>
>> .
>>
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>  --
> 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/CAGz4HnebypuFUi1yV1OmGba6L0K_YFdG8cxOfF4qJydtCHNxqw%40mail.gmail.com
> <https://groups.google.com/d/msgid/ansible-project/CAGz4HnebypuFUi1yV1OmGba6L0K_YFdG8cxOfF4qJydtCHNxqw%40mail.gmail.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/CAD8N0v8_j8cem-6rqNk829EEdrz7EqPkfBaQJeyCp7VApFzF9A%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to