summaryrefslogtreecommitdiff
path: root/openstackclient
diff options
context:
space:
mode:
Diffstat (limited to 'openstackclient')
-rw-r--r--openstackclient/compute/v2/server.py6
-rw-r--r--openstackclient/identity/common.py16
-rw-r--r--openstackclient/identity/v3/role.py102
-rw-r--r--openstackclient/image/v1/image.py25
-rw-r--r--openstackclient/shell.py16
-rw-r--r--openstackclient/tests/common/test_clientmanager.py3
-rw-r--r--openstackclient/tests/image/v1/test_image.py9
7 files changed, 117 insertions, 60 deletions
diff --git a/openstackclient/compute/v2/server.py b/openstackclient/compute/v2/server.py
index e4e96ee7..41c1b904 100644
--- a/openstackclient/compute/v2/server.py
+++ b/openstackclient/compute/v2/server.py
@@ -1054,11 +1054,11 @@ class RescueServer(show.ShowOne):
self.log.debug('take_action(%s)', parsed_args)
compute_client = self.app.client_manager.compute
- server = utils.find_resource(
+ _, body = utils.find_resource(
compute_client.servers,
parsed_args.server,
- ).rescue()
- return zip(*sorted(six.iteritems(server._info)))
+ ).rescue()
+ return zip(*sorted(six.iteritems(body)))
class ResizeServer(command.Command):
diff --git a/openstackclient/identity/common.py b/openstackclient/identity/common.py
index 2cc68c8d..a6e674c0 100644
--- a/openstackclient/identity/common.py
+++ b/openstackclient/identity/common.py
@@ -48,23 +48,23 @@ def find_domain(identity_client, name_or_id):
domains.Domain)
-def find_group(identity_client, name_or_id):
+def find_group(identity_client, name_or_id, domain_id=None):
return _find_identity_resource(identity_client.groups, name_or_id,
- groups.Group)
+ groups.Group, domain_id=domain_id)
-def find_project(identity_client, name_or_id):
+def find_project(identity_client, name_or_id, domain_id=None):
return _find_identity_resource(identity_client.projects, name_or_id,
- projects.Project)
+ projects.Project, domain_id=domain_id)
-def find_user(identity_client, name_or_id):
+def find_user(identity_client, name_or_id, domain_id=None):
return _find_identity_resource(identity_client.users, name_or_id,
- users.User)
+ users.User, domain_id=domain_id)
def _find_identity_resource(identity_client_manager, name_or_id,
- resource_type):
+ resource_type, **kwargs):
"""Find a specific identity resource.
Using keystoneclient's manager, attempt to find a specific resource by its
@@ -92,7 +92,7 @@ def _find_identity_resource(identity_client_manager, name_or_id,
try:
identity_resource = utils.find_resource(identity_client_manager,
- name_or_id)
+ name_or_id, **kwargs)
if identity_resource is not None:
return identity_resource
except identity_exc.Forbidden:
diff --git a/openstackclient/identity/v3/role.py b/openstackclient/identity/v3/role.py
index 3dd998ba..bc64f7f8 100644
--- a/openstackclient/identity/v3/role.py
+++ b/openstackclient/identity/v3/role.py
@@ -63,6 +63,27 @@ class AddRole(command.Command):
metavar='<group>',
help='Include <group> (name or ID)',
)
+ parser.add_argument(
+ '--user-domain',
+ metavar='<user-domain>',
+ help=('Domain the user belongs to (name or ID). '
+ 'This can be used in case collisions between user names '
+ 'exist.')
+ )
+ parser.add_argument(
+ '--group-domain',
+ metavar='<group-domain>',
+ help=('Domain the group belongs to (name or ID). '
+ 'This can be used in case collisions between group names '
+ 'exist.')
+ )
+ parser.add_argument(
+ '--project-domain',
+ metavar='<project-domain>',
+ help=('Domain the project belongs to (name or ID). '
+ 'This can be used in case collisions between project names '
+ 'exist.')
+ )
return parser
def take_action(self, parsed_args):
@@ -78,67 +99,76 @@ class AddRole(command.Command):
parsed_args.role,
)
+ kwargs = {}
if parsed_args.user and parsed_args.domain:
- user = common.find_user(
+ user_domain_id = self._get_domain_id_if_requested(
+ parsed_args.user_domain)
+ kwargs['user'] = common.find_user(
identity_client,
parsed_args.user,
- )
- domain = common.find_domain(
+ user_domain_id,
+ ).id
+ kwargs['domain'] = common.find_domain(
identity_client,
parsed_args.domain,
- )
- identity_client.roles.grant(
- role.id,
- user=user.id,
- domain=domain.id,
- )
+ ).id
elif parsed_args.user and parsed_args.project:
- user = common.find_user(
+ user_domain_id = self._get_domain_id_if_requested(
+ parsed_args.user_domain)
+ kwargs['user'] = common.find_user(
identity_client,
parsed_args.user,
- )
- project = common.find_project(
+ user_domain_id,
+ ).id
+ project_domain_id = self._get_domain_id_if_requested(
+ parsed_args.project_domain)
+ kwargs['project'] = common.find_project(
identity_client,
parsed_args.project,
- )
- identity_client.roles.grant(
- role.id,
- user=user.id,
- project=project.id,
- )
+ project_domain_id,
+ ).id
elif parsed_args.group and parsed_args.domain:
- group = common.find_group(
+ group_domain_id = self._get_domain_id_if_requested(
+ parsed_args.group_domain)
+ kwargs['group'] = common.find_group(
identity_client,
parsed_args.group,
- )
- domain = common.find_domain(
+ group_domain_id,
+ ).id
+ kwargs['domain'] = common.find_domain(
identity_client,
parsed_args.domain,
- )
- identity_client.roles.grant(
- role.id,
- group=group.id,
- domain=domain.id,
- )
+ ).id
elif parsed_args.group and parsed_args.project:
- group = common.find_group(
+ group_domain_id = self._get_domain_id_if_requested(
+ parsed_args.group_domain)
+ kwargs['group'] = common.find_group(
identity_client,
parsed_args.group,
- )
- project = common.find_project(
+ group_domain_id,
+ ).id
+ project_domain_id = self._get_domain_id_if_requested(
+ parsed_args.project_domain)
+ kwargs['project'] = common.find_project(
identity_client,
parsed_args.project,
- )
- identity_client.roles.grant(
- role.id,
- group=group.id,
- project=project.id,
- )
+ project_domain_id,
+ ).id
else:
sys.stderr.write("Role not added, incorrect set of arguments \
provided. See openstack --help for more details\n")
+ return
+
+ identity_client.roles.grant(role.id, **kwargs)
return
+ def _get_domain_id_if_requested(self, domain_name_or_id):
+ if domain_name_or_id is None:
+ return None
+ domain = common.find_domain(self.app.client_manager.identity,
+ domain_name_or_id)
+ return domain.id
+
class CreateRole(show.ShowOne):
"""Create new role"""
diff --git a/openstackclient/image/v1/image.py b/openstackclient/image/v1/image.py
index 830b99ba..d4d45fa2 100644
--- a/openstackclient/image/v1/image.py
+++ b/openstackclient/image/v1/image.py
@@ -508,6 +508,28 @@ class SetImage(show.ShowOne):
type=int,
help="Minimum RAM size needed to boot image, in megabytes",
)
+ container_choices = ["ami", "ari", "aki", "bare", "ovf"]
+ parser.add_argument(
+ "--container-format",
+ metavar="<container-format>",
+ help=("Container format of image. Acceptable formats: %s" %
+ container_choices),
+ choices=container_choices
+ )
+ disk_choices = ["ami", "ari", "aki", "vhd", "vmdk", "raw", "qcow2",
+ "vdi", "iso"]
+ parser.add_argument(
+ "--disk-format",
+ metavar="<disk-format>",
+ help="Disk format of image. Acceptable formats: %s" % disk_choices,
+ choices=disk_choices
+ )
+ parser.add_argument(
+ "--size",
+ metavar="<size>",
+ type=int,
+ help="Size of image data (in bytes)"
+ )
protected_group = parser.add_mutually_exclusive_group()
protected_group.add_argument(
"--protected",
@@ -545,7 +567,8 @@ class SetImage(show.ShowOne):
image_client = self.app.client_manager.image
kwargs = {}
- copy_attrs = ('name', 'owner', 'min_disk', 'min_ram', 'properties')
+ copy_attrs = ('name', 'owner', 'min_disk', 'min_ram', 'properties',
+ 'container_format', 'disk_format', 'size')
for attr in copy_attrs:
if attr in parsed_args:
val = getattr(parsed_args, attr, None)
diff --git a/openstackclient/shell.py b/openstackclient/shell.py
index 5e291021..da985cbc 100644
--- a/openstackclient/shell.py
+++ b/openstackclient/shell.py
@@ -187,11 +187,13 @@ class OpenStackShell(app.App):
verify_group = parser.add_mutually_exclusive_group()
verify_group.add_argument(
'--verify',
- action='store_true',
+ default=None,
+ action='store_false',
help='Verify server certificate (default)',
)
verify_group.add_argument(
'--insecure',
+ default=None,
action='store_true',
help='Disable server certificate verification',
)
@@ -224,12 +226,6 @@ class OpenStackShell(app.App):
# Parent __init__ parses argv into self.options
super(OpenStackShell, self).initialize_app(argv)
- # Resolve the verify/insecure exclusive pair here as cloud_config
- # doesn't know about verify
- self.options.insecure = (
- self.options.insecure and not self.options.verify
- )
-
# Set the default plugin to token_endpoint if rl and token are given
if (self.options.url and self.options.token):
# Use service token authentication
@@ -253,10 +249,8 @@ class OpenStackShell(app.App):
if cacert:
self.verify = cacert
else:
- self.verify = not getattr(self.cloud.config, 'insecure', False)
-
- # Neutralize verify option
- self.options.verify = None
+ self.verify = not self.cloud.config.get('insecure', False)
+ self.verify = self.cloud.config.get('verify', self.verify)
# Save default domain
self.default_domain = self.options.os_default_domain
diff --git a/openstackclient/tests/common/test_clientmanager.py b/openstackclient/tests/common/test_clientmanager.py
index 26cf4967..4e2f46b4 100644
--- a/openstackclient/tests/common/test_clientmanager.py
+++ b/openstackclient/tests/common/test_clientmanager.py
@@ -12,12 +12,13 @@
# License for the specific language governing permissions and limitations
# under the License.
#
+
+import json as jsonutils
import mock
from requests_mock.contrib import fixture
from keystoneclient.auth.identity import v2 as auth_v2
from keystoneclient import service_catalog
-from oslo_serialization import jsonutils
from openstackclient.api import auth
from openstackclient.api import auth_plugin
diff --git a/openstackclient/tests/image/v1/test_image.py b/openstackclient/tests/image/v1/test_image.py
index ef7ca9ea..eec8cfa5 100644
--- a/openstackclient/tests/image/v1/test_image.py
+++ b/openstackclient/tests/image/v1/test_image.py
@@ -547,6 +547,9 @@ class TestImageSet(TestImage):
'--owner', 'new-owner',
'--min-disk', '2',
'--min-ram', '4',
+ '--container-format', 'ovf',
+ '--disk-format', 'vmdk',
+ '--size', '35165824',
image_fakes.image_name,
]
verifylist = [
@@ -554,6 +557,9 @@ class TestImageSet(TestImage):
('owner', 'new-owner'),
('min_disk', 2),
('min_ram', 4),
+ ('container_format', 'ovf'),
+ ('disk_format', 'vmdk'),
+ ('size', 35165824),
('image', image_fakes.image_name),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -566,6 +572,9 @@ class TestImageSet(TestImage):
'owner': 'new-owner',
'min_disk': 2,
'min_ram': 4,
+ 'container_format': 'ovf',
+ 'disk_format': 'vmdk',
+ 'size': 35165824
}
# ImageManager.update(image, **kwargs)
self.images_mock.update.assert_called_with(