blob: 2f7cc2f50af19a5117f63a330e16b6eb890dbf31 [file] [log] [blame]
import logging
import time
from salt.exceptions import CommandExecutionError
__copyright__ = "Copyright 2019, Mirantis Inc."
__license__ = "Apache 2.0"
try:
# Trying to import MySQLdb
import MySQLdb
except ImportError:
try:
# MySQLdb import failed, try to import PyMySQL
import pymysql
pymysql.install_as_MySQLdb()
import MySQLdb
except ImportError:
MySQLdb = None
def __virtual__():
'''
Confirm that a python mysql client is installed.
'''
return bool(MySQLdb), 'No python mysql client installed.' if MySQLdb is None else ''
log = logging.getLogger(__name__)
def wait_for_galera_services(cluster_size=3, retries=18, timeout=10):
"""
Ensure that number of specified nodes with mysql services are alive, otherwise will fail with exception.
:param timeout: number of seconds to wait before retries
:param retries: number of retries
"""
for i in range(retries):
out = __salt__['mysql.status']()
if out and int(out['wsrep_cluster_size']) == int(cluster_size) and out['wsrep_evs_state'] == 'OPERATIONAL':
break
time.sleep(timeout)
else:
raise CommandExecutionError('Galera cluster is not consistent',
info={'wsrep_cluster_size': out['wsrep_cluster_size'],
'wsrep_evs_state': out['wsrep_evs_state']})
return True