Skip to content

Commit e05c8d7

Browse files
Jenkinsopenstack-gerrit
authored andcommitted
Merge "Refactor "snapshot" commands"
2 parents 2fd5ca2 + 23ee2fd commit e05c8d7

14 files changed

Lines changed: 996 additions & 60 deletions

File tree

doc/source/command-objects/snapshot.rst

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ snapshot create
88
---------------
99

1010
Create new snapshot
11+
(Deprecated, please use ``volume snapshot create`` instead)
1112

1213
.. program:: snapshot create
1314
.. code:: bash
@@ -46,6 +47,7 @@ snapshot delete
4647
---------------
4748

4849
Delete snapshot(s)
50+
(Deprecated, please use ``volume snapshot delete`` instead)
4951

5052
.. program:: snapshot delete
5153
.. code:: bash
@@ -62,6 +64,7 @@ snapshot list
6264
-------------
6365

6466
List snapshots
67+
(Deprecated, please use ``volume snapshot list`` instead)
6568

6669
.. program:: snapshot list
6770
.. code:: bash
@@ -96,6 +99,7 @@ snapshot set
9699
------------
97100

98101
Set snapshot properties
102+
(Deprecated, please use ``volume snapshot set`` instead)
99103

100104
.. program:: snapshot set
101105
.. code:: bash
@@ -137,6 +141,7 @@ snapshot show
137141
-------------
138142

139143
Display snapshot details
144+
(Deprecated, please use ``volume snapshot show`` instead)
140145

141146
.. program:: snapshot show
142147
.. code:: bash
@@ -153,6 +158,7 @@ snapshot unset
153158
--------------
154159

155160
Unset snapshot properties
161+
(Deprecated, please use ``volume snapshot unset`` instead)
156162

157163
.. program:: snapshot unset
158164
.. code:: bash
Lines changed: 171 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,171 @@
1+
===============
2+
volume snapshot
3+
===============
4+
5+
Block Storage v1, v2
6+
7+
volume snapshot create
8+
----------------------
9+
10+
Create new volume snapshot
11+
12+
.. program:: volume snapshot create
13+
.. code:: bash
14+
15+
os volume snapshot create
16+
[--volume <volume>]
17+
[--description <description>]
18+
[--force]
19+
[--property <key=value> [...] ]
20+
<snapshot-name>
21+
22+
.. option:: --volume <volume>
23+
24+
Volume to snapshot (name or ID) (default is <snapshot-name>)
25+
26+
.. option:: --description <description>
27+
28+
Description of the snapshot
29+
30+
.. option:: --force
31+
32+
Create a snapshot attached to an instance. Default is False
33+
34+
.. option:: --property <key=value>
35+
36+
Set a property to this snapshot (repeat option to set multiple properties)
37+
38+
*Volume version 2 only*
39+
40+
.. _volume_snapshot_create-snapshot-name:
41+
.. describe:: <snapshot-name>
42+
43+
Name of the new snapshot (default to None)
44+
45+
volume snapshot delete
46+
----------------------
47+
48+
Delete volume snapshot(s)
49+
50+
.. program:: volume snapshot delete
51+
.. code:: bash
52+
53+
os volume snapshot delete
54+
<snapshot> [<snapshot> ...]
55+
56+
.. _volume_snapshot_delete-snapshot:
57+
.. describe:: <snapshot>
58+
59+
Snapshot(s) to delete (name or ID)
60+
61+
volume snapshot list
62+
--------------------
63+
64+
List volume snapshots
65+
66+
.. program:: volume snapshot list
67+
.. code:: bash
68+
69+
os volume snapshot list
70+
[--all-projects]
71+
[--long]
72+
[--limit <limit>]
73+
[--marker <marker>]
74+
75+
.. option:: --all-projects
76+
77+
Include all projects (admin only)
78+
79+
.. option:: --long
80+
81+
List additional fields in output
82+
83+
.. option:: --limit <limit>
84+
85+
Maximum number of snapshots to display
86+
87+
*Volume version 2 only*
88+
89+
.. option:: --marker <marker>
90+
91+
The last snapshot ID of the previous page
92+
93+
*Volume version 2 only*
94+
95+
volume snapshot set
96+
-------------------
97+
98+
Set volume snapshot properties
99+
100+
.. program:: volume snapshot set
101+
.. code:: bash
102+
103+
os volume snapshot set
104+
[--name <name>]
105+
[--description <description>]
106+
[--property <key=value> [...] ]
107+
[--state <state>]
108+
<snapshot>
109+
110+
.. option:: --name <name>
111+
112+
New snapshot name
113+
114+
.. option:: --description <description>
115+
116+
New snapshot description
117+
118+
.. option:: --property <key=value>
119+
120+
Property to add or modify for this snapshot (repeat option to set multiple properties)
121+
122+
.. option:: --state <state>
123+
124+
New snapshot state.
125+
("available", "error", "creating", "deleting", or "error_deleting") (admin only)
126+
(This option simply changes the state of the snapshot in the database with
127+
no regard to actual status, exercise caution when using)
128+
129+
*Volume version 2 only*
130+
131+
.. _volume_snapshot_set-snapshot:
132+
.. describe:: <snapshot>
133+
134+
Snapshot to modify (name or ID)
135+
136+
volume snapshot show
137+
--------------------
138+
139+
Display volume snapshot details
140+
141+
.. program:: volume snapshot show
142+
.. code:: bash
143+
144+
os volume snapshot show
145+
<snapshot>
146+
147+
.. _volume_snapshot_show-snapshot:
148+
.. describe:: <snapshot>
149+
150+
Snapshot to display (name or ID)
151+
152+
volume snapshot unset
153+
---------------------
154+
155+
Unset volume snapshot properties
156+
157+
.. program:: volume snapshot unset
158+
.. code:: bash
159+
160+
os volume snapshot unset
161+
[--property <key>]
162+
<snapshot>
163+
164+
.. option:: --property <key>
165+
166+
Property to remove from snapshot (repeat option to remove multiple properties)
167+
168+
.. _volume_snapshot_unset-snapshot:
169+
.. describe:: <snapshot>
170+
171+
Snapshot to modify (name or ID)

doc/source/commands.rst

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,6 @@ referring to both Compute and Volume quotas.
7474
* ``address scope``: (**Network**) a scope of IPv4 or IPv6 addresses
7575
* ``aggregate``: (**Compute**) a grouping of compute hosts
7676
* ``availability zone``: (**Compute**, **Network**, **Volume**) a logical partition of hosts or block storage or network services
77-
* ``backup``: (**Volume**) a volume copy
7877
* ``catalog``: (**Identity**) service catalog
7978
* ``command``: (**Internal**) installed commands in the OSC process
8079
* ``compute agent``: (**Compute**) a cloud Compute agent available to a hypervisor
@@ -136,7 +135,6 @@ referring to both Compute and Volume quotas.
136135
* ``server image``: (**Compute**) saved server disk image
137136
* ``service``: (**Identity**) a cloud service
138137
* ``service provider``: (**Identity**) a resource that consumes assertions from an ``identity provider``
139-
* ``snapshot``: (**Volume**) a point-in-time copy of a volume
140138
* ``subnet``: (**Network**) - a contiguous range of IP addresses assigned to a network
141139
* ``subnet pool``: (**Network**) - a pool of subnets
142140
* ``token``: (**Identity**) a bearer token managed by Identity service
@@ -147,6 +145,7 @@ referring to both Compute and Volume quotas.
147145
* ``volume``: (**Volume**) block volumes
148146
* ``volume backup``: (**Volume**) backup for volumes
149147
* ``volume qos``: (**Volume**) quality-of-service (QoS) specification for volumes
148+
* ``volume snapshot``: (**Volume**) a point-in-time copy of a volume
150149
* ``volume type``: (**Volume**) deployment-specific types of volumes available
151150
* ``volume service``: (**Volume**) services to manage block storage operations
152151
* ``volume transfer request``: (**Volume**) volume owner transfer request

openstackclient/tests/functional/volume/v1/test_snapshot.py

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616
from openstackclient.tests.functional.volume.v1 import common
1717

1818

19-
class SnapshotTests(common.BaseVolumeTests):
20-
"""Functional tests for snapshot. """
19+
class VolumeSnapshotTests(common.BaseVolumeTests):
20+
"""Functional tests for volume snapshot. """
2121

2222
VOLLY = uuid.uuid4().hex
2323
NAME = uuid.uuid4().hex
@@ -36,51 +36,53 @@ def wait_for_status(cls, command, status, tries):
3636

3737
@classmethod
3838
def setUpClass(cls):
39-
super(SnapshotTests, cls).setUpClass()
39+
super(VolumeSnapshotTests, cls).setUpClass()
4040
cls.openstack('volume create --size 1 ' + cls.VOLLY)
4141
cls.wait_for_status('volume show ' + cls.VOLLY, 'available\n', 3)
4242
opts = cls.get_opts(['status'])
43-
raw_output = cls.openstack('snapshot create --name ' + cls.NAME +
44-
' ' + cls.VOLLY + opts)
43+
raw_output = cls.openstack('volume snapshot create --volume ' +
44+
cls.VOLLY + ' ' + cls.NAME + opts)
4545
cls.assertOutput('creating\n', raw_output)
46-
cls.wait_for_status('snapshot show ' + cls.NAME, 'available\n', 3)
46+
cls.wait_for_status(
47+
'volume snapshot show ' + cls.NAME, 'available\n', 3)
4748

4849
@classmethod
4950
def tearDownClass(cls):
5051
# Rename test
5152
raw_output = cls.openstack(
52-
'snapshot set --name ' + cls.OTHER_NAME + ' ' + cls.NAME)
53+
'volume snapshot set --name ' + cls.OTHER_NAME + ' ' + cls.NAME)
5354
cls.assertOutput('', raw_output)
5455
# Delete test
5556
raw_output_snapshot = cls.openstack(
56-
'snapshot delete ' + cls.OTHER_NAME)
57+
'volume snapshot delete ' + cls.OTHER_NAME)
5758
cls.wait_for_status('volume show ' + cls.VOLLY, 'available\n', 6)
5859
raw_output_volume = cls.openstack('volume delete --force ' + cls.VOLLY)
5960
cls.assertOutput('', raw_output_snapshot)
6061
cls.assertOutput('', raw_output_volume)
6162

6263
def test_snapshot_list(self):
6364
opts = self.get_opts(self.HEADERS)
64-
raw_output = self.openstack('snapshot list' + opts)
65+
raw_output = self.openstack('volume snapshot list' + opts)
6566
self.assertIn(self.NAME, raw_output)
6667

6768
def test_snapshot_set_unset_properties(self):
6869
raw_output = self.openstack(
69-
'snapshot set --property a=b --property c=d ' + self.NAME)
70+
'volume snapshot set --property a=b --property c=d ' + self.NAME)
7071
self.assertEqual("", raw_output)
7172
opts = self.get_opts(["properties"])
72-
raw_output = self.openstack('snapshot show ' + self.NAME + opts)
73+
raw_output = self.openstack('volume snapshot show ' + self.NAME + opts)
7374
self.assertEqual("a='b', c='d'\n", raw_output)
7475

75-
raw_output = self.openstack('snapshot unset --property a ' + self.NAME)
76+
raw_output = self.openstack(
77+
'volume snapshot unset --property a ' + self.NAME)
7678
self.assertEqual("", raw_output)
77-
raw_output = self.openstack('snapshot show ' + self.NAME + opts)
79+
raw_output = self.openstack('volume snapshot show ' + self.NAME + opts)
7880
self.assertEqual("c='d'\n", raw_output)
7981

8082
def test_snapshot_set_description(self):
8183
raw_output = self.openstack(
82-
'snapshot set --description backup ' + self.NAME)
84+
'volume snapshot set --description backup ' + self.NAME)
8385
self.assertEqual("", raw_output)
8486
opts = self.get_opts(["display_description", "display_name"])
85-
raw_output = self.openstack('snapshot show ' + self.NAME + opts)
87+
raw_output = self.openstack('volume snapshot show ' + self.NAME + opts)
8688
self.assertEqual("backup\n" + self.NAME + "\n", raw_output)

openstackclient/tests/functional/volume/v2/test_snapshot.py

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616
from openstackclient.tests.functional.volume.v2 import common
1717

1818

19-
class SnapshotTests(common.BaseVolumeTests):
20-
"""Functional tests for snapshot. """
19+
class VolumeSnapshotTests(common.BaseVolumeTests):
20+
"""Functional tests for volume snapshot. """
2121

2222
VOLLY = uuid.uuid4().hex
2323
NAME = uuid.uuid4().hex
@@ -36,51 +36,53 @@ def wait_for_status(cls, command, status, tries):
3636

3737
@classmethod
3838
def setUpClass(cls):
39-
super(SnapshotTests, cls).setUpClass()
39+
super(VolumeSnapshotTests, cls).setUpClass()
4040
cls.openstack('volume create --size 1 ' + cls.VOLLY)
4141
cls.wait_for_status('volume show ' + cls.VOLLY, 'available\n', 3)
4242
opts = cls.get_opts(['status'])
43-
raw_output = cls.openstack('snapshot create --name ' + cls.NAME +
44-
' ' + cls.VOLLY + opts)
43+
raw_output = cls.openstack('volume snapshot create --volume ' +
44+
cls.VOLLY + ' ' + cls.NAME + opts)
4545
cls.assertOutput('creating\n', raw_output)
46-
cls.wait_for_status('snapshot show ' + cls.NAME, 'available\n', 3)
46+
cls.wait_for_status(
47+
'volume snapshot show ' + cls.NAME, 'available\n', 3)
4748

4849
@classmethod
4950
def tearDownClass(cls):
5051
# Rename test
5152
raw_output = cls.openstack(
52-
'snapshot set --name ' + cls.OTHER_NAME + ' ' + cls.NAME)
53+
'volume snapshot set --name ' + cls.OTHER_NAME + ' ' + cls.NAME)
5354
cls.assertOutput('', raw_output)
5455
# Delete test
5556
raw_output_snapshot = cls.openstack(
56-
'snapshot delete ' + cls.OTHER_NAME)
57+
'volume snapshot delete ' + cls.OTHER_NAME)
5758
cls.wait_for_status('volume show ' + cls.VOLLY, 'available\n', 6)
5859
raw_output_volume = cls.openstack('volume delete --force ' + cls.VOLLY)
5960
cls.assertOutput('', raw_output_snapshot)
6061
cls.assertOutput('', raw_output_volume)
6162

6263
def test_snapshot_list(self):
6364
opts = self.get_opts(self.HEADERS)
64-
raw_output = self.openstack('snapshot list' + opts)
65+
raw_output = self.openstack('volume snapshot list' + opts)
6566
self.assertIn(self.NAME, raw_output)
6667

6768
def test_snapshot_properties(self):
6869
raw_output = self.openstack(
69-
'snapshot set --property a=b --property c=d ' + self.NAME)
70+
'volume snapshot set --property a=b --property c=d ' + self.NAME)
7071
self.assertEqual("", raw_output)
7172
opts = self.get_opts(["properties"])
72-
raw_output = self.openstack('snapshot show ' + self.NAME + opts)
73+
raw_output = self.openstack('volume snapshot show ' + self.NAME + opts)
7374
self.assertEqual("a='b', c='d'\n", raw_output)
7475

75-
raw_output = self.openstack('snapshot unset --property a ' + self.NAME)
76+
raw_output = self.openstack(
77+
'volume snapshot unset --property a ' + self.NAME)
7678
self.assertEqual("", raw_output)
77-
raw_output = self.openstack('snapshot show ' + self.NAME + opts)
79+
raw_output = self.openstack('volume snapshot show ' + self.NAME + opts)
7880
self.assertEqual("c='d'\n", raw_output)
7981

8082
def test_snapshot_set(self):
8183
raw_output = self.openstack(
82-
'snapshot set --description backup ' + self.NAME)
84+
'volume snapshot set --description backup ' + self.NAME)
8385
self.assertEqual("", raw_output)
8486
opts = self.get_opts(["description", "name"])
85-
raw_output = self.openstack('snapshot show ' + self.NAME + opts)
87+
raw_output = self.openstack('volume snapshot show ' + self.NAME + opts)
8688
self.assertEqual("backup\n" + self.NAME + "\n", raw_output)

0 commit comments

Comments
 (0)