I ran in to an interesting issue today with the service module, which led 
me to a chunk of code I don't quite understand.  I am posting here before 
filling a github issue, simply to see if this is actually behavior someone 
desires.

You can see the relevant code here:

https://github.com/ansible/ansible/blob/devel/library/system/service#L724

For one, if the 'stop' operation fails, the module continues with the 
'start' routine.  This strikes me a problematic, as if a service failed to 
stop, typically running 'start' again will end with a successful return 
code--after all, the service is already running.  However, you will have 
failed to actually restart the service.  Worse, the failure is hidden by 
the following code:

            # merge return information
            if rc1 != 0 and rc2 == 0:
                rc_state = rc2
                stdout = stdout2
                stderr = stderr2
            else:
                rc_state = rc1 + rc2
                stdout = stdout1 + stdout2
                stderr = stderr1 + stderr2


Here rc1 is the return code for the 'stop' command, and rc2 is the return 
code for the 'start' command.  If stop fails, it is simply ignored, and the 
error is never surfaced.

As an example of why this is potentially dangerous, in my case our service 
failed to stop due to a bug.  The subsequent 'start' command returned 0, 
because the service was still running.  Despite the fact that no restart 
had happened, the Ansible run reported that the restart was a success.  Had 
I run this against a production cluster, I would have left the machines in 
a bad state and never known better.

Am I missing a reason this is the way you would want this module to behave? 
 Thanks for the help!

-- 
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].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to