Refactor services module
Change-Id: Ib3ecebb3aa15124a179cb2d98c6dbbe6031fd6a1
This commit is contained in:
parent
da22323dfd
commit
4b49c49307
@ -87,9 +87,14 @@ class ServiceAsProcess(service.Service):
|
|||||||
self.restart_cmd = self.config.get('restart_cmd')
|
self.restart_cmd = self.config.get('restart_cmd')
|
||||||
self.port = self.config.get('port')
|
self.port = self.config.get('port')
|
||||||
|
|
||||||
def _run_task(self, task, nodes):
|
def _run_task(self, nodes, task, message):
|
||||||
|
nodes = nodes if nodes is not None else self.get_nodes()
|
||||||
if len(nodes) == 0:
|
if len(nodes) == 0:
|
||||||
raise error.ServiceError('Node collection is empty')
|
raise error.ServiceError(
|
||||||
|
'Service %s is not found on any nodes' % self.service_name)
|
||||||
|
|
||||||
|
LOG.info('%s service %s on nodes: %s',
|
||||||
|
message, self.service_name, nodes.get_ips())
|
||||||
|
|
||||||
return self.cloud_management.execute_on_cloud(nodes.hosts, task)
|
return self.cloud_management.execute_on_cloud(nodes.hosts, task)
|
||||||
|
|
||||||
@ -101,73 +106,62 @@ class ServiceAsProcess(service.Service):
|
|||||||
success_ips = [r.host for r in results
|
success_ips = [r.host for r in results
|
||||||
if r.status == executor.STATUS_OK]
|
if r.status == executor.STATUS_OK]
|
||||||
hosts = [h for h in nodes.hosts if h.ip in success_ips]
|
hosts = [h for h in nodes.hosts if h.ip in success_ips]
|
||||||
|
LOG.debug('Service %s is discovered on nodes %s',
|
||||||
|
self.service_name, hosts)
|
||||||
return self.node_cls(cloud_management=self.cloud_management,
|
return self.node_cls(cloud_management=self.cloud_management,
|
||||||
hosts=hosts)
|
hosts=hosts)
|
||||||
|
|
||||||
@utils.require_variables('restart_cmd')
|
@utils.require_variables('restart_cmd')
|
||||||
def restart(self, nodes=None):
|
def restart(self, nodes=None):
|
||||||
nodes = nodes if nodes is not None else self.get_nodes()
|
self._run_task(nodes, {'shell': self.restart_cmd}, 'Restart')
|
||||||
LOG.info("Restart '%s' service on nodes: %s", self.service_name,
|
|
||||||
nodes.get_ips())
|
|
||||||
self._run_task({'shell': self.restart_cmd}, nodes)
|
|
||||||
|
|
||||||
@utils.require_variables('terminate_cmd')
|
@utils.require_variables('terminate_cmd')
|
||||||
def terminate(self, nodes=None):
|
def terminate(self, nodes=None):
|
||||||
nodes = nodes if nodes is not None else self.get_nodes()
|
self._run_task(nodes, {'shell': self.terminate_cmd}, 'Terminate')
|
||||||
LOG.info("Terminate '%s' service on nodes: %s", self.service_name,
|
|
||||||
nodes.get_ips())
|
|
||||||
self._run_task({'shell': self.terminate_cmd}, nodes)
|
|
||||||
|
|
||||||
@utils.require_variables('start_cmd')
|
@utils.require_variables('start_cmd')
|
||||||
def start(self, nodes=None):
|
def start(self, nodes=None):
|
||||||
nodes = nodes if nodes is not None else self.get_nodes()
|
self._run_task(nodes, {'shell': self.start_cmd}, 'Start')
|
||||||
LOG.info("Start '%s' service on nodes: %s", self.service_name,
|
|
||||||
nodes.get_ips())
|
|
||||||
self._run_task({'shell': self.start_cmd}, nodes)
|
|
||||||
|
|
||||||
def kill(self, nodes=None):
|
def kill(self, nodes=None):
|
||||||
nodes = nodes if nodes is not None else self.get_nodes()
|
task = {'kill': {'grep': self.grep, 'sig': signal.SIGKILL}}
|
||||||
LOG.info("Kill '%s' service on nodes: %s", self.service_name,
|
self._run_task(nodes, task, 'Kill')
|
||||||
nodes.get_ips())
|
|
||||||
cmd = {'kill': {'grep': self.grep, 'sig': signal.SIGKILL}}
|
|
||||||
self._run_task(cmd, nodes)
|
|
||||||
|
|
||||||
def freeze(self, nodes=None, sec=None):
|
def freeze(self, nodes=None, sec=None):
|
||||||
nodes = nodes if nodes is not None else self.get_nodes()
|
|
||||||
if sec:
|
if sec:
|
||||||
cmd = {'freeze': {'grep': self.grep, 'sec': sec}}
|
task = {'freeze': {'grep': self.grep, 'sec': sec}}
|
||||||
else:
|
else:
|
||||||
cmd = {'kill': {'grep': self.grep, 'sig': signal.SIGSTOP}}
|
task = {'kill': {'grep': self.grep, 'sig': signal.SIGSTOP}}
|
||||||
LOG.info("Freeze '%s' service %son nodes: %s", self.service_name,
|
message = "Freeze %s" % (('for %s sec ' % sec) if sec else '')
|
||||||
('for %s sec ' % sec) if sec else '', nodes.get_ips())
|
self._run_task(nodes, task, message)
|
||||||
self._run_task(cmd, nodes)
|
|
||||||
|
|
||||||
def unfreeze(self, nodes=None):
|
def unfreeze(self, nodes=None):
|
||||||
nodes = nodes if nodes is not None else self.get_nodes()
|
task = {'kill': {'grep': self.grep, 'sig': signal.SIGCONT}}
|
||||||
LOG.info("Unfreeze '%s' service on nodes: %s", self.service_name,
|
self._run_task(nodes, task, 'Unfreeze')
|
||||||
nodes.get_ips())
|
|
||||||
cmd = {'kill': {'grep': self.grep, 'sig': signal.SIGCONT}}
|
|
||||||
self._run_task(cmd, nodes)
|
|
||||||
|
|
||||||
@utils.require_variables('port')
|
@utils.require_variables('port')
|
||||||
def plug(self, nodes=None):
|
def plug(self, nodes=None):
|
||||||
nodes = nodes if nodes is not None else self.get_nodes()
|
nodes = nodes if nodes is not None else self.get_nodes()
|
||||||
LOG.info("Open port %d for '%s' service on nodes: %s",
|
message = "Open port %d for" % self.port[1]
|
||||||
self.port[1], self.service_name, nodes.get_ips())
|
task = {
|
||||||
self._run_task({'iptables': {'protocol': self.port[0],
|
'iptables': {
|
||||||
'port': self.port[1],
|
'protocol': self.port[0], 'port': self.port[1],
|
||||||
'action': 'unblock',
|
'action': 'unblock', 'service': self.service_name
|
||||||
'service': self.service_name}}, nodes)
|
}
|
||||||
|
}
|
||||||
|
self._run_task(nodes, task, message)
|
||||||
|
|
||||||
@utils.require_variables('port')
|
@utils.require_variables('port')
|
||||||
def unplug(self, nodes=None):
|
def unplug(self, nodes=None):
|
||||||
nodes = nodes if nodes is not None else self.get_nodes()
|
nodes = nodes if nodes is not None else self.get_nodes()
|
||||||
LOG.info("Close port %d for '%s' service on nodes: %s",
|
message = "Close port %d for" % self.port[1]
|
||||||
self.port[1], self.service_name, nodes.get_ips())
|
task = {
|
||||||
self._run_task({'iptables': {'protocol': self.port[0],
|
'iptables': {
|
||||||
'port': self.port[1],
|
'protocol': self.port[0], 'port': self.port[1],
|
||||||
'action': 'block',
|
'action': 'block', 'service': self.service_name
|
||||||
'service': self.service_name}}, nodes)
|
}
|
||||||
|
}
|
||||||
|
self._run_task(nodes, task, message)
|
||||||
|
|
||||||
|
|
||||||
class LinuxService(ServiceAsProcess):
|
class LinuxService(ServiceAsProcess):
|
||||||
|
@ -327,7 +327,8 @@ class FuelServiceTestCase(test.TestCase):
|
|||||||
|
|
||||||
service = fuel_managment.get_service('keystone')
|
service = fuel_managment.get_service('keystone')
|
||||||
exception = self.assertRaises(error.ServiceError, service.restart)
|
exception = self.assertRaises(error.ServiceError, service.restart)
|
||||||
self.assertEqual('Node collection is empty', str(exception))
|
self.assertEqual('Service keystone is not found on any nodes',
|
||||||
|
str(exception))
|
||||||
|
|
||||||
get_nodes_cmd = 'bash -c "ps ax | grep -v grep | grep \'{}\'"'.format(
|
get_nodes_cmd = 'bash -c "ps ax | grep -v grep | grep \'{}\'"'.format(
|
||||||
service.grep)
|
service.grep)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user