python-openstackclient 8.0.0__py3-none-any.whl → 8.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- openstackclient/compute/client.py +5 -0
- openstackclient/compute/v2/console.py +7 -0
- openstackclient/compute/v2/console_connection.py +48 -0
- openstackclient/compute/v2/keypair.py +10 -3
- openstackclient/compute/v2/server.py +75 -10
- openstackclient/compute/v2/server_event.py +1 -1
- openstackclient/identity/common.py +79 -0
- openstackclient/identity/v3/application_credential.py +2 -2
- openstackclient/identity/v3/domain.py +62 -43
- openstackclient/identity/v3/group.py +113 -68
- openstackclient/identity/v3/project.py +17 -0
- openstackclient/identity/v3/user.py +38 -5
- openstackclient/image/client.py +5 -0
- openstackclient/image/v2/image.py +11 -11
- openstackclient/network/client.py +0 -6
- openstackclient/network/v2/floating_ip.py +58 -29
- openstackclient/network/v2/network_qos_rule.py +3 -11
- openstackclient/network/v2/router.py +1 -1
- openstackclient/network/v2/security_group.py +5 -4
- openstackclient/network/v2/security_group_rule.py +1 -1
- openstackclient/shell.py +1 -1
- openstackclient/tests/functional/base.py +5 -1
- openstackclient/tests/functional/compute/v2/test_keypair.py +41 -5
- openstackclient/tests/unit/compute/v2/fakes.py +81 -305
- openstackclient/tests/unit/compute/v2/test_console.py +18 -1
- openstackclient/tests/unit/compute/v2/test_console_connection.py +72 -0
- openstackclient/tests/unit/compute/v2/test_flavor.py +1 -1
- openstackclient/tests/unit/compute/v2/test_keypair.py +12 -5
- openstackclient/tests/unit/compute/v2/test_server.py +169 -46
- openstackclient/tests/unit/compute/v2/test_server_backup.py +32 -71
- openstackclient/tests/unit/compute/v2/test_server_event.py +2 -2
- openstackclient/tests/unit/compute/v2/test_server_image.py +33 -72
- openstackclient/tests/unit/compute/v2/test_server_migration.py +4 -4
- openstackclient/tests/unit/identity/v3/test_application_credential.py +47 -25
- openstackclient/tests/unit/identity/v3/test_domain.py +115 -105
- openstackclient/tests/unit/identity/v3/test_group.py +353 -202
- openstackclient/tests/unit/identity/v3/test_project.py +16 -0
- openstackclient/tests/unit/identity/v3/test_user.py +86 -6
- openstackclient/tests/unit/image/v1/test_image.py +8 -9
- openstackclient/tests/unit/image/v2/test_image.py +49 -49
- openstackclient/tests/unit/network/v2/fakes.py +405 -485
- openstackclient/tests/unit/network/v2/test_floating_ip_network.py +13 -19
- openstackclient/tests/unit/network/v2/test_l3_conntrack_helper.py +2 -2
- openstackclient/tests/unit/network/v2/test_ndp_proxy.py +1 -3
- openstackclient/tests/unit/network/v2/test_network.py +4 -4
- openstackclient/tests/unit/network/v2/test_network_agent.py +15 -29
- openstackclient/tests/unit/network/v2/test_network_qos_policy.py +16 -19
- openstackclient/tests/unit/network/v2/test_network_qos_rule.py +79 -152
- openstackclient/tests/unit/network/v2/test_network_qos_rule_type.py +4 -6
- openstackclient/tests/unit/network/v2/test_network_rbac.py +2 -2
- openstackclient/tests/unit/network/v2/test_port.py +17 -17
- openstackclient/tests/unit/network/v2/test_router.py +73 -57
- openstackclient/tests/unit/network/v2/test_security_group_network.py +25 -27
- openstackclient/tests/unit/network/v2/test_security_group_rule_compute.py +1 -3
- openstackclient/tests/unit/network/v2/test_security_group_rule_network.py +33 -39
- openstackclient/tests/unit/volume/v2/fakes.py +1 -2
- openstackclient/tests/unit/volume/v2/test_service.py +57 -91
- openstackclient/tests/unit/volume/v2/test_volume.py +108 -105
- openstackclient/tests/unit/volume/v2/test_volume_backup.py +141 -148
- openstackclient/tests/unit/volume/v2/test_volume_snapshot.py +293 -283
- openstackclient/tests/unit/volume/v3/test_block_storage_log_level.py +61 -71
- openstackclient/tests/unit/volume/v3/test_service.py +221 -141
- openstackclient/tests/unit/volume/v3/test_volume.py +130 -119
- openstackclient/tests/unit/volume/v3/test_volume_attachment.py +1 -1
- openstackclient/tests/unit/volume/v3/test_volume_backup.py +198 -203
- openstackclient/tests/unit/volume/v3/test_volume_snapshot.py +682 -47
- openstackclient/volume/v2/service.py +41 -38
- openstackclient/volume/v2/volume.py +63 -37
- openstackclient/volume/v2/volume_backup.py +9 -3
- openstackclient/volume/v2/volume_snapshot.py +121 -84
- openstackclient/volume/v3/block_storage_log_level.py +22 -28
- openstackclient/volume/v3/service.py +105 -14
- openstackclient/volume/v3/volume.py +200 -39
- openstackclient/volume/v3/volume_backup.py +24 -19
- openstackclient/volume/v3/volume_snapshot.py +485 -10
- {python_openstackclient-8.0.0.dist-info → python_openstackclient-8.1.0.dist-info}/AUTHORS +8 -0
- python_openstackclient-8.1.0.dist-info/METADATA +264 -0
- {python_openstackclient-8.0.0.dist-info → python_openstackclient-8.1.0.dist-info}/RECORD +83 -81
- {python_openstackclient-8.0.0.dist-info → python_openstackclient-8.1.0.dist-info}/entry_points.txt +7 -6
- python_openstackclient-8.1.0.dist-info/pbr.json +1 -0
- python_openstackclient-8.0.0.dist-info/METADATA +0 -166
- python_openstackclient-8.0.0.dist-info/pbr.json +0 -1
- {python_openstackclient-8.0.0.dist-info → python_openstackclient-8.1.0.dist-info}/LICENSE +0 -0
- {python_openstackclient-8.0.0.dist-info → python_openstackclient-8.1.0.dist-info}/WHEEL +0 -0
- {python_openstackclient-8.0.0.dist-info → python_openstackclient-8.1.0.dist-info}/top_level.txt +0 -0
|
@@ -73,7 +73,7 @@ ACTION_SHOW = 'get'
|
|
|
73
73
|
|
|
74
74
|
|
|
75
75
|
def _get_columns(item):
|
|
76
|
-
hidden_columns = ['location', 'tenant_id']
|
|
76
|
+
hidden_columns = ['location', 'name', 'tenant_id']
|
|
77
77
|
return utils.get_osc_show_columns_for_sdk_resource(
|
|
78
78
|
item, {}, hidden_columns
|
|
79
79
|
)
|
|
@@ -148,14 +148,6 @@ def _get_attrs(network_client, parsed_args, is_create=False):
|
|
|
148
148
|
return attrs
|
|
149
149
|
|
|
150
150
|
|
|
151
|
-
def _get_item_properties(item, fields):
|
|
152
|
-
"""Return a tuple containing the item properties."""
|
|
153
|
-
row = []
|
|
154
|
-
for field in fields:
|
|
155
|
-
row.append(item.get(field, ''))
|
|
156
|
-
return tuple(row)
|
|
157
|
-
|
|
158
|
-
|
|
159
151
|
def _rule_action_call(client, action, rule_type):
|
|
160
152
|
rule_type = rule_type.replace('-', '_')
|
|
161
153
|
func_name = f'{action}_qos_{rule_type}_rule'
|
|
@@ -357,10 +349,10 @@ class ListNetworkQosRule(command.Lister):
|
|
|
357
349
|
qos = client.find_qos_policy(
|
|
358
350
|
parsed_args.qos_policy, ignore_missing=False
|
|
359
351
|
)
|
|
360
|
-
|
|
352
|
+
|
|
361
353
|
return (
|
|
362
354
|
column_headers,
|
|
363
|
-
(
|
|
355
|
+
(utils.get_dict_properties(s, columns) for s in qos.rules),
|
|
364
356
|
)
|
|
365
357
|
|
|
366
358
|
|
|
@@ -76,7 +76,7 @@ def _get_columns(item):
|
|
|
76
76
|
}
|
|
77
77
|
if hasattr(item, 'interfaces_info'):
|
|
78
78
|
column_map['interfaces_info'] = 'interfaces_info'
|
|
79
|
-
invisible_columns = ['location']
|
|
79
|
+
invisible_columns = ['location', 'tenant_id']
|
|
80
80
|
if item.is_ha is None:
|
|
81
81
|
invisible_columns.append('is_ha')
|
|
82
82
|
column_map.pop('is_ha')
|
|
@@ -89,9 +89,8 @@ def _get_columns(item):
|
|
|
89
89
|
# We still support Nova managed security groups, where we have tenant_id.
|
|
90
90
|
column_map = {
|
|
91
91
|
'security_group_rules': 'rules',
|
|
92
|
-
'tenant_id': 'project_id',
|
|
93
92
|
}
|
|
94
|
-
hidden_columns = ['location']
|
|
93
|
+
hidden_columns = ['location', 'tenant_id']
|
|
95
94
|
return utils.get_osc_show_columns_for_sdk_resource(
|
|
96
95
|
item, column_map, hidden_columns
|
|
97
96
|
)
|
|
@@ -186,7 +185,8 @@ class CreateSecurityGroup(
|
|
|
186
185
|
parsed_args.name,
|
|
187
186
|
description,
|
|
188
187
|
)
|
|
189
|
-
display_columns,
|
|
188
|
+
display_columns = ('description', 'id', 'name', 'project_id', 'rules')
|
|
189
|
+
property_columns = ('description', 'id', 'name', 'tenant_id', 'rules')
|
|
190
190
|
data = utils.get_dict_properties(
|
|
191
191
|
obj, property_columns, formatters=_formatters_compute
|
|
192
192
|
)
|
|
@@ -420,7 +420,8 @@ class ShowSecurityGroup(common.NetworkAndComputeShowOne):
|
|
|
420
420
|
|
|
421
421
|
def take_action_compute(self, client, parsed_args):
|
|
422
422
|
obj = compute_v2.find_security_group(client, parsed_args.group)
|
|
423
|
-
display_columns,
|
|
423
|
+
display_columns = ('description', 'id', 'name', 'project_id', 'rules')
|
|
424
|
+
property_columns = ('description', 'id', 'name', 'tenant_id', 'rules')
|
|
424
425
|
data = utils.get_dict_properties(
|
|
425
426
|
obj, property_columns, formatters=_formatters_compute
|
|
426
427
|
)
|
|
@@ -30,7 +30,7 @@ LOG = logging.getLogger(__name__)
|
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
def _get_columns(item):
|
|
33
|
-
hidden_columns = ['location', 'tenant_id']
|
|
33
|
+
hidden_columns = ['location', 'name', 'tenant_id', 'tags']
|
|
34
34
|
return utils.get_osc_show_columns_for_sdk_resource(
|
|
35
35
|
item, {}, hidden_columns
|
|
36
36
|
)
|
openstackclient/shell.py
CHANGED
|
@@ -94,7 +94,7 @@ class OpenStackShell(shell.OpenStackShell):
|
|
|
94
94
|
# instead.
|
|
95
95
|
mod_versions = getattr(mod, 'API_VERSIONS', None)
|
|
96
96
|
if mod_versions is not None and not isinstance(
|
|
97
|
-
mod_versions,
|
|
97
|
+
mod_versions, dict | tuple
|
|
98
98
|
):
|
|
99
99
|
raise TypeError(
|
|
100
100
|
f'Plugin {mod} has incompatible API_VERSIONS. '
|
|
@@ -97,7 +97,11 @@ class TestCase(testtools.TestCase):
|
|
|
97
97
|
)
|
|
98
98
|
|
|
99
99
|
if parse_output:
|
|
100
|
-
|
|
100
|
+
try:
|
|
101
|
+
return json.loads(output)
|
|
102
|
+
except json.JSONDecodeError:
|
|
103
|
+
print(f'failed to decode: {output}')
|
|
104
|
+
raise
|
|
101
105
|
else:
|
|
102
106
|
return output
|
|
103
107
|
|
|
@@ -21,12 +21,18 @@ from openstackclient.tests.functional import base
|
|
|
21
21
|
class KeypairBase(base.TestCase):
|
|
22
22
|
"""Methods for functional tests."""
|
|
23
23
|
|
|
24
|
-
def keypair_create(self, name=data_utils.rand_uuid()):
|
|
24
|
+
def keypair_create(self, name=data_utils.rand_uuid(), user=None):
|
|
25
25
|
"""Create keypair and add cleanup."""
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
cmd = 'keypair create ' + name
|
|
27
|
+
if user is not None:
|
|
28
|
+
cmd += ' --user ' + user
|
|
29
|
+
raw_output = self.openstack(cmd)
|
|
30
|
+
self.addCleanup(
|
|
31
|
+
self.keypair_delete, name, ignore_exceptions=True, user=user
|
|
32
|
+
)
|
|
28
33
|
if not raw_output:
|
|
29
34
|
self.fail('Keypair has not been created!')
|
|
35
|
+
return name
|
|
30
36
|
|
|
31
37
|
def keypair_list(self, params=''):
|
|
32
38
|
"""Return dictionary with list of keypairs."""
|
|
@@ -34,10 +40,13 @@ class KeypairBase(base.TestCase):
|
|
|
34
40
|
keypairs = self.parse_show_as_object(raw_output)
|
|
35
41
|
return keypairs
|
|
36
42
|
|
|
37
|
-
def keypair_delete(self, name, ignore_exceptions=False):
|
|
43
|
+
def keypair_delete(self, name, ignore_exceptions=False, user=None):
|
|
38
44
|
"""Try to delete keypair by name."""
|
|
39
45
|
try:
|
|
40
|
-
|
|
46
|
+
cmd = 'keypair delete ' + name
|
|
47
|
+
if user is not None:
|
|
48
|
+
cmd += ' --user ' + user
|
|
49
|
+
self.openstack(cmd)
|
|
41
50
|
except exceptions.CommandFailed:
|
|
42
51
|
if not ignore_exceptions:
|
|
43
52
|
raise
|
|
@@ -200,3 +209,30 @@ class KeypairTests(KeypairBase):
|
|
|
200
209
|
items = self.parse_listing(raw_output)
|
|
201
210
|
self.assert_table_structure(items, HEADERS)
|
|
202
211
|
self.assertInOutput(self.KPName, raw_output)
|
|
212
|
+
|
|
213
|
+
def test_keypair_list_by_project(self):
|
|
214
|
+
"""Test keypair list by project.
|
|
215
|
+
|
|
216
|
+
Test steps:
|
|
217
|
+
1) Create keypair for admin project in setUp
|
|
218
|
+
2) Create a new project
|
|
219
|
+
3) Create a new user
|
|
220
|
+
4) Associate the new user with the new project
|
|
221
|
+
5) Create keypair for the new user
|
|
222
|
+
6) List keypairs by the new project
|
|
223
|
+
7) Check that only the keypair from step 5 is returned
|
|
224
|
+
"""
|
|
225
|
+
project_name = data_utils.rand_name('TestProject')
|
|
226
|
+
self.openstack(f'project create {project_name}')
|
|
227
|
+
self.addCleanup(self.openstack, f'project delete {project_name}')
|
|
228
|
+
user_name = data_utils.rand_name('TestUser')
|
|
229
|
+
self.openstack(f'user create {user_name}')
|
|
230
|
+
self.addCleanup(self.openstack, f'user delete {user_name}')
|
|
231
|
+
self.openstack(
|
|
232
|
+
f'role add --user {user_name} --project {project_name} member'
|
|
233
|
+
)
|
|
234
|
+
keypair_name = self.keypair_create(user=user_name)
|
|
235
|
+
raw_output = self.openstack(f'keypair list --project {project_name}')
|
|
236
|
+
items = self.parse_listing(raw_output)
|
|
237
|
+
self.assertEqual(1, len(items))
|
|
238
|
+
self.assertEqual(keypair_name, items[0]['Name'])
|