From: Stavros Sachtouris Date: Thu, 7 Nov 2013 10:41:32 +0000 (+0200) Subject: Create port_creates extention (cyclaes) and expose X-Git-Tag: 0.12rc1~11^2~16 X-Git-Url: https://code.grnet.gr/git/kamaki/commitdiff_plain/ccdd1b823da9595b806e5637ac29a80b5f5747be?hp=45cb7f88d57c00dc299dad18f44f3e764866a55f Create port_creates extention (cyclaes) and expose Refs: #4563 --- diff --git a/kamaki/cli/commands/network.py b/kamaki/cli/commands/network.py index 9fe7b0a..922a690 100644 --- a/kamaki/cli/commands/network.py +++ b/kamaki/cli/commands/network.py @@ -436,6 +436,24 @@ class port_set(_init_network, _optional_json): self._run(port_id=port_id) -#@command(port_cmds) -#class port_create(_init_network, _optional_json): -# +@command(port_cmds) +class port_create(_init_network, _optional_json): + """Create a new port""" + + arguments = dict( + security_group_id=RepeatableArgument( + 'Add a security group id (can be repeated)', + ('-g', '--security-group')) + ) + + @errors.generic.all + @errors.cyclades.connection + @errors.cyclades.network_id + def _run(self, network_id, device_id): + r = self.client.create_port( + network_id, device_id, security_groups=self['security_group_id']) + self._print(r, self.print_dict) + + def main(self, network_id, device_id): + super(self.__class__, self)._run() + self._run(network_id=network_id, device_id=device_id) diff --git a/kamaki/clients/cyclades/__init__.py b/kamaki/clients/cyclades/__init__.py index a6fb717..3cb2316 100644 --- a/kamaki/clients/cyclades/__init__.py +++ b/kamaki/clients/cyclades/__init__.py @@ -525,3 +525,10 @@ class CycladesNetworkClient(NetworkClient): req['network']['shared'] = bool(shared) r = self.networks_post(json_data=req, success=201) return r.json['network'] + + def create_port(self, network_id, device_id, security_groups=None): + port = dict(network_id=network_id, device_id=device_id) + if security_groups: + port['security_groups'] = security_groups + r = self.ports_post(json_data=dict(port=port), success=201) + return r.json['port'] diff --git a/kamaki/clients/cyclades/test.py b/kamaki/clients/cyclades/test.py index 588d22e..415e9c9 100644 --- a/kamaki/clients/cyclades/test.py +++ b/kamaki/clients/cyclades/test.py @@ -277,6 +277,22 @@ class CycladesNetworkClient(TestCase): expargs = dict(json_data=dict(network=req), success=201) self.assertEqual(networks_post.mock_calls[-1], call(**expargs)) + @patch( + 'kamaki.clients.network.rest_api.NetworkRestClient.ports_post', + return_value=FR) + def test_create_port(self, ports_post): + network_id, device_id, FR.json = 'netid', 'devid', dict(port='ret v') + for security_groups in ([1, 2, 3], None): + self.assertEqual( + self.client.create_port( + network_id, device_id, security_groups=security_groups), + 'ret v') + req = dict(network_id=network_id, device_id=device_id) + if security_groups: + req['security_groups'] = security_groups + expargs = dict(json_data=dict(port=req), success=201) + self.assertEqual(ports_post.mock_calls[-1], call(**expargs)) + class CycladesClient(TestCase):