compute: Migrate 'server add/remove security group' to SDK · openstack/python-openstackclient@abef798 · GitHub
Skip to content

Commit abef798

Browse files
committed
compute: Migrate 'server add/remove security group' to SDK
We need to work around SDK's (intentional) lack of support for Nova's deprecated '/os-security-groups' API but it's nothing too crazy. Change-Id: I03ca1a73f98aa77b288148607baff336dae69fb1 Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
1 parent 9d39437 commit abef798

4 files changed

Lines changed: 282 additions & 66 deletions

File tree

openstackclient/api/compute_v2.py

Lines changed: 45 additions & 1 deletion

openstackclient/compute/v2/server.py

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
from osc_lib import exceptions
3333
from osc_lib import utils
3434

35+
from openstackclient.api import compute_v2
3536
from openstackclient.common import pagination
3637
from openstackclient.i18n import _
3738
from openstackclient.identity import common as identity_common
@@ -677,17 +678,21 @@ def get_parser(self, prog_name):
677678
return parser
678679

679680
def take_action(self, parsed_args):
680-
compute_client = self.app.client_manager.compute
681+
compute_client = self.app.client_manager.sdk_connection.compute
681682

682-
server = utils.find_resource(
683-
compute_client.servers,
684-
parsed_args.server,
685-
)
686-
security_group = compute_client.api.security_group_find(
687-
parsed_args.group,
683+
server = compute_client.find_server(
684+
parsed_args.server, ignore_missing=False
688685
)
689-
690-
server.add_security_group(security_group['id'])
686+
if self.app.client_manager.is_network_endpoint_enabled():
687+
# the server handles both names and IDs for neutron SGs, so just
688+
# pass things through
689+
security_group = parsed_args.group
690+
else:
691+
# however, if using nova-network then it needs a name, not an ID
692+
security_group = compute_v2.find_security_group(
693+
compute_client, parsed_args.group
694+
)['name']
695+
compute_client.add_security_group_to_server(server, security_group)
691696

692697

693698
class AddServerVolume(command.ShowOne):
@@ -3960,28 +3965,34 @@ def get_parser(self, prog_name):
39603965
parser.add_argument(
39613966
'server',
39623967
metavar='<server>',
3963-
help=_('Name or ID of server to use'),
3968+
help=_('Server (name or ID)'),
39643969
)
39653970
parser.add_argument(
39663971
'group',
39673972
metavar='<group>',
3968-
help=_('Name or ID of security group to remove from server'),
3973+
help=_('Security group to remove (name or ID)'),
39693974
)
39703975
return parser
39713976

39723977
def take_action(self, parsed_args):
3973-
compute_client = self.app.client_manager.compute
3978+
compute_client = self.app.client_manager.sdk_connection.compute
39743979

3975-
server = utils.find_resource(
3976-
compute_client.servers,
3977-
parsed_args.server,
3980+
server = compute_client.find_server(
3981+
parsed_args.server, ignore_missing=False
39783982
)
3979-
security_group = compute_client.api.security_group_find(
3980-
parsed_args.group,
3983+
if self.app.client_manager.is_network_endpoint_enabled():
3984+
# the server handles both names and IDs for neutron SGs, so just
3985+
# pass things through
3986+
security_group = parsed_args.group
3987+
else:
3988+
# however, if using nova-network then it needs a name, not an ID
3989+
security_group = compute_v2.find_security_group(
3990+
compute_client, parsed_args.group
3991+
)['name']
3992+
compute_client.remove_security_group_from_server(
3993+
server, security_group
39813994
)
39823995

3983-
server.remove_security_group(security_group['id'])
3984-
39853996

39863997
class RemoveServerVolume(command.Command):
39873998
_description = _(

openstackclient/tests/unit/api/test_compute_v2.py

Lines changed: 115 additions & 0 deletions

0 commit comments

Comments
 (0)