python-openstackclient 8.1.0__py3-none-any.whl → 8.3.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/api/compute_v2.py +2 -2
- openstackclient/api/object_store_v1.py +4 -1
- openstackclient/api/volume_v2.py +60 -0
- openstackclient/api/volume_v3.py +60 -0
- openstackclient/command.py +27 -0
- openstackclient/common/availability_zone.py +1 -1
- openstackclient/common/clientmanager.py +59 -21
- openstackclient/common/configuration.py +1 -1
- openstackclient/common/extension.py +1 -1
- openstackclient/common/limits.py +1 -1
- openstackclient/common/module.py +4 -2
- openstackclient/common/project_cleanup.py +10 -8
- openstackclient/common/quota.py +23 -6
- openstackclient/common/versions.py +1 -2
- openstackclient/compute/v2/agent.py +1 -1
- openstackclient/compute/v2/aggregate.py +6 -5
- openstackclient/compute/v2/console.py +5 -3
- openstackclient/compute/v2/console_connection.py +1 -1
- openstackclient/compute/v2/flavor.py +15 -2
- openstackclient/compute/v2/host.py +1 -1
- openstackclient/compute/v2/hypervisor.py +1 -1
- openstackclient/compute/v2/hypervisor_stats.py +1 -1
- openstackclient/compute/v2/keypair.py +1 -1
- openstackclient/compute/v2/server.py +77 -30
- openstackclient/compute/v2/server_backup.py +1 -1
- openstackclient/compute/v2/server_event.py +1 -1
- openstackclient/compute/v2/server_group.py +4 -2
- openstackclient/compute/v2/server_image.py +1 -1
- openstackclient/compute/v2/server_migration.py +1 -1
- openstackclient/compute/v2/server_volume.py +1 -1
- openstackclient/compute/v2/service.py +1 -1
- openstackclient/compute/v2/usage.py +6 -4
- openstackclient/identity/common.py +10 -14
- openstackclient/identity/v2_0/catalog.py +3 -2
- openstackclient/identity/v2_0/ec2creds.py +1 -1
- openstackclient/identity/v2_0/endpoint.py +1 -1
- openstackclient/identity/v2_0/project.py +17 -7
- openstackclient/identity/v2_0/role.py +1 -1
- openstackclient/identity/v2_0/role_assignment.py +3 -3
- openstackclient/identity/v2_0/service.py +1 -1
- openstackclient/identity/v2_0/token.py +1 -1
- openstackclient/identity/v2_0/user.py +2 -2
- openstackclient/identity/v3/access_rule.py +16 -4
- openstackclient/identity/v3/application_credential.py +116 -95
- openstackclient/identity/v3/catalog.py +3 -3
- openstackclient/identity/v3/consumer.py +1 -1
- openstackclient/identity/v3/credential.py +1 -1
- openstackclient/identity/v3/domain.py +15 -10
- openstackclient/identity/v3/ec2creds.py +1 -1
- openstackclient/identity/v3/endpoint.py +33 -12
- openstackclient/identity/v3/endpoint_group.py +1 -1
- openstackclient/identity/v3/federation_protocol.py +1 -1
- openstackclient/identity/v3/group.py +11 -5
- openstackclient/identity/v3/identity_provider.py +12 -10
- openstackclient/identity/v3/implied_role.py +1 -1
- openstackclient/identity/v3/limit.py +1 -1
- openstackclient/identity/v3/mapping.py +1 -1
- openstackclient/identity/v3/policy.py +1 -1
- openstackclient/identity/v3/project.py +34 -22
- openstackclient/identity/v3/region.py +1 -1
- openstackclient/identity/v3/registered_limit.py +16 -11
- openstackclient/identity/v3/role.py +27 -41
- openstackclient/identity/v3/role_assignment.py +12 -23
- openstackclient/identity/v3/service.py +1 -1
- openstackclient/identity/v3/service_provider.py +1 -1
- openstackclient/identity/v3/tag.py +3 -2
- openstackclient/identity/v3/token.py +3 -2
- openstackclient/identity/v3/trust.py +4 -2
- openstackclient/identity/v3/unscoped_saml.py +1 -1
- openstackclient/identity/v3/user.py +22 -13
- openstackclient/image/v1/image.py +35 -17
- openstackclient/image/v2/cache.py +11 -7
- openstackclient/image/v2/image.py +62 -12
- openstackclient/image/v2/info.py +1 -1
- openstackclient/image/v2/metadef_namespaces.py +1 -1
- openstackclient/image/v2/metadef_objects.py +9 -3
- openstackclient/image/v2/metadef_properties.py +11 -3
- openstackclient/image/v2/metadef_resource_type_association.py +1 -1
- openstackclient/image/v2/metadef_resource_types.py +1 -1
- openstackclient/image/v2/task.py +1 -1
- openstackclient/network/common.py +10 -9
- openstackclient/network/v2/address_group.py +4 -3
- openstackclient/network/v2/address_scope.py +8 -6
- openstackclient/network/v2/default_security_group_rule.py +9 -8
- openstackclient/network/v2/floating_ip.py +16 -9
- openstackclient/network/v2/floating_ip_port_forwarding.py +9 -6
- openstackclient/network/v2/ip_availability.py +7 -4
- openstackclient/network/v2/l3_conntrack_helper.py +11 -4
- openstackclient/network/v2/local_ip.py +13 -7
- openstackclient/network/v2/local_ip_association.py +7 -4
- openstackclient/network/v2/ndp_proxy.py +13 -6
- openstackclient/network/v2/network.py +33 -16
- openstackclient/network/v2/network_agent.py +5 -5
- openstackclient/network/v2/network_auto_allocated_topology.py +1 -1
- openstackclient/network/v2/network_flavor.py +1 -1
- openstackclient/network/v2/network_flavor_profile.py +1 -1
- openstackclient/network/v2/network_meter.py +1 -1
- openstackclient/network/v2/network_meter_rule.py +1 -1
- openstackclient/network/v2/network_qos_policy.py +7 -5
- openstackclient/network/v2/network_qos_rule.py +1 -1
- openstackclient/network/v2/network_qos_rule_type.py +1 -1
- openstackclient/network/v2/network_rbac.py +8 -5
- openstackclient/network/v2/network_segment.py +2 -2
- openstackclient/network/v2/network_segment_range.py +13 -6
- openstackclient/network/v2/network_service_provider.py +1 -1
- openstackclient/network/v2/network_trunk.py +65 -42
- openstackclient/network/v2/port.py +38 -20
- openstackclient/network/v2/router.py +19 -8
- openstackclient/network/v2/security_group.py +52 -7
- openstackclient/network/v2/security_group_rule.py +27 -4
- openstackclient/network/v2/subnet.py +17 -18
- openstackclient/network/v2/subnet_pool.py +11 -9
- openstackclient/network/v2/taas/__init__.py +0 -0
- openstackclient/network/v2/taas/tap_flow.py +245 -0
- openstackclient/network/v2/taas/tap_mirror.py +237 -0
- openstackclient/network/v2/taas/tap_service.py +211 -0
- openstackclient/object/v1/account.py +1 -1
- openstackclient/object/v1/container.py +1 -1
- openstackclient/object/v1/object.py +1 -1
- openstackclient/shell.py +18 -8
- openstackclient/tests/functional/identity/v3/test_access_rule.py +1 -1
- openstackclient/tests/functional/identity/v3/test_application_credential.py +7 -7
- openstackclient/tests/functional/identity/v3/test_catalog.py +42 -23
- openstackclient/tests/functional/identity/v3/test_role_assignment.py +174 -0
- openstackclient/tests/functional/image/v2/test_cache.py +54 -0
- openstackclient/tests/functional/image/v2/test_image.py +36 -14
- openstackclient/tests/functional/image/v2/test_metadef_resource_type.py +55 -0
- openstackclient/tests/functional/volume/v2/test_volume.py +1 -1
- openstackclient/tests/functional/volume/v3/test_volume.py +2 -2
- openstackclient/tests/unit/api/test_volume_v2.py +124 -0
- openstackclient/tests/unit/api/test_volume_v3.py +124 -0
- openstackclient/tests/unit/common/test_command.py +1 -1
- openstackclient/tests/unit/common/test_extension.py +2 -3
- openstackclient/tests/unit/common/test_module.py +14 -7
- openstackclient/tests/unit/common/test_quota.py +20 -0
- openstackclient/tests/unit/compute/v2/test_aggregate.py +5 -3
- openstackclient/tests/unit/compute/v2/test_console.py +1 -4
- openstackclient/tests/unit/compute/v2/test_flavor.py +160 -177
- openstackclient/tests/unit/compute/v2/test_hypervisor_stats.py +1 -9
- openstackclient/tests/unit/compute/v2/test_server.py +406 -81
- openstackclient/tests/unit/compute/v2/test_server_backup.py +1 -3
- openstackclient/tests/unit/compute/v2/test_service.py +1 -3
- openstackclient/tests/unit/fakes.py +35 -134
- openstackclient/tests/unit/identity/test_common.py +100 -0
- openstackclient/tests/unit/identity/v2_0/test_project.py +4 -4
- openstackclient/tests/unit/identity/v3/fakes.py +10 -2
- openstackclient/tests/unit/identity/v3/test_application_credential.py +50 -44
- openstackclient/tests/unit/identity/v3/test_domain.py +3 -3
- openstackclient/tests/unit/identity/v3/test_endpoint.py +1 -1
- openstackclient/tests/unit/identity/v3/test_group.py +4 -2
- openstackclient/tests/unit/identity/v3/test_identity_provider.py +10 -10
- openstackclient/tests/unit/identity/v3/test_oauth.py +1 -1
- openstackclient/tests/unit/identity/v3/test_project.py +31 -54
- openstackclient/tests/unit/identity/v3/test_registered_limit.py +2 -2
- openstackclient/tests/unit/identity/v3/test_role.py +3 -90
- openstackclient/tests/unit/identity/v3/test_user.py +7 -51
- openstackclient/tests/unit/image/v1/test_image.py +47 -0
- openstackclient/tests/unit/image/v2/test_image.py +190 -9
- openstackclient/tests/unit/image/v2/test_metadef_objects.py +22 -0
- openstackclient/tests/unit/image/v2/test_metadef_properties.py +24 -10
- openstackclient/tests/unit/network/test_common.py +9 -13
- openstackclient/tests/unit/network/v2/fakes.py +1 -0
- openstackclient/tests/unit/network/v2/taas/__init__.py +0 -0
- openstackclient/tests/unit/network/v2/taas/test_osc_tap_flow.py +276 -0
- openstackclient/tests/unit/network/v2/taas/test_osc_tap_mirror.py +288 -0
- openstackclient/tests/unit/network/v2/taas/test_osc_tap_service.py +271 -0
- openstackclient/tests/unit/network/v2/test_address_group.py +19 -22
- openstackclient/tests/unit/network/v2/test_address_scope.py +10 -15
- openstackclient/tests/unit/network/v2/test_default_security_group_rule.py +38 -49
- openstackclient/tests/unit/network/v2/test_floating_ip_network.py +21 -27
- openstackclient/tests/unit/network/v2/test_floating_ip_port_forwarding.py +21 -18
- openstackclient/tests/unit/network/v2/test_ip_availability.py +6 -8
- openstackclient/tests/unit/network/v2/test_l3_conntrack_helper.py +6 -15
- openstackclient/tests/unit/network/v2/test_local_ip.py +12 -23
- openstackclient/tests/unit/network/v2/test_local_ip_association.py +13 -18
- openstackclient/tests/unit/network/v2/test_ndp_proxy.py +13 -23
- openstackclient/tests/unit/network/v2/test_network.py +41 -37
- openstackclient/tests/unit/network/v2/test_network_agent.py +13 -20
- openstackclient/tests/unit/network/v2/test_network_auto_allocated_topology.py +5 -8
- openstackclient/tests/unit/network/v2/test_network_flavor.py +14 -26
- openstackclient/tests/unit/network/v2/test_network_flavor_profile.py +14 -17
- openstackclient/tests/unit/network/v2/test_network_meter.py +7 -17
- openstackclient/tests/unit/network/v2/test_network_meter_rule.py +10 -20
- openstackclient/tests/unit/network/v2/test_network_qos_policy.py +7 -13
- openstackclient/tests/unit/network/v2/test_network_qos_rule.py +44 -54
- openstackclient/tests/unit/network/v2/test_network_qos_rule_type.py +2 -7
- openstackclient/tests/unit/network/v2/test_network_rbac.py +21 -36
- openstackclient/tests/unit/network/v2/test_network_segment.py +13 -29
- openstackclient/tests/unit/network/v2/test_network_segment_range.py +20 -19
- openstackclient/tests/unit/network/v2/test_network_service_provider.py +1 -4
- openstackclient/tests/unit/network/v2/test_network_trunk.py +52 -47
- openstackclient/tests/unit/network/v2/test_port.py +113 -84
- openstackclient/tests/unit/network/v2/test_router.py +104 -126
- openstackclient/tests/unit/network/v2/test_security_group_network.py +25 -26
- openstackclient/tests/unit/network/v2/test_security_group_rule_network.py +66 -18
- openstackclient/tests/unit/network/v2/test_subnet.py +35 -46
- openstackclient/tests/unit/network/v2/test_subnet_pool.py +21 -33
- openstackclient/tests/unit/volume/test_find_resource.py +4 -13
- openstackclient/tests/unit/volume/v2/test_volume.py +358 -305
- openstackclient/tests/unit/volume/v2/test_volume_backup.py +3 -1
- openstackclient/tests/unit/volume/v3/test_volume.py +443 -415
- openstackclient/tests/unit/volume/v3/test_volume_backup.py +9 -0
- openstackclient/volume/client.py +7 -17
- openstackclient/volume/v2/backup_record.py +1 -1
- openstackclient/volume/v2/consistency_group.py +1 -1
- openstackclient/volume/v2/consistency_group_snapshot.py +1 -1
- openstackclient/volume/v2/qos_specs.py +1 -1
- openstackclient/volume/v2/service.py +2 -2
- openstackclient/volume/v2/volume.py +80 -54
- openstackclient/volume/v2/volume_backend.py +1 -1
- openstackclient/volume/v2/volume_backup.py +5 -3
- openstackclient/volume/v2/volume_host.py +1 -2
- openstackclient/volume/v2/volume_snapshot.py +2 -2
- openstackclient/volume/v2/volume_transfer_request.py +1 -1
- openstackclient/volume/v2/volume_type.py +11 -6
- openstackclient/volume/v3/block_storage_cleanup.py +1 -1
- openstackclient/volume/v3/block_storage_cluster.py +1 -1
- openstackclient/volume/v3/block_storage_log_level.py +1 -1
- openstackclient/volume/v3/block_storage_manage.py +1 -1
- openstackclient/volume/v3/block_storage_resource_filter.py +1 -1
- openstackclient/volume/v3/service.py +2 -2
- openstackclient/volume/v3/volume.py +104 -77
- openstackclient/volume/v3/volume_attachment.py +6 -5
- openstackclient/volume/v3/volume_backup.py +18 -3
- openstackclient/volume/v3/volume_group.py +2 -2
- openstackclient/volume/v3/volume_group_snapshot.py +1 -1
- openstackclient/volume/v3/volume_group_type.py +1 -1
- openstackclient/volume/v3/volume_message.py +1 -1
- openstackclient/volume/v3/volume_snapshot.py +2 -2
- openstackclient/volume/v3/volume_transfer_request.py +1 -1
- openstackclient/volume/v3/volume_type.py +15 -9
- {python_openstackclient-8.1.0.dist-info → python_openstackclient-8.3.0.dist-info}/METADATA +19 -17
- {python_openstackclient-8.1.0.dist-info → python_openstackclient-8.3.0.dist-info}/RECORD +239 -224
- {python_openstackclient-8.1.0.dist-info → python_openstackclient-8.3.0.dist-info}/WHEEL +1 -1
- {python_openstackclient-8.1.0.dist-info → python_openstackclient-8.3.0.dist-info}/entry_points.txt +15 -0
- {python_openstackclient-8.1.0.dist-info → python_openstackclient-8.3.0.dist-info/licenses}/AUTHORS +15 -0
- python_openstackclient-8.3.0.dist-info/pbr.json +1 -0
- openstackclient/tests/unit/common/test_logs.py +0 -221
- python_openstackclient-8.1.0.dist-info/pbr.json +0 -1
- {python_openstackclient-8.1.0.dist-info → python_openstackclient-8.3.0.dist-info/licenses}/LICENSE +0 -0
- {python_openstackclient-8.1.0.dist-info → python_openstackclient-8.3.0.dist-info}/top_level.txt +0 -0
|
@@ -16,12 +16,13 @@ from unittest import mock
|
|
|
16
16
|
|
|
17
17
|
from openstack.compute.v2 import flavor as _flavor
|
|
18
18
|
from openstack import exceptions as sdk_exceptions
|
|
19
|
+
from openstack.identity.v3 import project as _project
|
|
20
|
+
from openstack.test import fakes as sdk_fakes
|
|
19
21
|
from osc_lib.cli import format_columns
|
|
20
22
|
from osc_lib import exceptions
|
|
21
23
|
|
|
22
24
|
from openstackclient.compute.v2 import flavor
|
|
23
25
|
from openstackclient.tests.unit.compute.v2 import fakes as compute_fakes
|
|
24
|
-
from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
|
|
25
26
|
from openstackclient.tests.unit import utils as tests_utils
|
|
26
27
|
|
|
27
28
|
|
|
@@ -34,59 +35,60 @@ class TestFlavor(compute_fakes.TestComputev2):
|
|
|
34
35
|
|
|
35
36
|
|
|
36
37
|
class TestFlavorCreate(TestFlavor):
|
|
37
|
-
flavor = compute_fakes.create_one_flavor(attrs={'links': 'flavor-links'})
|
|
38
|
-
project = identity_fakes.FakeProject.create_one_project()
|
|
39
|
-
|
|
40
|
-
columns = (
|
|
41
|
-
'OS-FLV-DISABLED:disabled',
|
|
42
|
-
'OS-FLV-EXT-DATA:ephemeral',
|
|
43
|
-
'description',
|
|
44
|
-
'disk',
|
|
45
|
-
'id',
|
|
46
|
-
'name',
|
|
47
|
-
'os-flavor-access:is_public',
|
|
48
|
-
'properties',
|
|
49
|
-
'ram',
|
|
50
|
-
'rxtx_factor',
|
|
51
|
-
'swap',
|
|
52
|
-
'vcpus',
|
|
53
|
-
)
|
|
54
|
-
|
|
55
|
-
data = (
|
|
56
|
-
flavor.is_disabled,
|
|
57
|
-
flavor.ephemeral,
|
|
58
|
-
flavor.description,
|
|
59
|
-
flavor.disk,
|
|
60
|
-
flavor.id,
|
|
61
|
-
flavor.name,
|
|
62
|
-
flavor.is_public,
|
|
63
|
-
format_columns.DictColumn(flavor.extra_specs),
|
|
64
|
-
flavor.ram,
|
|
65
|
-
flavor.rxtx_factor,
|
|
66
|
-
flavor.swap,
|
|
67
|
-
flavor.vcpus,
|
|
68
|
-
)
|
|
69
|
-
data_private = (
|
|
70
|
-
flavor.is_disabled,
|
|
71
|
-
flavor.ephemeral,
|
|
72
|
-
flavor.description,
|
|
73
|
-
flavor.disk,
|
|
74
|
-
flavor.id,
|
|
75
|
-
flavor.name,
|
|
76
|
-
False,
|
|
77
|
-
format_columns.DictColumn(flavor.extra_specs),
|
|
78
|
-
flavor.ram,
|
|
79
|
-
flavor.rxtx_factor,
|
|
80
|
-
flavor.swap,
|
|
81
|
-
flavor.vcpus,
|
|
82
|
-
)
|
|
83
|
-
|
|
84
38
|
def setUp(self):
|
|
85
39
|
super().setUp()
|
|
86
40
|
|
|
87
|
-
|
|
41
|
+
self.flavor = sdk_fakes.generate_fake_resource(
|
|
42
|
+
_flavor.Flavor, links='flavor-links'
|
|
43
|
+
)
|
|
44
|
+
self.project = sdk_fakes.generate_fake_resource(_project.Project)
|
|
45
|
+
|
|
46
|
+
self.columns = (
|
|
47
|
+
'OS-FLV-DISABLED:disabled',
|
|
48
|
+
'OS-FLV-EXT-DATA:ephemeral',
|
|
49
|
+
'description',
|
|
50
|
+
'disk',
|
|
51
|
+
'id',
|
|
52
|
+
'name',
|
|
53
|
+
'os-flavor-access:is_public',
|
|
54
|
+
'properties',
|
|
55
|
+
'ram',
|
|
56
|
+
'rxtx_factor',
|
|
57
|
+
'swap',
|
|
58
|
+
'vcpus',
|
|
59
|
+
)
|
|
60
|
+
self.data = (
|
|
61
|
+
self.flavor.is_disabled,
|
|
62
|
+
self.flavor.ephemeral,
|
|
63
|
+
self.flavor.description,
|
|
64
|
+
self.flavor.disk,
|
|
65
|
+
self.flavor.id,
|
|
66
|
+
self.flavor.name,
|
|
67
|
+
self.flavor.is_public,
|
|
68
|
+
format_columns.DictColumn(self.flavor.extra_specs),
|
|
69
|
+
self.flavor.ram,
|
|
70
|
+
self.flavor.rxtx_factor,
|
|
71
|
+
self.flavor.swap,
|
|
72
|
+
self.flavor.vcpus,
|
|
73
|
+
)
|
|
74
|
+
self.data_private = (
|
|
75
|
+
self.flavor.is_disabled,
|
|
76
|
+
self.flavor.ephemeral,
|
|
77
|
+
self.flavor.description,
|
|
78
|
+
self.flavor.disk,
|
|
79
|
+
self.flavor.id,
|
|
80
|
+
self.flavor.name,
|
|
81
|
+
False,
|
|
82
|
+
format_columns.DictColumn(self.flavor.extra_specs),
|
|
83
|
+
self.flavor.ram,
|
|
84
|
+
self.flavor.rxtx_factor,
|
|
85
|
+
self.flavor.swap,
|
|
86
|
+
self.flavor.vcpus,
|
|
87
|
+
)
|
|
88
|
+
|
|
88
89
|
self.projects_mock.get.return_value = self.project
|
|
89
90
|
self.compute_client.create_flavor.return_value = self.flavor
|
|
91
|
+
|
|
90
92
|
self.cmd = flavor.CreateFlavor(self.app, None)
|
|
91
93
|
|
|
92
94
|
def test_flavor_create_default_options(self):
|
|
@@ -233,7 +235,7 @@ class TestFlavorCreate(TestFlavor):
|
|
|
233
235
|
('vcpus', self.flavor.vcpus),
|
|
234
236
|
('rxtx_factor', self.flavor.rxtx_factor),
|
|
235
237
|
('public', False),
|
|
236
|
-
('description',
|
|
238
|
+
('description', self.flavor.description),
|
|
237
239
|
('project', self.project.id),
|
|
238
240
|
('properties', {'key1': 'value1', 'key2': 'value2'}),
|
|
239
241
|
('name', self.flavor.name),
|
|
@@ -245,7 +247,7 @@ class TestFlavorCreate(TestFlavor):
|
|
|
245
247
|
'ram': self.flavor.ram,
|
|
246
248
|
'vcpus': self.flavor.vcpus,
|
|
247
249
|
'disk': self.flavor.disk,
|
|
248
|
-
'id':
|
|
250
|
+
'id': None,
|
|
249
251
|
'ephemeral': self.flavor.ephemeral,
|
|
250
252
|
'swap': self.flavor.swap,
|
|
251
253
|
'rxtx_factor': self.flavor.rxtx_factor,
|
|
@@ -328,7 +330,7 @@ class TestFlavorCreate(TestFlavor):
|
|
|
328
330
|
str(self.flavor.vcpus),
|
|
329
331
|
'--rxtx-factor',
|
|
330
332
|
str(self.flavor.rxtx_factor),
|
|
331
|
-
'--
|
|
333
|
+
'--public',
|
|
332
334
|
'--description',
|
|
333
335
|
'fake description',
|
|
334
336
|
self.flavor.name,
|
|
@@ -341,7 +343,7 @@ class TestFlavorCreate(TestFlavor):
|
|
|
341
343
|
('swap', self.flavor.swap),
|
|
342
344
|
('vcpus', self.flavor.vcpus),
|
|
343
345
|
('rxtx_factor', self.flavor.rxtx_factor),
|
|
344
|
-
('public',
|
|
346
|
+
('public', True),
|
|
345
347
|
('description', 'fake description'),
|
|
346
348
|
('name', self.flavor.name),
|
|
347
349
|
]
|
|
@@ -358,14 +360,14 @@ class TestFlavorCreate(TestFlavor):
|
|
|
358
360
|
'ephemeral': self.flavor.ephemeral,
|
|
359
361
|
'swap': self.flavor.swap,
|
|
360
362
|
'rxtx_factor': self.flavor.rxtx_factor,
|
|
361
|
-
'is_public':
|
|
363
|
+
'is_public': True,
|
|
362
364
|
'description': 'fake description',
|
|
363
365
|
}
|
|
364
366
|
|
|
365
367
|
self.compute_client.create_flavor.assert_called_once_with(**args)
|
|
366
368
|
|
|
367
369
|
self.assertEqual(self.columns, columns)
|
|
368
|
-
self.assertCountEqual(self.
|
|
370
|
+
self.assertCountEqual(self.data, data)
|
|
369
371
|
|
|
370
372
|
def test_flavor_create_with_description_pre_v255(self):
|
|
371
373
|
self.set_compute_api_version('2.54')
|
|
@@ -395,11 +397,13 @@ class TestFlavorCreate(TestFlavor):
|
|
|
395
397
|
|
|
396
398
|
|
|
397
399
|
class TestFlavorDelete(TestFlavor):
|
|
398
|
-
flavors = compute_fakes.create_flavors(count=2)
|
|
399
|
-
|
|
400
400
|
def setUp(self):
|
|
401
401
|
super().setUp()
|
|
402
402
|
|
|
403
|
+
self.flavors = list(
|
|
404
|
+
sdk_fakes.generate_fake_resources(_flavor.Flavor, 2)
|
|
405
|
+
)
|
|
406
|
+
|
|
403
407
|
self.compute_client.delete_flavor.return_value = None
|
|
404
408
|
|
|
405
409
|
self.cmd = flavor.DeleteFlavor(self.app, None)
|
|
@@ -474,51 +478,50 @@ class TestFlavorDelete(TestFlavor):
|
|
|
474
478
|
|
|
475
479
|
|
|
476
480
|
class TestFlavorList(TestFlavor):
|
|
477
|
-
_flavor = compute_fakes.create_one_flavor()
|
|
478
|
-
|
|
479
|
-
columns = (
|
|
480
|
-
'ID',
|
|
481
|
-
'Name',
|
|
482
|
-
'RAM',
|
|
483
|
-
'Disk',
|
|
484
|
-
'Ephemeral',
|
|
485
|
-
'VCPUs',
|
|
486
|
-
'Is Public',
|
|
487
|
-
)
|
|
488
|
-
columns_long = columns + ('Swap', 'RXTX Factor', 'Properties')
|
|
489
|
-
|
|
490
|
-
data = (
|
|
491
|
-
(
|
|
492
|
-
_flavor.id,
|
|
493
|
-
_flavor.name,
|
|
494
|
-
_flavor.ram,
|
|
495
|
-
_flavor.disk,
|
|
496
|
-
_flavor.ephemeral,
|
|
497
|
-
_flavor.vcpus,
|
|
498
|
-
_flavor.is_public,
|
|
499
|
-
),
|
|
500
|
-
)
|
|
501
|
-
data_long = (
|
|
502
|
-
data[0]
|
|
503
|
-
+ (
|
|
504
|
-
_flavor.swap,
|
|
505
|
-
_flavor.rxtx_factor,
|
|
506
|
-
format_columns.DictColumn(_flavor.extra_specs),
|
|
507
|
-
),
|
|
508
|
-
)
|
|
509
|
-
|
|
510
481
|
def setUp(self):
|
|
511
482
|
super().setUp()
|
|
512
483
|
|
|
513
|
-
self.
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
[],
|
|
517
|
-
]
|
|
484
|
+
self._flavor = sdk_fakes.generate_fake_resource(
|
|
485
|
+
_flavor.Flavor, extra_specs={'property': 'value'}
|
|
486
|
+
)
|
|
518
487
|
|
|
519
|
-
self.
|
|
488
|
+
self.columns = (
|
|
489
|
+
'ID',
|
|
490
|
+
'Name',
|
|
491
|
+
'RAM',
|
|
492
|
+
'Disk',
|
|
493
|
+
'Ephemeral',
|
|
494
|
+
'VCPUs',
|
|
495
|
+
'Is Public',
|
|
496
|
+
)
|
|
497
|
+
self.columns_long = self.columns + (
|
|
498
|
+
'Swap',
|
|
499
|
+
'RXTX Factor',
|
|
500
|
+
'Properties',
|
|
501
|
+
)
|
|
502
|
+
|
|
503
|
+
self.data = (
|
|
504
|
+
(
|
|
505
|
+
self._flavor.id,
|
|
506
|
+
self._flavor.name,
|
|
507
|
+
self._flavor.ram,
|
|
508
|
+
self._flavor.disk,
|
|
509
|
+
self._flavor.ephemeral,
|
|
510
|
+
self._flavor.vcpus,
|
|
511
|
+
self._flavor.is_public,
|
|
512
|
+
),
|
|
513
|
+
)
|
|
514
|
+
self.data_long = (
|
|
515
|
+
self.data[0]
|
|
516
|
+
+ (
|
|
517
|
+
self._flavor.swap,
|
|
518
|
+
self._flavor.rxtx_factor,
|
|
519
|
+
format_columns.DictColumn(self._flavor.extra_specs),
|
|
520
|
+
),
|
|
521
|
+
)
|
|
522
|
+
|
|
523
|
+
self.compute_client.flavors.side_effect = [[self._flavor], []]
|
|
520
524
|
|
|
521
|
-
# Get the command object to test
|
|
522
525
|
self.cmd = flavor.ListFlavor(self.app, None)
|
|
523
526
|
|
|
524
527
|
def test_flavor_list_no_options(self):
|
|
@@ -653,7 +656,9 @@ class TestFlavorList(TestFlavor):
|
|
|
653
656
|
|
|
654
657
|
def test_flavor_list_long_no_extra_specs(self):
|
|
655
658
|
# use flavor with no extra specs for this test
|
|
656
|
-
flavor =
|
|
659
|
+
flavor = sdk_fakes.generate_fake_resource(
|
|
660
|
+
_flavor.Flavor, extra_specs={}
|
|
661
|
+
)
|
|
657
662
|
self.data = (
|
|
658
663
|
(
|
|
659
664
|
flavor.id,
|
|
@@ -673,15 +678,9 @@ class TestFlavorList(TestFlavor):
|
|
|
673
678
|
format_columns.DictColumn(flavor.extra_specs),
|
|
674
679
|
),
|
|
675
680
|
)
|
|
676
|
-
self.api_mock.side_effect = [
|
|
677
|
-
[flavor],
|
|
678
|
-
[],
|
|
679
|
-
]
|
|
680
681
|
|
|
681
|
-
self.compute_client.flavors =
|
|
682
|
-
self.compute_client.fetch_flavor_extra_specs =
|
|
683
|
-
return_value=None
|
|
684
|
-
)
|
|
682
|
+
self.compute_client.flavors.side_effect = [[flavor], []]
|
|
683
|
+
self.compute_client.fetch_flavor_extra_specs.return_value = None
|
|
685
684
|
|
|
686
685
|
arglist = [
|
|
687
686
|
'--long',
|
|
@@ -744,17 +743,15 @@ class TestFlavorList(TestFlavor):
|
|
|
744
743
|
|
|
745
744
|
|
|
746
745
|
class TestFlavorSet(TestFlavor):
|
|
747
|
-
# Return value of self.compute_client.find_flavor().
|
|
748
|
-
flavor = compute_fakes.create_one_flavor(
|
|
749
|
-
attrs={'os-flavor-access:is_public': False}
|
|
750
|
-
)
|
|
751
|
-
project = identity_fakes.FakeProject.create_one_project()
|
|
752
|
-
|
|
753
746
|
def setUp(self):
|
|
754
747
|
super().setUp()
|
|
755
748
|
|
|
749
|
+
self.flavor = sdk_fakes.generate_fake_resource(
|
|
750
|
+
_flavor.Flavor, is_public=False, extra_specs={'property': 'value'}
|
|
751
|
+
)
|
|
752
|
+
self.project = sdk_fakes.generate_fake_resource(_project.Project)
|
|
753
|
+
|
|
756
754
|
self.compute_client.find_flavor.return_value = self.flavor
|
|
757
|
-
# Return a project
|
|
758
755
|
self.projects_mock.get.return_value = self.project
|
|
759
756
|
self.cmd = flavor.SetFlavor(self.app, None)
|
|
760
757
|
|
|
@@ -960,46 +957,42 @@ class TestFlavorSet(TestFlavor):
|
|
|
960
957
|
|
|
961
958
|
|
|
962
959
|
class TestFlavorShow(TestFlavor):
|
|
963
|
-
# Return value of self.compute_client.find_flavor().
|
|
964
|
-
flavor_access = compute_fakes.create_one_flavor_access()
|
|
965
|
-
flavor = compute_fakes.create_one_flavor()
|
|
966
|
-
|
|
967
|
-
columns = (
|
|
968
|
-
'OS-FLV-DISABLED:disabled',
|
|
969
|
-
'OS-FLV-EXT-DATA:ephemeral',
|
|
970
|
-
'access_project_ids',
|
|
971
|
-
'description',
|
|
972
|
-
'disk',
|
|
973
|
-
'id',
|
|
974
|
-
'name',
|
|
975
|
-
'os-flavor-access:is_public',
|
|
976
|
-
'properties',
|
|
977
|
-
'ram',
|
|
978
|
-
'rxtx_factor',
|
|
979
|
-
'swap',
|
|
980
|
-
'vcpus',
|
|
981
|
-
)
|
|
982
|
-
|
|
983
|
-
data = (
|
|
984
|
-
flavor.is_disabled,
|
|
985
|
-
flavor.ephemeral,
|
|
986
|
-
None,
|
|
987
|
-
flavor.description,
|
|
988
|
-
flavor.disk,
|
|
989
|
-
flavor.id,
|
|
990
|
-
flavor.name,
|
|
991
|
-
flavor.is_public,
|
|
992
|
-
format_columns.DictColumn(flavor.extra_specs),
|
|
993
|
-
flavor.ram,
|
|
994
|
-
flavor.rxtx_factor,
|
|
995
|
-
flavor.swap,
|
|
996
|
-
flavor.vcpus,
|
|
997
|
-
)
|
|
998
|
-
|
|
999
960
|
def setUp(self):
|
|
1000
961
|
super().setUp()
|
|
1001
962
|
|
|
1002
|
-
|
|
963
|
+
self.flavor_access = compute_fakes.create_one_flavor_access()
|
|
964
|
+
self.flavor = sdk_fakes.generate_fake_resource(_flavor.Flavor)
|
|
965
|
+
|
|
966
|
+
self.columns = (
|
|
967
|
+
'OS-FLV-DISABLED:disabled',
|
|
968
|
+
'OS-FLV-EXT-DATA:ephemeral',
|
|
969
|
+
'access_project_ids',
|
|
970
|
+
'description',
|
|
971
|
+
'disk',
|
|
972
|
+
'id',
|
|
973
|
+
'name',
|
|
974
|
+
'os-flavor-access:is_public',
|
|
975
|
+
'properties',
|
|
976
|
+
'ram',
|
|
977
|
+
'rxtx_factor',
|
|
978
|
+
'swap',
|
|
979
|
+
'vcpus',
|
|
980
|
+
)
|
|
981
|
+
self.data = (
|
|
982
|
+
self.flavor.is_disabled,
|
|
983
|
+
self.flavor.ephemeral,
|
|
984
|
+
None,
|
|
985
|
+
self.flavor.description,
|
|
986
|
+
self.flavor.disk,
|
|
987
|
+
self.flavor.id,
|
|
988
|
+
self.flavor.name,
|
|
989
|
+
self.flavor.is_public,
|
|
990
|
+
format_columns.DictColumn(self.flavor.extra_specs),
|
|
991
|
+
self.flavor.ram,
|
|
992
|
+
self.flavor.rxtx_factor,
|
|
993
|
+
self.flavor.swap,
|
|
994
|
+
self.flavor.vcpus,
|
|
995
|
+
)
|
|
1003
996
|
self.compute_client.find_flavor.return_value = self.flavor
|
|
1004
997
|
self.compute_client.get_flavor_access.return_value = [
|
|
1005
998
|
self.flavor_access
|
|
@@ -1035,10 +1028,8 @@ class TestFlavorShow(TestFlavor):
|
|
|
1035
1028
|
self.assertCountEqual(self.data, data)
|
|
1036
1029
|
|
|
1037
1030
|
def test_private_flavor_show(self):
|
|
1038
|
-
private_flavor =
|
|
1039
|
-
|
|
1040
|
-
'os-flavor-access:is_public': False,
|
|
1041
|
-
}
|
|
1031
|
+
private_flavor = sdk_fakes.generate_fake_resource(
|
|
1032
|
+
_flavor.Flavor, is_public=False
|
|
1042
1033
|
)
|
|
1043
1034
|
self.compute_client.find_flavor.return_value = private_flavor
|
|
1044
1035
|
|
|
@@ -1077,23 +1068,18 @@ class TestFlavorShow(TestFlavor):
|
|
|
1077
1068
|
|
|
1078
1069
|
|
|
1079
1070
|
class TestFlavorUnset(TestFlavor):
|
|
1080
|
-
# Return value of self.compute_client.find_flavor().
|
|
1081
|
-
flavor = compute_fakes.create_one_flavor(
|
|
1082
|
-
attrs={'os-flavor-access:is_public': False}
|
|
1083
|
-
)
|
|
1084
|
-
project = identity_fakes.FakeProject.create_one_project()
|
|
1085
|
-
|
|
1086
1071
|
def setUp(self):
|
|
1087
1072
|
super().setUp()
|
|
1088
1073
|
|
|
1074
|
+
self.flavor = sdk_fakes.generate_fake_resource(
|
|
1075
|
+
_flavor.Flavor, is_public=False
|
|
1076
|
+
)
|
|
1077
|
+
self.project = sdk_fakes.generate_fake_resource(_project.Project)
|
|
1078
|
+
|
|
1089
1079
|
self.compute_client.find_flavor.return_value = self.flavor
|
|
1090
|
-
# Return a project
|
|
1091
1080
|
self.projects_mock.get.return_value = self.project
|
|
1092
|
-
self.cmd = flavor.UnsetFlavor(self.app, None)
|
|
1093
1081
|
|
|
1094
|
-
self.
|
|
1095
|
-
self.compute_client.delete_flavor_extra_specs_property
|
|
1096
|
-
)
|
|
1082
|
+
self.cmd = flavor.UnsetFlavor(self.app, None)
|
|
1097
1083
|
|
|
1098
1084
|
def test_flavor_unset_property(self):
|
|
1099
1085
|
arglist = ['--property', 'property', 'baremetal']
|
|
@@ -1107,7 +1093,9 @@ class TestFlavorUnset(TestFlavor):
|
|
|
1107
1093
|
self.compute_client.find_flavor.assert_called_with(
|
|
1108
1094
|
parsed_args.flavor, get_extra_specs=True, ignore_missing=False
|
|
1109
1095
|
)
|
|
1110
|
-
self.
|
|
1096
|
+
self.compute_client.delete_flavor_extra_specs_property.assert_called_with(
|
|
1097
|
+
self.flavor.id, 'property'
|
|
1098
|
+
)
|
|
1111
1099
|
self.compute_client.flavor_remove_tenant_access.assert_not_called()
|
|
1112
1100
|
self.assertIsNone(result)
|
|
1113
1101
|
|
|
@@ -1126,21 +1114,16 @@ class TestFlavorUnset(TestFlavor):
|
|
|
1126
1114
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
1127
1115
|
|
|
1128
1116
|
self.cmd.take_action(parsed_args)
|
|
1117
|
+
|
|
1129
1118
|
self.compute_client.find_flavor.assert_called_with(
|
|
1130
1119
|
parsed_args.flavor, get_extra_specs=True, ignore_missing=False
|
|
1131
1120
|
)
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
# A bit tricky way to ensure we do not unset other properties
|
|
1139
|
-
calls.append(mock.call(self.flavor.id, 'property'))
|
|
1140
|
-
self.assertRaises(
|
|
1141
|
-
AssertionError, self.mock_shortcut.assert_has_calls, calls
|
|
1121
|
+
self.compute_client.delete_flavor_extra_specs_property.assert_has_calls(
|
|
1122
|
+
[
|
|
1123
|
+
mock.call(self.flavor.id, 'property1'),
|
|
1124
|
+
mock.call(self.flavor.id, 'property2'),
|
|
1125
|
+
]
|
|
1142
1126
|
)
|
|
1143
|
-
|
|
1144
1127
|
self.compute_client.flavor_remove_tenant_access.assert_not_called()
|
|
1145
1128
|
|
|
1146
1129
|
def test_flavor_unset_project(self):
|
|
@@ -12,20 +12,12 @@
|
|
|
12
12
|
# License for the specific language governing permissions and limitations
|
|
13
13
|
# under the License.
|
|
14
14
|
#
|
|
15
|
-
from unittest import mock
|
|
16
15
|
|
|
17
16
|
from openstackclient.compute.v2 import hypervisor_stats
|
|
18
17
|
from openstackclient.tests.unit.compute.v2 import fakes as compute_fakes
|
|
19
18
|
from openstackclient.tests.unit import fakes
|
|
20
19
|
|
|
21
20
|
|
|
22
|
-
class TestHypervisorStats(compute_fakes.TestComputev2):
|
|
23
|
-
def setUp(self):
|
|
24
|
-
super().setUp()
|
|
25
|
-
|
|
26
|
-
self.compute_client.get = mock.Mock()
|
|
27
|
-
|
|
28
|
-
|
|
29
21
|
# Not in fakes.py because hypervisor stats has been deprecated
|
|
30
22
|
|
|
31
23
|
|
|
@@ -61,7 +53,7 @@ def create_one_hypervisor_stats(attrs=None):
|
|
|
61
53
|
return stats_info
|
|
62
54
|
|
|
63
55
|
|
|
64
|
-
class TestHypervisorStatsShow(
|
|
56
|
+
class TestHypervisorStatsShow(compute_fakes.TestComputev2):
|
|
65
57
|
_stats = create_one_hypervisor_stats()
|
|
66
58
|
|
|
67
59
|
def setUp(self):
|