Hey Harry-
That's insightful information about heal_info actually being a list of
dicts.  With that being said, while you CAN create a sum (one such way is
something like {{ heal_info | map(attribute='no_of_entries') | map('int') |
sum() }}), I still question if that is truly necessary.  It sounds to me as
if all you care about is waiting until
<https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html#retrying-a-task-until-a-condition-is-met>
no_of_entries is 0 for every brick.  Using your initial task, I wonder if
this untested pseudo-code could be modified for your needs:

  - name: Find out the healing status of /home
    gluster_heal_info:
      name: home
      status_filter: self-heal
    register: home_heal_status
    until: home_heal_status.glusterfs.heal_info |
selectattr('no_of_entries','ne','0') | list | count == 0
    retries: 5
    delay: 10

Hopefully this is helpful.
-Daniel

On Mon, Mar 2, 2020 at 9:30 AM harry devine <lifte...@gmail.com> wrote:

>
>
> On Thursday, February 27, 2020 at 1:44:39 PM UTC-5, harry devine wrote:
>>
>> Hey Daniel!  This stem from ticket #02582900. Since the stance from
>> Support is “we don’t debug playbooks”, I care here.
>>
>> Their suggestion was to make sure that no healing operation was going on,
>> stop Gluster, do the “yum update “, then restart Gluster & move to the next
>> server.
>>
>> So what I’m trying to accomplish is start with server1, wait for any
>> healing operations on our 3 volumes to finish, stop/update/start then move
>> to the next. I’m sure this will lead to a “workflow template”
>> discussion/approach, but right now this is my starting point.
>>
>> Thanks,
>> Harry
>>
>> On Thu, Feb 27, 2020 at 12:48 PM Daniel Whitley <thisdwhit...@gmail.com>
>> wrote:
>>
>>> Hey Harry-
>>> I saw this over my lunch break and thought I'd ask if it really matters
>>> (meaning, do you use it later or something) what the count/sum is or if you
>>> just want to wait until something is true (such as the number of "heals" is
>>> 0).  If the count doesn't really matter, I wonder if you could take
>>> advantage of until
>>> <https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html#retrying-a-task-until-a-condition-is-met>
>>> in your "Find out the healing status of /home" task?  It looks like the
>>> gluster_heal_info
>>> <https://docs.ansible.com/ansible/latest/modules/gluster_heal_info_module.html>
>>> module returns a list of files in "heal_info" so you may just want to wait
>>> "until" that list is empty before moving on to the next task?  I've not
>>> tried this nor ever used the module.  I also realize it doesn't address the
>>> question you asked, but you should be used to that from me at this point. :)
>>> -Daniel
>>>
>>>
>>> On Thu, Feb 27, 2020 at 9:38 AM harry devine <lifte...@gmail.com> wrote:
>>>
>>>> I'm using the gluster_heal_info module to check the heal status of a
>>>> gluster volume.  What I'd like to do is gather the "no_of_entries"
>>>> parameter, sum them up, and it if it is 0, move to the next step of
>>>> stopping gluster on that server, update it, and restart the service.  The
>>>> playbook below is my initial test to see how to grab that information.  It
>>>> is giving me the following error:
>>>>
>>>>  [root@test-server ~]#ansible-playbook gluster_heal_info.yml --limit
>>>> storage1.tc.secure-ose.faa.gov -K
>>>> BECOME password:
>>>>
>>>> PLAY [gluster]
>>>> *************************************************************************************************************************************
>>>>
>>>> TASK [Find out the healing status of /home]
>>>> ********************************************************************************************************
>>>> ok: [gluster1]
>>>>
>>>> TASK [set_fact]
>>>> ************************************************************************************************************************************
>>>> fatal: [gluster1]: FAILED! => {"msg": "Unexpected templating type error
>>>> occurred on ({{ home_heal_status.glusterfs.heal_info |
>>>> sum(attribute='no_of_entries', start=[]) }}): can only concatenate list
>>>> (not \"AnsibleUnsafeText\") to list"}
>>>>
>>>>
>>>> I'm not too familiar with jinja2 templates yet, so I'm sure I'm not
>>>> doing something correct.  Can anyone point me in the right direction?
>>>>
>>>> Thanks,
>>>> Harry
>>>>
>>>> ---
>>>> - hosts: gluster
>>>>   become: yes
>>>>   become_method: sudo
>>>>   gather_facts: no
>>>>
>>>>   tasks:
>>>>
>>>>   - name: Find out the healing status of /home
>>>>     gluster_heal_info:
>>>>       name: home
>>>>       status_filter: self-heal
>>>>     register: home_heal_status
>>>>
>>>>   - set_fact:
>>>>       home_heal_entries: "{{ home_heal_status.glusterfs.heal_info |
>>>> sum(attribute='no_of_entries', start=[]) }}"
>>>>   - debug:
>>>>       msg: "Heal entries: {{ home_heal_entries }}"
>>>>
>>>> --
>>>>
>>>> --
>>> 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 ansible-project+unsubscr...@googlegroups.com.
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/ansible-project/CA%2BM63kcQw_UTUMW%2BmLXd0uNv3Bgowfdy9yP_v%2B55yW9cKkKN6A%40mail.gmail.com
>>> <https://groups.google.com/d/msgid/ansible-project/CA%2BM63kcQw_UTUMW%2BmLXd0uNv3Bgowfdy9yP_v%2B55yW9cKkKN6A%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>>
>
> So to follow up on this:  I looked at this further, and while the
> gluster_heal_info module DOES return a heal_info list, its not a list of
> files.  It returns the value of every brick (brick name, number of entries,
> and stattus):
>
> "heal_info": [
>                 {
>                     "brick": " server1:/gluster_bricks/brick3/1",
>                     "no_of_entries": "0",
>                     "status": "Connected"
>                 },
>                 {
>                     "brick": " server2:/gluster_bricks/brick4/1",
>                     "no_of_entries": "0",
>                     "status": "Connected"
>                 }
> ]
>
> So what I think I need to do is to get the "no_of_entries" value from
> every brick and sum them up.  If the sum is zero, I can continue on.  If
> the sum is greater than zero, then there is a heal in process, and I need
> to wait until that is finished before continuing.  That's the part I'm
> getting stuck on.  Also, if you look at the heal_info list, the bricks are
> ALL bricks associated with the gluster volume, which is across all gluster
> servers.  So would it be safe to assume that if the sum is zero, then there
> is no healing occuring on any server, and the continue-on procedure is to
> stop gluster on all servers, update them, then restart gluster?
>
> Thanks,
> Harry
>
>
> --
> 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 ansible-project+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/ansible-project/70668aff-e0fe-4f4f-8606-ffc1cc273f52%40googlegroups.com
> <https://groups.google.com/d/msgid/ansible-project/70668aff-e0fe-4f4f-8606-ffc1cc273f52%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
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 ansible-project+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/CA%2BM63kf1DyZah1eXy6O18e2-30SpM%3Db9Xnvwdh7-E2CGRWezqQ%40mail.gmail.com.

Reply via email to