summaryrefslogtreecommitdiff
path: root/openstackclient/volume
diff options
context:
space:
mode:
Diffstat (limited to 'openstackclient/volume')
-rw-r--r--openstackclient/volume/v1/backup.py1
-rw-r--r--openstackclient/volume/v1/snapshot.py3
-rw-r--r--openstackclient/volume/v2/backup.py1
-rw-r--r--openstackclient/volume/v2/snapshot.py3
-rw-r--r--openstackclient/volume/v2/volume.py2
-rw-r--r--openstackclient/volume/v2/volume_type.py102
6 files changed, 95 insertions, 17 deletions
diff --git a/openstackclient/volume/v1/backup.py b/openstackclient/volume/v1/backup.py
index 32f39fb5..40b60315 100644
--- a/openstackclient/volume/v1/backup.py
+++ b/openstackclient/volume/v1/backup.py
@@ -41,7 +41,6 @@ class CreateBackup(command.ShowOne):
parser.add_argument(
'--name',
metavar='<name>',
- required=False,
help='Name of the backup',
)
parser.add_argument(
diff --git a/openstackclient/volume/v1/snapshot.py b/openstackclient/volume/v1/snapshot.py
index 95200e40..6c6131ea 100644
--- a/openstackclient/volume/v1/snapshot.py
+++ b/openstackclient/volume/v1/snapshot.py
@@ -36,7 +36,6 @@ class CreateSnapshot(command.ShowOne):
parser.add_argument(
'--name',
metavar='<name>',
- required=True,
help='Name of the snapshot',
)
parser.add_argument(
@@ -250,7 +249,7 @@ class UnsetSnapshot(command.Command):
action='append',
default=[],
help='Property to remove from snapshot '
- '(repeat to remove multiple values)',
+ '(repeat option to remove multiple properties)',
required=True,
)
return parser
diff --git a/openstackclient/volume/v2/backup.py b/openstackclient/volume/v2/backup.py
index 64ca97ae..016a414c 100644
--- a/openstackclient/volume/v2/backup.py
+++ b/openstackclient/volume/v2/backup.py
@@ -35,7 +35,6 @@ class CreateBackup(command.ShowOne):
parser.add_argument(
"--name",
metavar="<name>",
- required=True,
help="Name of the backup"
)
parser.add_argument(
diff --git a/openstackclient/volume/v2/snapshot.py b/openstackclient/volume/v2/snapshot.py
index 4d00b726..f124a5e2 100644
--- a/openstackclient/volume/v2/snapshot.py
+++ b/openstackclient/volume/v2/snapshot.py
@@ -36,7 +36,6 @@ class CreateSnapshot(command.ShowOne):
parser.add_argument(
"--name",
metavar="<name>",
- required=True,
help="Name of the snapshot"
)
parser.add_argument(
@@ -241,7 +240,7 @@ class UnsetSnapshot(command.Command):
action='append',
default=[],
help='Property to remove from snapshot '
- '(repeat to remove multiple values)',
+ '(repeat option to remove multiple properties)',
)
return parser
diff --git a/openstackclient/volume/v2/volume.py b/openstackclient/volume/v2/volume.py
index 5b7511e8..5a739f61 100644
--- a/openstackclient/volume/v2/volume.py
+++ b/openstackclient/volume/v2/volume.py
@@ -110,7 +110,7 @@ class CreateVolume(command.ShowOne):
snapshot = None
if parsed_args.snapshot:
snapshot = utils.find_resource(
- volume_client.snapshots,
+ volume_client.volume_snapshots,
parsed_args.snapshot).id
project = None
diff --git a/openstackclient/volume/v2/volume_type.py b/openstackclient/volume/v2/volume_type.py
index 5509ac52..30500518 100644
--- a/openstackclient/volume/v2/volume_type.py
+++ b/openstackclient/volume/v2/volume_type.py
@@ -17,8 +17,10 @@
import six
from openstackclient.common import command
+from openstackclient.common import exceptions
from openstackclient.common import parseractions
from openstackclient.common import utils
+from openstackclient.identity import common as identity_common
class CreateVolumeType(command.ShowOne):
@@ -55,7 +57,7 @@ class CreateVolumeType(command.ShowOne):
'--property',
metavar='<key=value>',
action=parseractions.KeyValueAction,
- help='Set a property on this volume type'
+ help='Set a property on this volume type '
'(repeat option to set multiple properties)',
)
return parser
@@ -156,19 +158,30 @@ class SetVolumeType(command.Command):
help='Set a property on this volume type '
'(repeat option to set multiple properties)',
)
+ parser.add_argument(
+ '--project',
+ metavar='<project>',
+ help='Set volume type access to project (name or ID) (admin only)',
+ )
+ identity_common.add_project_domain_option_to_parser(parser)
+
return parser
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
+ identity_client = self.app.client_manager.identity
+
volume_type = utils.find_resource(
volume_client.volume_types, parsed_args.volume_type)
if (not parsed_args.name
and not parsed_args.description
- and not parsed_args.property):
+ and not parsed_args.property
+ and not parsed_args.project):
self.app.log.error("No changes requested\n")
return
+ result = 0
kwargs = {}
if parsed_args.name:
kwargs['name'] = parsed_args.name
@@ -176,13 +189,42 @@ class SetVolumeType(command.Command):
kwargs['description'] = parsed_args.description
if kwargs:
- volume_client.volume_types.update(
- volume_type.id,
- **kwargs
- )
+ try:
+ volume_client.volume_types.update(
+ volume_type.id,
+ **kwargs
+ )
+ except Exception as e:
+ self.app.log.error("Failed to update volume type name or"
+ " description: " + str(e))
+ result += 1
if parsed_args.property:
- volume_type.set_keys(parsed_args.property)
+ try:
+ volume_type.set_keys(parsed_args.property)
+ except Exception as e:
+ self.app.log.error("Failed to set volume type property: " +
+ str(e))
+ result += 1
+
+ if parsed_args.project:
+ project_info = None
+ try:
+ project_info = identity_common.find_project(
+ identity_client,
+ parsed_args.project,
+ parsed_args.project_domain)
+
+ volume_client.volume_type_access.add_project_access(
+ volume_type.id, project_info.id)
+ except Exception as e:
+ self.app.log.error("Failed to set volume type access to"
+ " project: " + str(e))
+ result += 1
+
+ if result > 0:
+ raise exceptions.CommandError("Command Failed: One or more of the"
+ " operations failed")
class ShowVolumeType(command.ShowOne):
@@ -219,17 +261,57 @@ class UnsetVolumeType(command.Command):
parser.add_argument(
'--property',
metavar='<key>',
- default=[],
- required=True,
help='Remove a property from this volume type '
'(repeat option to remove multiple properties)',
)
+ parser.add_argument(
+ '--project',
+ metavar='<project>',
+ help='Removes volume type access to project (name or ID) '
+ ' (admin only)',
+ )
+ identity_common.add_project_domain_option_to_parser(parser)
+
return parser
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
+ identity_client = self.app.client_manager.identity
+
volume_type = utils.find_resource(
volume_client.volume_types,
parsed_args.volume_type,
)
- volume_type.unset_keys(parsed_args.property)
+
+ if (not parsed_args.property
+ and not parsed_args.project):
+ self.app.log.error("No changes requested\n")
+ return
+
+ result = 0
+ if parsed_args.property:
+ try:
+ volume_type.unset_keys(parsed_args.property)
+ except Exception as e:
+ self.app.log.error("Failed to unset volume type property: " +
+ str(e))
+ result += 1
+
+ if parsed_args.project:
+ project_info = None
+ try:
+ project_info = identity_common.find_project(
+ identity_client,
+ parsed_args.project,
+ parsed_args.project_domain)
+
+ volume_client.volume_type_access.remove_project_access(
+ volume_type.id, project_info.id)
+ except Exception as e:
+ self.app.log.error("Failed to remove volume type access from"
+ " project: " + str(e))
+ result += 1
+
+ if result > 0:
+ raise exceptions.CommandError("Command Failed: One or more of the"
+ " operations failed")