fix bug
Change-Id: I091ab913606298812db3bcc0645755909fb5293d
This commit is contained in:
parent
5d321de688
commit
90ae66a7b5
@ -51,20 +51,20 @@ def _check_subnet(subnet):
|
|||||||
@utils.supported_filters(optional_support_keys=SUPPORTED_FIELDS)
|
@utils.supported_filters(optional_support_keys=SUPPORTED_FIELDS)
|
||||||
@database.run_in_session()
|
@database.run_in_session()
|
||||||
@user_api.check_user_permission_in_session(
|
@user_api.check_user_permission_in_session(
|
||||||
permission.PERMISSION_LIST_NETWORKS
|
permission.PERMISSION_LIST_SUBNETS
|
||||||
)
|
)
|
||||||
@utils.wrap_to_dict(RESP_FIELDS)
|
@utils.wrap_to_dict(RESP_FIELDS)
|
||||||
def list_subnets(session, lister, **filters):
|
def list_subnets(session, lister, **filters):
|
||||||
"""List subnets."""
|
"""List subnets."""
|
||||||
return utils.list_db_objects(
|
return utils.list_db_objects(
|
||||||
session, models.Network, **filters
|
session, models.Subnet, **filters
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@utils.supported_filters([])
|
@utils.supported_filters([])
|
||||||
@database.run_in_session()
|
@database.run_in_session()
|
||||||
@user_api.check_user_permission_in_session(
|
@user_api.check_user_permission_in_session(
|
||||||
permission.PERMISSION_LIST_NETWORKS
|
permission.PERMISSION_LIST_SUBNETS
|
||||||
)
|
)
|
||||||
@utils.wrap_to_dict(RESP_FIELDS)
|
@utils.wrap_to_dict(RESP_FIELDS)
|
||||||
def get_subnet(
|
def get_subnet(
|
||||||
@ -73,7 +73,8 @@ def get_subnet(
|
|||||||
):
|
):
|
||||||
"""Get subnet info."""
|
"""Get subnet info."""
|
||||||
return utils.get_db_object(
|
return utils.get_db_object(
|
||||||
session, models.Network, exception_when_missing, id=subnet_id
|
session, models.Subnet,
|
||||||
|
exception_when_missing, id=subnet_id
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -84,7 +85,7 @@ def get_subnet(
|
|||||||
@utils.input_validates(subnet=_check_subnet)
|
@utils.input_validates(subnet=_check_subnet)
|
||||||
@database.run_in_session()
|
@database.run_in_session()
|
||||||
@user_api.check_user_permission_in_session(
|
@user_api.check_user_permission_in_session(
|
||||||
permission.PERMISSION_ADD_NETWORK
|
permission.PERMISSION_ADD_SUBNET
|
||||||
)
|
)
|
||||||
@utils.wrap_to_dict(RESP_FIELDS)
|
@utils.wrap_to_dict(RESP_FIELDS)
|
||||||
def add_subnet(
|
def add_subnet(
|
||||||
@ -93,7 +94,7 @@ def add_subnet(
|
|||||||
):
|
):
|
||||||
"""Create a subnet."""
|
"""Create a subnet."""
|
||||||
return utils.add_db_object(
|
return utils.add_db_object(
|
||||||
session, models.Network,
|
session, models.Subnet,
|
||||||
exception_when_existing, subnet, **kwargs
|
exception_when_existing, subnet, **kwargs
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -105,26 +106,26 @@ def add_subnet(
|
|||||||
@utils.input_validates(subnet=_check_subnet)
|
@utils.input_validates(subnet=_check_subnet)
|
||||||
@database.run_in_session()
|
@database.run_in_session()
|
||||||
@user_api.check_user_permission_in_session(
|
@user_api.check_user_permission_in_session(
|
||||||
permission.PERMISSION_ADD_NETWORK
|
permission.PERMISSION_ADD_SUBNET
|
||||||
)
|
)
|
||||||
@utils.wrap_to_dict(RESP_FIELDS)
|
@utils.wrap_to_dict(RESP_FIELDS)
|
||||||
def update_subnet(session, updater, subnet_id, **kwargs):
|
def update_subnet(session, updater, subnet_id, **kwargs):
|
||||||
"""Update a subnet."""
|
"""Update a subnet."""
|
||||||
network = utils.get_db_object(
|
subnet = utils.get_db_object(
|
||||||
session, models.Network, id=subnet_id
|
session, models.Subnet, id=subnet_id
|
||||||
)
|
)
|
||||||
return utils.update_db_object(session, network, **kwargs)
|
return utils.update_db_object(session, subnet, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
@utils.supported_filters([])
|
@utils.supported_filters([])
|
||||||
@database.run_in_session()
|
@database.run_in_session()
|
||||||
@user_api.check_user_permission_in_session(
|
@user_api.check_user_permission_in_session(
|
||||||
permission.PERMISSION_DEL_NETWORK
|
permission.PERMISSION_DEL_SUBNET
|
||||||
)
|
)
|
||||||
@utils.wrap_to_dict(RESP_FIELDS)
|
@utils.wrap_to_dict(RESP_FIELDS)
|
||||||
def del_subnet(session, deleter, subnet_id, **kwargs):
|
def del_subnet(session, deleter, subnet_id, **kwargs):
|
||||||
"""Delete a subnet."""
|
"""Delete a subnet."""
|
||||||
network = utils.get_db_object(
|
subnet = utils.get_db_object(
|
||||||
session, models.Network, id=subnet_id
|
session, models.Subnet, id=subnet_id
|
||||||
)
|
)
|
||||||
return utils.del_db_object(session, network)
|
return utils.del_db_object(session, subnet)
|
||||||
|
@ -89,14 +89,14 @@ PERMISSION_LIST_ADAPTERS = PermissionWrapper(
|
|||||||
PERMISSION_LIST_METADATAS = PermissionWrapper(
|
PERMISSION_LIST_METADATAS = PermissionWrapper(
|
||||||
'list_metadatas', 'list metadatas', 'list metadatas'
|
'list_metadatas', 'list metadatas', 'list metadatas'
|
||||||
)
|
)
|
||||||
PERMISSION_LIST_NETWORKS = PermissionWrapper(
|
PERMISSION_LIST_SUBNETS = PermissionWrapper(
|
||||||
'list_networks', 'list networks', 'list networks'
|
'list_subnets', 'list subnets', 'list subnets'
|
||||||
)
|
)
|
||||||
PERMISSION_ADD_NETWORK = PermissionWrapper(
|
PERMISSION_ADD_SUBNET = PermissionWrapper(
|
||||||
'add_network', 'add network', 'add network'
|
'add_subnet', 'add subnet', 'add subnet'
|
||||||
)
|
)
|
||||||
PERMISSION_DEL_NETWORK = PermissionWrapper(
|
PERMISSION_DEL_SUBNET = PermissionWrapper(
|
||||||
'del_network', 'del network', 'del network'
|
'del_subnet', 'del subnet', 'del subnet'
|
||||||
)
|
)
|
||||||
PERMISSION_LIST_CLUSTERS = PermissionWrapper(
|
PERMISSION_LIST_CLUSTERS = PermissionWrapper(
|
||||||
'list_clusters', 'list clusters', 'list clusters'
|
'list_clusters', 'list clusters', 'list clusters'
|
||||||
@ -224,9 +224,9 @@ PERMISSIONS = [
|
|||||||
PERMISSION_DEL_MACHINE,
|
PERMISSION_DEL_MACHINE,
|
||||||
PERMISSION_LIST_ADAPTERS,
|
PERMISSION_LIST_ADAPTERS,
|
||||||
PERMISSION_LIST_METADATAS,
|
PERMISSION_LIST_METADATAS,
|
||||||
PERMISSION_LIST_NETWORKS,
|
PERMISSION_LIST_SUBNETS,
|
||||||
PERMISSION_ADD_NETWORK,
|
PERMISSION_ADD_SUBNET,
|
||||||
PERMISSION_DEL_NETWORK,
|
PERMISSION_DEL_SUBNET,
|
||||||
PERMISSION_LIST_CLUSTERS,
|
PERMISSION_LIST_CLUSTERS,
|
||||||
PERMISSION_ADD_CLUSTER,
|
PERMISSION_ADD_CLUSTER,
|
||||||
PERMISSION_DEL_CLUSTER,
|
PERMISSION_DEL_CLUSTER,
|
||||||
|
@ -151,12 +151,43 @@ def model_filter(query, model, **filters):
|
|||||||
return query
|
return query
|
||||||
|
|
||||||
|
|
||||||
|
def replace_output(**output_mapping):
|
||||||
|
def decorator(func):
|
||||||
|
@functools.wraps(func)
|
||||||
|
def wrapper(*args, **kwargs):
|
||||||
|
return _replace_output(
|
||||||
|
func(*args, **kwargs), **output_mapping
|
||||||
|
)
|
||||||
|
return wrapper
|
||||||
|
return decorator
|
||||||
|
|
||||||
|
|
||||||
|
def _replace_output(data, **output_mapping):
|
||||||
|
"""Helper to replace output data."""
|
||||||
|
if isinstance(data, list):
|
||||||
|
return [
|
||||||
|
_replace_output(item, **output_mapping)
|
||||||
|
for item in data
|
||||||
|
]
|
||||||
|
info = {}
|
||||||
|
for key, value in data.items():
|
||||||
|
if key in output_mapping:
|
||||||
|
output_key = output_mapping[key]
|
||||||
|
if isinstance(output_key, basestring):
|
||||||
|
info[output_key] = value
|
||||||
|
else:
|
||||||
|
info[key] = (
|
||||||
|
_replace_output(value, **output_key)
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
info[key] = value
|
||||||
|
return info
|
||||||
|
|
||||||
|
|
||||||
def wrap_to_dict(support_keys=[], **filters):
|
def wrap_to_dict(support_keys=[], **filters):
|
||||||
def decorator(func):
|
def decorator(func):
|
||||||
@functools.wraps(func)
|
@functools.wraps(func)
|
||||||
def wrapper(*args, **kwargs):
|
def wrapper(*args, **kwargs):
|
||||||
logging.info('wrap to dict: args: %s', str(args))
|
|
||||||
logging.info('wrap to dict: kwargs: %s', kwargs)
|
|
||||||
return _wrapper_dict(
|
return _wrapper_dict(
|
||||||
func(*args, **kwargs), support_keys, **filters
|
func(*args, **kwargs), support_keys, **filters
|
||||||
)
|
)
|
||||||
@ -181,12 +212,36 @@ def _wrapper_dict(data, support_keys, **filters):
|
|||||||
for key in support_keys:
|
for key in support_keys:
|
||||||
if key in data:
|
if key in data:
|
||||||
if key in filters:
|
if key in filters:
|
||||||
info[key] = _wrapper_dict(data[key], filters[key])
|
filter_keys = filters[key]
|
||||||
|
if isinstance(filter_keys, dict):
|
||||||
|
info[key] = _wrapper_dict(
|
||||||
|
data[key], filter_keys.keys(),
|
||||||
|
**filter_keys
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
info[key] = _wrapper_dict(
|
||||||
|
data[key], filter_keys
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
info[key] = data[key]
|
info[key] = data[key]
|
||||||
return info
|
return info
|
||||||
|
|
||||||
|
|
||||||
|
def replace_input_types(**kwarg_mapping):
|
||||||
|
def decorator(func):
|
||||||
|
@functools.wraps(func)
|
||||||
|
def wrapper(*args, **kwargs):
|
||||||
|
replaced_kwargs = {}
|
||||||
|
for key, value in kwargs.items():
|
||||||
|
if key in kwarg_mapping:
|
||||||
|
replaced_kwargs[key] = kwarg_mapping[key](value)
|
||||||
|
else:
|
||||||
|
replaced_kwargs[key] = value
|
||||||
|
return func(*args, **replaced_kwargs)
|
||||||
|
return wrapper
|
||||||
|
return decorator
|
||||||
|
|
||||||
|
|
||||||
def replace_filters(**filter_mapping):
|
def replace_filters(**filter_mapping):
|
||||||
def decorator(func):
|
def decorator(func):
|
||||||
@functools.wraps(func)
|
@functools.wraps(func)
|
||||||
|
@ -74,8 +74,34 @@ class HelperMixin(object):
|
|||||||
def update(self):
|
def update(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def type_compatible(value, column_type):
|
||||||
|
if value is None:
|
||||||
|
return True
|
||||||
|
if not hasattr(column_type, 'python_type'):
|
||||||
|
return True
|
||||||
|
column_python_type = column_type.python_type
|
||||||
|
if isinstance(value, column_python_type):
|
||||||
|
return True
|
||||||
|
if issubclass(column_python_type, basestring):
|
||||||
|
return isinstance(value, basestring)
|
||||||
|
if column_python_type in [int, long]:
|
||||||
|
return type(value) in [int, long]
|
||||||
|
if column_python_type in [float]:
|
||||||
|
return type(value) in [float]
|
||||||
|
if column_python_type in [bool]:
|
||||||
|
return type(value) in [bool]
|
||||||
|
return False
|
||||||
|
|
||||||
def validate(self):
|
def validate(self):
|
||||||
pass
|
for key, column in self.__mapper__.columns.items():
|
||||||
|
value = getattr(self, key)
|
||||||
|
if not self.type_compatible(value, column.type):
|
||||||
|
raise exception.InvalidParameter(
|
||||||
|
'column %s value %r type is unexpected: %s' % (
|
||||||
|
key, value, column.type
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
def to_dict(self):
|
def to_dict(self):
|
||||||
keys = self.__mapper__.columns.keys()
|
keys = self.__mapper__.columns.keys()
|
||||||
@ -259,11 +285,11 @@ class InstallerMixin(HelperMixin):
|
|||||||
settings = Column(JSONEncoded, default={})
|
settings = Column(JSONEncoded, default={})
|
||||||
|
|
||||||
def validate(self):
|
def validate(self):
|
||||||
|
super(InstallerMixin, self).validate()
|
||||||
if not self.name:
|
if not self.name:
|
||||||
raise exception.InvalidParameter(
|
raise exception.InvalidParameter(
|
||||||
'name is not set in installer %s' % self.name
|
'name is not set in installer %s' % self.name
|
||||||
)
|
)
|
||||||
super(InstallerMixin, self).validate()
|
|
||||||
|
|
||||||
|
|
||||||
class StateMixin(TimestampMixin, HelperMixin):
|
class StateMixin(TimestampMixin, HelperMixin):
|
||||||
@ -335,11 +361,11 @@ class HostNetwork(BASE, TimestampMixin, HelperMixin):
|
|||||||
|
|
||||||
@hybrid_property
|
@hybrid_property
|
||||||
def subnet(self):
|
def subnet(self):
|
||||||
return self.network.subnet
|
return self.subnet.subnet
|
||||||
|
|
||||||
@subnet.expression
|
@subnet.expression
|
||||||
def subnet(cls):
|
def subnet(cls):
|
||||||
return cls.network.subnet
|
return cls.subnet.subnet
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def netmask(self):
|
def netmask(self):
|
||||||
@ -349,7 +375,8 @@ class HostNetwork(BASE, TimestampMixin, HelperMixin):
|
|||||||
self.host.config_validated = False
|
self.host.config_validated = False
|
||||||
|
|
||||||
def validate(self):
|
def validate(self):
|
||||||
if not self.network:
|
super(HostNetwork, self).validate()
|
||||||
|
if not self.subnet:
|
||||||
raise exception.InvalidParameter(
|
raise exception.InvalidParameter(
|
||||||
'subnet is not set in %s interface %s' % (
|
'subnet is not set in %s interface %s' % (
|
||||||
self.host_id, self.interface
|
self.host_id, self.interface
|
||||||
@ -369,7 +396,6 @@ class HostNetwork(BASE, TimestampMixin, HelperMixin):
|
|||||||
str(ip), str(subnet)
|
str(ip), str(subnet)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
super(HostNetwork, self).validate()
|
|
||||||
|
|
||||||
def to_dict(self):
|
def to_dict(self):
|
||||||
dict_info = super(HostNetwork, self).to_dict()
|
dict_info = super(HostNetwork, self).to_dict()
|
||||||
@ -758,6 +784,7 @@ class Host(BASE, TimestampMixin, HelperMixin):
|
|||||||
super(Host, self).update()
|
super(Host, self).update()
|
||||||
|
|
||||||
def validate(self):
|
def validate(self):
|
||||||
|
super(Host, self).validate()
|
||||||
creator = self.creator
|
creator = self.creator
|
||||||
if not creator:
|
if not creator:
|
||||||
raise exception.InvalidParameter(
|
raise exception.InvalidParameter(
|
||||||
@ -777,7 +804,6 @@ class Host(BASE, TimestampMixin, HelperMixin):
|
|||||||
raise exception.InvalidParameter(
|
raise exception.InvalidParameter(
|
||||||
'os %s is not deployable in host %s' % (os.name, self.id)
|
'os %s is not deployable in host %s' % (os.name, self.id)
|
||||||
)
|
)
|
||||||
super(Host, self).validate()
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def os_installed(self):
|
def os_installed(self):
|
||||||
@ -981,6 +1007,7 @@ class Cluster(BASE, TimestampMixin, HelperMixin):
|
|||||||
super(Cluster, self).update()
|
super(Cluster, self).update()
|
||||||
|
|
||||||
def validate(self):
|
def validate(self):
|
||||||
|
super(Cluster, self).validate()
|
||||||
creator = self.creator
|
creator = self.creator
|
||||||
if not creator:
|
if not creator:
|
||||||
raise exception.InvalidParameter(
|
raise exception.InvalidParameter(
|
||||||
@ -1024,13 +1051,22 @@ class Cluster(BASE, TimestampMixin, HelperMixin):
|
|||||||
raise exception.InvalidParameter(
|
raise exception.InvalidParameter(
|
||||||
'flavor is not set in cluster %s' % self.id
|
'flavor is not set in cluster %s' % self.id
|
||||||
)
|
)
|
||||||
if flavor.adapter_id != self.adapter_id:
|
flavor_adapter_id = flavor.adapter_id
|
||||||
|
adapter_id = self.adapter_id
|
||||||
|
logging.info(
|
||||||
|
'flavor adapter type %s value %s',
|
||||||
|
type(flavor_adapter_id), flavor_adapter_id
|
||||||
|
)
|
||||||
|
logging.info(
|
||||||
|
'adapter type %s value %s',
|
||||||
|
type(adapter_id), adapter_id
|
||||||
|
)
|
||||||
|
if flavor_adapter_id != adapter_id:
|
||||||
raise exception.InvalidParameter(
|
raise exception.InvalidParameter(
|
||||||
'flavor adapter id %s does not match adapter id %s' % (
|
'flavor adapter id %s does not match adapter id %s' % (
|
||||||
flavor.adapter_id, self.adapter_id
|
flavor_adapter_id, adapter_id
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
super(Cluster, self).validate()
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def patched_os_config(self):
|
def patched_os_config(self):
|
||||||
@ -1164,11 +1200,11 @@ class UserToken(BASE, HelperMixin):
|
|||||||
super(UserToken, self).__init__(**kwargs)
|
super(UserToken, self).__init__(**kwargs)
|
||||||
|
|
||||||
def validate(self):
|
def validate(self):
|
||||||
|
super(UserToken, self).validate()
|
||||||
if not self.user:
|
if not self.user:
|
||||||
raise exception.InvalidParameter(
|
raise exception.InvalidParameter(
|
||||||
'user is not set in token: %s' % self.token
|
'user is not set in token: %s' % self.token
|
||||||
)
|
)
|
||||||
super(UserToken, self).validate()
|
|
||||||
|
|
||||||
|
|
||||||
class UserLog(BASE, HelperMixin):
|
class UserLog(BASE, HelperMixin):
|
||||||
@ -1188,11 +1224,11 @@ class UserLog(BASE, HelperMixin):
|
|||||||
return self.user.email
|
return self.user.email
|
||||||
|
|
||||||
def validate(self):
|
def validate(self):
|
||||||
|
super(UserLog, self).validate()
|
||||||
if not self.user:
|
if not self.user:
|
||||||
raise exception.InvalidParameter(
|
raise exception.InvalidParameter(
|
||||||
'user is not set in user log: %s' % self.id
|
'user is not set in user log: %s' % self.id
|
||||||
)
|
)
|
||||||
super(UserLog, self).validate()
|
|
||||||
|
|
||||||
|
|
||||||
class User(BASE, HelperMixin, TimestampMixin):
|
class User(BASE, HelperMixin, TimestampMixin):
|
||||||
@ -1238,11 +1274,11 @@ class User(BASE, HelperMixin, TimestampMixin):
|
|||||||
super(User, self).__init__(**kwargs)
|
super(User, self).__init__(**kwargs)
|
||||||
|
|
||||||
def validate(self):
|
def validate(self):
|
||||||
|
super(User, self).validate()
|
||||||
if not self.crypted_password:
|
if not self.crypted_password:
|
||||||
raise exception.InvalidParameter(
|
raise exception.InvalidParameter(
|
||||||
'password is not set in user : %s' % self.email
|
'password is not set in user : %s' % self.email
|
||||||
)
|
)
|
||||||
super(User, self).validate()
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def password(self):
|
def password(self):
|
||||||
@ -1301,6 +1337,7 @@ class SwitchMachine(BASE, HelperMixin, TimestampMixin):
|
|||||||
super(SwitchMachine, self).__init__(**kwargs)
|
super(SwitchMachine, self).__init__(**kwargs)
|
||||||
|
|
||||||
def validate(self):
|
def validate(self):
|
||||||
|
super(SwitchMachine, self).validate()
|
||||||
if not self.switch:
|
if not self.switch:
|
||||||
raise exception.InvalidParameter(
|
raise exception.InvalidParameter(
|
||||||
'switch is not set in %s' % self.id
|
'switch is not set in %s' % self.id
|
||||||
@ -1429,13 +1466,13 @@ class Machine(BASE, HelperMixin, TimestampMixin):
|
|||||||
super(Machine, self).__init__(**kwargs)
|
super(Machine, self).__init__(**kwargs)
|
||||||
|
|
||||||
def validate(self):
|
def validate(self):
|
||||||
|
super(Machine, self).validate()
|
||||||
try:
|
try:
|
||||||
netaddr.EUI(self.mac)
|
netaddr.EUI(self.mac)
|
||||||
except Exception:
|
except Exception:
|
||||||
raise exception.InvalidParameter(
|
raise exception.InvalidParameter(
|
||||||
'mac address %s format uncorrect' % self.mac
|
'mac address %s format uncorrect' % self.mac
|
||||||
)
|
)
|
||||||
super(Machine, self).validate()
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def patched_ipmi_credentials(self):
|
def patched_ipmi_credentials(self):
|
||||||
@ -1586,11 +1623,11 @@ class OSConfigMetadata(BASE, MetadataMixin):
|
|||||||
super(OSConfigMetadata, self).__init__(**kwargs)
|
super(OSConfigMetadata, self).__init__(**kwargs)
|
||||||
|
|
||||||
def validate(self):
|
def validate(self):
|
||||||
|
super(OSConfigMetadata, self).validate()
|
||||||
if not self.os:
|
if not self.os:
|
||||||
raise exception.InvalidParameter(
|
raise exception.InvalidParameter(
|
||||||
'os is not set in os metadata %s' % self.id
|
'os is not set in os metadata %s' % self.id
|
||||||
)
|
)
|
||||||
super(OSConfigMetadata, self).validate()
|
|
||||||
|
|
||||||
|
|
||||||
class OSConfigField(BASE, FieldMixin):
|
class OSConfigField(BASE, FieldMixin):
|
||||||
@ -1725,6 +1762,7 @@ class AdapterFlavorRole(BASE, HelperMixin):
|
|||||||
super(AdapterFlavorRole, self).__init__()
|
super(AdapterFlavorRole, self).__init__()
|
||||||
|
|
||||||
def validate(self):
|
def validate(self):
|
||||||
|
super(AdapterFlavorRole, self).validate()
|
||||||
flavor_adapter_id = self.flavor.adapter_id
|
flavor_adapter_id = self.flavor.adapter_id
|
||||||
role_adapter_id = self.role.adapter_id
|
role_adapter_id = self.role.adapter_id
|
||||||
if flavor_adapter_id != role_adapter_id:
|
if flavor_adapter_id != role_adapter_id:
|
||||||
@ -1782,11 +1820,11 @@ class AdapterFlavor(BASE, HelperMixin):
|
|||||||
super(AdapterFlavor, self).initialize()
|
super(AdapterFlavor, self).initialize()
|
||||||
|
|
||||||
def validate(self):
|
def validate(self):
|
||||||
|
super(AdapterFlavor, self).validate()
|
||||||
if not self.template:
|
if not self.template:
|
||||||
raise exception.InvalidParameter(
|
raise exception.InvalidParameter(
|
||||||
'template is not set in adapter flavor %s' % self.id
|
'template is not set in adapter flavor %s' % self.id
|
||||||
)
|
)
|
||||||
super(AdapterFlavor, self).validate()
|
|
||||||
|
|
||||||
def to_dict(self):
|
def to_dict(self):
|
||||||
dict_info = super(AdapterFlavor, self).to_dict()
|
dict_info = super(AdapterFlavor, self).to_dict()
|
||||||
@ -1881,11 +1919,11 @@ class PackageConfigMetadata(BASE, MetadataMixin):
|
|||||||
super(PackageConfigMetadata, self).__init__(**kwargs)
|
super(PackageConfigMetadata, self).__init__(**kwargs)
|
||||||
|
|
||||||
def validate(self):
|
def validate(self):
|
||||||
|
super(PackageConfigMetadata, self).validate()
|
||||||
if not self.adapter:
|
if not self.adapter:
|
||||||
raise exception.InvalidParameter(
|
raise exception.InvalidParameter(
|
||||||
'adapter is not set in package metadata %s' % self.id
|
'adapter is not set in package metadata %s' % self.id
|
||||||
)
|
)
|
||||||
super(PackageConfigMetadata, self).validate()
|
|
||||||
|
|
||||||
|
|
||||||
class PackageConfigField(BASE, FieldMixin):
|
class PackageConfigField(BASE, FieldMixin):
|
||||||
@ -2117,7 +2155,7 @@ class DistributedSystem(BASE, HelperMixin):
|
|||||||
nullable=True
|
nullable=True
|
||||||
)
|
)
|
||||||
name = Column(String(80), unique=True)
|
name = Column(String(80), unique=True)
|
||||||
deployable = Column(String(80), default=False)
|
deployable = Column(Boolean, default=False)
|
||||||
|
|
||||||
adapters = relationship(
|
adapters = relationship(
|
||||||
Adapter,
|
Adapter,
|
||||||
@ -2184,7 +2222,7 @@ class Subnet(BASE, TimestampMixin, HelperMixin):
|
|||||||
name = Column(String(80), unique=True)
|
name = Column(String(80), unique=True)
|
||||||
subnet = Column(String(80), unique=True)
|
subnet = Column(String(80), unique=True)
|
||||||
|
|
||||||
host_interfaces = relationship(
|
host_networks = relationship(
|
||||||
HostNetwork,
|
HostNetwork,
|
||||||
passive_deletes=True, passive_updates=True,
|
passive_deletes=True, passive_updates=True,
|
||||||
cascade='all, delete-orphan',
|
cascade='all, delete-orphan',
|
||||||
|
@ -30,9 +30,9 @@ METADATA = {
|
|||||||
'http_proxy': {
|
'http_proxy': {
|
||||||
'_self': {
|
'_self': {
|
||||||
'field': 'general',
|
'field': 'general',
|
||||||
'default_value': 'http://$ipaddr:3128',
|
'default_value': 'http://127.0.0.1:3128',
|
||||||
'options': [
|
'options': [
|
||||||
'http://$ipaddr:3128'
|
'http://127.0.0.1:3128'
|
||||||
],
|
],
|
||||||
'mapping_to': 'http_proxy'
|
'mapping_to': 'http_proxy'
|
||||||
}
|
}
|
||||||
@ -40,9 +40,9 @@ METADATA = {
|
|||||||
'https_proxy': {
|
'https_proxy': {
|
||||||
'_self': {
|
'_self': {
|
||||||
'field': 'general',
|
'field': 'general',
|
||||||
'default_value': 'http://$ipaddr:3128',
|
'default_value': 'http://127.0.0.1:3128',
|
||||||
'options': [
|
'options': [
|
||||||
'http://$ipaddr:3128'
|
'http://127.0.0.1:3128'
|
||||||
],
|
],
|
||||||
'mapping_to': 'https_proxy'
|
'mapping_to': 'https_proxy'
|
||||||
}
|
}
|
||||||
@ -52,13 +52,11 @@ METADATA = {
|
|||||||
'field': 'general_list',
|
'field': 'general_list',
|
||||||
'default_value': [
|
'default_value': [
|
||||||
'127.0.0.1',
|
'127.0.0.1',
|
||||||
'$hostname',
|
'compass'
|
||||||
'$ipaddr'
|
|
||||||
],
|
],
|
||||||
'options': [
|
'options': [
|
||||||
'127.0.0.1',
|
'127.0.0.1',
|
||||||
'$hostname',
|
'compass'
|
||||||
'$ipaddr'
|
|
||||||
],
|
],
|
||||||
'mapping_to': 'no_proxy'
|
'mapping_to': 'no_proxy'
|
||||||
}
|
}
|
||||||
@ -67,9 +65,9 @@ METADATA = {
|
|||||||
'_self': {
|
'_self': {
|
||||||
'is_required': True,
|
'is_required': True,
|
||||||
'field': 'general',
|
'field': 'general',
|
||||||
'default_value': '$ipaddr',
|
'default_value': '127.0.0.1',
|
||||||
'options': [
|
'options': [
|
||||||
'$ipaddr'
|
'127.0.0.1'
|
||||||
],
|
],
|
||||||
'mapping_to': 'ntp_server'
|
'mapping_to': 'ntp_server'
|
||||||
}
|
}
|
||||||
@ -79,10 +77,10 @@ METADATA = {
|
|||||||
'is_required': True,
|
'is_required': True,
|
||||||
'field': 'general_list',
|
'field': 'general_list',
|
||||||
'default_value': [
|
'default_value': [
|
||||||
'$ipaddr',
|
'127.0.0.1',
|
||||||
],
|
],
|
||||||
'options': [
|
'options': [
|
||||||
'$ipaddr'
|
'127.0.0.1'
|
||||||
],
|
],
|
||||||
'mapping_to': 'nameservers'
|
'mapping_to': 'nameservers'
|
||||||
}
|
}
|
||||||
@ -91,17 +89,17 @@ METADATA = {
|
|||||||
'_self': {
|
'_self': {
|
||||||
'field': 'general',
|
'field': 'general',
|
||||||
'is_required' : True,
|
'is_required' : True,
|
||||||
'default_value': ['$domain'][0],
|
'default_value': 'ods.com',
|
||||||
'options': ['$domain'],
|
'options': ['ods.com'],
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'search_path': {
|
'search_path': {
|
||||||
'_self': {
|
'_self': {
|
||||||
'field': 'general_list',
|
'field': 'general_list',
|
||||||
'default_value': [
|
'default_value': [
|
||||||
'$domain'
|
'ods.com'
|
||||||
],
|
],
|
||||||
'options': ['$domain'],
|
'options': ['ods.com'],
|
||||||
'mapping_to': 'search_path'
|
'mapping_to': 'search_path'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -109,7 +107,7 @@ METADATA = {
|
|||||||
'_self': {
|
'_self': {
|
||||||
'is_required': True,
|
'is_required': True,
|
||||||
'field': 'ip',
|
'field': 'ip',
|
||||||
'default_value': '$gateway',
|
'default_value': '127.0.0.1',
|
||||||
'mapping_to': 'gateway'
|
'mapping_to': 'gateway'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -30,9 +30,9 @@ METADATA = {
|
|||||||
'http_proxy': {
|
'http_proxy': {
|
||||||
'_self': {
|
'_self': {
|
||||||
'field': 'general',
|
'field': 'general',
|
||||||
'default_value': 'http://$ipaddr:3128',
|
'default_value': 'http://127.0.0.1:3128',
|
||||||
'options': [
|
'options': [
|
||||||
'http://$ipaddr:3128'
|
'http://127.0.0.1:3128'
|
||||||
],
|
],
|
||||||
'mapping_to': 'http_proxy'
|
'mapping_to': 'http_proxy'
|
||||||
}
|
}
|
||||||
@ -40,9 +40,9 @@ METADATA = {
|
|||||||
'https_proxy': {
|
'https_proxy': {
|
||||||
'_self': {
|
'_self': {
|
||||||
'field': 'general',
|
'field': 'general',
|
||||||
'default_value': 'http://$ipaddr:3128',
|
'default_value': 'http://127.0.0.1:3128',
|
||||||
'options': [
|
'options': [
|
||||||
'http://$ipaddr:3128'
|
'http://127.0.0.1:3128'
|
||||||
],
|
],
|
||||||
'mapping_to': 'https_proxy'
|
'mapping_to': 'https_proxy'
|
||||||
}
|
}
|
||||||
@ -52,13 +52,11 @@ METADATA = {
|
|||||||
'field': 'general_list',
|
'field': 'general_list',
|
||||||
'default_value': [
|
'default_value': [
|
||||||
'127.0.0.1',
|
'127.0.0.1',
|
||||||
'$hostname',
|
'compass'
|
||||||
'$ipaddr'
|
|
||||||
],
|
],
|
||||||
'options': [
|
'options': [
|
||||||
'127.0.0.1',
|
'127.0.0.1',
|
||||||
'$hostname',
|
'compass'
|
||||||
'$ipaddr'
|
|
||||||
],
|
],
|
||||||
'mapping_to': 'no_proxy'
|
'mapping_to': 'no_proxy'
|
||||||
}
|
}
|
||||||
@ -67,9 +65,9 @@ METADATA = {
|
|||||||
'_self': {
|
'_self': {
|
||||||
'is_required': True,
|
'is_required': True,
|
||||||
'field': 'general',
|
'field': 'general',
|
||||||
'default_value': '$ipaddr',
|
'default_value': '127.0.0.1',
|
||||||
'options': [
|
'options': [
|
||||||
'$ipaddr'
|
'127.0.0.1'
|
||||||
],
|
],
|
||||||
'mapping_to': 'ntp_server'
|
'mapping_to': 'ntp_server'
|
||||||
}
|
}
|
||||||
@ -79,10 +77,10 @@ METADATA = {
|
|||||||
'is_required': True,
|
'is_required': True,
|
||||||
'field': 'general_list',
|
'field': 'general_list',
|
||||||
'default_value': [
|
'default_value': [
|
||||||
'$ipaddr',
|
'127.0.0.1',
|
||||||
],
|
],
|
||||||
'options': [
|
'options': [
|
||||||
'$ipaddr'
|
'127.0.0.1'
|
||||||
],
|
],
|
||||||
'mapping_to': 'nameservers'
|
'mapping_to': 'nameservers'
|
||||||
}
|
}
|
||||||
@ -91,17 +89,17 @@ METADATA = {
|
|||||||
'_self': {
|
'_self': {
|
||||||
'field': 'general',
|
'field': 'general',
|
||||||
'is_required' : True,
|
'is_required' : True,
|
||||||
'default_value': ['$domain'][0],
|
'default_value': 'ods.com',
|
||||||
'options': ['$domain'],
|
'options': ['ods.com'],
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'search_path': {
|
'search_path': {
|
||||||
'_self': {
|
'_self': {
|
||||||
'field': 'general_list',
|
'field': 'general_list',
|
||||||
'default_value': [
|
'default_value': [
|
||||||
'$domain'
|
'ods.com'
|
||||||
],
|
],
|
||||||
'options': ['$domain'],
|
'options': ['ods.com'],
|
||||||
'mapping_to': 'search_path'
|
'mapping_to': 'search_path'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -109,7 +107,7 @@ METADATA = {
|
|||||||
'_self': {
|
'_self': {
|
||||||
'is_required': True,
|
'is_required': True,
|
||||||
'field': 'ip',
|
'field': 'ip',
|
||||||
'default_value': '$gateway',
|
'default_value': '127.0.0.1',
|
||||||
'mapping_to': 'gateway'
|
'mapping_to': 'gateway'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -68,7 +68,7 @@ class TestGetMachine(BaseTest):
|
|||||||
self.user_object,
|
self.user_object,
|
||||||
1,
|
1,
|
||||||
mac='28:6e:d4:46:c4:25',
|
mac='28:6e:d4:46:c4:25',
|
||||||
port=1
|
port='1'
|
||||||
)
|
)
|
||||||
get_machine = machine.get_machine(
|
get_machine = machine.get_machine(
|
||||||
self.user_object,
|
self.user_object,
|
||||||
@ -91,7 +91,7 @@ class TestListMachines(BaseTest):
|
|||||||
self.user_object,
|
self.user_object,
|
||||||
1,
|
1,
|
||||||
mac='28:6e:d4:46:c4:25',
|
mac='28:6e:d4:46:c4:25',
|
||||||
port=1
|
port='1'
|
||||||
)
|
)
|
||||||
list_machine = machine.list_machines(self.user_object)
|
list_machine = machine.list_machines(self.user_object)
|
||||||
self.assertIsNotNone(list_machine)
|
self.assertIsNotNone(list_machine)
|
||||||
@ -111,7 +111,7 @@ class TestUpdateMachine(BaseTest):
|
|||||||
self.user_object,
|
self.user_object,
|
||||||
1,
|
1,
|
||||||
mac='28:6e:d4:46:c4:25',
|
mac='28:6e:d4:46:c4:25',
|
||||||
port=1
|
port='1'
|
||||||
)
|
)
|
||||||
machine.update_machine(
|
machine.update_machine(
|
||||||
self.user_object,
|
self.user_object,
|
||||||
@ -139,7 +139,7 @@ class TestPatchMachine(BaseTest):
|
|||||||
self.user_object,
|
self.user_object,
|
||||||
1,
|
1,
|
||||||
mac='28:6e:d4:46:c4:25',
|
mac='28:6e:d4:46:c4:25',
|
||||||
port=1
|
port='1'
|
||||||
)
|
)
|
||||||
machine.patch_machine(
|
machine.patch_machine(
|
||||||
self.user_object,
|
self.user_object,
|
||||||
@ -167,7 +167,7 @@ class TestDelMachine(BaseTest):
|
|||||||
self.user_object,
|
self.user_object,
|
||||||
1,
|
1,
|
||||||
mac='28:6e:d4:46:c4:25',
|
mac='28:6e:d4:46:c4:25',
|
||||||
port=1
|
port='1'
|
||||||
)
|
)
|
||||||
machine.del_machine(
|
machine.del_machine(
|
||||||
self.user_object,
|
self.user_object,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user