Troubles with conditions, register and loop

93 views
Skip to first unread message

Leonardo Bacha

unread,
Oct 27, 2021, 1:48:27 PM10/27/21
to ansible...@googlegroups.com
Hi guys,

I'm trying to create a lab file to restart a service only if it's running.
I have troubles when using variables, register and loop together.
 

- name: Restart a service only if it's active.
  hosts: LAB
  vars:
    sysservices:
      - serviceName: httpd
      - serviceName: smb
  tasks:
    - name: Checking if service is running
      command: /usr/bin/systemctl is-active "{{ item.serviceName }}"
      register: _result
      ignore_errors: yes
      loop: "{{ sysservices }}"
    - name: Restarting services services
      service:
        name: "{{ item.serviceName }}"
        state: restarted
      when: item.rc == 0   ## I tried: item.rc == 0 ,  item.stdout == "active",  _result.rc == 0,  _result.stdout == "active".  All of them didn't wor
k
      loop: "{{ sysservices }}"
   # - debug:
   #     msg: "Valor de result {{ _result }}"


################

fatal: [ansible1]: FAILED! => {"msg": "The conditional check '_result.rc == 0' failed. The error was: error while evaluating conditional (_result.rc == 0): 'dict object' has no attribute 'rc'\n\nThe error appears to be in '/home/ansible/deploy/conditionals_restart_service_NOT_WORKING': line 14, column 7, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n      loop: \"{{ sysservices }}\"\n    - name: Restarting services services\n      ^ here\n"}



Could you please help me ?

Many thanks!

Todd Lewis

unread,
Oct 27, 2021, 2:03:30 PM10/27/21
to Ansible Project
Your "Restarting services services¨ task should be looping over the registered _results array, not {{ sysservices }}. Your sysservices has no "rc". _result should have a list, one item per loop of the registering task. It's that list you want to process.
Reply all
Reply to author
Forward
0 new messages