Skip to content

Commit e26eecc

Browse files
committed
Pass security group id to novaclient while adding security
group to server In AddServerSecurityGroup, we currently pass the security group name to novaclient. If multiple security groups with same name exist, then even while passing secuity group using id to command 'openstack server add security group <server> <group>' it results in error 'Multiple security_group matches found'. Added unit test case to test the command. Change-Id: I6097eb36e1545c85209cfd767c477e10f82c6999 Closes-Bug: 1604076
1 parent 0181709 commit e26eecc

2 files changed

Lines changed: 49 additions & 1 deletion

File tree

openstackclient/compute/v2/server.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ def take_action(self, parsed_args):
260260
parsed_args.group,
261261
)
262262

263-
server.add_security_group(security_group.name)
263+
server.add_security_group(security_group.id)
264264

265265

266266
class AddServerVolume(command.Command):

openstackclient/tests/compute/v2/test_server.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,54 @@ def test_server_add_floating_ip(self):
168168
self.assertIsNone(result)
169169

170170

171+
class TestServerAddSecurityGroup(TestServer):
172+
173+
def setUp(self):
174+
super(TestServerAddSecurityGroup, self).setUp()
175+
176+
self.security_group = \
177+
compute_fakes.FakeSecurityGroup.create_one_security_group()
178+
# This is the return value for utils.find_resource() for security group
179+
self.security_groups_mock.get.return_value = self.security_group
180+
181+
attrs = {
182+
'security_groups': [{'name': self.security_group.id}]
183+
}
184+
methods = {
185+
'add_security_group': None,
186+
}
187+
188+
self.server = compute_fakes.FakeServer.create_one_server(
189+
attrs=attrs,
190+
methods=methods
191+
)
192+
# This is the return value for utils.find_resource() for server
193+
self.servers_mock.get.return_value = self.server
194+
195+
# Get the command object to test
196+
self.cmd = server.AddServerSecurityGroup(self.app, None)
197+
198+
def test_server_add_security_group(self):
199+
arglist = [
200+
self.server.id,
201+
self.security_group.id
202+
]
203+
verifylist = [
204+
('server', self.server.id),
205+
('group', self.security_group.id),
206+
]
207+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
208+
result = self.cmd.take_action(parsed_args)
209+
self.security_groups_mock.get.assert_called_with(
210+
self.security_group.id,
211+
)
212+
self.servers_mock.get.assert_called_with(self.server.id)
213+
self.server.add_security_group.assert_called_with(
214+
self.security_group.id,
215+
)
216+
self.assertIsNone(result)
217+
218+
171219
class TestServerCreate(TestServer):
172220

173221
columns = (

0 commit comments

Comments
 (0)