Fix CRLF issues
Some files in the repo has a DOS/Windows CRLF (\r\n) ending instead of the Unix return. This patch set fixes the issue. Change-Id: Ic6601f3ace9507f30c487f495198c2397b5bf805
This commit is contained in:
parent
2ea460f044
commit
cbc3044d4d
@ -1,17 +1,17 @@
|
|||||||
If you would like to contribute to the development of OpenStack, you must
|
If you would like to contribute to the development of OpenStack, you must
|
||||||
follow the steps in this page:
|
follow the steps in this page:
|
||||||
|
|
||||||
http://docs.openstack.org/infra/manual/developers.html
|
http://docs.openstack.org/infra/manual/developers.html
|
||||||
|
|
||||||
If you already have a good understanding of how the system works and your
|
If you already have a good understanding of how the system works and your
|
||||||
OpenStack accounts are set up, you can skip to the development workflow
|
OpenStack accounts are set up, you can skip to the development workflow
|
||||||
section of this documentation to learn how changes to OpenStack should be
|
section of this documentation to learn how changes to OpenStack should be
|
||||||
submitted for review via the Gerrit tool:
|
submitted for review via the Gerrit tool:
|
||||||
|
|
||||||
http://docs.openstack.org/infra/manual/developers.html#development-workflow
|
http://docs.openstack.org/infra/manual/developers.html#development-workflow
|
||||||
|
|
||||||
Pull requests submitted through GitHub will be ignored.
|
Pull requests submitted through GitHub will be ignored.
|
||||||
|
|
||||||
Bugs should be filed on Launchpad, not GitHub:
|
Bugs should be filed on Launchpad, not GitHub:
|
||||||
|
|
||||||
https://bugs.launchpad.net/valet
|
https://bugs.launchpad.net/valet
|
@ -1,4 +1,4 @@
|
|||||||
Valet Style Commandments
|
Valet Style Commandments
|
||||||
========================
|
========================
|
||||||
|
|
||||||
Read the OpenStack Commandments http://docs.openstack.org/developer/hacking/
|
Read the OpenStack Commandments http://docs.openstack.org/developer/hacking/
|
@ -1,245 +1,245 @@
|
|||||||
#
|
#
|
||||||
# Copyright 2014-2017 AT&T Intellectual Property
|
# Copyright 2014-2017 AT&T Intellectual Property
|
||||||
#
|
#
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
# you may not use this file except in compliance with the License.
|
# you may not use this file except in compliance with the License.
|
||||||
# You may obtain a copy of the License at
|
# You may obtain a copy of the License at
|
||||||
#
|
#
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
#
|
#
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
"""Group Cli."""
|
"""Group Cli."""
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
import json
|
import json
|
||||||
from oslo_config import cfg
|
from oslo_config import cfg
|
||||||
import requests
|
import requests
|
||||||
from valet.common import conf as common
|
from valet.common import conf as common
|
||||||
|
|
||||||
CONF = cfg.CONF
|
CONF = cfg.CONF
|
||||||
|
|
||||||
|
|
||||||
class ResponseError(Exception):
|
class ResponseError(Exception):
|
||||||
"""Response Error Exception."""
|
"""Response Error Exception."""
|
||||||
|
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class ConnectionError(Exception):
|
class ConnectionError(Exception):
|
||||||
"""Connection Error Exception."""
|
"""Connection Error Exception."""
|
||||||
|
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
def print_verbose(verbose, url, headers, body, rest_cmd, timeout):
|
def print_verbose(verbose, url, headers, body, rest_cmd, timeout):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
def pretty_print_json(json_thing, sort=True, indents=4):
|
def pretty_print_json(json_thing, sort=True, indents=4):
|
||||||
"""Print parser in nice format."""
|
"""Print parser in nice format."""
|
||||||
# TODO(Chris Martin): Replace prints with logs
|
# TODO(Chris Martin): Replace prints with logs
|
||||||
if type(json_thing) is str:
|
if type(json_thing) is str:
|
||||||
print(json.dumps(json.loads(json_thing), sort_keys=sort,
|
print(json.dumps(json.loads(json_thing), sort_keys=sort,
|
||||||
indent=indents))
|
indent=indents))
|
||||||
else:
|
else:
|
||||||
print(json.dumps(json_thing, sort_keys=sort, indent=indents))
|
print(json.dumps(json_thing, sort_keys=sort, indent=indents))
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
def add_to_parser(service_sub):
|
def add_to_parser(service_sub):
|
||||||
"""Return parser."""
|
"""Return parser."""
|
||||||
parser = service_sub.add_parser('group', help='Group Management',
|
parser = service_sub.add_parser('group', help='Group Management',
|
||||||
formatter_class=lambda
|
formatter_class=lambda
|
||||||
prog: argparse.HelpFormatter(
|
prog: argparse.HelpFormatter(
|
||||||
prog, max_help_position=30,
|
prog, max_help_position=30,
|
||||||
width=120))
|
width=120))
|
||||||
parser.add_argument('--version', action='version', version='%(prog)s 1.1')
|
parser.add_argument('--version', action='version', version='%(prog)s 1.1')
|
||||||
parser.add_argument('--timeout', type=int,
|
parser.add_argument('--timeout', type=int,
|
||||||
help='Set request timeout in seconds (default: 10)')
|
help='Set request timeout in seconds (default: 10)')
|
||||||
parser.add_argument('--host', type=str,
|
parser.add_argument('--host', type=str,
|
||||||
help='Hostname or ip of valet server')
|
help='Hostname or ip of valet server')
|
||||||
parser.add_argument('--port', type=str, help='Port number of valet server')
|
parser.add_argument('--port', type=str, help='Port number of valet server')
|
||||||
parser.add_argument('--os-tenant-name', type=str, help='Tenant name')
|
parser.add_argument('--os-tenant-name', type=str, help='Tenant name')
|
||||||
parser.add_argument('--os-user-name', dest='os_username', type=str,
|
parser.add_argument('--os-user-name', dest='os_username', type=str,
|
||||||
help='Username')
|
help='Username')
|
||||||
parser.add_argument('--os-password', type=str, help="User's password")
|
parser.add_argument('--os-password', type=str, help="User's password")
|
||||||
parser.add_argument('--verbose', '-v', help='Show details',
|
parser.add_argument('--verbose', '-v', help='Show details',
|
||||||
action="store_true")
|
action="store_true")
|
||||||
subparsers = parser.add_subparsers(dest='subcmd', metavar='<subcommand>')
|
subparsers = parser.add_subparsers(dest='subcmd', metavar='<subcommand>')
|
||||||
|
|
||||||
# create group
|
# create group
|
||||||
parser_create_group = subparsers.add_parser('create',
|
parser_create_group = subparsers.add_parser('create',
|
||||||
help='Create new group.')
|
help='Create new group.')
|
||||||
parser_create_group.add_argument('name', type=str, help='<GROUP_NAME>')
|
parser_create_group.add_argument('name', type=str, help='<GROUP_NAME>')
|
||||||
parser_create_group.add_argument('type', type=str,
|
parser_create_group.add_argument('type', type=str,
|
||||||
help='<GROUP_TYPE> (exclusivity)')
|
help='<GROUP_TYPE> (exclusivity)')
|
||||||
parser_create_group.add_argument('--description', type=str,
|
parser_create_group.add_argument('--description', type=str,
|
||||||
help='<GROUP_DESCRIPTION>')
|
help='<GROUP_DESCRIPTION>')
|
||||||
|
|
||||||
# delete group
|
# delete group
|
||||||
parser_delete_group = subparsers.add_parser('delete',
|
parser_delete_group = subparsers.add_parser('delete',
|
||||||
help='Delete specified group.')
|
help='Delete specified group.')
|
||||||
parser_delete_group.add_argument('groupid', type=str, help='<GROUP_ID>')
|
parser_delete_group.add_argument('groupid', type=str, help='<GROUP_ID>')
|
||||||
|
|
||||||
# delete group member
|
# delete group member
|
||||||
parser_delete_group_member = subparsers.add_parser(
|
parser_delete_group_member = subparsers.add_parser(
|
||||||
'delete-member', help='Delete member from specified group.')
|
'delete-member', help='Delete member from specified group.')
|
||||||
parser_delete_group_member.add_argument('groupid', type=str,
|
parser_delete_group_member.add_argument('groupid', type=str,
|
||||||
help='<GROUP_ID>')
|
help='<GROUP_ID>')
|
||||||
parser_delete_group_member.add_argument('memberid', type=str,
|
parser_delete_group_member.add_argument('memberid', type=str,
|
||||||
help='<MEMBER_ID>')
|
help='<MEMBER_ID>')
|
||||||
|
|
||||||
# delete all group members
|
# delete all group members
|
||||||
parser_delete_all_group_members = subparsers.add_parser(
|
parser_delete_all_group_members = subparsers.add_parser(
|
||||||
'delete-all-members', help='Delete all members from '
|
'delete-all-members', help='Delete all members from '
|
||||||
'specified group.')
|
'specified group.')
|
||||||
parser_delete_all_group_members.add_argument('groupid', type=str,
|
parser_delete_all_group_members.add_argument('groupid', type=str,
|
||||||
help='<GROUP_ID>')
|
help='<GROUP_ID>')
|
||||||
|
|
||||||
# list group
|
# list group
|
||||||
subparsers.add_parser('list', help='List all groups.')
|
subparsers.add_parser('list', help='List all groups.')
|
||||||
|
|
||||||
# show group details
|
# show group details
|
||||||
parser_show_group_details = subparsers.add_parser('show',
|
parser_show_group_details = subparsers.add_parser('show',
|
||||||
help='Show details about'
|
help='Show details about'
|
||||||
'the given group.')
|
'the given group.')
|
||||||
parser_show_group_details.add_argument('groupid', type=str,
|
parser_show_group_details.add_argument('groupid', type=str,
|
||||||
help='<GROUP_ID>')
|
help='<GROUP_ID>')
|
||||||
|
|
||||||
# update group
|
# update group
|
||||||
parser_update_group = subparsers.add_parser('update',
|
parser_update_group = subparsers.add_parser('update',
|
||||||
help='Update group'
|
help='Update group'
|
||||||
'description.')
|
'description.')
|
||||||
parser_update_group.add_argument('groupid', type=str, help='<GROUP_ID>')
|
parser_update_group.add_argument('groupid', type=str, help='<GROUP_ID>')
|
||||||
parser_update_group.add_argument('--description', type=str,
|
parser_update_group.add_argument('--description', type=str,
|
||||||
help='<GROUP_DESCRIPTION>')
|
help='<GROUP_DESCRIPTION>')
|
||||||
|
|
||||||
parser_update_group_members = subparsers.add_parser('update-member',
|
parser_update_group_members = subparsers.add_parser('update-member',
|
||||||
help='Update'
|
help='Update'
|
||||||
'group members.')
|
'group members.')
|
||||||
parser_update_group_members.add_argument('groupid', type=str,
|
parser_update_group_members.add_argument('groupid', type=str,
|
||||||
help='<GROUP_ID>')
|
help='<GROUP_ID>')
|
||||||
parser_update_group_members.add_argument('members', type=str,
|
parser_update_group_members.add_argument('members', type=str,
|
||||||
help='<MEMBER_ID>')
|
help='<MEMBER_ID>')
|
||||||
|
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
|
|
||||||
def cmd_details(args):
|
def cmd_details(args):
|
||||||
"""Command details."""
|
"""Command details."""
|
||||||
if args.subcmd == 'create':
|
if args.subcmd == 'create':
|
||||||
return requests.post, ''
|
return requests.post, ''
|
||||||
elif args.subcmd == 'update':
|
elif args.subcmd == 'update':
|
||||||
return requests.put, '/%s' % args.groupid
|
return requests.put, '/%s' % args.groupid
|
||||||
elif args.subcmd == 'update-member':
|
elif args.subcmd == 'update-member':
|
||||||
return requests.put, '/%s/members' % args.groupid
|
return requests.put, '/%s/members' % args.groupid
|
||||||
elif args.subcmd == 'delete':
|
elif args.subcmd == 'delete':
|
||||||
return requests.delete, '/%s' % args.groupid
|
return requests.delete, '/%s' % args.groupid
|
||||||
elif args.subcmd == 'delete-all-members':
|
elif args.subcmd == 'delete-all-members':
|
||||||
return requests.delete, '/%s/members' % args.groupid
|
return requests.delete, '/%s/members' % args.groupid
|
||||||
elif args.subcmd == 'delete-member':
|
elif args.subcmd == 'delete-member':
|
||||||
return (requests.delete, '/%s/members/%s' %
|
return (requests.delete, '/%s/members/%s' %
|
||||||
(args.groupid, args.memberid))
|
(args.groupid, args.memberid))
|
||||||
elif args.subcmd == 'show':
|
elif args.subcmd == 'show':
|
||||||
return requests.get, '/%s' % args.groupid
|
return requests.get, '/%s' % args.groupid
|
||||||
elif args.subcmd == 'list':
|
elif args.subcmd == 'list':
|
||||||
return requests.get, ''
|
return requests.get, ''
|
||||||
|
|
||||||
|
|
||||||
def get_token(timeout, args):
|
def get_token(timeout, args):
|
||||||
"""Return JSON of access token id."""
|
"""Return JSON of access token id."""
|
||||||
tenant_name = args.os_tenant_name if args.os_tenant_name \
|
tenant_name = args.os_tenant_name if args.os_tenant_name \
|
||||||
else CONF.identity.project_name
|
else CONF.identity.project_name
|
||||||
auth_name = args.os_username if args.os_username \
|
auth_name = args.os_username if args.os_username \
|
||||||
else CONF.identity.username
|
else CONF.identity.username
|
||||||
password = args.os_password if args.os_password \
|
password = args.os_password if args.os_password \
|
||||||
else CONF.identity.password
|
else CONF.identity.password
|
||||||
headers = {
|
headers = {
|
||||||
'Content-Type': 'application/json',
|
'Content-Type': 'application/json',
|
||||||
}
|
}
|
||||||
url = '%s/tokens' % CONF.identity.uth_url
|
url = '%s/tokens' % CONF.identity.uth_url
|
||||||
data = '''
|
data = '''
|
||||||
{
|
{
|
||||||
"auth": {
|
"auth": {
|
||||||
"tenantName": "%s",
|
"tenantName": "%s",
|
||||||
"passwordCredentials": {
|
"passwordCredentials": {
|
||||||
"username": "%s",
|
"username": "%s",
|
||||||
"password": "%s"
|
"password": "%s"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}''' % (tenant_name, auth_name, password)
|
}''' % (tenant_name, auth_name, password)
|
||||||
print_verbose(args.verbose, url, headers, data, None, timeout)
|
print_verbose(args.verbose, url, headers, data, None, timeout)
|
||||||
try:
|
try:
|
||||||
resp = requests.post(url, timeout=timeout, data=data, headers=headers)
|
resp = requests.post(url, timeout=timeout, data=data, headers=headers)
|
||||||
if resp.status_code != 200:
|
if resp.status_code != 200:
|
||||||
raise ResponseError(
|
raise ResponseError(
|
||||||
'Failed in get_token: status code received {}'.format(
|
'Failed in get_token: status code received {}'.format(
|
||||||
resp.status_code))
|
resp.status_code))
|
||||||
return resp.json()['access']['token']['id']
|
return resp.json()['access']['token']['id']
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
message = 'Failed in get_token'
|
message = 'Failed in get_token'
|
||||||
print(e)
|
print(e)
|
||||||
raise ConnectionError(message)
|
raise ConnectionError(message)
|
||||||
|
|
||||||
|
|
||||||
def populate_args_request_body(args):
|
def populate_args_request_body(args):
|
||||||
"""Return JSON of filtered body dictionary."""
|
"""Return JSON of filtered body dictionary."""
|
||||||
body_args_list = ['name', 'type', 'description', 'members']
|
body_args_list = ['name', 'type', 'description', 'members']
|
||||||
# assign values to dict (if val exist) members will be assign as a list
|
# assign values to dict (if val exist) members will be assign as a list
|
||||||
body_dict = {}
|
body_dict = {}
|
||||||
for body_arg in body_args_list:
|
for body_arg in body_args_list:
|
||||||
if hasattr(args, body_arg):
|
if hasattr(args, body_arg):
|
||||||
body_dict[body_arg] = getattr(args, body_arg) \
|
body_dict[body_arg] = getattr(args, body_arg) \
|
||||||
if body_arg != 'members' else [getattr(args, body_arg)]
|
if body_arg != 'members' else [getattr(args, body_arg)]
|
||||||
# remove keys without values
|
# remove keys without values
|
||||||
filtered_body_dict = dict(
|
filtered_body_dict = dict(
|
||||||
(k, v) for k, v in body_dict.iteritems() if v is not None)
|
(k, v) for k, v in body_dict.iteritems() if v is not None)
|
||||||
# check if dictionary is not empty, convert body dictionary to json format
|
# check if dictionary is not empty, convert body dictionary to json format
|
||||||
return json.dumps(filtered_body_dict) if bool(filtered_body_dict) else None
|
return json.dumps(filtered_body_dict) if bool(filtered_body_dict) else None
|
||||||
|
|
||||||
|
|
||||||
def run(args):
|
def run(args):
|
||||||
"""Run."""
|
"""Run."""
|
||||||
common.init_conf("cli.log")
|
common.init_conf("cli.log")
|
||||||
args.host = args.host or CONF.server.host
|
args.host = args.host or CONF.server.host
|
||||||
args.port = args.port or CONF.server.port
|
args.port = args.port or CONF.server.port
|
||||||
args.timeout = args.timeout or 10
|
args.timeout = args.timeout or 10
|
||||||
rest_cmd, cmd_url = cmd_details(args)
|
rest_cmd, cmd_url = cmd_details(args)
|
||||||
args.url = 'http://%s:%s/v1/groups' % (args.host, args.port) + cmd_url
|
args.url = 'http://%s:%s/v1/groups' % (args.host, args.port) + cmd_url
|
||||||
auth_token = get_token(args.timeout, args)
|
auth_token = get_token(args.timeout, args)
|
||||||
args.headers = {
|
args.headers = {
|
||||||
'content-type': 'application/json',
|
'content-type': 'application/json',
|
||||||
'X-Auth-Token': auth_token
|
'X-Auth-Token': auth_token
|
||||||
}
|
}
|
||||||
args.body = populate_args_request_body(args)
|
args.body = populate_args_request_body(args)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
print_verbose(args.verbose, args.url, args.headers, args.body,
|
print_verbose(args.verbose, args.url, args.headers, args.body,
|
||||||
rest_cmd, args.timeout)
|
rest_cmd, args.timeout)
|
||||||
if args.body:
|
if args.body:
|
||||||
resp = rest_cmd(args.url, timeout=args.timeout, data=args.body,
|
resp = rest_cmd(args.url, timeout=args.timeout, data=args.body,
|
||||||
headers=args.headers)
|
headers=args.headers)
|
||||||
else:
|
else:
|
||||||
resp = rest_cmd(args.url, timeout=args.timeout,
|
resp = rest_cmd(args.url, timeout=args.timeout,
|
||||||
headers=args.headers)
|
headers=args.headers)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(e)
|
print(e)
|
||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
if not 200 <= resp.status_code < 300:
|
if not 200 <= resp.status_code < 300:
|
||||||
content = resp.json() if resp.status_code == 500 else ''
|
content = resp.json() if resp.status_code == 500 else ''
|
||||||
print('API error: %s %s (Reason: %d)\n%s' % (
|
print('API error: %s %s (Reason: %d)\n%s' % (
|
||||||
rest_cmd.func_name.upper(), args.url, resp.status_code, content))
|
rest_cmd.func_name.upper(), args.url, resp.status_code, content))
|
||||||
exit(1)
|
exit(1)
|
||||||
try:
|
try:
|
||||||
if resp.content:
|
if resp.content:
|
||||||
rj = resp.json()
|
rj = resp.json()
|
||||||
pretty_print_json(rj)
|
pretty_print_json(rj)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(e)
|
print(e)
|
||||||
exit(1)
|
exit(1)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user