Fix extended plug/unplug commands

Service port configuration is not mandatory for extended plug/unplug
commands. 

Change-Id: I31d4be9d8c91109d01c3c67103edbd15e3db03d8
This commit is contained in:
Ilya Shakhat 2020-05-04 19:55:26 +04:00
parent 1e70f233f7
commit 113ba244f8
2 changed files with 36 additions and 2 deletions

View File

@ -153,7 +153,6 @@ class ServiceAsProcess(service.Service):
}
self._run_task(nodes, task, 'Unfreeze')
@utils.require_variables('port')
def plug(self, nodes=None, direction=None, other_port=None):
nodes = nodes if nodes is not None else self.get_nodes()
@ -161,6 +160,11 @@ class ServiceAsProcess(service.Service):
port = other_port
else:
# work with local service port
if not self.port:
msg = '{} required for {}.{}'.format(
'port', self.__class__.__name__, 'plug')
raise NotImplementedError(msg)
port = self.port
direction = self.port[2] if len(self.port) > 2 else 'ingress'
@ -177,12 +181,12 @@ class ServiceAsProcess(service.Service):
'jump': 'DROP',
'destination_port': '%d' % port_number,
'state': 'absent',
'comment': 'Added by os-faults',
},
'become': 'yes',
}
self._run_task(nodes, task, message)
@utils.require_variables('port')
def unplug(self, nodes=None, direction=None, other_port=None):
nodes = nodes if nodes is not None else self.get_nodes()
@ -190,6 +194,11 @@ class ServiceAsProcess(service.Service):
port = other_port
else:
# work with local service port
if not self.port:
msg = '{} required for {}.{}'.format(
'port', self.__class__.__name__, 'plug')
raise NotImplementedError(msg)
port = self.port
direction = self.port[2] if len(self.port) > 2 else 'ingress'

View File

@ -89,8 +89,33 @@ class TestServiceAsProcess(unittest.TestCase):
'jump': 'DROP',
'destination_port': '8000',
'state': 'absent',
'comment': 'Added by os-faults',
},
'become': 'yes',
}
self.cloud_management.execute_on_cloud.assert_called_once_with(
self.hosts, expected_task)
def test_plug_port_is_required_in_config(self):
config = {
'grep': 'test-service',
}
service = ServiceAsProcess(
'test-service', config, mock.Mock(), mock.Mock())
node_collection = NodeCollection(
cloud_management=self.cloud_management, hosts=[])
service.get_nodes = mock.Mock(return_value=node_collection)
self.assertRaises(NotImplementedError, service.plug)
def test_unplug_port_is_required_in_config(self):
config = {
'grep': 'test-service',
}
service = ServiceAsProcess(
'test-service', config, mock.Mock(), mock.Mock())
node_collection = NodeCollection(
cloud_management=self.cloud_management, hosts=[])
service.get_nodes = mock.Mock(return_value=node_collection)
self.assertRaises(NotImplementedError, service.unplug)