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.
