summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lower-constraints.txt2
-rw-r--r--openstackclient/network/v2/network_rbac.py22
-rw-r--r--openstackclient/network/v2/port.py15
-rw-r--r--openstackclient/tests/unit/network/v2/fakes.py1
-rw-r--r--openstackclient/tests/unit/network/v2/test_network_rbac.py6
-rw-r--r--openstackclient/tests/unit/network/v2/test_port.py49
-rw-r--r--releasenotes/notes/port-device-profile-4a3bf800da21c778.yaml4
-rw-r--r--releasenotes/notes/rbac-add-address-group-f9bb83238b5a7c1f.yaml4
-rw-r--r--requirements.txt2
9 files changed, 94 insertions, 11 deletions
diff --git a/lower-constraints.txt b/lower-constraints.txt
index 25f71e45..f93db8aa 100644
--- a/lower-constraints.txt
+++ b/lower-constraints.txt
@@ -38,7 +38,7 @@ msgpack-python==0.4.0
munch==2.1.0
netaddr==0.7.18
netifaces==0.10.4
-openstacksdk==0.52.0
+openstacksdk==0.53.0
os-client-config==2.1.0
os-service-types==1.7.0
os-testr==1.0.0
diff --git a/openstackclient/network/v2/network_rbac.py b/openstackclient/network/v2/network_rbac.py
index b88ef019..4984e89d 100644
--- a/openstackclient/network/v2/network_rbac.py
+++ b/openstackclient/network/v2/network_rbac.py
@@ -60,6 +60,10 @@ def _get_attrs(client_manager, parsed_args):
object_id = network_client.find_subnet_pool(
parsed_args.rbac_object,
ignore_missing=False).id
+ if parsed_args.type == 'address_group':
+ object_id = network_client.find_address_group(
+ parsed_args.rbac_object,
+ ignore_missing=False).id
attrs['object_id'] = object_id
@@ -100,11 +104,12 @@ class CreateNetworkRBAC(command.ShowOne):
'--type',
metavar="<type>",
required=True,
- choices=['address_scope', 'security_group', 'subnetpool',
- 'qos_policy', 'network'],
+ choices=['address_group', 'address_scope', 'security_group',
+ 'subnetpool', 'qos_policy', 'network'],
help=_('Type of the object that RBAC policy '
- 'affects ("address_scope", "security_group", "subnetpool",'
- ' "qos_policy" or "network")')
+ 'affects ("address_group", "address_scope", '
+ '"security_group", "subnetpool", "qos_policy" or '
+ '"network")')
)
parser.add_argument(
'--action',
@@ -193,11 +198,12 @@ class ListNetworkRBAC(command.Lister):
parser.add_argument(
'--type',
metavar='<type>',
- choices=['address_scope', 'security_group', 'subnetpool',
- 'qos_policy', 'network'],
+ choices=['address_group', 'address_scope', 'security_group',
+ 'subnetpool', 'qos_policy', 'network'],
help=_('List network RBAC policies according to '
- 'given object type ("address_scope", "security_group", '
- '"subnetpool", "qos_policy" or "network")')
+ 'given object type ("address_group", "address_scope", '
+ '"security_group", "subnetpool", "qos_policy" or '
+ '"network")')
)
parser.add_argument(
'--action',
diff --git a/openstackclient/network/v2/port.py b/openstackclient/network/v2/port.py
index cb77759e..6885e147 100644
--- a/openstackclient/network/v2/port.py
+++ b/openstackclient/network/v2/port.py
@@ -168,6 +168,9 @@ def _get_attrs(client_manager, parsed_args):
parsed_args.numa_policy_legacy):
attrs['numa_affinity_policy'] = 'legacy'
+ if 'device_profile' in parsed_args and parsed_args.device_profile:
+ attrs['device_profile'] = parsed_args.device_profile
+
return attrs
@@ -443,6 +446,11 @@ class CreatePort(command.ShowOne):
"ip-address=<ip-address>[,mac-address=<mac-address>] "
"(repeat option to set multiple allowed-address pairs)")
)
+ parser.add_argument(
+ '--device-profile',
+ metavar='<device-profile>',
+ help=_('Cyborg port device profile')
+ )
_tag.add_tag_option_to_parser_for_create(parser, _('port'))
return parser
@@ -592,6 +600,11 @@ class ListPort(command.Lister):
metavar='<project>',
help=_("List ports according to their project (name or ID)")
)
+ parser.add_argument(
+ '--name',
+ metavar='<name>',
+ help=_("List ports according to their name")
+ )
identity_common.add_project_domain_option_to_parser(parser)
parser.add_argument(
'--fixed-ip',
@@ -659,6 +672,8 @@ class ListPort(command.Lister):
).id
filters['tenant_id'] = project_id
filters['project_id'] = project_id
+ if parsed_args.name:
+ filters['name'] = parsed_args.name
if parsed_args.fixed_ip:
filters['fixed_ips'] = _prepare_filter_fixed_ips(
self.app.client_manager, parsed_args)
diff --git a/openstackclient/tests/unit/network/v2/fakes.py b/openstackclient/tests/unit/network/v2/fakes.py
index d6906690..e5023d43 100644
--- a/openstackclient/tests/unit/network/v2/fakes.py
+++ b/openstackclient/tests/unit/network/v2/fakes.py
@@ -697,6 +697,7 @@ class FakePort(object):
'description': 'description-' + uuid.uuid4().hex,
'device_id': 'device-id-' + uuid.uuid4().hex,
'device_owner': 'compute:nova',
+ 'device_profile': 'cyborg_device_profile_1',
'dns_assignment': [{}],
'dns_domain': 'dns-domain-' + uuid.uuid4().hex,
'dns_name': 'dns-name-' + uuid.uuid4().hex,
diff --git a/openstackclient/tests/unit/network/v2/test_network_rbac.py b/openstackclient/tests/unit/network/v2/test_network_rbac.py
index d7c71ea7..08be64c5 100644
--- a/openstackclient/tests/unit/network/v2/test_network_rbac.py
+++ b/openstackclient/tests/unit/network/v2/test_network_rbac.py
@@ -42,6 +42,7 @@ class TestCreateNetworkRBAC(TestNetworkRBAC):
sg_object = network_fakes.FakeNetworkSecGroup.create_one_security_group()
as_object = network_fakes.FakeAddressScope.create_one_address_scope()
snp_object = network_fakes.FakeSubnetPool.create_one_subnet_pool()
+ ag_object = network_fakes.FakeAddressGroup.create_one_address_group()
project = identity_fakes_v3.FakeProject.create_one_project()
rbac_policy = network_fakes.FakeNetworkRBAC.create_one_network_rbac(
attrs={'tenant_id': project.id,
@@ -85,6 +86,8 @@ class TestCreateNetworkRBAC(TestNetworkRBAC):
return_value=self.as_object)
self.network.find_subnet_pool = mock.Mock(
return_value=self.snp_object)
+ self.network.find_address_group = mock.Mock(
+ return_value=self.ag_object)
self.projects_mock.get.return_value = self.project
def test_network_rbac_create_no_type(self):
@@ -236,7 +239,8 @@ class TestCreateNetworkRBAC(TestNetworkRBAC):
('qos_policy', "qos_object"),
('security_group', "sg_object"),
('subnetpool', "snp_object"),
- ('address_scope', "as_object")
+ ('address_scope', "as_object"),
+ ('address_group', "ag_object")
)
@ddt.unpack
def test_network_rbac_create_object(self, obj_type, obj_fake_attr):
diff --git a/openstackclient/tests/unit/network/v2/test_port.py b/openstackclient/tests/unit/network/v2/test_port.py
index e21f9d01..8c5158d7 100644
--- a/openstackclient/tests/unit/network/v2/test_port.py
+++ b/openstackclient/tests/unit/network/v2/test_port.py
@@ -54,6 +54,7 @@ class TestPort(network_fakes.TestNetworkV2):
'description',
'device_id',
'device_owner',
+ 'device_profile',
'dns_assignment',
'dns_domain',
'dns_name',
@@ -86,6 +87,7 @@ class TestPort(network_fakes.TestNetworkV2):
fake_port.description,
fake_port.device_id,
fake_port.device_owner,
+ fake_port.device_profile,
format_columns.ListDictColumn(fake_port.dns_assignment),
fake_port.dns_domain,
fake_port.dns_name,
@@ -737,6 +739,33 @@ class TestCreatePort(TestPort):
def test_create_with_numa_affinity_policy_null(self):
self._test_create_with_numa_affinity_policy()
+ def test_create_with_device_profile(self):
+ arglist = [
+ '--network', self._port.network_id,
+ '--device-profile', 'cyborg_device_profile_1',
+ 'test-port',
+ ]
+
+ verifylist = [
+ ('network', self._port.network_id,),
+ ('device_profile', self._port.device_profile,),
+ ('name', 'test-port'),
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ columns, data = (self.cmd.take_action(parsed_args))
+
+ create_args = {
+ 'admin_state_up': True,
+ 'network_id': self._port.network_id,
+ 'name': 'test-port',
+ 'device_profile': 'cyborg_device_profile_1',
+ }
+ self.network.create_port.assert_called_once_with(**create_args)
+ self.assertEqual(self.columns, columns)
+ self.assertItemsEqual(self.data, data)
+
class TestDeletePort(TestPort):
@@ -1221,6 +1250,26 @@ class TestListPort(TestPort):
self.assertEqual(self.columns, columns)
self.assertItemsEqual(self.data, list(data))
+ def test_port_list_name(self):
+ test_name = "fakename"
+ arglist = [
+ '--name', test_name,
+ ]
+ verifylist = [
+ ('name', test_name),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ columns, data = self.cmd.take_action(parsed_args)
+ filters = {
+ 'name': test_name,
+ 'fields': LIST_FIELDS_TO_RETRIEVE,
+ }
+
+ self.network.ports.assert_called_once_with(**filters)
+ self.assertEqual(self.columns, columns)
+ self.assertItemsEqual(self.data, list(data))
+
def test_list_with_tag_options(self):
arglist = [
'--tags', 'red,blue',
diff --git a/releasenotes/notes/port-device-profile-4a3bf800da21c778.yaml b/releasenotes/notes/port-device-profile-4a3bf800da21c778.yaml
new file mode 100644
index 00000000..db0d495f
--- /dev/null
+++ b/releasenotes/notes/port-device-profile-4a3bf800da21c778.yaml
@@ -0,0 +1,4 @@
+---
+features:
+ - |
+ Add device profile to ``port create`` command.
diff --git a/releasenotes/notes/rbac-add-address-group-f9bb83238b5a7c1f.yaml b/releasenotes/notes/rbac-add-address-group-f9bb83238b5a7c1f.yaml
new file mode 100644
index 00000000..d25da2f0
--- /dev/null
+++ b/releasenotes/notes/rbac-add-address-group-f9bb83238b5a7c1f.yaml
@@ -0,0 +1,4 @@
+features:
+ - |
+ Add ``address_group`` as a valid ``--type`` value for the
+ ``network rbac create`` and ``network rbac list`` commands.
diff --git a/requirements.txt b/requirements.txt
index ad0c50e5..d3a17e9a 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -5,7 +5,7 @@ pbr!=2.1.0,>=2.0.0 # Apache-2.0
cliff>=3.5.0 # Apache-2.0
iso8601>=0.1.11 # MIT
-openstacksdk>=0.52.0 # Apache-2.0
+openstacksdk>=0.53.0 # Apache-2.0
osc-lib>=2.3.0 # Apache-2.0
oslo.i18n>=3.15.3 # Apache-2.0
oslo.utils>=3.33.0 # Apache-2.0