summaryrefslogtreecommitdiff
path: root/lib/ansible/module_utils/docker/swarm.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ansible/module_utils/docker/swarm.py')
-rw-r--r--lib/ansible/module_utils/docker/swarm.py15
1 files changed, 11 insertions, 4 deletions
diff --git a/lib/ansible/module_utils/docker/swarm.py b/lib/ansible/module_utils/docker/swarm.py
index 5e9cfd4ace..11fbb4b8d5 100644
--- a/lib/ansible/module_utils/docker/swarm.py
+++ b/lib/ansible/module_utils/docker/swarm.py
@@ -3,6 +3,7 @@
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
import json
+from time import sleep
try:
from docker.errors import APIError
@@ -108,23 +109,29 @@ class AnsibleDockerSwarmClient(AnsibleDockerClient):
return True
return False
- def check_if_swarm_node_is_down(self, node_id=None):
+ def check_if_swarm_node_is_down(self, node_id=None, repeat_check=1):
"""
Checks if node status on Swarm manager is 'down'. If node_id is provided it query manager about
node specified in parameter, otherwise it query manager itself. If run on Swarm Worker node or
host that is not part of Swarm it will fail the playbook
+ :param repeat_check: number of check attempts with 5 seconds delay between them, by default check only once
:param node_id: node ID or name, if None then method will try to get node_id of host module run on
:return:
True if node is part of swarm but its state is down, False otherwise
"""
+ if repeat_check < 1:
+ repeat_check = 1
+
if node_id is None:
node_id = self.get_swarm_node_id()
- node_info = self.get_node_inspect(node_id=node_id)
- if node_info['Status']['State'] == 'down':
- return True
+ for retry in range(0, repeat_check):
+ node_info = self.get_node_inspect(node_id=node_id)
+ if node_info['Status']['State'] == 'down':
+ return True
+ sleep(5)
return False
def get_node_inspect(self, node_id=None, skip_missing=False):