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