healthnmon/healthnmon/db/sqlalchemy/manage_healthnmon_db.py

1161 lines
44 KiB
Python

# vim: tabstop=4 shiftwidth=4 softtabstop=4
# (c) Copyright 2012 Hewlett-Packard Development Company, L.P.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from sqlalchemy import Column, Integer, String, MetaData, ForeignKey, \
Boolean, Numeric, Enum, BigInteger
from sqlalchemy.schema import Table
from healthnmon import log as logging
LOG = logging.getLogger('healthnmon.db.models')
meta = MetaData()
def __common_columns():
"""
List of common column definitions for entity sub classes.
"""
return (Column('createEpoch', BigInteger),
Column('lastModifiedEpoch', BigInteger),
Column('deletedEpoch', BigInteger),
Column('deleted', Boolean, default=False))
Cost = Table('healthnmon_cost', meta, Column('id', Integer,
primary_key=True, autoincrement=True), Column('value',
Numeric(16, 2)), Column('units', String(255)))
OsProfile = Table(
'healthnmon_os_profile',
meta,
Column('resourceId', String(255), primary_key=True, unique=True),
Column('osType', Enum(
'WINDOWS',
'WINDOWS_2008',
'WINDOWS_LH',
'LINUX',
'HP_UX',
'VMWARE',
'HYPER_V',
'KVM',
'CITRIX_XEN',
'SOLARIS',
'AIX',
'OPEN_VMS',
'UNKNOWN',
'UNSPECIFIED',
name='OsTypeEnum_PServer',
)),
Column('osSubType', String(255)),
Column('osDescription', String(255)),
Column('osName', String(255)),
Column('osVersion', String(255)),
)
PhysicalServer = Table(
'healthnmon_physical_server',
meta,
Column('id', String(255), primary_key=True),
Column('name', String(255)),
Column('note', String(255)),
Column('costId', Integer(), ForeignKey('healthnmon_cost.id')),
Column('resourceManagerId', String(255)),
Column('memorySize', BigInteger),
Column('processorSpeedMhz', Integer),
Column('processorSpeedTotalMhz', Integer),
Column('processorCount', Integer),
Column('processorCoresCount', Integer),
Column('processorArchitecture', Enum(
'IA_32',
'IA_64',
'X86_64',
'SPARC',
'POWER_PC',
'UNSPECIFIED',
name='ProcessorArchitectureEnum',
)),
Column('hyperThreadEnabled', Boolean),
Column('serialNumber', String(255)),
Column('groupId', String(255)),
Column('memoryConsumed', BigInteger),
Column('processorLoadPercent', Integer),
Column(
'osId', String(255), ForeignKey('healthnmon_os_profile.resourceId')),
Column('model', String(255)),
Column('licensingId', String(255)),
Column('enclosure', String(255)),
Column('bay', String(255)),
Column('uuid', String(255)),
Column('inUse', Boolean),
Column('fcVirtualInitiator', Boolean),
Column('ethernetVirtualInitiator', Boolean),
Column('validTarget', Boolean),
*(__common_columns())
)
ResourceUtilization = Table(
'healthnmon_resource_utilization',
meta,
Column('resourceId', String(255),
ForeignKey('healthnmon_physical_server.id',
ondelete='CASCADE'), primary_key=True),
Column('memorySize', BigInteger),
Column('memoryConsumed', BigInteger),
Column('diskSpace', BigInteger),
Column('diskSpaceConsumed', BigInteger),
Column('cpuPercentUsed', BigInteger),
Column('networkPercentUsed', BigInteger),
)
ResourceLimit = Table(
'healthnmon_resource_limit',
meta,
Column('resourceId', String(255),
ForeignKey('healthnmon_physical_server.id',
ondelete='CASCADE'), primary_key=True),
Column('memoryConsumedLimit', BigInteger),
Column('memoryPercentLimit', BigInteger),
Column('diskSpaceConsumedLimit', BigInteger),
Column('diskSpacePercentLimit', BigInteger),
Column('cpuPercentLimit', BigInteger),
Column('networkPercentLimit', BigInteger),
)
VmHost = Table(
'healthnmon_vm_host',
meta,
Column('id', String(255),
ForeignKey('healthnmon_physical_server.id',
ondelete='CASCADE'),
primary_key=True),
Column('resourceManagerId', String(255)),
Column('virtualizationType', Enum(
'ESX',
'XEN',
'HYPER_V',
'MSVS',
'GSX',
'INTEGRITY_VM',
'CLOUD',
'KVM',
'QEMU',
'UNKNOWN',
name='VirtualizationEnum',
)),
Column('clusterName', String(255)),
Column('ftEnabled', Boolean),
Column('liveMoveEnabled', Boolean),
Column('storageMoveEnabled', Boolean),
Column('sharedDisksEnabled', Boolean),
Column('linkedCloneEnabled', Boolean),
Column('connectionState', String(255)),
Column('isMaintenanceMode', Boolean),
Column('powerState', String(255)),
*(__common_columns())
)
IpProfile = Table(
'healthnmon_ip_profile',
meta,
Column('ipAddress', String(255), primary_key=True),
Column('ipType', Enum('IPV4', 'IPV6', 'UNSPECIFIED',
name='IpTypeEnum')),
Column('hostname', String(255), primary_key=True),
Column('domain', String(255)),
Column('vmHostId', String(255), ForeignKey('healthnmon_vm_host.id'
)),
Column('vmId', String(255), ForeignKey('healthnmon_vm.id')),
)
VirtualSwitch = Table(
'healthnmon_virtual_switch',
meta,
Column('id', String(255), primary_key=True),
Column('name', String(255)),
Column('note', String(255)),
Column('costId', Integer(), ForeignKey('healthnmon_cost.id')),
Column('resourceManagerId', String(255)),
Column('switchType', String(255)),
Column('subnetIds', String(255)),
Column('networkInterfaces', String(255)),
Column('connectionState', String(255)),
Column('vmHostId', String(255), ForeignKey('healthnmon_vm_host.id')),
*(__common_columns())
)
PortGroup = Table(
'healthnmon_port_group',
meta,
Column('id', String(255), primary_key=True),
Column('name', String(255)),
Column('note', String(255)),
Column('costId', Integer(), ForeignKey('healthnmon_cost.id')),
Column('resourceManagerId', String(255)),
Column('type', String(255)),
Column('virtualSwitchId', String(255),
ForeignKey('healthnmon_virtual_switch.id')),
Column('vmHostId', String(255), ForeignKey('healthnmon_vm_host.id')),
*(__common_columns())
)
StorageVolume = Table(
'healthnmon_storage_volume',
meta,
Column('id', String(255), primary_key=True),
Column('name', String(255)),
Column('note', String(255)),
Column('value', Numeric(16, 2)),
Column('units', String(255)),
Column('resourceManagerId', String(255)),
Column('size', BigInteger),
Column('free', BigInteger),
Column('vmfsVolume', Boolean),
Column('shared', Boolean),
Column('assignedServerCount', Integer),
Column('volumeType', Enum(
'FC_SAN',
'DAS',
'VMFS',
'SAS_SAN',
'ISCSI_SAN',
'DIR',
'FS',
'DISK',
'NETFS',
'ISCSI',
'SCSI',
'LOGICAL',
'MPATH',
'UNSPECIFIED',
name='StorageTypeEnum',
)),
Column('volumeId', String(255)),
Column('connectionState', String(255)),
Column('physicalServerId', String(255),
ForeignKey('healthnmon_physical_server.id')),
*(__common_columns())
)
HostMountPoint = Table(
'healthnmon_host_mount_point',
meta,
Column('path', String(255)),
Column('vmHostId', String(255),
ForeignKey(
'healthnmon_vm_host.id', ondelete='CASCADE'), primary_key=True),
Column('storageVolumeId', String(255),
ForeignKey(
'healthnmon_storage_volume.id', ondelete='CASCADE'),
primary_key=True),
)
ResourceAllocation = Table(
'healthnmon_resource_allocation',
meta,
Column('id', Integer, primary_key=True, autoincrement=True),
Column('share', Enum('LOW', 'NORMAL', 'HIGH', 'CUSTOM',
name='ResourceAllocationShareEnum')),
Column('customShareValue', Integer),
Column('reservation', BigInteger),
Column('isExpandableReservation', Boolean),
Column('limit', BigInteger),
Column('isUnlimited', Boolean),
)
VmCapacityPool = Table(
# Although extended from ResourceCapacityPool,
# it is made to extend from Resource table
# as there is no additional attribute in ResourceCapacityPool.
# Need to handle in Mapper level
# ForeignKey to VmCluster.entityId or VmHost.entityId
# Currently it is kept as is without FK
# capacityPools: Many to One relationship with VmHost table
'healthnmon_vm_capacity_pool',
meta,
Column('id', String(255), primary_key=True),
Column('name', String(255)),
Column('note', String(255)),
Column('value', Numeric(16, 2)),
Column('units', String(255)),
Column('resourceManagerId', String(255)),
Column('virtualizationType', Enum(
'ESX',
'XEN',
'HYPER_V',
'MSVS',
'GSX',
'INTEGRITY_VM',
'CLOUD',
'KVM',
'QEMU',
'UNKNOWN',
name='VirtualizationEnum_Cap',
)),
Column('parentId', String(255)),
Column('parentName', String(255)),
Column('cpuResourceAllocationId', Integer,
ForeignKey('healthnmon_resource_allocation.id')),
Column('memoryResourceAllocationId', Integer,
ForeignKey('healthnmon_resource_allocation.id')),
Column('diskResourceAllocationId', Integer,
ForeignKey('healthnmon_resource_allocation.id')),
Column('vmHostId', String(255), ForeignKey('healthnmon_vm_host.id'
)),
*(__common_columns())
)
# capacityPools: Many to One relationship with VmCluster table
LoadBalancer = Table(
# subnetIds: One-to-Many relationship with SubNet
# TODO: Needs a relation one-to-many with whom :ResourceTag
'healthnmon_load_balancer',
meta,
Column('id', String(255), primary_key=True),
Column('name', String(255)),
Column('note', String(255)),
Column('resourceManagerId', String(255)),
Column('costId', Integer, ForeignKey('healthnmon_cost.id')),
Column('model', String(255), nullable=False),
Column('version', String(255), nullable=False),
Column('managementAddress', String(255), nullable=False),
Column('managementPort', Integer, nullable=False),
Column('managementUserName', String(255)),
Column('managementPasswordId', String(255)),
Column('managementCertificateId', String(255)),
Column('isHaSupported', Enum('YES', 'NO', 'UNSPECIFIED',
name='YesNoTriple')),
Column('isHaSupported', Enum('YES', 'NO', 'UNSPECIFIED',
name='YesNoTriple')),
Column('tags', String(255)),
*(__common_columns())
)
Subnet = Table(
'healthnmon_subnet',
meta,
Column('id', String(255), primary_key=True),
Column('name', String(255)),
Column('note', String(255)),
Column('costId', Integer, ForeignKey('healthnmon_cost.id')),
Column('resourceManagerId', String(255)),
Column('description', String(255)),
Column('networkAddress', String(255)),
Column('networkMask', String(255)),
Column('networkSources', String(255)),
Column('ipType', Enum('IPV4', 'IPV6', 'UNSPECIFIED',
name='IpTypeEnum_Subnet')),
Column('isPublic', Boolean),
Column('isShareable', Boolean),
Column('dnsDomain', String(255)),
Column('dnsServers', String(255)),
Column('dnsSearchSuffixes', String(255)),
Column('defaultGateways', String(255)),
Column('msDomainType', Enum('WORKGROUP', 'DOMAIN',
name='MsDomainTypeEnum')),
Column('msDomainName', String(255)),
Column('winsServers', String(255)),
Column('ntpDateServers', String(255)),
Column('vlanId', String(255)),
Column('isBootNetwork', Boolean),
Column('deploymentServices', String(255)),
Column('parentIds', String(255)),
Column('childIds', String(255)),
Column('isTrunk', Boolean),
Column('redundancyPeerIds', String(255)),
Column('redundancyMasterId', String(255)),
Column('isNativeVlan', Boolean),
Column('loadBalancerId', String(255),
ForeignKey('healthnmon_load_balancer.id')),
*(__common_columns())
)
GroupIdType = Table('healthnmon_groupid_type', meta,
Column('id', String(255), primary_key=True),
Column('networkTypes', String(255)),
Column('subnetId', String(255),
ForeignKey('healthnmon_subnet.id')),
)
ResourceTag = Table(
'healthnmon_resource_tag',
meta,
Column('id', Integer, autoincrement=True, primary_key=True),
Column('value', String(255), nullable=False),
Column('assertionType', String(255), nullable=False),
Column('subnetId', String(255), ForeignKey('healthnmon_subnet.id',
ondelete='CASCADE')),
)
# ============== Vm Tables Start ==================
VmGlobalSettings = Table(
# vmGlobalSettings: One-to-One relation handled in Vm table
'healthnmon_vm_global_settings',
meta,
Column('id', String(255), primary_key=True),
Column('name', String(255)),
Column('note', String(255)),
Column('costId', Integer(), ForeignKey('healthnmon_cost.id')),
Column('autoStartAction', String(255)),
Column('autoStopAction', String(255)),
*(__common_columns())
)
Vm = Table(
# os : One-to-One relation with OsProfile
# ipAddresses: One-to-Many Relation handled in IpProfile table
# VmNetAdapters: One-to-Many Relation handled in VmNetAdapter table
# VmScsiControllers: One-to-Many Relation handled in VmScsiController table
# VmDisks: One-to-Many Relation handled in VmDisk table
# VmGenericDevice: One-to-Many Relation handled in VmGenericDevice table
# vmGlobalSettings: One-to-One Relation with vmGlobalSettings
# Column('autoStartAction',String(255)),
# Column('autoStopAction',String(255)),
# capabilities : One-to-One Relation with VmCapabilities
# Column('templateId', String(255),
# ForeignKey('healthnmon_vm_template.id')), TBD
# vmHostId: One-to-many Relation with VmHost
# One-to-One Relation with ResourceAllocation
# One-to-One Relation with ResourceAllocation
# vmClusterId: One-to-many Relation with vmCluster
# Column('vmClusterId', String(255),
# ForeignKey('healthnmon_vm_cluster.id')),TBD
# vmCapacityPoolId: One-to-many Relation with vmCapacityPool
'healthnmon_vm',
meta,
Column('id', String(255), primary_key=True),
Column('name', String(255)),
Column('note', String(255)),
Column('costId', Integer(), ForeignKey('healthnmon_cost.id')),
Column('resourceManagerId', String(255)),
Column('memorySize', BigInteger),
Column('processorSpeedMhz', Integer),
Column('processorSpeedTotalMhz', Integer),
Column('processorCount', Integer),
Column('processorCoresCount', Integer),
Column('processorArchitecture', Enum(
'IA_32',
'IA_64',
'X86_64',
'SPARC',
'POWER_PC',
'UNSPECIFIED',
name='ProcessorArchitectureEnum_vm',
)),
Column('serialNumber', String(255)),
Column('groupId', String(255)),
Column('memoryConsumed', BigInteger),
Column('processorLoadPercent', Integer),
Column('virtualizationType', Enum(
'ESX',
'XEN',
'HYPER_V',
'MSVS',
'GSX',
'INTEGRITY_VM',
'CLOUD',
'KVM',
'QEMU',
'UNKNOWN',
name='VirtualizationEnum_Vm',
)),
Column(
'osId', String(255), ForeignKey('healthnmon_os_profile.resourceId')),
Column('powerState', String(255)),
Column('connectionState', String(255)),
Column('bootOrder', String(255)),
Column('globalSettingsId', String(255),
ForeignKey('healthnmon_vm_global_settings.id')),
Column('haEnabled', Boolean),
Column('ftEnabled', Boolean),
Column('liveMoveEnabled', Boolean),
Column('storageMoveEnabled', Boolean),
Column('sharedDisksEnabled', Boolean),
Column('linkedCloneEnabled', Boolean),
Column('vmHostId', String(255), ForeignKey('healthnmon_vm_host.id'
)),
Column('cpuResourceAllocationId', BigInteger,
ForeignKey('healthnmon_resource_allocation.id')),
Column('memoryResourceAllocationId', BigInteger,
ForeignKey('healthnmon_resource_allocation.id')),
Column('vmCapacityPoolId', String(255),
ForeignKey('healthnmon_vm_capacity_pool.id')),
*(__common_columns())
)
VmNetAdapter = Table(
# One-to-Many relationship with IPAddress TODO
# Verify: IpProfile / IpAddress ? Rework: IPAddress ? Will it be a list?
# netAdapters: Many-to-One relation with netAdapter table
'healthnmon_vm_net_adapter',
meta,
Column('id', String(255), primary_key=True),
Column('name', String(255)),
Column('note', String(255)),
Column('value', Numeric(16, 2)),
Column('units', String(255)),
Column('addressType', String(255)),
Column('adapterType', String(255)),
Column('switchType', String(255)),
Column('macAddress', String(255)),
Column('ipAddresses', String(255)),
Column('networkName', String(255)),
Column('vlanId', String(255)),
Column('vmId', String(255), ForeignKey('healthnmon_vm.id',
ondelete='CASCADE')),
)
VmScsiController = Table(
# vmScsiControllers: Many-to-One relation with Vm
'healthnmon_vm_scsi_controller',
meta,
Column('id', String(255), primary_key=True),
Column('name', String(255)),
Column('note', String(255)),
Column('value', Numeric(16, 2)),
Column('units', String(255)),
Column('controllerId', Integer),
Column('controllerName', String(255)),
Column('type', String(255)),
Column('busSharing', String(255)),
Column('vmId', String(255), ForeignKey('healthnmon_vm.id',
ondelete='CASCADE')),
)
VmDisk = Table(
# CHANGE to list TBD
# CHANGE to list TBD
# storageVolumeId: Foreginkey to storageVolume.entityId or
# sanvolume.entityId
# Need to handle in Mapper appropriately
'healthnmon_vm_disk',
meta,
Column('id', String(255), primary_key=True),
Column('name', String(255)),
Column('note', String(255)),
Column('value', Numeric(16, 2)),
Column('units', String(255)),
Column('controllerType', String(255)),
Column('controllerId', Integer),
Column('channel', Integer),
Column('fileName', String(255)),
Column('mode', String(255)),
Column('diskSize', BigInteger),
Column('fileSize', BigInteger),
Column('lunId', String(255)),
Column('deviceDescription', String(255)),
Column('hostHbaNodeWwn', String(255)),
Column('hostHbaPortWwn', String(255)),
Column('npivNodeWwns', String(255)),
Column('npivPortWwns', String(255)),
Column('compatibilityMode', String(255)),
Column('storageVolumeId', String(255),
ForeignKey('healthnmon_storage_volume.id')),
Column('vmId', String(255), ForeignKey('healthnmon_vm.id',
ondelete='CASCADE')),
)
VmGenericDevice = Table('healthnmon_vm_generic_device', meta,
Column('id', String(255), primary_key=True),
Column('name', String(255)),
Column('vmId', String(255),
ForeignKey('healthnmon_vm.id',
ondelete='CASCADE')))
VmProperty = Table(
'healthnmon_vm_property',
meta,
Column('id', Integer, autoincrement=True, primary_key=True),
Column('name', String(255)),
Column('note', String(255)),
Column('value', String(255)),
Column('vmDeviceId', String(255),
ForeignKey('healthnmon_vm_generic_device.id',
ondelete='CASCADE')),
)
# ========== Vm Tables End ===================
# ========== Cluster Tables End ===================
ComputeCluster = Table(
'healthnmon_compute_cluster',
meta,
Column('id', String(255), primary_key=True),
Column('name', String(255)),
Column('note', String(255)),
Column('costId', Integer, ForeignKey('healthnmon_cost.id')),
Column('resourceManagerId', String(255)),
Column('processorSpeedTotalMhz', Integer),
Column('memorySize', BigInteger),
Column('processorCoresCount', Integer),
Column('hostsCount', Integer),
Column('effectiveHostsCount', Integer),
Column('effectiveProcessorSpeedTotalMhz', Integer),
Column('effectiveMemorySize', BigInteger),
Column('memoryConsumed', BigInteger),
Column('processorLoadPercent', Integer),
*(__common_columns())
)
# computeServers: One-to-Many relationship handled in ComputeServer
VmCluster = Table(
'healthnmon_vm_cluster',
meta,
Column('id', String(255), primary_key=True),
Column('name', String(255)),
Column('note', String(255)),
Column('costId', Integer, ForeignKey('healthnmon_cost.id')),
Column('resourceManagerId', String(255)),
Column('virtualizationType', Enum(
'ESX',
'XEN',
'HYPER_V',
'MSVS',
'GSX',
'INTEGRITY_VM',
'CLOUD',
'KVM',
'QEMU',
'UNKNOWN',
name='VirtualizationEnum_cluster',
)),
Column('haEnabled', Boolean),
Column('drsEnabled', Boolean),
Column('dpmEnabled', Boolean),
Column('computeClusterId', String(255),
ForeignKey('healthnmon_compute_cluster.id',
ondelete='CASCADE')),
*(__common_columns())
)
# hosts: One-to-many relationship handled in VmHost
# TODO: One-to-many : Will volumeId of StorageValome have
# any relation with this ?
# Verify: Handle relationship with VirtualSwitches
# Verify: Handle relationship with PortGroup
# TODO: Handle relationship with VmCapacityPool in mapper level
# VirtualMachineIds: One-to-many relationship handled in Vm
IpAddressRange = Table(
# ipAddressRanges: Many-to-one relationship with Subnet table
'healthnmon_ip_address_range',
meta,
Column('id', String(255), primary_key=True),
Column('name', String(255)),
Column('note', String(255)),
Column('costId', Integer, ForeignKey('healthnmon_cost.id')),
Column('resourceManagerId', String(255)),
Column('startAddressId', String(255),
ForeignKey('healthnmon_ip_address.id')),
Column('endAddressId', String(255),
ForeignKey('healthnmon_ip_address.id')),
Column('allocationType', Enum('DHCP', 'AUTO_STATIC',
name='IpAllocationTypeEnum_range')),
Column('addressRangeCount', Integer),
Column('usedIpAddressCount', Integer),
Column('subnetId', String(255), ForeignKey('healthnmon_subnet.id'),
primary_key=True),
*(__common_columns())
)
IpAddress = Table(
# usedIpAddresses: Many-to-one relationship with Subnet
'healthnmon_ip_address',
meta,
Column('id', String(255), primary_key=True),
Column('name', String(255)),
Column('note', String(255)),
Column('costId', Integer, ForeignKey('healthnmon_cost.id')),
Column('resourceManagerId', String(255)),
Column('rangeId', String(255)),
Column('address', String(255)),
Column('allocationType', Enum('DHCP', 'AUTO_STATIC',
name='IpAllocationTypeEnum')),
Column('inMaintenance', Boolean, default=False),
Column('subnetId', String(255), ForeignKey('healthnmon_subnet.id'
)),
*(__common_columns())
)
# ========== Cluster Tables End ===================
# ========== VmTemplate Tables Start ===================
DeployableSoftware = Table(
# os: One to one relationship with OsProfile
'healthnmon_deployable_software',
meta,
Column('id', String(255), primary_key=True),
Column('name', String(255)),
Column('note', String(255)),
Column('costId', Integer, ForeignKey('healthnmon_cost.id')),
Column('resourceManagerId', String(255)),
Column(
'osId', String(255), ForeignKey('healthnmon_os_profile.resourceId')),
Column('location', String(255)),
Column('size', BigInteger),
Column('memorySize', BigInteger),
Column('processorCount', Integer),
Column('processorArchitecture', Enum(
'IA_32',
'IA_64',
'X86_64',
'SPARC',
'POWER_PC',
'UNSPECIFIED',
name='ProcessorArchitectureEnum_DS',
)),
*(__common_columns())
)
CloudImage = Table('healthnmon_cloud_image', meta, Column('id',
String(255),
ForeignKey('healthnmon_deployable_software.id',
ondelete='CASCADE'), primary_key=True),
Column('sourceCapacityPoolIds', String(255)))
Image = Table('healthnmon_image', meta, Column('id', String(255),
ForeignKey('healthnmon_deployable_software.id',
ondelete='CASCADE'), primary_key=True), Column('type',
Enum('OS', 'APPS', 'PATCH', name='ImageTypeEnum')),
Column('dsType', Enum('RDP', 'SA', 'IGNITE_UX', 'CUSTOM',
name='DeploymentServiceTypeEnum')))
VmTemplate = Table( # vmNetAdapters: One-to-Many relation with vmNetAdapter
# vmScsiControllers: One-to-Many relation
# with vmScsiController
# vmDisks: One-to-Many relation with vmDisk
# vmGenericDevices: One-to-Many relation with
# VmGenericDevice
# vmGlobalSettings: One-to-Many relation with
# VmGlobalSetting
# vmDisks: One-to-Many relation with vmDisk
'healthnmon_vm_template',
meta,
Column('id', String(255),
ForeignKey('healthnmon_deployable_software.id',
ondelete='CASCADE'), primary_key=True),
Column('virtualizationType',
Enum('ESX',
'XEN',
'HYPER_V',
'MSVS',
'GSX',
'INTEGRITY_VM',
'CLOUD',
'KVM',
'QEMU',
'UNKNOWN',
name='VirtualizationEnum_template',
)),
Column('autoStartAction', String(255)),
Column('autoStopAction', String(255)),
Column('vmHostId', String(255),
ForeignKey('healthnmon_vm_host.id')),
Column('cpuResourceAllocation', Integer,
ForeignKey('healthnmon_resource_allocation.id')),
Column('memoryResourceAllocation', Integer,
ForeignKey('healthnmon_resource_allocation.id')),
)
# ========== VmTemplate Tables End ===================
# ========== SAN Volume Tables Start ===================
SanVolumeTemplate = Table( # tags: One-to-Many relation handled in
# ResourceTags
# TODO : A list
# TODO : A list
'healthnmon_san_volume_template',
meta,
Column('id', String(255), primary_key=True),
Column('name', String(255)),
Column('note', String(255)),
Column('costId', Integer,
ForeignKey('healthnmon_cost.id')),
Column('resourceManagerId', String(255)),
Column('spmId', String(255)),
Column('description', String(255)),
Column('storageTemplateType',
Enum('UNKNOWN', 'SPM', 'SPMDEFAULT',
'LSMDEFAULT',
name='StorageTemplateTypeEnum')),
Column('spmTemplateId', String(255)),
Column('provisioningType',
Enum('THICK', 'THIN', 'UNKNOWN',
name='StorageProvisioningTypeEnum')),
Column('size', BigInteger),
Column('raidLevel',
Enum('RAID0',
'RAID1',
'RAID3',
'RAID4',
'RAID5',
'RAID6',
'RAID01',
'RAID05',
'RAID10',
'RAID50',
'RAID60',
'AUTO',
'UNSPECIFIED',
name='RaidLevelEnum',
)),
Column('osType',
Enum('WINDOWS',
'WINDOWS_2008',
'WINDOWS_LH',
'LINUX',
'HP_UX',
'VMWARE',
'HYPER_V',
'KVM',
'CITRIX_XEN',
'SOLARIS',
'AIX',
'OPEN_VMS',
'UNKNOWN',
'UNSPECIFIED',
name='OsTypeEnum_San_Vm',
)),
Column('minSize', BigInteger),
Column('maxSize', BigInteger),
Column('allowedRaidLevels',
Enum('RAID0',
'RAID1',
'RAID3',
'RAID4',
'RAID5',
'RAID6',
'RAID01',
'RAID05',
'RAID10',
'RAID50',
'RAID60',
'AUTO',
'UNSPECIFIED',
name='RaidLevelEnum_Sec',
)),
Column('allowedOsTypes',
Enum('WINDOWS',
'WINDOWS_2008',
'WINDOWS_LH',
'LINUX',
'HP_UX',
'VMWARE',
'HYPER_V',
'KVM',
'CITRIX_XEN',
'SOLARIS',
'AIX',
'OPEN_VMS',
'UNKNOWN',
'UNSPECIFIED',
name='OsTypeEnum_San_Vm_Sec',
)),
Column('requiredTags', String(255)),
Column('excludeTags', String(255)),
*(__common_columns())
)
WwnConnection = Table( # Verify: Do you need this id?
# Verify: Does it have foreign key to itself ?
'healthnmon_wwn_connection',
meta,
Column('id', Integer,
autoincrement=True, primary_key=True),
Column('serverWwn', String(255)),
Column('targetWwns', String(255)),
Column('fabricId', String(255)),
Column('presentation', String(255)),
)
ExtensibleRaidLevel = Table('healthnmon_extensible_raid_level', meta,
Column('id', Integer, autoincrement=True,
primary_key=True),
Column('raidLevelEnum',
Enum('RAID0',
'RAID1',
'RAID3',
'RAID4',
'RAID5',
'RAID6',
'RAID01',
'RAID05',
'RAID10',
'RAID50',
'RAID60',
'AUTO',
'UNSPECIFIED',
name='RaidLevelEnum_third',
)),
Column('extendedRaidLevel', String(255)))
DiskArray = Table('healthnmon_disk_array',
meta,
Column('id', String(255), primary_key=True),
Column('name', String(255)),
Column('note', String(255)),
Column('costId', Integer, ForeignKey('healthnmon_cost.id')),
Column('resourceManagerId', String(255)),
*(__common_columns())
)
# sanVolumes: One-to-many relation handled in SanVolume
SanVolume = Table( # TODO Relation with ResourceTag
'healthnmon_san_volume',
meta,
Column('id', String(255), primary_key=True),
Column('name', String(255)),
Column('note', String(255)),
Column('costId', Integer,
ForeignKey('healthnmon_cost.id')),
Column('resourceManagerId', String(255)),
Column('size', BigInteger),
Column('extensibleRaidLevel',
ForeignKey('healthnmon_extensible_raid_level.id')),
Column('osType', Enum('WINDOWS',
'WINDOWS_2008',
'WINDOWS_LH',
'LINUX',
'HP_UX',
'VMWARE',
'HYPER_V',
'KVM',
'CITRIX_XEN',
'SOLARIS',
'AIX',
'OPEN_VMS',
'UNKNOWN',
'UNSPECIFIED',
name='OsTypeEnum_San',
)),
Column('diskArrayId',
ForeignKey('healthnmon_disk_array.id')),
Column('lunId', String(255)),
Column('tags', String(255)),
Column('groupId', String(255)),
Column('setId', String(255)),
Column('isMultiMemberSet', Boolean),
Column('setName', String(255)),
Column('availableConnectionCount', Integer),
Column('isBootable', Boolean),
Column('inUse', Boolean),
Column('isSinglePath', Boolean),
Column('volumeState', Enum('LSM', 'SPM_PRE_CARVED',
'SPM_NOT_CARVED', 'UNKNOWN',
name='VolumeStateEnum')),
Column('provisioningType',
Enum('THICK', 'THIN', 'UNKNOWN',
name='StorageProvisioningTypeEnum_Second')),
Column('wwnConnections', Integer,
ForeignKey('healthnmon_wwn_connection.id')),
Column('isAutoGenerated', Boolean),
Column('isManualZoningRequired', Boolean),
*(__common_columns())
)
# ========== SAN Volume Tables Ednd ===================
# ========== List Tables Start ===================
VirtualSwitchSubnetIds = Table(
'healthnmon_virtual_switch_subnet_ids',
meta,
Column('subnetId', String(255),
ForeignKey('healthnmon_subnet.id'),
primary_key=True),
Column('virtualSwitchId',
String(255),
ForeignKey('healthnmon_virtual_switch.id'),
primary_key=True))
NetworkInterfaces = Table('healthnmon_network_interfaces', meta,
Column('interfaceId', String(255), primary_key=True),
Column('vSwitchId', String(255),
ForeignKey('healthnmon_virtual_switch.id'),
primary_key=True))
SubnetNetworkSources = Table('healthnmon_subnet_network_sources', meta,
Column('networkSourceId', String(255),
primary_key=True),
Column('subnetId', String(255),
ForeignKey('healthnmon_subnet.id'),
primary_key=True))
SubnetDnsServers = Table('healthnmon_subnet_dns_servers', meta,
Column('dnsServerId', String(255), primary_key=True),
Column('subnetId', String(255),
ForeignKey('healthnmon_subnet.id')))
SubnetDnsSearchSuffixes = Table('healthnmon_subnet_dns_search_suffixes', meta,
Column('dnsSuffixId', String(255),
primary_key=True),
Column('subnetId', String(255),
ForeignKey('healthnmon_subnet.id')))
SubnetDefaultGateways = Table('healthnmon_subnet_default_gateways', meta,
Column('defaultGatewayId', String(255),
primary_key=True),
Column('subnetId', String(255),
ForeignKey('healthnmon_subnet.id'),
primary_key=True))
SubnetWinServers = Table('healthnmon_subnet_win_servers', meta,
Column('winServerId', String(255), primary_key=True),
Column('subnetId', String(255),
ForeignKey('healthnmon_subnet.id')))
SubnetNtpDateServers = Table('healthnmon_subnet_ntp_date_servers', meta,
Column('ntpDateServerId', String(255),
primary_key=True),
Column('subnetId', String(255),
ForeignKey('healthnmon_subnet.id')))
SubnetDeploymentServices = Table('healthnmon_subnet_deployment_services', meta,
Column('deploymentServiceId', String(255),
primary_key=True),
Column('subnetId', String(255),
ForeignKey('healthnmon_subnet.id')))
GroupIdTypeNetworkTypes = Table('healthnmon_groupid_type_network_type', meta,
Column('id', Integer, autoincrement=True,
primary_key=True),
Column('networkTypeId', String(255)),
Column('groupTypeId', String(255),
ForeignKey('healthnmon_groupid_type.id')
))
SubnetParentIds = Table('healthnmon_subnet_parent_ids', meta,
Column('parentId', String(255), primary_key=True),
Column('subnetId', String(255),
ForeignKey('healthnmon_subnet.id')))
SubnetChildIds = Table('healthnmon_subnet_child_ids', meta,
Column('childId', String(255), primary_key=True),
Column('subnetId', String(255),
ForeignKey('healthnmon_subnet.id')))
SubnetRedundancyPeerIds = Table('healthnmon_subnet_redundancy_peer_ids', meta,
Column('redundancyPeerId', String(255),
primary_key=True),
Column('subnetId', String(255),
ForeignKey('healthnmon_subnet.id')))
VmNetAdapterIpProfiles = Table('healthnmon_vm_netadapter_ip_address', meta,
Column('ipAddress', String(255),
primary_key=True),
Column('netAdapterId', String(255),
ForeignKey('healthnmon_vm_net_adapter.id'
),
primary_key=True))
# ========== List Tables Start ===================
up_tables = [
Cost,
OsProfile,
PhysicalServer,
ResourceUtilization,
ResourceLimit,
VmHost,
VirtualSwitch,
PortGroup,
NetworkInterfaces,
StorageVolume,
HostMountPoint,
ResourceAllocation,
VmCapacityPool,
VmGlobalSettings,
Vm,
IpProfile,
VmNetAdapter,
VmScsiController,
VmDisk,
VmNetAdapterIpProfiles,
VmGenericDevice,
VmProperty,
LoadBalancer,
Subnet,
GroupIdType,
ResourceTag,
ComputeCluster,
VmCluster,
DeployableSoftware,
CloudImage,
Image,
VmTemplate,
SanVolumeTemplate,
WwnConnection,
ExtensibleRaidLevel,
DiskArray,
SanVolume,
VirtualSwitchSubnetIds,
SubnetNetworkSources,
SubnetDnsServers,
SubnetDnsSearchSuffixes,
SubnetDefaultGateways,
SubnetWinServers,
SubnetNtpDateServers,
SubnetDeploymentServices,
SubnetParentIds,
SubnetChildIds,
SubnetRedundancyPeerIds,
GroupIdTypeNetworkTypes,
IpAddress,
IpAddressRange]
def upgrade(migrate_engine):
"""
Upgrade operations go here. Don't create your own engine;
bind migrate_engine to your metadata
"""
table_str = ''
try:
meta.bind = migrate_engine
meta.drop_all(tables=up_tables)
for table in up_tables:
table_str = repr(table)
table.create()
except Exception:
LOG.exception(_('Exception while creating table ' + table_str))
meta.drop_all(tables=up_tables)
raise
def downgrade(migrate_engine):
"""
Operations to reverse the above upgrade go here.
"""
table_str = ''
try:
meta.bind = migrate_engine
down_tables = reversed(up_tables)
for table in down_tables:
table_str = repr(table)
table.drop(checkfirst=True)
except Exception:
LOG.exception(_('Exception while deleting table ' + table_str))
raise