Add create method for security groups
Adds the API method to create a security group, using nova or neutron. Change-Id: I495c8272220837982b7e1f880646748a30b7d727
This commit is contained in:
@@ -2327,6 +2327,53 @@ class OpenStackCloud(object):
|
||||
"failed to delete port '{port}': {msg}".format(
|
||||
port=name_or_id, msg=str(e)))
|
||||
|
||||
def create_security_group(self, name, description):
|
||||
"""Create a new security group
|
||||
|
||||
:param string name: A name for the security group.
|
||||
:param string description: Describes the security group.
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: OpenStackCloudUnavailableFeature if security groups are
|
||||
not supported on this cloud.
|
||||
"""
|
||||
if self.secgroup_source == 'neutron':
|
||||
try:
|
||||
self.manager.submitTask(
|
||||
_tasks.NeutronSecurityGroupCreate(
|
||||
body=dict(security_group=dict(name=name,
|
||||
description=description))
|
||||
)
|
||||
)
|
||||
except Exception as e:
|
||||
self.log.debug(
|
||||
"neutron failed to create security group '{name}'".format(
|
||||
name=name), exc_info=True)
|
||||
raise OpenStackCloudException(
|
||||
"failed to create security group '{name}': {msg}".format(
|
||||
name=name, msg=str(e)))
|
||||
|
||||
elif self.secgroup_source == 'nova':
|
||||
try:
|
||||
self.manager.submitTask(
|
||||
_tasks.NovaSecurityGroupCreate(
|
||||
name=name, description=description
|
||||
)
|
||||
)
|
||||
except Exception as e:
|
||||
self.log.debug(
|
||||
"nova failed to create security group '{name}'".format(
|
||||
name=name), exc_info=True)
|
||||
raise OpenStackCloudException(
|
||||
"failed to create security group '{name}': {msg}".format(
|
||||
name=name, msg=str(e)))
|
||||
|
||||
# Security groups not supported
|
||||
else:
|
||||
raise OpenStackCloudUnavailableFeature(
|
||||
"Unavailable feature: security groups"
|
||||
)
|
||||
|
||||
def delete_security_group(self, name_or_id):
|
||||
"""Delete a security group
|
||||
|
||||
|
||||
@@ -197,6 +197,11 @@ class NeutronSecurityGroupList(task_manager.Task):
|
||||
return client.neutron_client.list_security_groups()
|
||||
|
||||
|
||||
class NeutronSecurityGroupCreate(task_manager.Task):
|
||||
def main(self, client):
|
||||
return client.neutron_client.create_security_group(**self.args)
|
||||
|
||||
|
||||
class NeutronSecurityGroupDelete(task_manager.Task):
|
||||
def main(self, client):
|
||||
return client.neutron_client.delete_security_group(**self.args)
|
||||
@@ -207,6 +212,11 @@ class NovaSecurityGroupList(task_manager.Task):
|
||||
return client.nova_client.security_groups.list()
|
||||
|
||||
|
||||
class NovaSecurityGroupCreate(task_manager.Task):
|
||||
def main(self, client):
|
||||
return client.nova_client.security_groups.create(**self.args)
|
||||
|
||||
|
||||
class NovaSecurityGroupDelete(task_manager.Task):
|
||||
def main(self, client):
|
||||
return client.nova_client.security_groups.delete(**self.args)
|
||||
|
||||
@@ -125,3 +125,34 @@ class TestSecurityGroups(base.TestCase):
|
||||
'doesNotExist')
|
||||
self.assertFalse(mock_neutron.delete_security_group.called)
|
||||
self.assertFalse(mock_nova.security_groups.delete.called)
|
||||
|
||||
@mock.patch.object(shade.OpenStackCloud, 'neutron_client')
|
||||
def test_create_security_group_neutron(self, mock_neutron):
|
||||
self.cloud.secgroup_source = 'neutron'
|
||||
group_name = self.getUniqueString()
|
||||
group_desc = 'security group from test_create_security_group_neutron'
|
||||
self.cloud.create_security_group(group_name, group_desc)
|
||||
mock_neutron.create_security_group.assert_called_once_with(
|
||||
body=dict(security_group=dict(name=group_name,
|
||||
description=group_desc))
|
||||
)
|
||||
|
||||
@mock.patch.object(shade.OpenStackCloud, 'nova_client')
|
||||
def test_create_security_group_nova(self, mock_nova):
|
||||
self.cloud.secgroup_source = 'nova'
|
||||
group_name = self.getUniqueString()
|
||||
group_desc = 'security group from test_create_security_group_neutron'
|
||||
self.cloud.create_security_group(group_name, group_desc)
|
||||
mock_nova.security_groups.create.assert_called_once_with(
|
||||
name=group_name, description=group_desc
|
||||
)
|
||||
|
||||
@mock.patch.object(shade.OpenStackCloud, 'neutron_client')
|
||||
@mock.patch.object(shade.OpenStackCloud, 'nova_client')
|
||||
def test_create_security_group_none(self, mock_nova, mock_neutron):
|
||||
self.cloud.secgroup_source = None
|
||||
self.assertRaises(shade.OpenStackCloudUnavailableFeature,
|
||||
self.cloud.create_security_group,
|
||||
'', '')
|
||||
self.assertFalse(mock_neutron.create_security_group.called)
|
||||
self.assertFalse(mock_nova.security_groups.create.called)
|
||||
|
||||
Reference in New Issue
Block a user