OK, that's interesting, but how would I set the servers up in the first
place? This isn't a cluster that elects a leader, I need to do different
setup work on the primary and replica(s). I suppose I could arbitrarily
decide that the first server in the db group was the primary the first time
round, but that doesn't feel much better than my current solution.

On 8 October 2014 18:44, Matt Martz <[email protected]> wrote:

> 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 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/CAD8N0v8_j8cem-6rqNk829EEdrz7EqPkfBaQJeyCp7VApFzF9A%40mail.gmail.com
> <https://groups.google.com/d/msgid/ansible-project/CAD8N0v8_j8cem-6rqNk829EEdrz7EqPkfBaQJeyCp7VApFzF9A%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/CAGz4HnduyGkhuVMv8CwD11SUeCfxXo9y5xHgue5jHebzujtTwQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to