Ranger Changes

Update Ranger cli commmands and fix minor test_group url issues.

Change-Id: Id454e237d7db24bc33190e6b080e730aedae38ec
This commit is contained in:
stewie925 2019-03-18 15:26:35 -07:00
parent f270bcac2f
commit ae9254de94
8 changed files with 126 additions and 87 deletions

View File

@ -19,7 +19,8 @@ def set_utils_conf(_conf):
def _check_conf_initialization():
if not conf:
raise AssertionError('Configurations wasnt initiated, please run set_utils_conf and pass pecan configuration')
raise AssertionError('Configurations wasnt initiated, please run '
'set_utils_conf and pass pecan configuration')
def validate_description(data_value):
@ -34,7 +35,8 @@ def validate_description(data_value):
if not isinstance(data_value, str):
desc = str(data_value)
invalidChars = (string.punctuation).translate(None, ''.join(allowed_punctuations))
invalidChars = (string.punctuation).translate(
None, ''.join(allowed_punctuations))
# detect any escape sequences or special characters in data string
encoded_string = desc.encode('string_escape')
@ -79,14 +81,16 @@ def get_rms_region_group(group_name):
_check_conf_initialization()
try:
timestamp = time.time()
if group_name == prev_group_name and timestamp - prev_timestamp <= conf.api.rms_server.cache_seconds:
if group_name == prev_group_name and timestamp - \
prev_timestamp <= conf.api.rms_server.cache_seconds:
return prev_resp
headers = {
'content-type': 'application/json',
}
# GET https://{serverRoot}/v1/orm/groups/{groupId}/
rms_server_url = '%s%s/%s' % (conf.api.rms_server.base, conf.api.rms_server.groups, group_name)
# GET https://{serverRoot}/v2/orm/groups/{groupId}/
rms_server_url = '%s/%s/%s' % (conf.api.rms_server.base,
conf.api.rms_server.groups, group_name)
logger.info("RMS Server URL:" + rms_server_url)
resp = requests.get(rms_server_url, headers=headers, verify=conf.verify)
resp = resp.json()
@ -100,7 +104,8 @@ def get_rms_region_group(group_name):
logger.error(
'CRITICAL|{}| Failed in getting data from rms: connection error'.format(
nagois) + str(exp))
exp.message = 'connection error: Failed to get get data from rms: unable to connect to server'
exp.message = 'connection error: Failed to get get data from rms: ' \
'unable to connect to server'
raise
except Exception as e:
logger.exception(" Exception: " + str(e))

View File

@ -124,11 +124,12 @@ def add_to_parser(service_sub):
parser_list_region = subparsers.add_parser('list_regions',
help='\
[--use_version <api version>] [--type <type>][--status <status>]\
[--metadata <metadata>] [--aicversion <aicversion>][--clli <clli>]\
[--metadata <metadata>] [--ranger_agent_version <ranger_agent_version>]\
[--clli <clli>]\
[--regionname <regionname>] [--osversion <osversion>]\
[--location_type <location_type>]\
[--state <state>] [--country <country>] [--city <city>] [--street <street>]\
[--zip <zip>] [--vlcp_name <vlcp_name>]')
[--zip <zip>] [--clcp_name <clcp_name>]')
parser_list_region.add_argument('client', **cli_common.ORM_CLIENT_KWARGS)
parser_list_region.add_argument('--use_version', type=int,
help='<api version to use>')
@ -136,8 +137,8 @@ def add_to_parser(service_sub):
parser_list_region.add_argument('--status', type=str, help='<status>')
parser_list_region.add_argument('--metadata', action='append', nargs="+",
type=str, help='<metadata>')
parser_list_region.add_argument('--aicversion', type=str,
help='<aicversion>')
parser_list_region.add_argument('--ranger_agent_version', type=str,
help='<ranger_agent_version>')
parser_list_region.add_argument('--clli', type=str, help='<clli>')
parser_list_region.add_argument('--regionname', type=str,
help='<regionname>')
@ -150,8 +151,8 @@ def add_to_parser(service_sub):
parser_list_region.add_argument('--city', type=str, help='<city>')
parser_list_region.add_argument('--street', type=str, help='<street>')
parser_list_region.add_argument('--zip', type=str, help='<zip>')
parser_list_region.add_argument('--vlcp_name', type=str,
help='<vlcp_name>')
parser_list_region.add_argument('--clcp_name', type=str,
help='<clcp_name>')
# add metadata to region
h1, h2 = '<region_id>', '<metadata json file>'
@ -256,7 +257,8 @@ def get_token(timeout, args, host):
'Failed in get_token, host: {}, region: {}'.format(host,
auth_region))
url = url % (keystone_ep,)
data = data % (base_config.user_domain_name, username, password, tenant_name, base_config.project_domain_name,)
data = data % (base_config.user_domain_name, username, password,
tenant_name, base_config.project_domain_name,)
if args.verbose:
print(
@ -297,8 +299,9 @@ def cmd_details(args):
if args.metadata:
for meta in args.metadata:
param += '%smetadata=%s' % (preparm(param), meta[0])
if args.aicversion:
param += '%saicversion=%s' % (preparm(param), args.aicversion)
if args.ranger_agent_version:
param += '%sranger_agent_version=%s' % (preparm(param),
args.ranger_agent_version)
if args.clli:
param += '%sclli=%s' % (preparm(param), args.clli)
if args.regionname:
@ -318,8 +321,8 @@ def cmd_details(args):
param += '%sstreet=%s' % (preparm(param), args.street)
if args.zip:
param += '%szip=%s' % (preparm(param), args.zip)
if args.vlcp_name:
param += '%svlcp_name=%s' % (preparm(param), args.vlcp_name)
if args.clcp_name:
param += '%svlcp_name=%s' % (preparm(param), args.clcp_name)
return requests.get, '/%s' % param
elif args.subcmd == 'add_metadata':
return requests.post, '/%s/metadata' % args.region_id
@ -361,7 +364,8 @@ def get_environment_variable(argument):
def run(args):
url_path = get_path(args)
rms_base_url = args.rms_base_url if args.rms_base_url else base_config.rms['base_url']
rms_base_url = args.rms_base_url if args.rms_base_url \
else base_config.rms['base_url']
data = args.datafile.read() if 'datafile' in args else '{}'
timeout = args.timeout if args.timeout else 10
rest_cmd, cmd_url = cmd_details(args)

View File

@ -3,15 +3,19 @@ import logging
from orm.common.orm_common.utils import api_error_utils as err_utils
from orm.common.orm_common.utils import utils
from orm.services.region_manager.rms.controllers.v2.orm.resources.metadata import RegionMetadataController
from orm.services.region_manager.rms.controllers.v2.orm.resources.status import RegionStatusController
from orm.services.region_manager.rms.controllers.v2.orm.resources.metadata \
import RegionMetadataController
from orm.services.region_manager.rms.controllers.v2.orm.resources.status \
import RegionStatusController
from orm.services.region_manager.rms.model import model as PythonModel
from orm.services.region_manager.rms.model import url_parm
from orm.services.region_manager.rms.services import error_base
from orm.services.region_manager.rms.services import services as RegionService
from orm.services.region_manager.rms.utils import authentication
from pecan import conf, request, rest
from pecan import conf
from pecan import request
from pecan import rest
import requests
import wsme
from wsme import types as wtypes
@ -85,22 +89,28 @@ class RegionsData(wtypes.DynamicBase):
id = wsme.wsattr(wtypes.text, mandatory=True)
name = wsme.wsattr(wtypes.text, mandatory=False)
description = wsme.wsattr(wtypes.text, mandatory=True)
ranger_agent_version = wsme.wsattr(wtypes.text, mandatory=True, name="rangerAgentVersion")
open_stack_version = wsme.wsattr(wtypes.text, mandatory=True, name="OSVersion")
ranger_agent_version = wsme.wsattr(wtypes.text, mandatory=True,
name="rangerAgentVersion")
open_stack_version = wsme.wsattr(wtypes.text, mandatory=True,
name="OSVersion")
clli = wsme.wsattr(wtypes.text, mandatory=True, name="CLLI")
metadata = wsme.wsattr({str: [str]}, mandatory=True)
endpoints = wsme.wsattr([EndPoint], mandatory=True)
address = wsme.wsattr(Address, mandatory=True)
design_type = wsme.wsattr(wtypes.text, mandatory=True, name="designType")
location_type = wsme.wsattr(wtypes.text, mandatory=True, name="locationType")
location_type = wsme.wsattr(wtypes.text, mandatory=True,
name="locationType")
vlcp_name = wsme.wsattr(wtypes.text, mandatory=True, name="vlcpName")
created = wsme.wsattr(wtypes.dt_types.__getitem__(0), mandatory=False, name="created")
modified = wsme.wsattr(wtypes.dt_types.__getitem__(0), mandatory=False, name="modified")
created = wsme.wsattr(wtypes.dt_types.__getitem__(0), mandatory=False,
name="created")
modified = wsme.wsattr(wtypes.dt_types.__getitem__(0), mandatory=False,
name="modified")
def __init__(self, status=None, id=None, name=None, description=None, clli=None,
design_type=None, location_type=None, vlcp_name=None,
open_stack_version=None, address=Address(), ranger_agent_version=None,
metadata={}, endpoint=[EndPoint()], created=None, modified=None):
def __init__(self, status=None, id=None, name=None, description=None,
clli=None, design_type=None, location_type=None,
vlcp_name=None, open_stack_version=None, address=Address(),
ranger_agent_version=None, metadata={}, endpoint=[EndPoint()],
created=None, modified=None):
"""init
:param status:
@ -175,9 +185,8 @@ class RegionsController(rest.RestController):
status = RegionStatusController()
def has_no_resources(self, region_id):
""" function to check if any resource (flavor, customer, or image) is
assigned to the region_id
"""
# function to check if any resource (flavor, customer, or image) is
# assigned to the region_id
try:
resources = {
'flavors': [conf.api.fms_server.base,
@ -216,16 +225,16 @@ class RegionsController(rest.RestController):
@wsexpose(Regions, str, str, [str], str, str, str, str, str, str, str,
str, str, str, str, status_code=200, rest_content_types='json')
def get_all(self, type=None, status=None, metadata=None, rangerAgentVersion=None,
clli=None, regionname=None, osversion=None, location_type=None,
state=None, country=None, city=None, street=None, zip=None,
vlcp_name=None):
def get_all(self, type=None, status=None, metadata=None,
ranger_agent_version=None, clli=None, regionname=None,
osversion=None, location_type=None, state=None, country=None,
city=None, street=None, zip=None, vlcp_name=None):
"""get regions.
:param type: query field
:param status: query field
:param metadata: query field
:param rangerAgentVersion: query field
:param ranger_agent_version: query field
:param clli: query field
:param regionname: query field
:param osversion: query field
@ -243,10 +252,11 @@ class RegionsController(rest.RestController):
authentication.authorize(request, 'region:get_all', skip_auth=True)
url_args = {'type': type, 'status': status, 'metadata': metadata,
'rangerAgentVersion': rangerAgentVersion, 'clli': clli, 'regionname': regionname,
'osversion': osversion, 'location_type': location_type, 'state': state,
'country': country, 'city': city, 'street': street, 'zip': zip,
'vlcp_name': vlcp_name}
'ranger_agent_version': ranger_agent_version, 'clli': clli,
'regionname': regionname, 'osversion': osversion,
'location_type': location_type, 'state': state,
'country': country, 'city': city, 'street': street,
'zip': zip, 'vlcp_name': vlcp_name}
logger.debug("Parameters: {}".format(str(url_args)))
try:
@ -273,12 +283,14 @@ class RegionsController(rest.RestController):
@wsexpose(RegionsData, str, status_code=200, rest_content_types='json')
def get_one(self, id_or_name):
logger.info("API: Entered get region by id or name: {}".format(id_or_name))
logger.info(
"API: Entered get region by id or name: {}".format(id_or_name))
authentication.authorize(request, 'region:get_one', skip_auth=True)
try:
result = RegionService.get_region_by_id_or_name(id_or_name)
logger.debug("API: Got region {} success: {}".format(id_or_name, result))
logger.debug(
"API: Got region {} success: {}".format(id_or_name, result))
except error_base.ErrorStatus as exp:
logger.error("RegionsController {}".format(exp.message))
raise err_utils.get_error(request.transaction_id,
@ -292,22 +304,26 @@ class RegionsController(rest.RestController):
return result
@wsexpose(RegionsData, body=RegionsData, status_code=201, rest_content_types='json')
@wsexpose(RegionsData, body=RegionsData, status_code=201,
rest_content_types='json')
def post(self, full_region_input):
logger.info("API: CreateRegion")
authentication.authorize(request, 'region:create')
try:
logger.debug("API: create region .. data = : {}".format(full_region_input))
logger.debug(
"API: create region .. data = : {}".format(full_region_input))
result = RegionService.create_full_region(full_region_input)
logger.debug("API: region created : {}".format(result))
event_details = 'Region {} {} created: rangerAgentVersion {}, OSversion {}, CLLI {}'.format(
full_region_input.name,
full_region_input.description,
full_region_input.design_type,
full_region_input.ranger_agent_version,
full_region_input.open_stack_version, full_region_input.clli)
event_details = "Region {} {} created: rangerAgentVersion {}, " \
"OSversion {}, CLLI {}".format(
full_region_input.name,
full_region_input.description,
full_region_input.design_type,
full_region_input.ranger_agent_version,
full_region_input.open_stack_version,
full_region_input.clli)
utils.audit_trail('create region', request.transaction_id,
request.headers, full_region_input.id,
event_details=event_details)
@ -324,7 +340,8 @@ class RegionsController(rest.RestController):
status_code=exp.status_code)
except Exception as exp:
logger.exception("Error in creating region .. reason:- {}".format(exp))
logger.exception(
"Error in creating region .. reason:- {}".format(exp))
raise err_utils.get_error(request.transaction_id,
status_code=500,
message=exp.message)
@ -342,7 +359,7 @@ class RegionsController(rest.RestController):
try:
logger.debug("delete region {}".format(region_id))
result = RegionService.delete_region(region_id)
RegionService.delete_region(region_id)
logger.debug("region deleted")
event_details = 'Region {} deleted'.format(region_id)
@ -354,9 +371,10 @@ class RegionsController(rest.RestController):
# which is returned by RegionService.delete_region function
except error_base.NotFoundError as exp:
logger.error("RegionsController - Region not found")
raise err_utils.get_error(request.transaction_id,
message="Cannot delete - " + exp.message,
status_code=exp.status_code)
raise err_utils.get_error(
request.transaction_id,
message="Cannot delete - " + exp.message,
status_code=exp.status_code)
except Exception as exp:
logger.exception(
@ -366,7 +384,8 @@ class RegionsController(rest.RestController):
message=exp.message)
return
else:
region_resources_exist_msg = "Region '{}' cannot be deleted as resources are assigned.".format(region_id)
region_resources_exist_msg = "Region {} cannot be deleted as " \
"resources are assigned.".format(region_id)
raise err_utils.get_error(request.transaction_id,
status_code=400,
@ -385,9 +404,11 @@ class RegionsController(rest.RestController):
result = RegionService.update_region(region_id, region)
logger.debug("API: region {} updated".format(region_id))
event_details = 'Region {} {} modified: rangerAgentVersion {}, OSversion {}, CLLI {}'.format(
region.name, region.design_type, region.ranger_agent_version,
region.open_stack_version, region.clli)
event_details = "Region {} {} modified: rangerAgentVersion {}, " \
"OSversion {}, CLLI {}".format(
region.name, region.design_type,
region.ranger_agent_version,
region.open_stack_version, region.clli)
utils.audit_trail('update region', request.transaction_id,
request.headers, region_id,
event_details=event_details)
@ -405,8 +426,9 @@ class RegionsController(rest.RestController):
message=exp.message)
except Exception as exp:
logger.exception(
"API: error in updating region {}.. reason:- {}".format(region_id,
exp))
"API: error in updating region {}.. "
"reason:- {}".format(region_id,
exp))
raise err_utils.get_error(request.transaction_id,
status_code=500,
message=exp.message)

View File

@ -4,16 +4,16 @@
class UrlParms(object):
"""class method."""
def __init__(self, type=None, status=None, metadata=None, rangerAgentVersion=None,
clli=None, regionname=None, osversion=None, location_type=None,
state=None, country=None, city=None, street=None, zip=None,
vlcp_name=None):
def __init__(self, type=None, status=None, metadata=None,
ranger_agent_version=None, clli=None, regionname=None,
osversion=None, location_type=None, state=None, country=None,
city=None, street=None, zip=None, vlcp_name=None):
"""init method.
:param type:
:param status:
:param metadata:
:param rangerAgentVersion:
:param ranger_agent_version:
:param clli:
:param regionname:
:param osversion:
@ -31,8 +31,8 @@ class UrlParms(object):
self.region_status = status
if metadata:
self.metadata = metadata
if rangerAgentVersion:
self.ranger_agent_version = rangerAgentVersion
if ranger_agent_version:
self.ranger_agent_version = ranger_agent_version
if clli:
self.clli = clli
if regionname:

View File

@ -32,7 +32,7 @@ class RmsTests(TestCase):
args.type = '1'
args.status = '2'
args.metadata = '3'
args.aicversion = '4'
args.ranger_agent_version = '4'
args.clli = '5'
args.regionname = '6'
args.osversion = '7'
@ -42,11 +42,12 @@ class RmsTests(TestCase):
args.city = '11'
args.street = '12'
args.zip = '13'
args.vlcp_name = '14'
args.clcp_name = '14'
list_region_url = '/?type=%s&status=%s&metadata=%s&aicversion=%s'\
'&clli=%s&regionname=%s&osversion=%s&location_type=%s&state=%s'\
'&country=%s&city=%s&street=%s&zip=%s&vlcp_name=%s'
list_region_url = '/?type=%s&status=%s&metadata=%s'\
'&ranger_agent_version=%s&clli=%s&regionname=%s'\
'&osversion=%s&location_type=%s&state=%s'\
'&country=%s&city=%s&street=%s&zip=%s&vlcp_name=%s'
subcmd_to_result = {
'get_region': (requests.get, '/%s' % args.region_name_or_id),
@ -57,10 +58,11 @@ class RmsTests(TestCase):
'list_regions': (requests.get,
list_region_url
% (args.type, args.status, args.metadata,
args.aicversion, args.clli, args.regionname,
args.ranger_agent_version, args.clli,
args.regionname,
args.osversion, args.location_type,
args.state, args.country, args.city,
args.street, args.zip, args.vlcp_name))
args.street, args.zip, args.clcp_name))
}
for subcmd in subcmd_to_result:

View File

@ -6,8 +6,9 @@ from orm.services.region_manager.rms.model import url_parm
parms = {'status': 'functional', 'city': 'Los Angeles', 'clli': 'clli_0',
'zip': '012345', 'country': 'US', 'metadata': ['key_1:value_1',
'key_2:value_2'],
'location_type': 'location_type_0', 'state': 'Cal', 'street': 'Blv st',
'rangerAgentVersion': 'aic 3.0', 'osversion': 'kilo',
'location_type': 'location_type_0', 'state': 'Cal',
'street': 'Blv st',
'ranger_agent_version': 'aic 3.0', 'osversion': 'kilo',
'type': 'design_type_0', 'regionname': 'lcp 0',
'vlcp_name': 'abcd-1234'}
@ -15,15 +16,17 @@ parms_meta_none = {'status': 'functional', 'city': 'Los Angeles',
'clli': 'clli_0',
'zip': '012345', 'country': 'US',
'metadata': None,
'location_type': 'location_type_0', 'state': 'Cal', 'street': 'Blv st',
'rangerAgentVersion': 'aic 3.0', 'osversion': 'kilo',
'location_type': 'location_type_0', 'state': 'Cal',
'street': 'Blv st',
'ranger_agent_version': 'aic 3.0', 'osversion': 'kilo',
'type': 'design_type_0', 'regionname': 'lcp 0',
'vlcp_name': 'abcd-1234'}
output_parms = {'address_city': 'Los Angeles', 'clli': 'clli_0',
'name': 'lcp 0', 'open_stack_version': 'kilo',
'address_street': 'Blv st', 'address_state': 'Cal',
'region_status': 'functional', 'location_type': 'location_type_0',
'region_status': 'functional',
'location_type': 'location_type_0',
'ranger_agent_version': 'aic 3.0', 'address_zip': '012345',
'vlcp_name': 'abcd-1234',
'address_country': 'US', 'design_type': 'design_type_0',
@ -32,13 +35,16 @@ output_parms = {'address_city': 'Los Angeles', 'clli': 'clli_0',
regiondict_output = {'address_city': 'Los Angeles', 'clli': 'clli_0',
'name': 'lcp 0', 'location_type': 'location_type_0',
'open_stack_version': 'kilo', 'address_country': 'US',
'ranger_agent_version': 'aic 3.0', 'region_status': 'functional',
'ranger_agent_version': 'aic 3.0',
'region_status': 'functional',
'address_state': 'Cal', 'address_street': 'Blv st',
'design_type': 'design_type_0',
'address_zip': '012345', 'vlcp_name': 'abcd-1234'}
metadata_output = {'meta_data_keys': [],
'meta_data_pairs': [{'metadata_key': 'key_1', 'metadata_value': 'value_1'},
{'metadata_key': 'key_2', 'metadata_value': 'value_2'}],
'meta_data_pairs': [{'metadata_key': 'key_1',
'metadata_value': 'value_1'},
{'metadata_key': 'key_2',
'metadata_value': 'value_2'}],
'ref_keys': ['key_1', 'key_2']}

View File

@ -85,7 +85,7 @@ class TestTempestRegion(rms_base.RmsBaseOrmTest):
@decorators.idempotent_id('871be582-ecaa-4a46-a403-4d6b5e59d7de')
def test_list_region_with_ranger_version(self):
filter = {'rangerAgentVersion': self.region_1['rangerAgentVersion']}
filter = {'ranger_agent_version': self.region_1['rangerAgentVersion']}
self._list_regions_with_filter(filter, 'rangerAgentVersion')
@decorators.idempotent_id('ac18be48-c787-4a65-913f-a0b0a80fbd1d')

View File

@ -70,4 +70,4 @@ EndOfCommand
)
# Execute Ranger CLI
${base_docker_command} -v "${RANGERCLI_JSONPATH}":"${RANGERCLI_HOSTPATH}" "${RANGERCLI_IMAGE}" $@
${base_docker_command} -v "${RANGERCLI_JSONPATH}":"${RANGERCLI_HOSTPATH}" "${RANGERCLI_IMAGE}" ./orm "$@"