Pep8 and Ranger Image Build process update

Updated pep8 requirements and fixed resulting
codes to fix broken pep8 job.

Updated docker image build process to use roles
to ensure docker rather than using manual docker
install process to fix broken ranger image job.

Co-Authored-By: Jeremy Houser <jeremyhouser@protonmail.com>
Co-Authored-By: Chi Lo <cl566n@att.com>

Change-Id: I28df0a27e4b354dd53c17fbb1a9468cb7ff5bc16
This commit is contained in:
Gage Hugo 2020-09-23 11:32:58 -05:00
parent 8366b10bef
commit 68a500b3de
44 changed files with 287 additions and 307 deletions

View File

@ -215,8 +215,8 @@ else:
series_metadata = [s for s in sections if "_flavor_series_metadata" in s] series_metadata = [s for s in sections if "_flavor_series_metadata" in s]
for metadata in series_metadata: for metadata in series_metadata:
flavor = metadata.replace('_flavor_series_metadata', '') flavor = metadata.replace('_flavor_series_metadata', '')
flavor_dict = dict(set(config.items(metadata)) - flavor_dict = dict(set(config.items(metadata))
set(config.items('DEFAULT'))) - set(config.items('DEFAULT')))
FlavorGroup = [ FlavorGroup = [
cfg.DictOpt(flavor, cfg.DictOpt(flavor,
@ -349,8 +349,8 @@ conn = CONF.database.connection
db_connect = conn.replace("mysql+pymysql", "mysql") if conn else None db_connect = conn.replace("mysql+pymysql", "mysql") if conn else None
ssl_verify = CONF.ssl_verify ssl_verify = CONF.ssl_verify
token_auth_version = '3' if (CONF.keystone_authtoken.auth_version == token_auth_version = '3' if (CONF.keystone_authtoken.auth_version
'v3') else '2.0' == 'v3') else '2.0'
cert_path = CONF.ranger_agent_client_cert_path cert_path = CONF.ranger_agent_client_cert_path
https_enabled = CONF.ranger_agent_https_enabled https_enabled = CONF.ranger_agent_https_enabled

View File

@ -50,8 +50,8 @@ class StatusModel(object):
def _get_aggregated_status(self): def _get_aggregated_status(self):
is_pending = False is_pending = False
for region in self.regions: for region in self.regions:
if (region.status == 'Error' and if (region.status == 'Error'
region.operation.strip() != 'delete'): and region.operation.strip() != 'delete'):
# If a region had an error, the aggregated status is 'Error' # If a region had an error, the aggregated status is 'Error'
return 'Error' return 'Error'
elif region.status == 'Submitted': elif region.status == 'Submitted':

View File

@ -103,8 +103,8 @@ class ParseState(object):
""" """
for reduction, methname in self.reducers: for reduction, methname in self.reducers:
if (len(self.tokens) >= len(reduction) and if (len(self.tokens) >= len(reduction)
self.tokens[-len(reduction):] == reduction): and self.tokens[-len(reduction):] == reduction):
# Get the reduction method # Get the reduction method
meth = getattr(self, methname) meth = getattr(self, methname)

View File

@ -54,8 +54,8 @@ class ResourceStatusRecord:
if records: if records:
for id, timestamp, region, status, transaction, resource, \ for id, timestamp, region, status, transaction, resource, \
notifier, err_msg, err_code, operation in records: notifier, err_msg, err_code, operation in records:
if (status == "Submitted" and if (status == "Submitted"
timestamp < ref_timestamp): and timestamp < ref_timestamp):
timestamp = timestamp timestamp = timestamp
status = "Error" status = "Error"
err_msg = "Status updated to 'Error'. " \ err_msg = "Status updated to 'Error'. " \

View File

@ -34,6 +34,7 @@ def get_error_dict(status_code, transaction_id, message, error_details=""):
'details': error_details 'details': error_details
} }
# Default error messages # Default error messages
error_message = { error_message = {
400: {'message': 'Incompatible JSON body', 'type': 'Bad Request'}, 400: {'message': 'Incompatible JSON body', 'type': 'Bad Request'},

View File

@ -19,6 +19,7 @@ def calculate_name(flavor):
return "{0}.c{1}r{2}d{3}".format(flavor['series'], flavor['vcpus'], return "{0}.c{1}r{2}d{3}".format(flavor['series'], flavor['vcpus'],
flavor['ram'], flavor['disk']) flavor['ram'], flavor['disk'])
data = { data = {
"series": "gv", "series": "gv",
"vcpus": "10", "vcpus": "10",

View File

@ -43,5 +43,6 @@ def main(argv=None):
runner = CommandRunner() runner = CommandRunner()
runner.run(['serve', path + '/config.py']) runner.run(['serve', path + '/config.py'])
if __name__ == "__main__": if __name__ == "__main__":
main() main()

View File

@ -44,12 +44,12 @@ class EnabledController(rest.RestController):
@wsexpose(None, str, rest_content_types='json') @wsexpose(None, str, rest_content_types='json')
def post(self, customer_id): def post(self, customer_id):
raise err_utils.get_error(request.transaction_id, status_code=405) raise err_utils.get_error(request.transaction_id, status_code=405)
@wsexpose(None, str, rest_content_types='json') @wsexpose(None, str, rest_content_types='json')
def get(self, customer_id): def get(self, customer_id):
raise err_utils.get_error(request.transaction_id, status_code=405) raise err_utils.get_error(request.transaction_id, status_code=405)
@wsexpose(None, str, rest_content_types='json') @wsexpose(None, str, rest_content_types='json')
def delete(self, customer_id): def delete(self, customer_id):
raise err_utils.get_error(request.transaction_id, status_code=405) raise err_utils.get_error(request.transaction_id, status_code=405)

View File

@ -40,10 +40,10 @@ class MetadataController(rest.RestController):
message=str(ex), status_code=404) message=str(ex), status_code=404)
except ErrorStatus as ex: except ErrorStatus as ex:
LOG.log_exception("MetaDataController - Failed to add metadata", ex) LOG.log_exception("MetaDataController - Failed to add metadata", ex)
raise err_utils.get_error(request.transaction_id, raise err_utils.get_error(request.transaction_id,
message=ex.message, message=ex.message,
status_code=ex.status_code) status_code=ex.status_code)
except LookupError as ex: except LookupError as ex:
LOG.log_exception("MetaDataController - {0}".format(ex.message), ex) LOG.log_exception("MetaDataController - {0}".format(ex.message), ex)

View File

@ -19,8 +19,8 @@ class RegionUserController(rest.RestController):
@wsexpose([str], str, str, str, rest_content_types='json') @wsexpose([str], str, str, str, rest_content_types='json')
def get(self, group_id, region_id, user_id): def get(self, group_id, region_id, user_id):
return ["This is groups region user controller for group id: " + return ["This is groups region user controller for group id: "
group_id] + group_id]
@wsexpose(RegionUserResultWrapper, str, str, body=[RegionUser], @wsexpose(RegionUserResultWrapper, str, str, body=[RegionUser],
rest_content_types='json', status_code=200) rest_content_types='json', status_code=200)

View File

@ -143,8 +143,8 @@ class DataManager(object):
self.group_record = GroupRecord(self.session) self.group_record = GroupRecord(self.session)
return self.group_record return self.group_record
elif (record_name == "CustomerRegion" or elif (record_name == "CustomerRegion"
record_name == "customer_region"): or record_name == "customer_region"):
if not hasattr(self, "customer_region_record"): if not hasattr(self, "customer_region_record"):
self.customer_region_record = CustomerRegionRecord( self.customer_region_record = CustomerRegionRecord(
self.session) self.session)
@ -166,22 +166,22 @@ class DataManager(object):
self.groups_role_record = GroupsRoleRecord(self.session) self.groups_role_record = GroupsRoleRecord(self.session)
return self.groups_role_record return self.groups_role_record
elif (record_name == "GroupsCustomerRole" or elif (record_name == "GroupsCustomerRole"
record_name == "groups_customer_role"): or record_name == "groups_customer_role"):
if not hasattr(self, "groups_customer_role_record"): if not hasattr(self, "groups_customer_role_record"):
self.groups_customer_role_record = GroupsCustomerRoleRecord( self.groups_customer_role_record = GroupsCustomerRoleRecord(
self.session) self.session)
return self.groups_customer_role_record return self.groups_customer_role_record
elif (record_name == "GroupsDomainRole" or elif (record_name == "GroupsDomainRole"
record_name == "groups_domain_role"): or record_name == "groups_domain_role"):
if not hasattr(self, "groups_domain_role_record"): if not hasattr(self, "groups_domain_role_record"):
self.groups_domain_role_record = GroupsDomainRoleRecord( self.groups_domain_role_record = GroupsDomainRoleRecord(
self.session) self.session)
return self.groups_domain_role_record return self.groups_domain_role_record
elif (record_name == "GroupsUser" or elif (record_name == "GroupsUser"
record_name == "groups_user"): or record_name == "groups_user"):
if not hasattr(self, "groups_user_record"): if not hasattr(self, "groups_user_record"):
self.groups_user_record = GroupsUserRecord( self.groups_user_record = GroupsUserRecord(
self.session) self.session)

View File

@ -36,8 +36,8 @@ class GroupsCustomerRoleRecord:
self.session.add(groups_customer_role) self.session.add(groups_customer_role)
except Exception as exception: except Exception as exception:
LOG.log_exception( LOG.log_exception(
"Failed to insert groups_customer_role" + "Failed to insert groups_customer_role"
str(groups_customer_role), exception) + str(groups_customer_role), exception)
raise raise
def get_customer_roles_by_region(self, def get_customer_roles_by_region(self,

View File

@ -36,8 +36,8 @@ class GroupsDomainRoleRecord:
self.session.add(groups_domain_role) self.session.add(groups_domain_role)
except Exception as exception: except Exception as exception:
LOG.log_exception( LOG.log_exception(
"Failed to insert groups_domain_role" + "Failed to insert groups_domain_role"
str(groups_domain_role), exception) + str(groups_domain_role), exception)
raise raise
def get_domain_roles_by_region(self, def get_domain_roles_by_region(self,

View File

@ -243,8 +243,8 @@ class GroupsRegion(Base, CMSBaseModel):
def get_group_users(self): def get_group_users(self):
group_users = [] group_users = []
for group_user in self.groups_users: for group_user in self.groups_users:
if (group_user.region_id == self.region_id and if (group_user.region_id == self.region_id
group_user.group_id == self.group_id): and group_user.group_id == self.group_id):
group_users.append(group_user) group_users.append(group_user)
return group_users return group_users

View File

@ -1,6 +1,6 @@
from orm.services.customer_manager.cms_rest.data.sql_alchemy.cms_user_record import CmsUserRecord from orm.services.customer_manager.cms_rest.data.sql_alchemy.cms_user_record import CmsUserRecord
from orm.services.customer_manager.cms_rest.data.sql_alchemy.customer_record import CustomerRecord from orm.services.customer_manager.cms_rest.data.sql_alchemy.customer_record import CustomerRecord
from orm.services.customer_manager.cms_rest.data.sql_alchemy.models import * from orm.services.customer_manager.cms_rest.data.sql_alchemy.models import UserRole
from orm.services.customer_manager.cms_rest.data.sql_alchemy.region_record import RegionRecord from orm.services.customer_manager.cms_rest.data.sql_alchemy.region_record import RegionRecord
from orm.services.customer_manager.cms_rest.logger import get_logger from orm.services.customer_manager.cms_rest.logger import get_logger
from orm.services.customer_manager.cms_rest.logic.error_base import NotFound from orm.services.customer_manager.cms_rest.logic.error_base import NotFound
@ -12,7 +12,8 @@ class UserRoleRecord:
def __init__(self, session=None): def __init__(self, session=None):
# this model uses for the parameters for any access methods - not as instance of record in the table # this model uses for the parameters for any access methods,
# not as instance of record in the table
self.__user_role = UserRole() self.__user_role = UserRole()
# self.setRecordData(self.user_role) # self.setRecordData(self.user_role)
# self.user_role.Clear() # self.user_role.Clear()

View File

@ -7,4 +7,5 @@ def get_logger(name):
return logger return logger
__all__ = ['get_logger'] __all__ = ['get_logger']

View File

@ -91,9 +91,9 @@ class GroupLogic(object):
except Exception as ex: except Exception as ex:
if hasattr(ex, 'orig') and ex.orig[0] == 1062: if hasattr(ex, 'orig') and ex.orig[0] == 1062:
raise DuplicateEntryError( raise DuplicateEntryError(
'Error, duplicate entry, region ' + 'Error, duplicate entry, region '
region.name + + region.name
' already associated with group') + ' already associated with group')
raise ex raise ex
self.add_user_db(datamanager, region.users, self.add_user_db(datamanager, region.users,
@ -112,8 +112,8 @@ class GroupLogic(object):
default_user_exists =\ default_user_exists =\
[username for exist_user in existing_default_users [username for exist_user in existing_default_users
if exist_user.user.name == username and if exist_user.user.name == username
exist_user.domain_name == domain_value] and exist_user.domain_name == domain_value]
if not default_user_exists: if not default_user_exists:
# add user to cms_user table and group_users # add user to cms_user table and group_users
@ -135,8 +135,8 @@ class GroupLogic(object):
# in existing_default_users list # in existing_default_users list
region_user_exists =\ region_user_exists =\
[username for exist_user in all_existing_users [username for exist_user in all_existing_users
if exist_user.user.name == username and if exist_user.user.name == username
exist_user.domain_name == domain_value] and exist_user.domain_name == domain_value]
if not region_user_exists: if not region_user_exists:
# add user to cms_user table and group_users # add user to cms_user table and group_users
@ -508,8 +508,8 @@ class GroupLogic(object):
group_uuid, region_id, customer_id, role_id) group_uuid, region_id, customer_id, role_id)
if (not customer.check_groups_customer_role_exist( if (not customer.check_groups_customer_role_exist(
role_id, group_uuid) and role_id, group_uuid)
not domain.check_groups_domain_role_exist( and not domain.check_groups_domain_role_exist(
role_id, group_uuid)): role_id, group_uuid)):
groups_role.remove_role_from_group(group_uuid, role_id) groups_role.remove_role_from_group(group_uuid, role_id)
@ -545,8 +545,8 @@ class GroupLogic(object):
RdsProxy.send_group_dict(group_dict, transaction_id, "POST") RdsProxy.send_group_dict(group_dict, transaction_id, "POST")
else: else:
LOG.debug( LOG.debug(
"Group with no regions - wasn't send to RDS Proxy " + "Group with no regions - wasn't send to RDS Proxy "
str(group)) + str(group))
datamanager.commit() datamanager.commit()
@ -718,9 +718,9 @@ class GroupLogic(object):
ret_group = sql_group.to_wsme() ret_group = sql_group.to_wsme()
if sql_group.get_group_regions(): if sql_group.get_group_regions():
resp = requests.get(conf.api.rds_server.base + resp = requests.get(conf.api.rds_server.base
conf.api.rds_server.status + + conf.api.rds_server.status
sql_group.uuid, verify=conf.verify).json() + sql_group.uuid, verify=conf.verify).json()
for item in ret_group.regions: for item in ret_group.regions:
for status in resp['regions']: for status in resp['regions']:
if status['region'] == item.name: if status['region'] == item.name:

View File

@ -16,17 +16,17 @@ class RdsProxy(object):
@staticmethod @staticmethod
def get_status(resource_id): def get_status(resource_id):
try: try:
LOG.debug( LOG.debug("Sending to RDS Server to get status: "
"Sending to RDS Server to get status: " + + conf.api.rds_server.base
conf.api.rds_server.base + conf.api.rds_server.status + + conf.api.rds_server.status
resource_id) + resource_id)
resp = requests.get( resp = requests.get(conf.api.rds_server.base
conf.api.rds_server.base + conf.api.rds_server.status + + conf.api.rds_server.status
resource_id, verify=conf.verify) + resource_id, verify=conf.verify)
LOG.debug( LOG.debug("Sending to RDS Server to get status: "
"Sending to RDS Server to get status: " + + conf.api.rds_server.base
conf.api.rds_server.base + + conf.api.rds_server.status
conf.api.rds_server.status + resource_id) + resource_id)
pp = pprint.PrettyPrinter(width=30) pp = pprint.PrettyPrinter(width=30)
pretty_text = pp.pformat(resp.json()) pretty_text = pp.pformat(resp.json())
LOG.debug("Response from RDS Server:\n" + pretty_text) LOG.debug("Response from RDS Server:\n" + pretty_text)
@ -95,8 +95,9 @@ class RdsProxy(object):
LOG.debug("Wrapper JSON before sending action: {0} to Rds " LOG.debug("Wrapper JSON before sending action: {0} to Rds "
"Proxy\n{1}".format(method, pretty_text)) "Proxy\n{1}".format(method, pretty_text))
LOG.info("Sending to RDS Server: " + LOG.info("Sending to RDS Server: "
conf.api.rds_server.base + conf.api.rds_server.resources) + conf.api.rds_server.base
+ conf.api.rds_server.resources)
wrapper_json = json.dumps(data) wrapper_json = json.dumps(data)
@ -175,8 +176,9 @@ class RdsProxy(object):
LOG.debug("Wrapper JSON before sending action: {0} to Rds " LOG.debug("Wrapper JSON before sending action: {0} to Rds "
"Proxy\n{1}".format(method, pretty_text)) "Proxy\n{1}".format(method, pretty_text))
LOG.info("Sending to RDS Server: " + conf.api.rds_server.base + LOG.info("Sending to RDS Server: "
conf.api.rds_server.resources) + conf.api.rds_server.base
+ conf.api.rds_server.resources)
wrapper_json = json.dumps(data) wrapper_json = json.dumps(data)

View File

@ -16,7 +16,7 @@
from configparser import ConfigParser from configparser import ConfigParser
from oslo_config import cfg from oslo_config import cfg
import re import re
from sqlalchemy import * from sqlalchemy import create_engine
import sys import sys
CONF = cfg.CONF CONF = cfg.CONF
@ -106,14 +106,14 @@ def main(argv=None):
CONF.ranger_base + '/orm/services/id_generator/scripts/db_scripts/db_create.sql', CONF.ranger_base + '/orm/services/id_generator/scripts/db_scripts/db_create.sql',
CONF.ranger_base + '/orm/services/resource_distributor/scripts/db_scripts/create_db.sql', CONF.ranger_base + '/orm/services/resource_distributor/scripts/db_scripts/create_db.sql',
CONF.ranger_base + '/orm/services/region_manager/scripts/db_scripts/create_db.sql', CONF.ranger_base + '/orm/services/region_manager/scripts/db_scripts/create_db.sql',
CONF.ranger_base + CONF.ranger_base
'/orm/services/customer_manager/scripts/db_scripts/ranger_cms_create_db.sql', + '/orm/services/customer_manager/scripts/db_scripts/ranger_cms_create_db.sql',
CONF.ranger_base + CONF.ranger_base
'/orm/services/customer_manager/scripts/db_scripts/ranger_cms_update_db.sql', + '/orm/services/customer_manager/scripts/db_scripts/ranger_cms_update_db.sql',
CONF.ranger_base + CONF.ranger_base
'/orm/services/flavor_manager/scripts/db_scripts/ranger_fms_create_db.sql', + '/orm/services/flavor_manager/scripts/db_scripts/ranger_fms_create_db.sql',
CONF.ranger_base + CONF.ranger_base
'/orm/services/flavor_manager/scripts/db_scripts/ranger_fms_update_db.sql', + '/orm/services/flavor_manager/scripts/db_scripts/ranger_fms_update_db.sql',
CONF.ranger_base + '/orm/services/image_manager/scripts/db_scripts/create_db.sql' CONF.ranger_base + '/orm/services/image_manager/scripts/db_scripts/create_db.sql'
] ]

View File

@ -34,8 +34,8 @@ class FlavorExtraSpecRecord:
try: try:
self.session.add(flavor_extra_specs) self.session.add(flavor_extra_specs)
except Exception as exception: except Exception as exception:
LOG.log_exception("Failed to insert FlavorExtraSpec" + LOG.log_exception("Failed to insert FlavorExtraSpec"
str(flavor_extra_specs), exception) + str(flavor_extra_specs), exception)
raise raise
def get_flavor_extra_spec(self, flavor_internal_id, key_name): def get_flavor_extra_spec(self, flavor_internal_id, key_name):

View File

@ -33,8 +33,8 @@ class FlavorOptionRecord:
try: try:
self.session.add(flavor_option) self.session.add(flavor_option)
except Exception as exception: except Exception as exception:
LOG.log_exception("Failed to insert FlavorOption" + LOG.log_exception("Failed to insert FlavorOption"
str(flavor_option), exception) + str(flavor_option), exception)
raise raise
def get_flavor_option(self, flavor_internal_id, key_name): def get_flavor_option(self, flavor_internal_id, key_name):

View File

@ -33,8 +33,8 @@ class FlavorTagRecord:
try: try:
self.session.add(flavor_tag) self.session.add(flavor_tag)
except Exception as exception: except Exception as exception:
LOG.log_exception("Failed to insert FlavorTag" + LOG.log_exception("Failed to insert FlavorTag"
str(flavor_tag), exception) + str(flavor_tag), exception)
raise raise
def get_flavor_extra_spec(self, flavor_internal_id, key_name): def get_flavor_extra_spec(self, flavor_internal_id, key_name):

View File

@ -271,8 +271,8 @@ class Flavor(Model):
# validate series and set flavor vcpu and vram limits # validate series and set flavor vcpu and vram limits
requested_numa = [n for n in valid_numa if n in requested_numa = [n for n in valid_numa if n in
list(self.options.keys()) and list(self.options.keys())
self.options[n].lower() == 'true'] and self.options[n].lower() == 'true']
if requested_numa: if requested_numa:
vcpu_limit = int(series_metadata['vcpu_limit']) vcpu_limit = int(series_metadata['vcpu_limit'])
@ -314,8 +314,9 @@ class Flavor(Model):
if not self.ephemeral: if not self.ephemeral:
self.ephemeral = "0" self.ephemeral = "0"
elif (self.ephemeral and elif (self.ephemeral
int(self.ephemeral) not in list(range(0, ephemeral_limit + 1))): and int(self.ephemeral) not in
list(range(0, ephemeral_limit + 1))):
raise ErrorStatus(400, raise ErrorStatus(400,
"ephemeral value is out of range. Expected" "ephemeral value is out of range. Expected"
" range is 0-%5d(%2dTB)" % " range is 0-%5d(%2dTB)" %
@ -468,8 +469,8 @@ class Flavor(Model):
series_metadata['valid_options_numa'].split(',')] series_metadata['valid_options_numa'].split(',')]
option_numa = [n for n in valid_numa if n in option_numa = [n for n in valid_numa if n in
list(self.options.keys()) and list(self.options.keys())
self.options[n].lower() == 'true'] and self.options[n].lower() == 'true']
if not option_numa: if not option_numa:
es = db_models.FlavorExtraSpec( es = db_models.FlavorExtraSpec(
@ -487,8 +488,8 @@ class Flavor(Model):
series_metadata['valid_options_pci'].split(',')] series_metadata['valid_options_pci'].split(',')]
option_pci = [n for n in valid_pci if n in option_pci = [n for n in valid_pci if n in
list(self.options.keys()) and list(self.options.keys())
self.options[n].lower() == 'true'] and self.options[n].lower() == 'true']
if option_pci: if option_pci:
es = db_models.FlavorExtraSpec( es = db_models.FlavorExtraSpec(
@ -503,9 +504,9 @@ class Flavor(Model):
series_metadata['valid_options_thread'].split(',')] series_metadata['valid_options_thread'].split(',')]
option_thread = [n for n in valid_thread if n in option_thread = [n for n in valid_thread if n in
list(self.options.keys()) and list(self.options.keys())
self.options[n].lower() == 'true' and and self.options[n].lower() == 'true'
self.visibility.lower() == 'private'] and self.visibility.lower() == 'private']
if option_thread: if option_thread:
es = db_models.FlavorExtraSpec( es = db_models.FlavorExtraSpec(

View File

@ -7,4 +7,5 @@ def get_logger(name):
return logger return logger
__all__ = ['get_logger'] __all__ = ['get_logger']

View File

@ -134,8 +134,8 @@ def send_to_rds_if_needed(sql_flavor,
LOG.debug("Flavor is valid to send to RDS - sending to RDS Proxy ") LOG.debug("Flavor is valid to send to RDS - sending to RDS Proxy ")
rds_proxy.send_flavor(flavor_dict, transaction_id, http_action) rds_proxy.send_flavor(flavor_dict, transaction_id, http_action)
else: else:
LOG.debug("Flavor with no regions - wasn't sent to RDS Proxy " + LOG.debug("Flavor with no regions - wasn't sent to RDS Proxy "
str(sql_flavor)) + str(sql_flavor))
@di.dependsOn('data_manager') @di.dependsOn('data_manager')
@ -1054,8 +1054,8 @@ def calculate_name(flavor):
series_metadata if x.startswith("valid_options_")] series_metadata if x.startswith("valid_options_")]
options = [n for n in valid_options if n in options = [n for n in valid_options if n in
list(flavor.flavor.options.keys()) and list(flavor.flavor.options.keys())
flavor.flavor.options[n].lower() == 'true'] and flavor.flavor.options[n].lower() == 'true']
if 't0' in options and flavor.flavor.visibility.lower() != 'private': if 't0' in options and flavor.flavor.visibility.lower() != 'private':
options.remove('t0') options.remove('t0')

View File

@ -16,81 +16,79 @@ headers = {'content-type': 'application/json'}
def send_flavor(flavor_dict, transaction_id, action="put"): def send_flavor(flavor_dict, transaction_id, action="put"):
# action can be "post" for creating flavor or "delete" for deleting flavor # action can be "post" for creating flavor or "delete" for deleting flavor
data = { data = {
"service_template": "service_template": {
{ "resource": {
"resource": { "resource_type": "flavor"
"resource_type": "flavor" },
}, "model": str(json.dumps(flavor_dict)),
"model": str(json.dumps(flavor_dict)), "tracking": {
"tracking": { "external_id": "",
"external_id": "", "tracking_id": transaction_id
"tracking_id": transaction_id }
}
}
} }
}
data_to_display = { data_to_display = {
"service_template": "service_template": {
{ "resource": {
"resource": { "resource_type": "flavor"
"resource_type": "flavor" },
}, "model": flavor_dict,
"model": flavor_dict, "tracking": {
"tracking": { "external_id": "",
"external_id": "", "tracking_id": transaction_id
"tracking_id": transaction_id }
}
}
} }
}
pp = pprint.PrettyPrinter(width=30) pp = pprint.PrettyPrinter(width=30)
pretty_text = pp.pformat(data_to_display) pretty_text = pp.pformat(data_to_display)
wrapper_json = json.dumps(data) wrapper_json = json.dumps(data)
headers['X-RANGER-Client'] = request.headers[ headers['X-RANGER-Client'] = request.headers[
'X-RANGER-Client'] if 'X-RANGER-Client' in request.headers else \ 'X-RANGER-Client'] if 'X-RANGER-Client' in request.headers else \
'NA' 'NA'
headers['X-RANGER-Requester'] = request.headers[ headers['X-RANGER-Requester'] = request.headers[
'X-RANGER-Requester'] if 'X-RANGER-Requester' in request.headers else \ 'X-RANGER-Requester'] if 'X-RANGER-Requester' in request.headers else \
'' ''
headers['X-Auth-Region'] = request.headers[ headers['X-Auth-Region'] = request.headers[
'X-Auth-Region'] if 'X-Auth-Region' in \ 'X-Auth-Region'] if 'X-Auth-Region' in \
request.headers else '' request.headers else ''
headers['X-Auth-Token'] = request.headers[ headers['X-Auth-Token'] = request.headers[
'X-Auth-Token'] if 'X-Auth-Token' in \ 'X-Auth-Token'] if 'X-Auth-Token' in \
request.headers else '' request.headers else ''
LOG.debug("Wrapper JSON before sending action: {0} to Rds Proxy {1}".format(action, pretty_text)) LOG.debug("Wrapper JSON before sending action: {0} to Rds Proxy {1}".format(action, pretty_text))
LOG.info("Sending to RDS Server: " + conf.api.rds_server.base + conf.api.rds_server.resources) LOG.info("Sending to RDS Server: " + conf.api.rds_server.base + conf.api.rds_server.resources)
if action == "post": if action == "post":
resp = requests.post(conf.api.rds_server.base + conf.api.rds_server.resources, resp = requests.post(conf.api.rds_server.base + conf.api.rds_server.resources,
data=wrapper_json, data=wrapper_json,
headers=headers, headers=headers,
verify=conf.verify) verify=conf.verify)
elif action == "put": elif action == "put":
resp = requests.put(conf.api.rds_server.base + conf.api.rds_server.resources, resp = requests.put(conf.api.rds_server.base + conf.api.rds_server.resources,
data=wrapper_json, data=wrapper_json,
headers=headers, headers=headers,
verify=conf.verify) verify=conf.verify)
elif action == "delete": elif action == "delete":
resp = requests.delete(conf.api.rds_server.base + conf.api.rds_server.resources, resp = requests.delete(conf.api.rds_server.base + conf.api.rds_server.resources,
data=wrapper_json, data=wrapper_json,
headers=headers, headers=headers,
verify=conf.verify) verify=conf.verify)
else: else:
raise Exception("Invalid action in RdxProxy.send_flavor(flavor_dict, transaction_id, action) action can be post or delete, got {0}".format(action)) raise Exception("Invalid action in RdxProxy.send_flavor(flavor_dict, transaction_id, action) action can be post or delete, got {0}".format(action))
content = resp.content content = resp.content
LOG.debug("return from rds server status code: {0} content: {1}".format(resp.status_code, resp.content)) LOG.debug("return from rds server status code: {0} content: {1}".format(resp.status_code, resp.content))
if resp.content and 200 <= resp.status_code < 300: if resp.content and 200 <= resp.status_code < 300:
content = resp.json() content = resp.json()
else: else:
raise ErrorStatus(resp.status_code, "Got error from rds server, code: {0} message: {1}".format(resp.status_code, content)) raise ErrorStatus(resp.status_code, "Got error from rds server, code: {0} message: {1}".format(resp.status_code, content))
return content return content
def get_status(resource_id): def get_status(resource_id):

View File

@ -88,6 +88,7 @@ def make_transid():
else: else:
return None return None
audit_setup = False audit_setup = False

View File

@ -7,4 +7,5 @@ def get_logger(name):
return logger return logger
__all__ = ['get_logger'] __all__ = ['get_logger']

View File

@ -426,20 +426,20 @@ def delete_customer(image_uuid, customer_id, transaction_id):
def set_resource_status(sql_image, status_model): def set_resource_status(sql_image, status_model):
image_wrapper = ImageWrapper.from_db_model(sql_image) image_wrapper = ImageWrapper.from_db_model(sql_image)
image_wrapper.image.status = 'no regions' image_wrapper.image.status = 'no regions'
if status_model and status_model.regions: if status_model and status_model.regions:
for region in image_wrapper.image.regions: for region in image_wrapper.image.regions:
for status in status_model.regions: for status in status_model.regions:
if status.region == region.name: if status.region == region.name:
region.status = status.status region.status = status.status
if status.error_msg: if status.error_msg:
region.set_error_message(status.error_msg) region.set_error_message(status.error_msg)
image_wrapper.image.status = status_model.status image_wrapper.image.status = status_model.status
return image_wrapper return image_wrapper
@di.dependsOn('data_manager') @di.dependsOn('data_manager')

View File

@ -185,7 +185,7 @@ class Image(Base, IMSBaseModel):
try: try:
LOG.debug("remove regions from image {0}".format(str(self))) LOG.debug("remove regions from image {0}".format(str(self)))
for region in reversed(self.regions): for region in reversed(self.regions):
self.regions.remove(region) self.regions.remove(region)
except Exception as exception: except Exception as exception:
LOG.log_exception("Failed to remove regions from image {0}".format(str(self)), exception) LOG.log_exception("Failed to remove regions from image {0}".format(str(self)), exception)
@ -220,7 +220,7 @@ class Image(Base, IMSBaseModel):
LOG.debug("remove customers from image {0}".format(str(self))) LOG.debug("remove customers from image {0}".format(str(self)))
for customer in reversed(self.customers): for customer in reversed(self.customers):
self.customers.remove(customer) self.customers.remove(customer)
except Exception as exception: except Exception as exception:
LOG.log_exception("Failed to remove customers from image" LOG.log_exception("Failed to remove customers from image"

View File

@ -16,89 +16,88 @@ headers = {'content-type': 'application/json'}
def send_image(image_dict, transaction_id, action="put"): def send_image(image_dict, transaction_id, action="put"):
# action can be "post" for creating image or "delete" for deleting image # action can be "post" for creating image or "delete" for deleting image
data = { data = {
"service_template": "service_template": {
{ "resource": {
"resource": { "resource_type": "image"
"resource_type": "image" },
}, "model": str(json.dumps(image_dict)),
"model": str(json.dumps(image_dict)), "tracking": {
"tracking": { "external_id": "",
"external_id": "", "tracking_id": transaction_id
"tracking_id": transaction_id }
}
}
} }
}
data_to_display = { data_to_display = {
"service_template": "service_template": {
{ "resource": {
"resource": { "resource_type": "image"
"resource_type": "image" },
}, "model": image_dict,
"model": image_dict, "tracking": {
"tracking": { "external_id": "",
"external_id": "", "tracking_id": transaction_id
"tracking_id": transaction_id }
}
}
} }
try: }
pp = pprint.PrettyPrinter(width=30)
pretty_text = pp.pformat(data_to_display)
wrapper_json = json.dumps(data)
headers['X-RANGER-Client'] = request.headers[ try:
'X-RANGER-Client'] if 'X-RANGER-Client' in request.headers else \ pp = pprint.PrettyPrinter(width=30)
'NA' pretty_text = pp.pformat(data_to_display)
headers['X-RANGER-Requester'] = request.headers[ wrapper_json = json.dumps(data)
'X-RANGER-Requester'] if 'X-RANGER-Requester' in request.headers else \
''
headers['X-Auth-Region'] = request.headers[
'X-Auth-Region'] if 'X-Auth-Region' in \
request.headers else ''
headers['X-Auth-Token'] = request.headers[
'X-Auth-Token'] if 'X-Auth-Token' in \
request.headers else ''
LOG.debug("Wrapper JSON before sending action: {0} to Rds Proxy {1}".format(action, pretty_text)) headers['X-RANGER-Client'] = request.headers[
LOG.info("Sending to RDS Server: " + conf.api.rds_server.base + conf.api.rds_server.resources) 'X-RANGER-Client'] if 'X-RANGER-Client' in request.headers else \
if action == "post": 'NA'
resp = requests.post(conf.api.rds_server.base + conf.api.rds_server.resources, headers['X-RANGER-Requester'] = request.headers[
data=wrapper_json, 'X-RANGER-Requester'] if 'X-RANGER-Requester' in request.headers else \
headers=headers, verify=conf.verify) ''
elif action == "put": headers['X-Auth-Region'] = request.headers[
resp = requests.put(conf.api.rds_server.base + conf.api.rds_server.resources, 'X-Auth-Region'] if 'X-Auth-Region' in \
data=wrapper_json, request.headers else ''
headers=headers, verify=conf.verify) headers['X-Auth-Token'] = request.headers[
elif action == "delete": 'X-Auth-Token'] if 'X-Auth-Token' in \
resp = requests.delete(conf.api.rds_server.base + conf.api.rds_server.resources, request.headers else ''
data=wrapper_json,
headers=headers, verify=conf.verify)
else:
raise Exception("Invalid action in RdxProxy.send_image("
"image_dict, transaction_id, action) "
"action can be post or delete, "
"got {0}".format(action))
content = resp.content LOG.debug("Wrapper JSON before sending action: {0} to Rds Proxy {1}".format(action, pretty_text))
LOG.debug("return from rds server status code: {0} " LOG.info("Sending to RDS Server: " + conf.api.rds_server.base + conf.api.rds_server.resources)
"content: {1}".format(resp.status_code, resp.content)) if action == "post":
if resp.content and 200 <= resp.status_code < 300: resp = requests.post(conf.api.rds_server.base + conf.api.rds_server.resources,
content = resp.json() data=wrapper_json,
else: headers=headers, verify=conf.verify)
# In case of error from rds, the response is WSME format response. elif action == "put":
# the error message is within the 'faultstring' resp = requests.put(conf.api.rds_server.base + conf.api.rds_server.resources,
raise ErrorStatus(resp.status_code, data=wrapper_json,
json.loads(content)["faultstring"]) headers=headers, verify=conf.verify)
elif action == "delete":
resp = requests.delete(conf.api.rds_server.base + conf.api.rds_server.resources,
data=wrapper_json,
headers=headers, verify=conf.verify)
else:
raise Exception("Invalid action in RdxProxy.send_image("
"image_dict, transaction_id, action) "
"action can be post or delete, "
"got {0}".format(action))
except Exception as exp: content = resp.content
LOG.log_exception("ImageLogic - Failed to update image", exp) LOG.debug("return from rds server status code: {0} "
raise exp "content: {1}".format(resp.status_code, resp.content))
if resp.content and 200 <= resp.status_code < 300:
content = resp.json()
else:
# In case of error from rds, the response is WSME format response.
# the error message is within the 'faultstring'
raise ErrorStatus(resp.status_code,
json.loads(content)["faultstring"])
return content except Exception as exp:
LOG.log_exception("ImageLogic - Failed to update image", exp)
raise exp
return content
def get_status(resource_id, json_convert=True): def get_status(resource_id, json_convert=True):

View File

@ -53,5 +53,6 @@ def main():
data_manager = DataManager(db_url, 3, 3) data_manager = DataManager(db_url, 3, 3)
load_csv2db(data_manager) load_csv2db(data_manager)
if __name__ == "__main__": if __name__ == "__main__":
main() main()

View File

@ -27,5 +27,6 @@ def main():
data_manager = DataManager(db_url) data_manager = DataManager(db_url)
revert_csv2db(data_manager) revert_csv2db(data_manager)
if __name__ == "__main__": if __name__ == "__main__":
main() main()

View File

@ -7,4 +7,5 @@ def get_logger(name):
return logger return logger
__all__ = ['get_logger'] __all__ = ['get_logger']

View File

@ -143,8 +143,8 @@ def _create_template_data(input_data):
tenants_list, target['name']) tenants_list, target['name'])
for tenant in valid_tenants_list: for tenant in valid_tenants_list:
ok_tenants['tenant_id'] = tenant ok_tenants['tenant_id'] = tenant
ok_tenants_list.append(ok_tenants.copy()) ok_tenants_list.append(ok_tenants.copy())
# Note: If ok_tenant_list is empty, just create heat template # Note: If ok_tenant_list is empty, just create heat template
# for private flavor with empty tenant list # for private flavor with empty tenant list

View File

@ -37,7 +37,7 @@ class TestRootController(FunctionalTest):
resp = self.app.post('/v1/uuids') resp = self.app.post('/v1/uuids')
self.assertEqual(resp.status_int, 200) self.assertEqual(resp.status_int, 200)
body = json.loads(resp.body) body = json.loads(resp.body)
self.assertTrue(re.search('^[\dTZ.:-]+$', body['issued_at'])) self.assertTrue(re.search('^[\\dTZ.:-]+$', body['issued_at']))
self.assertEqual('', body['uuid_type']) self.assertEqual('', body['uuid_type'])
self.assertTrue(re.search('^[0-9a-f]+$', body['uuid'])) self.assertTrue(re.search('^[0-9a-f]+$', body['uuid']))
@ -47,7 +47,7 @@ class TestRootController(FunctionalTest):
params={'uuid_type': 'milkshake'}) params={'uuid_type': 'milkshake'})
self.assertEqual(resp.status_int, 200) self.assertEqual(resp.status_int, 200)
body = json.loads(resp.body) body = json.loads(resp.body)
self.assertTrue(re.search('^[\dTZ.:-]+$', body['issued_at'])) self.assertTrue(re.search('^[\\dTZ.:-]+$', body['issued_at']))
self.assertEqual('milkshake', body['uuid_type']) self.assertEqual('milkshake', body['uuid_type'])
# Same format as with no parameter # Same format as with no parameter
self.assertTrue(re.search('^[0-9a-f-]+$', body['uuid'])) self.assertTrue(re.search('^[0-9a-f-]+$', body['uuid']))
@ -56,7 +56,7 @@ class TestRootController(FunctionalTest):
params={'uuid': 1337, 'uuid_type': 'milkshake'}) params={'uuid': 1337, 'uuid_type': 'milkshake'})
self.assertEqual(resp.status_int, 200) self.assertEqual(resp.status_int, 200)
body = json.loads(resp.body) body = json.loads(resp.body)
self.assertTrue(re.search('^[\dTZ.:-]+$', body['issued_at'])) self.assertTrue(re.search('^[\\dTZ.:-]+$', body['issued_at']))
self.assertEqual('custId', body['uuid_type']) self.assertEqual('custId', body['uuid_type'])
# Same format as with no parameter # Same format as with no parameter
self.assertTrue(re.search('^[0-9a-f-]+$', body['uuid'])) self.assertTrue(re.search('^[0-9a-f-]+$', body['uuid']))
@ -98,7 +98,7 @@ class TestRootController(FunctionalTest):
expect_errors=True) expect_errors=True)
self.assertEqual(resp.status_int, 200) self.assertEqual(resp.status_int, 200)
body = json.loads(resp.body) body = json.loads(resp.body)
self.assertTrue(re.search('^[\dTZ.:-]+$', body['issued_at'])) self.assertTrue(re.search('^[\\dTZ.:-]+$', body['issued_at']))
self.assertEqual('custId', body['uuid_type']) self.assertEqual('custId', body['uuid_type'])
# Same format as with no parameter # Same format as with no parameter
self.assertTrue(re.search('^[0-9a-f-]+$', body['uuid'])) self.assertTrue(re.search('^[0-9a-f-]+$', body['uuid']))

View File

@ -444,9 +444,9 @@ RET_CUSTOMER_JSON = {
members='1', pools='1', nat_instance='1', route_table='1', vips='1', members='1', pools='1', nat_instance='1', route_table='1', vips='1',
loadbalancer='1', listener='1')] loadbalancer='1', listener='1')]
})]})], })]})],
"users": [Models.User(** "users": [Models.User(
{"id": "userId1", "role": ["admin", "other"]}) **{"id": "userId1", "role": ["admin", "other"]})
], ],
"defaultQuotas": [Models.Quota(**{ "defaultQuotas": [Models.Quota(**{
"compute": [Models.Compute(instances='1', key_pairs='1', ram='1', "compute": [Models.Compute(instances='1', key_pairs='1', ram='1',
vcpus='1', metadata_items='1', vcpus='1', metadata_items='1',

View File

@ -2,7 +2,9 @@ from orm.common.orm_common.injector import injector
from orm.common.orm_common.utils import utils from orm.common.orm_common.utils import utils
from orm.services.flavor_manager.fms_rest.data.sql_alchemy import db_models from orm.services.flavor_manager.fms_rest.data.sql_alchemy import db_models
from orm.services.flavor_manager.fms_rest.data.wsme import models from orm.services.flavor_manager.fms_rest.data.wsme import models
from orm.services.flavor_manager.fms_rest.data.wsme.models import * from orm.services.flavor_manager.fms_rest.data.wsme.models import (
ExtraSpecsWrapper, Flavor, FlavorWrapper,
Region, RegionWrapper, TagsWrapper, TenantWrapper)
from orm.services.flavor_manager.fms_rest.logic.error_base import NotFoundError from orm.services.flavor_manager.fms_rest.logic.error_base import NotFoundError
from orm.services.flavor_manager.fms_rest.logic import flavor_logic from orm.services.flavor_manager.fms_rest.logic import flavor_logic
from orm.tests.unit.fms import FunctionalTest from orm.tests.unit.fms import FunctionalTest
@ -156,7 +158,7 @@ class TestFlavorLogic(FunctionalTest):
get_extra_spec_needed = MagicMock() get_extra_spec_needed = MagicMock()
get_extra_spec_needed.get_extra_spec_needed.return_value = [extra_spec_needed] get_extra_spec_needed.get_extra_spec_needed.return_value = [extra_spec_needed]
mock_flavorwrapper.from_db_model.return_value = get_extra_spec_needed mock_flavorwrapper.from_db_model.return_value = get_extra_spec_needed
with self.assertRaises(ErrorStatus): with self.assertRaises(flavor_logic.ErrorStatus):
flavor_logic.delete_extra_specs(123, "transaction_id", "key1") flavor_logic.delete_extra_specs(123, "transaction_id", "key1")
@patch.object(flavor_logic, 'FlavorWrapper', return_value=MagicMock()) @patch.object(flavor_logic, 'FlavorWrapper', return_value=MagicMock())

View File

@ -124,6 +124,7 @@ class TestCreateResource(FunctionalTest):
headers=headers, expect_errors=True) headers=headers, expect_errors=True)
assert response.status_int == 409 assert response.status_int == 409
good_data = { good_data = {
"service_template": { "service_template": {
"resource": { "resource": {

View File

@ -3,17 +3,18 @@ import json
from unittest.mock import patch, MagicMock from unittest.mock import patch, MagicMock
from orm.services.region_manager.rms.controllers.v2.orm.resources import metadata from orm.services.region_manager.rms.controllers.v2.orm.resources import metadata
from orm.services.region_manager.rms.model.model import * from orm.services.region_manager.rms.model import model
from orm.tests.unit.rms import FunctionalTest from orm.tests.unit.rms import FunctionalTest
from wsme.exc import ClientSideError from wsme.exc import ClientSideError
result_inst = RegionData("1", "2", "3", "4", "5", "6", result_inst = model.RegionData(
endpoints=[ "1", "2", "3", "4", "5", "6",
EndPoint("http://www.example.co.il", "url") endpoints=[
], model.EndPoint("http://www.example.co.il", "url")
address=Address("US", "NY", "HANEGEV", "AIRPORT_CITY", "5"), ],
metadata={"key1": ["value1"], "key2": ["value2"]}) address=model.Address("US", "NY", "HANEGEV", "AIRPORT_CITY", "5"),
metadata={"key1": ["value1"], "key2": ["value2"]})
result_dict = {'status': '2', 'vlcpName': None, 'clli': '5', result_dict = {'status': '2', 'vlcpName': None, 'clli': '5',
'name': '4', 'designType': None, 'name': '4', 'designType': None,

View File

@ -86,5 +86,6 @@ def main():
run_db_tests(data_manager) run_db_tests(data_manager)
if __name__ == "__main__": if __name__ == "__main__":
main() main()

View File

@ -2,7 +2,8 @@
# of appearance. Changing the order has an impact on the overall integration # of appearance. Changing the order has an impact on the overall integration
# process, which may cause wedges in the gate later. # process, which may cause wedges in the gate later.
hacking!=0.13.0,<0.14,>=0.12.0 # Apache-2.0 hacking>=3.0.1,<3.1.0 # Apache-2.0
pep257==0.7.0 # MIT License
bandit==1.6.2 # Apache-2.0 bandit==1.6.2 # Apache-2.0
coverage!=4.4,>=4.0 # Apache-2.0 coverage!=4.4,>=4.0 # Apache-2.0
openstackdocstheme>=1.18.1 openstackdocstheme>=1.18.1

View File

@ -4,46 +4,9 @@
tasks: tasks:
- include_vars: vars.yaml - include_vars: vars.yaml
- name: Install Docker (Debian) - name: Ensure docker
when: ansible_os_family == 'Debian' include_role:
block: name: ensure-docker
- file:
path: "{{ item }}"
state: directory
with_items:
- /etc/docker/
- /etc/systemd/system/docker.service.d/
- /var/lib/docker/
- mount:
path: /var/lib/docker/
src: tmpfs
fstype: tmpfs
opts: size=25g
state: mounted
- copy: "{{ item }}"
with_items:
- content: "{{ docker_daemon | to_json }}"
dest: /etc/docker/daemon.json
- src: files/docker-systemd.conf
dest: /etc/systemd/system/docker.service.d/
- apt_key:
url: https://download.docker.com/linux/ubuntu/gpg
- apt_repository:
repo: deb http://{{ zuul_site_mirror_fqdn }}/deb-docker bionic stable
- apt:
name: "{{ item }}"
allow_unauthenticated: True
with_items:
- docker-ce
- pip:
name: docker
version: 2.7.0
- iptables:
action: insert
chain: INPUT
in_interface: docker0
jump: ACCEPT
become: True
- name: Make images - name: Make images
when: not publish when: not publish

View File

@ -66,6 +66,6 @@ commands = oslo-config-generator --config-file=tools/config/ranger-config-genera
[flake8] [flake8]
show-source = True show-source = True
ignore = H301,F821,H202,H101,H104,H238,H401,H405,E501,F811,F403,H233,F841,H903 ignore = H301,F821,H202,H101,H104,H238,H401,H405,E501,F811,F403,H233,F841,H903,W503
builtins = _ builtins = _
exclude=.venv,.git,.tox,dist,doc,*lib/python*,*egg,build exclude=.venv,.git,.tox,dist,doc,*lib/python*,*egg,build