
Fixes existing pep8 errors and reenables the corresponding tox rules Change-Id: I4168a90c40173e4c35c9d75030cd592ace657508
442 lines
16 KiB
Python
Executable File
442 lines
16 KiB
Python
Executable File
from cms_rest.logic.error_base import ErrorStatus
|
|
from cms_rest.model.Model import Model
|
|
from orm_common.utils.cross_api_utils import (get_regions_of_group,
|
|
set_utils_conf)
|
|
from pecan import conf
|
|
import wsme
|
|
from wsme import types as wtypes
|
|
|
|
|
|
class Enabled(Model):
|
|
"""enable model the customer
|
|
|
|
"""
|
|
enabled = wsme.wsattr(bool, mandatory=True)
|
|
|
|
def __init__(self, enabled=None):
|
|
"""Create a new enables class.
|
|
|
|
:param enabled: customer status
|
|
"""
|
|
self.enabled = enabled
|
|
|
|
|
|
class Compute(Model):
|
|
"""compute model the customer
|
|
|
|
"""
|
|
instances = wsme.wsattr(wsme.types.text, mandatory=True)
|
|
injected_files = wsme.wsattr(wsme.types.text, mandatory=True, name="injected-files")
|
|
key_pairs = wsme.wsattr(wsme.types.text, mandatory=True, name="key-pairs")
|
|
ram = wsme.wsattr(wsme.types.text, mandatory=True)
|
|
vcpus = wsme.wsattr(wsme.types.text, mandatory=False)
|
|
metadata_items = wsme.wsattr(wsme.types.text, mandatory=False, name="metadata-items")
|
|
injected_file_content_bytes = wsme.wsattr(wsme.types.text, mandatory=False, name="injected-file-content-bytes")
|
|
floating_ips = wsme.wsattr(wsme.types.text, mandatory=False, name="floating-ips")
|
|
fixed_ips = wsme.wsattr(wsme.types.text, mandatory=False, name="fixed-ips")
|
|
injected_file_path_bytes = wsme.wsattr(wsme.types.text, mandatory=False, name="injected-file-path-bytes")
|
|
server_groups = wsme.wsattr(wsme.types.text, mandatory=False, name="server-groups")
|
|
server_group_members = wsme.wsattr(wsme.types.text, mandatory=False, name="server-group-members")
|
|
|
|
def __init__(self, instances='', injected_files='', key_pairs='', ram='',
|
|
vcpus=None, metadata_items=None, injected_file_content_bytes=None,
|
|
floating_ips='', fixed_ips='', injected_file_path_bytes='',
|
|
server_groups='', server_group_members=''):
|
|
"""Create a new compute instance.
|
|
:param instances:
|
|
:param injected_files:
|
|
:param key_pairs:
|
|
:param ram:
|
|
:param vcpus:
|
|
:param metadata_items:
|
|
:param injected_file_content_bytes:
|
|
:param floating_ips:
|
|
:param fixed_ips:
|
|
:param injected_file_path_bytes:
|
|
:param server_groups:
|
|
:param server_group_members:
|
|
"""
|
|
self.instances = instances
|
|
self.injected_files = injected_files
|
|
self.key_pairs = key_pairs
|
|
self.ram = ram
|
|
if vcpus is None:
|
|
self.vcpus = conf.quotas_default_values.compute.vcpus
|
|
else:
|
|
self.vcpus = vcpus
|
|
if metadata_items is None:
|
|
self.metadata_items = \
|
|
conf.quotas_default_values.compute.metadata_items
|
|
else:
|
|
self.metadata_items = metadata_items
|
|
if injected_file_content_bytes is None:
|
|
self.injected_file_content_bytes = \
|
|
conf.quotas_default_values.compute.injected_file_content_bytes
|
|
else:
|
|
self.injected_file_content_bytes = injected_file_content_bytes
|
|
|
|
self.floating_ips = floating_ips
|
|
self.fixed_ips = fixed_ips
|
|
self.injected_file_path_bytes = injected_file_path_bytes
|
|
self.server_groups = server_groups
|
|
self.server_group_members = server_group_members
|
|
|
|
|
|
class Storage(Model):
|
|
"""storage info model for customer
|
|
|
|
"""
|
|
gigabytes = wsme.wsattr(wsme.types.text, mandatory=True)
|
|
snapshots = wsme.wsattr(wsme.types.text, mandatory=True)
|
|
volumes = wsme.wsattr(wsme.types.text, mandatory=True)
|
|
|
|
def __init__(self, gigabytes='', snapshots='', volumes=''):
|
|
"""create a new Storage instance.
|
|
:param gigabytes:
|
|
:param snapshots:
|
|
:param volumes:
|
|
"""
|
|
self.gigabytes = gigabytes
|
|
self.snapshots = snapshots
|
|
self.volumes = volumes
|
|
|
|
|
|
class Network(Model):
|
|
"""network model the customer
|
|
|
|
"""
|
|
floating_ips = wsme.wsattr(wsme.types.text, mandatory=True, name="floating-ips")
|
|
networks = wsme.wsattr(wsme.types.text, mandatory=True)
|
|
ports = wsme.wsattr(wsme.types.text, mandatory=True)
|
|
routers = wsme.wsattr(wsme.types.text, mandatory=True)
|
|
subnets = wsme.wsattr(wsme.types.text, mandatory=True)
|
|
security_groups = wsme.wsattr(wsme.types.text, mandatory=False, name="security-groups")
|
|
security_group_rules = wsme.wsattr(wsme.types.text, mandatory=False, name="security-group-rules")
|
|
health_monitor = wsme.wsattr(wsme.types.text, mandatory=False, name="health-monitor")
|
|
member = wsme.wsattr(wsme.types.text, mandatory=False)
|
|
nat_instance = wsme.wsattr(wsme.types.text, mandatory=False, name="nat-instance")
|
|
pool = wsme.wsattr(wsme.types.text, mandatory=False)
|
|
route_table = wsme.wsattr(wsme.types.text, mandatory=False, name="route-table")
|
|
vip = wsme.wsattr(wsme.types.text, mandatory=False)
|
|
|
|
def __init__(self, floating_ips='', networks='', ports='', routers='',
|
|
subnets='', security_groups=None, security_group_rules=None,
|
|
health_monitor='', member='', nat_instance='',
|
|
pool='', route_table='', vip=''):
|
|
|
|
"""Create a new Network instance.
|
|
:param floating_ips: num of floating_ips
|
|
:param networks: num of networks
|
|
:param ports: num of ports
|
|
:param routers: num of routers
|
|
:param subnets: num of subnets
|
|
:param security_groups: security groups
|
|
:param security_group_rules: security group rules
|
|
:param health_monitor:
|
|
:param member:
|
|
:param nat_instance:
|
|
:param pool:
|
|
:param route_table:
|
|
:param vip:
|
|
"""
|
|
self.floating_ips = floating_ips
|
|
self.networks = networks
|
|
self.ports = ports
|
|
self.routers = routers
|
|
self.subnets = subnets
|
|
if security_groups is None:
|
|
self.security_groups = conf.quotas_default_values.network.security_groups
|
|
else:
|
|
self.security_groups = security_groups
|
|
if security_group_rules is None:
|
|
self.security_group_rules = conf.quotas_default_values.network.security_group_rules
|
|
else:
|
|
self.security_group_rules = security_group_rules
|
|
|
|
self.health_monitor = health_monitor
|
|
self.member = member
|
|
self.nat_instance = nat_instance
|
|
self.pool = pool
|
|
self.route_table = route_table
|
|
self.vip = vip
|
|
|
|
|
|
class Quota(Model):
|
|
"""network model the customer
|
|
|
|
"""
|
|
compute = wsme.wsattr([Compute], mandatory=False)
|
|
storage = wsme.wsattr([Storage], mandatory=False)
|
|
network = wsme.wsattr([Network], mandatory=False)
|
|
|
|
def __init__(self, compute=None, storage=None, network=None):
|
|
"""Create a new compute.
|
|
|
|
:param compute: compute quota
|
|
:param storage: storage quota
|
|
:param network: network quota
|
|
"""
|
|
self.compute = compute
|
|
self.storage = storage
|
|
self.network = network
|
|
|
|
|
|
class User(Model):
|
|
"""user model the customer
|
|
|
|
"""
|
|
id = wsme.wsattr(wsme.types.text, mandatory=True)
|
|
role = wsme.wsattr([str])
|
|
|
|
def __init__(self, id="", role=[]):
|
|
"""Create a new compute.
|
|
|
|
:param id: user id
|
|
:param role: roles this use belong to
|
|
"""
|
|
self.id = id
|
|
self.role = role
|
|
|
|
|
|
class Region(Model):
|
|
"""network model the customer
|
|
|
|
"""
|
|
name = wsme.wsattr(wsme.types.text, mandatory=True)
|
|
type = wsme.wsattr(wsme.types.text, default="single", mandatory=False)
|
|
quotas = wsme.wsattr([Quota], mandatory=False)
|
|
users = wsme.wsattr([User], mandatory=False)
|
|
status = wsme.wsattr(wsme.types.text, mandatory=False)
|
|
error_message = wsme.wsattr(wsme.types.text, mandatory=False)
|
|
|
|
def __init__(self, name="", type="single", quotas=[], users=[], status="",
|
|
error_message=""):
|
|
"""Create a new compute.
|
|
|
|
:param name: region name
|
|
:param type: region type
|
|
:param quotas: quotas ( array of Quota)
|
|
:param users: array of users of specific region
|
|
:param status: status of creation
|
|
:param error_message: error message if status is error
|
|
"""
|
|
|
|
self.name = name
|
|
self.type = type
|
|
self.quotas = quotas
|
|
self.users = users
|
|
self.status = status
|
|
if error_message:
|
|
self.error_message = error_message
|
|
|
|
|
|
class Customer(Model):
|
|
"""customer entity with all it's related data
|
|
|
|
"""
|
|
description = wsme.wsattr(wsme.types.text, mandatory=True)
|
|
enabled = wsme.wsattr(bool, mandatory=True)
|
|
name = wsme.wsattr(wsme.types.text, mandatory=True)
|
|
metadata = wsme.wsattr(wsme.types.DictType(str, str), mandatory=False)
|
|
regions = wsme.wsattr([Region], mandatory=False)
|
|
users = wsme.wsattr([User], mandatory=True)
|
|
defaultQuotas = wsme.wsattr([Quota], mandatory=True)
|
|
status = wsme.wsattr(wsme.types.text, mandatory=False)
|
|
custId = wsme.wsattr(wsme.types.text, mandatory=False)
|
|
uuid = wsme.wsattr(wsme.types.text, mandatory=False)
|
|
|
|
def __init__(self, description="", enabled=False, name="", metadata={}, regions=[], users=[],
|
|
defaultQuotas=[], status="", custId="", uuid=None):
|
|
"""Create a new Customer.
|
|
|
|
:param description: Server name
|
|
:param enabled: I don't know
|
|
:param status: status of creation
|
|
"""
|
|
self.description = description
|
|
self.enabled = enabled
|
|
self.name = name
|
|
self.metadata = metadata
|
|
self.regions = regions
|
|
self.users = users
|
|
self.defaultQuotas = defaultQuotas
|
|
self.status = status
|
|
self.custId = custId
|
|
if uuid is not None:
|
|
self.uuid = uuid
|
|
|
|
def validate_model(self, context=None):
|
|
"""this function check if the customer model meet the demands
|
|
:param context: i.e. 'create 'update'
|
|
:return: none
|
|
"""
|
|
if context == "update":
|
|
for region in self.regions:
|
|
if region.type == "group":
|
|
raise ErrorStatus(400, "region type is invalid for update, \'group\' can be only in create")
|
|
|
|
def handle_region_group(self):
|
|
regions_to_add = []
|
|
for region in self.regions[:]: # get copy of it to be able to delete from the origin
|
|
if region.type == "group":
|
|
group_regions = self.get_regions_for_group(region.name)
|
|
if not group_regions:
|
|
raise ErrorStatus(404, 'Group {} Not found'.format(region.name))
|
|
for group_region in group_regions:
|
|
regions_to_add.append(Region(name=group_region,
|
|
type='single',
|
|
quotas=region.quotas,
|
|
users=region.users))
|
|
self.regions.remove(region)
|
|
|
|
self.regions.extend(set(regions_to_add)) # remove duplicates if exist
|
|
|
|
def get_regions_for_group(self, group_name):
|
|
set_utils_conf(conf)
|
|
regions = get_regions_of_group(group_name)
|
|
return regions
|
|
|
|
|
|
""" Customer Result Handler """
|
|
|
|
|
|
class CustomerResult(Model):
|
|
id = wsme.wsattr(wsme.types.text, mandatory=True)
|
|
updated = wsme.wsattr(wsme.types.text, mandatory=False)
|
|
created = wsme.wsattr(wsme.types.text, mandatory=False)
|
|
links = wsme.wsattr({str: str}, mandatory=True)
|
|
|
|
def __init__(self, id, links={}, updated=None, created=None):
|
|
self.id = id
|
|
if updated:
|
|
self.updated = updated
|
|
elif created:
|
|
self.created = created
|
|
self.links = links
|
|
|
|
|
|
class CustomerResultWrapper(Model):
|
|
transaction_id = wsme.wsattr(wsme.types.text, mandatory=True)
|
|
customer = wsme.wsattr(CustomerResult, mandatory=True)
|
|
|
|
def __init__(self, transaction_id, id, links, updated, created):
|
|
customer_result = CustomerResult(id, links, updated, created)
|
|
self.transaction_id = transaction_id
|
|
self.customer = customer_result
|
|
|
|
|
|
""" ****************************************************************** """
|
|
|
|
""" User Result Handler """
|
|
|
|
|
|
class UserResult(Model):
|
|
id = wsme.wsattr(wsme.types.text, mandatory=True)
|
|
added = wsme.wsattr(wsme.types.text, mandatory=False)
|
|
links = wsme.wsattr({str: str}, mandatory=True)
|
|
|
|
def __init__(self, id=None, added=None, links={}):
|
|
self.id = id
|
|
self.added = added
|
|
self.links = links
|
|
|
|
|
|
class UserResultWrapper(Model):
|
|
transaction_id = wsme.wsattr(wsme.types.text, mandatory=True)
|
|
users = wsme.wsattr([UserResult], mandatory=True)
|
|
|
|
def __init__(self, transaction_id, users):
|
|
users_result = [UserResult(user['id'], user['added'], user['links']) for user in users]
|
|
|
|
self.transaction_id = transaction_id
|
|
self.users = users_result
|
|
|
|
|
|
class MetadataWrapper(Model):
|
|
metadata = wsme.wsattr(wsme.types.DictType(str, str), mandatory=True)
|
|
|
|
def __init__(self, metadata={}):
|
|
self.metadata = metadata
|
|
|
|
|
|
""" ****************************************************************** """
|
|
|
|
""" Region Result Handler """
|
|
|
|
|
|
class RegionResult(Model):
|
|
id = wsme.wsattr(wsme.types.text, mandatory=True)
|
|
added = wsme.wsattr(wsme.types.text, mandatory=False)
|
|
links = wsme.wsattr({str: str}, mandatory=True)
|
|
|
|
def __init__(self, id, added=None, links={}):
|
|
self.id = id
|
|
self.added = added
|
|
self.links = links
|
|
|
|
|
|
class RegionResultWrapper(Model):
|
|
transaction_id = wsme.wsattr(wsme.types.text, mandatory=True)
|
|
regions = wsme.wsattr([RegionResult], mandatory=True)
|
|
|
|
def __init__(self, transaction_id, regions):
|
|
regions_result = [RegionResult(region['id'], region['added'], region['links']) for region in regions]
|
|
|
|
self.transaction_id = transaction_id
|
|
self.regions = regions_result
|
|
|
|
|
|
""" ****************************************************************** """
|
|
|
|
""" CustomerSummary is a DataObject and contains all the fields defined in CustomerSummary structure. """
|
|
|
|
|
|
class CustomerSummary(Model):
|
|
name = wsme.wsattr(wsme.types.text)
|
|
id = wsme.wsattr(wsme.types.text)
|
|
description = wsme.wsattr(wsme.types.text)
|
|
enabled = wsme.wsattr(bool, mandatory=True)
|
|
num_regions = wsme.wsattr(int, mandatory=True)
|
|
status = wsme.wsattr(wtypes.text, mandatory=True)
|
|
regions = wsme.wsattr([str], mandatory=True)
|
|
|
|
def __init__(self, name='', id='', description='',
|
|
enabled=True, status="", regions=[], num_regions=0):
|
|
Model.__init__(self)
|
|
|
|
self.name = name
|
|
self.id = id
|
|
self.description = description
|
|
self.enabled = enabled
|
|
self.num_regions = num_regions
|
|
self.status = status
|
|
self.regions = regions
|
|
|
|
@staticmethod
|
|
def from_db_model(sql_customer):
|
|
regions = [region.region.name for region in
|
|
sql_customer.customer_customer_regions if
|
|
region.region_id != -1]
|
|
# default region is -1 , check if -1 in customer list if yes it will return (true, flase) equal to (0, 1)
|
|
num_regions = len(sql_customer.customer_customer_regions) - (-1 in [region.region_id for region in sql_customer.customer_customer_regions])
|
|
customer = CustomerSummary()
|
|
customer.id = sql_customer.uuid
|
|
customer.name = sql_customer.name
|
|
customer.description = sql_customer.description
|
|
customer.enabled = bool(sql_customer.enabled)
|
|
customer.num_regions = num_regions
|
|
customer.regions = regions
|
|
|
|
return customer
|
|
|
|
|
|
class CustomerSummaryResponse(Model):
|
|
customers = wsme.wsattr([CustomerSummary], mandatory=True)
|
|
|
|
def __init__(self):
|
|
Model.__init__(self)
|
|
self.customers = []
|
|
|
|
|
|
""" ****************************************************************** """
|