-- Copyright (c) 2024 Huawei Technologies Co., Ltd.
-- openUBMC is licensed under Mulan PSL v2.
-- You can use this software according to the terms and conditions of the Mulan PSL v2.
-- You may obtain a copy of Mulan PSL v2 at:
--          http://license.coscl.org.cn/MulanPSL2
-- THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
-- EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
-- MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
-- See the Mulan PSL v2 for more details.
local mdb = require 'mc.mdb'
local class = require 'mc.class_mgnt'
local privilege = require 'mc.privilege'
require'mc.plugin.loader'.load()
local Feature1 = require'thermal_mgmt.features.Feature1'.get_instance()

local fan_class_types = require 'class.types.Fan'
local fan_type_class_types = require 'class.types.FanType'
local fan_info_class_types = require 'class.types.FanInfo'
local thermal_configuration_class_types =
    require 'class.types.ThermalConfiguration'
local pwm_channel_class_types = require 'class.types.PWMChannel'
local systems_fans_class_types = require 'class.types.SystemsFans'
local fans_class_types = require 'class.types.Fans'
local pumps_class_types = require 'class.types.Pumps'
local pump_class_types = require 'class.types.Pump'
local valves_class_types = require 'class.types.Valves'
local basic_cooling_config_class_types =
    require 'class.types.BasicCoolingConfig'
local fan_group_class_types = require 'class.types.FanGroup'
local fan_group_policy_class_types = require 'class.types.FanGroupPolicy'
local cooling_config_class_types = require 'class.types.CoolingConfig'
local air_cooling_config_class_types = require 'class.types.AirCoolingConfig'
local liquid_cooling_config_class_types =
    require 'class.types.LiquidCoolingConfig'
local cooling_fan_class_types = require 'class.types.CoolingFan'
local cooling_requirement_class_types = require 'class.types.CoolingRequirement'
local cooling_policy_class_types = require 'class.types.CoolingPolicy'
local cooling_area_class_types = require 'class.types.CoolingArea'
local abnormal_fan_class_types = require 'class.types.AbnormalFan'
local abnormal_pump_class_types = require 'class.types.AbnormalPump'
local private_class_types = require 'class.types.private'
local fan_intf_types = require 'thermal_mgmt.json_types.Fan'
local metric_intf_types = require 'thermal_mgmt.json_types.Metric'
local properties_intf_types = require 'thermal_mgmt.json_types.Properties'
local fan_type_intf_types = require 'thermal_mgmt.json_types.FanType'
local fans_intf_types = require 'thermal_mgmt.json_types.Fans'
local pumps_intf_types = require 'thermal_mgmt.json_types.Pumps'
local pump_intf_types = require 'thermal_mgmt.json_types.Pump'
local valves_intf_types = require 'thermal_mgmt.json_types.Valves'
local valve_intf_types = require 'thermal_mgmt.json_types.Valve'
local fan_group_intf_types = require 'thermal_mgmt.json_types.FanGroup'
local pump_group_intf_types = require 'thermal_mgmt.json_types.PumpGroup'
local cooling_config_intf_types =
    require 'thermal_mgmt.json_types.CoolingConfig'
local disk_cooling_config_intf_types =
    require 'thermal_mgmt.json_types.DiskCoolingConfig'
local air_cooling_config_intf_types =
    require 'thermal_mgmt.json_types.AirCoolingConfig'
local fan_snapshot_intf_types = require 'thermal_mgmt.json_types.FanSnapshot'
local liquid_cooling_config_intf_types =
    require 'thermal_mgmt.json_types.LiquidCoolingConfig'
local cooling_fan_intf_types = require 'thermal_mgmt.json_types.CoolingFan'
local cooling_pump_intf_types = require 'thermal_mgmt.json_types.CoolingPump'
local cooling_requirement_intf_types =
    require 'thermal_mgmt.json_types.CoolingRequirement'
local cooling_policy_intf_types =
    require 'thermal_mgmt.json_types.CoolingPolicy'
local cooling_area_intf_types = require 'thermal_mgmt.json_types.CoolingArea'
local cooling_policies_intf_types =
    require 'thermal_mgmt.json_types.CoolingPolicies'

local Fan = {
    ['table_name'] = 't_fan',
    ['prop_configs'] = {
        ['FanObjectName'] = {
            ['baseType'] = 'String',
            ['primaryKey'] = true,
            ['validator'] = fan_class_types.FanObjectName
        },
        ['PowerGood'] = {
            ['baseType'] = 'U8',
            ['usage'] = {'CSR'},
            ['validator'] = fan_class_types.PowerGood
        },
        ['DualConnector'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'U8[]',
            ['refInterface'] = 'bmc.kepler.Connector',
            ['validator'] = fan_class_types.DualConnector
        },
        ['SingleConnector'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'U8[]',
            ['refInterface'] = 'bmc.kepler.Connector',
            ['validator'] = fan_class_types.SingleConnector
        },
        ['IdentifyStatus'] = {
            ['baseType'] = 'U8',
            ['default'] = 0,
            ['validator'] = fan_class_types.IdentifyStatus
        }
    },
    ['default_props'] = {
        ['FanObjectName'] = fan_class_types.FanObjectName.default[1],
        ['PowerGood'] = fan_class_types.PowerGood.default[1],
        ['DualConnector'] = fan_class_types.DualConnector.default[1],
        ['SingleConnector'] = fan_class_types.SingleConnector.default[1],
        ['IdentifyStatus'] = 0
    },
    ['mdb_prop_configs'] = {
        ['bmc.kepler.Systems.Fan'] = {
            ['FanId'] = {
                ['baseType'] = 'U16',
                ['readOnly'] = true,
                ['description'] = '风扇ID',
                ['usage'] = {'CSR'},
                ['validator'] = fan_intf_types.FanId
            },
            ['Slot'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = true,
                ['description'] = '风扇槽位',
                ['usage'] = {'CSR'},
                ['validator'] = fan_intf_types.Slot
            },
            ['Type'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = true,
                ['description'] = '风扇类型',
                ['validator'] = fan_intf_types.Type
            },
            ['Model'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '风扇型号',
                ['usage'] = {'CSR'},
                ['validator'] = fan_intf_types.Model
            },
            ['Coefficient'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = true,
                ['description'] = '风扇转速系数',
                ['usage'] = {'CSR'},
                ['validator'] = fan_intf_types.Coefficient
            },
            ['FanHealth'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = true,
                ['description'] = '风扇健康状态',
                ['validator'] = fan_intf_types.FanHealth
            },
            ['FanEntity'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '风扇实体',
                ['validator'] = fan_intf_types.FanEntity
            },
            ['FrontPresence'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = false,
                ['description'] = '前转子在位状态',
                ['usage'] = {'CSR'},
                ['validator'] = fan_intf_types.FrontPresence
            },
            ['RearPresence'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = false,
                ['description'] = '后转子在位状态',
                ['usage'] = {'CSR'},
                ['validator'] = fan_intf_types.RearPresence
            },
            ['FrontSpeed'] = {
                ['baseType'] = 'U16',
                ['readOnly'] = false,
                ['options'] = {
                    ['volatile'] = true,
                    ['emitsChangedSignal'] = 'true'
                },
                ['description'] = '前转子转速',
                ['usage'] = {'CSR'},
                ['validator'] = fan_intf_types.FrontSpeed
            },
            ['RearSpeed'] = {
                ['baseType'] = 'U16',
                ['readOnly'] = false,
                ['options'] = {
                    ['volatile'] = true,
                    ['emitsChangedSignal'] = 'true'
                },
                ['description'] = '后转子转速',
                ['usage'] = {'CSR'},
                ['validator'] = fan_intf_types.RearSpeed
            },
            ['FrontStatus'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = true,
                ['description'] = '前转子状态',
                ['usage'] = {'CSR', 'SHM'},
                ['validator'] = fan_intf_types.FrontStatus
            },
            ['RearStatus'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = true,
                ['description'] = '后转子状态',
                ['usage'] = {'CSR', 'SHM'},
                ['validator'] = fan_intf_types.RearStatus
            },
            ['FrontRPM'] = {
                ['baseType'] = 'U16',
                ['readOnly'] = true,
                ['description'] = '前转子转速',
                ['validator'] = fan_intf_types.FrontRPM
            },
            ['RearRPM'] = {
                ['baseType'] = 'U16',
                ['readOnly'] = true,
                ['description'] = '后转子转速',
                ['validator'] = fan_intf_types.RearRPM
            },
            ['HardwarePWM'] = {
                ['baseType'] = 'Double',
                ['readOnly'] = false,
                ['description'] = '硬件占空比',
                ['usage'] = {'CSR'},
                ['validator'] = fan_intf_types.HardwarePWM
            },
            ['PWMPercentage'] = {
                ['baseType'] = 'U32',
                ['readOnly'] = true,
                ['description'] = '占空比',
                ['validator'] = fan_intf_types.PWMPercentage
            },
            ['ExpectedPWM'] = {
                ['baseType'] = 'Double',
                ['readOnly'] = false,
                ['description'] = '预期占空比',
                ['usage'] = {'CSR'},
                ['validator'] = fan_intf_types.ExpectedPWM
            },
            ['FanAlarmLed'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = true,
                ['description'] = '风扇告警',
                ['validator'] = fan_intf_types.FanAlarmLed
            },
            ['BOM'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = 'BOM编码',
                ['validator'] = fan_intf_types.BOM
            },
            ['SystemId'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = true,
                ['description'] = '系统Id',
                ['usage'] = {'CSR'},
                ['validator'] = fan_intf_types.SystemId
            },
            ['MaxSupportedPWM'] = {
                ['baseType'] = 'U32',
                ['readOnly'] = true,
                ['description'] = '支持的最大转速',
                ['usage'] = {'CSR'},
                ['validator'] = fan_intf_types.MaxSupportedPWM
            },
            ['IdentifySpeedLevel'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = true,
                ['description'] = '识别风速级别',
                ['usage'] = {'CSR'},
                ['validator'] = fan_intf_types.IdentifySpeedLevel
            },
            ['PartNumber'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '部件编码',
                ['validator'] = fan_intf_types.PartNumber
            },
            ['FrontMaxSpeed'] = {
                ['baseType'] = 'U32',
                ['readOnly'] = true,
                ['description'] = '前转子最大转速',
                ['validator'] = fan_intf_types.FrontMaxSpeed
            },
            ['RearMaxSpeed'] = {
                ['baseType'] = 'U32',
                ['readOnly'] = true,
                ['description'] = '后转子最大转速',
                ['validator'] = fan_intf_types.RearMaxSpeed
            },
            ['IsTwins'] = {
                ['baseType'] = 'Boolean',
                ['readOnly'] = true,
                ['description'] = '是否为双转子',
                ['usage'] = {'CSR'},
                ['validator'] = fan_intf_types.IsTwins
            },
            ['Position'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '容器信息',
                ['usage'] = {'CSR'},
                ['validator'] = fan_intf_types.Position
            },
            ['SpeedStable'] = {
                ['baseType'] = 'Boolean',
                ['readOnly'] = true,
                ['description'] = '风扇转速是否稳定（true:稳定，false:不稳定）,期望转速与实际转速比相差25%以内为稳定',
                ['validator'] = fan_intf_types.SpeedStable
            },
            ['FunctionDesc'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '功能描述',
                ['usage'] = {'CSR'},
                ['validator'] = fan_intf_types.FunctionDesc
            },
            ['DeviceName'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '部件名称',
                ['usage'] = {'CSR'},
                ['validator'] = fan_intf_types.DeviceName
            }
        },
        ['bmc.kepler.Metric'] = {},
        ['bmc.kepler.Object.Properties'] = {
            ['ClassName'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '对象类名',
                ['validator'] = properties_intf_types.ClassName
            },
            ['ObjectName'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '对象名',
                ['validator'] = properties_intf_types.ObjectName
            },
            ['ObjectIdentifier'] = {
                ['baseType'] = 'Struct',
                ['$ref'] = '#/defs/StructIdentifier',
                ['readOnly'] = true,
                ['description'] = '对象标志符',
                ['validator'] = properties_intf_types.ObjectIdentifier
            }
        }
    },
    ['mdb_method_configs'] = {
        ['bmc.kepler.Systems.Fan'] = {
            ['SetFanPWM'] = {
                ['description'] = '设置风扇转速',
                ['req'] = {
                    {
                        ['baseType'] = 'Double',
                        ['description'] = '风扇转速占空比',
                        ['param'] = 'PWM'
                    }
                },
                ['rsp'] = {
                    {
                        ['baseType'] = 'U8',
                        ['description'] = '返回结果，0：设置成功；1：设置失败',
                        ['param'] = 'Result'
                    }
                }
            }
        },
        ['bmc.kepler.Metric'] = {
            ['GetData'] = {
                ['description'] = '根据MetricName获取采集项数据',
                ['req'] = {
                    {
                        ['baseType'] = 'String[]',
                        ['description'] = '采集项名称',
                        ['param'] = 'MetricName'
                    }
                },
                ['rsp'] = {
                    {
                        ['baseType'] = 'Array',
                        ['items'] = {['$ref'] = '#/defs/DataCollectionItem'},
                        ['description'] = '采集项数据',
                        ['param'] = 'Val'
                    }
                }
            },
            ['GetItems'] = {
                ['description'] = '获取采集项描述信息',
                ['req'] = {},
                ['rsp'] = {
                    {
                        ['baseType'] = 'String',
                        ['description'] = '采集主体名称',
                        ['param'] = 'Component'
                    }, {
                        ['baseType'] = 'Array',
                        ['items'] = {['$ref'] = '#/defs/TagProp'},
                        ['description'] = '分类信息',
                        ['param'] = 'Classification'
                    }, {
                        ['baseType'] = 'Array',
                        ['items'] = {['$ref'] = '#/defs/TagProp'},
                        ['description'] = '标识信息',
                        ['param'] = 'Identification'
                    }, {
                        ['baseType'] = 'String[]',
                        ['description'] = '采集项名称',
                        ['param'] = 'MetricName'
                    }
                }
            },
            ['SynDataAcquisitionEnable'] = {
                ['description'] = '将数据采集开关同步到业务组件',
                ['req'] = {
                    {
                        ['baseType'] = 'U8',
                        ['description'] = '数据采集开关',
                        ['param'] = 'Enabled'
                    }
                },
                ['rsp'] = {}
            }
        },
        ['bmc.kepler.Object.Properties'] = {
            ['GetOptions'] = {
                ['req'] = {
                    {
                        ['baseType'] = 'String',
                        ['description'] = '接口名',
                        ['param'] = 'Interface'
                    }, {
                        ['baseType'] = 'String',
                        ['description'] = '属性名',
                        ['param'] = 'Property'
                    }
                },
                ['rsp'] = {
                    {
                        ['baseType'] = 'Struct',
                        ['$ref'] = '#/defs/Options',
                        ['description'] = '属性能力选项，例如是否弃用、是否是易变属性等',
                        ['param'] = 'Options'
                    }
                },
                ['description'] = '按接口名和属性名查询属性的能力选项'
            },
            ['GetPropertiesByOptions'] = {
                ['req'] = {
                    {
                        ['baseType'] = 'String',
                        ['description'] = '接口名',
                        ['param'] = 'Interface'
                    }, {
                        ['baseType'] = 'Struct',
                        ['$ref'] = '#/defs/Options',
                        ['description'] = '属性能力选项，例如是否弃用、是否是易变属性等',
                        ['param'] = 'Options'
                    }
                },
                ['rsp'] = {
                    {
                        ['baseType'] = 'String[]',
                        ['description'] = '属性名列表',
                        ['param'] = 'Properties'
                    }
                },
                ['description'] = '按接口名和能力选项查询符合条件的所有属性'
            }
        }
    },
    ['mdb_signal_configs'] = {
        ['bmc.kepler.Metric'] = {
            ['CollectSignal'] = {
                {['baseType'] = 'String', ['param'] = 'MetricName'},
                {['baseType'] = 'String', ['param'] = 'TagPath'}
            }
        }
    },
    ['mdb_classes'] = mdb.get_class_obj(
        '/bmc/kepler/Systems/:SystemId/Thermal/Fans/:Id'),
    ['new_mdb_objects'] = mdb.new_objects_builder({
        ['bmc.kepler.Systems.Fan'] = {
            ['property_defaults'] = {
                ['FanId'] = fan_intf_types.FanId.default[1],
                ['Slot'] = fan_intf_types.Slot.default[1],
                ['Type'] = fan_intf_types.Type.default[1],
                ['Model'] = fan_intf_types.Model.default[1],
                ['Coefficient'] = fan_intf_types.Coefficient.default[1],
                ['FanHealth'] = fan_intf_types.FanHealth.default[1],
                ['FanEntity'] = fan_intf_types.FanEntity.default[1],
                ['FrontPresence'] = fan_intf_types.FrontPresence.default[1],
                ['RearPresence'] = fan_intf_types.RearPresence.default[1],
                ['FrontSpeed'] = fan_intf_types.FrontSpeed.default[1],
                ['RearSpeed'] = fan_intf_types.RearSpeed.default[1],
                ['FrontStatus'] = fan_intf_types.FrontStatus.default[1],
                ['RearStatus'] = fan_intf_types.RearStatus.default[1],
                ['FrontRPM'] = fan_intf_types.FrontRPM.default[1],
                ['RearRPM'] = fan_intf_types.RearRPM.default[1],
                ['HardwarePWM'] = fan_intf_types.HardwarePWM.default[1],
                ['PWMPercentage'] = fan_intf_types.PWMPercentage.default[1],
                ['ExpectedPWM'] = fan_intf_types.ExpectedPWM.default[1],
                ['FanAlarmLed'] = fan_intf_types.FanAlarmLed.default[1],
                ['BOM'] = fan_intf_types.BOM.default[1],
                ['SystemId'] = fan_intf_types.SystemId.default[1],
                ['MaxSupportedPWM'] = fan_intf_types.MaxSupportedPWM.default[1],
                ['IdentifySpeedLevel'] = fan_intf_types.IdentifySpeedLevel
                    .default[1],
                ['PartNumber'] = fan_intf_types.PartNumber.default[1],
                ['FrontMaxSpeed'] = fan_intf_types.FrontMaxSpeed.default[1],
                ['RearMaxSpeed'] = fan_intf_types.RearMaxSpeed.default[1],
                ['IsTwins'] = fan_intf_types.IsTwins.default[1],
                ['Position'] = fan_intf_types.Position.default[1],
                ['SpeedStable'] = fan_intf_types.SpeedStable.default[1],
                ['FunctionDesc'] = fan_intf_types.FunctionDesc.default[1],
                ['DeviceName'] = fan_intf_types.DeviceName.default[1]
            },
            ['privileges'] = {['path'] = privilege.ReadOnly},
            ['interface_types'] = fan_intf_types
        },
        ['bmc.kepler.Metric'] = {
            ['property_defaults'] = {},
            ['privileges'] = {['path'] = privilege.ReadOnly},
            ['interface_types'] = metric_intf_types
        },
        ['bmc.kepler.Object.Properties'] = {
            ['property_defaults'] = {
                ['ClassName'] = properties_intf_types.ClassName.default[1],
                ['ObjectName'] = properties_intf_types.ObjectName.default[1],
                ['ObjectIdentifier'] = properties_intf_types.ObjectIdentifier
                    .default[1]
            },
            ['privileges'] = {['path'] = privilege.ReadOnly},
            ['interface_types'] = properties_intf_types
        }
    })
}

local FanType = {
    ['table_name'] = 't_fan_type',
    ['prop_configs'] = {
        ['FanTypeObjectName'] = {
            ['baseType'] = 'String',
            ['primaryKey'] = true,
            ['validator'] = fan_type_class_types.FanTypeObjectName
        }
    },
    ['default_props'] = {
        ['FanTypeObjectName'] = fan_type_class_types.FanTypeObjectName.default[1]
    },
    ['mdb_prop_configs'] = {
        ['bmc.kepler.Systems.FanType'] = {
            ['Name'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '风扇型号名',
                ['usage'] = {'CSR'},
                ['validator'] = fan_type_intf_types.Name
            },
            ['Index'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = true,
                ['description'] = '风扇型号索引',
                ['usage'] = {'CSR'},
                ['validator'] = fan_type_intf_types.Index
            },
            ['IsDefaultType'] = {
                ['baseType'] = 'Boolean',
                ['readOnly'] = true,
                ['description'] = '是否为默认风扇型号',
                ['usage'] = {'CSR'},
                ['validator'] = fan_type_intf_types.IsDefaultType
            },
            ['IsTwins'] = {
                ['baseType'] = 'Boolean',
                ['readOnly'] = true,
                ['description'] = '是否为双转子',
                ['usage'] = {'CSR'},
                ['validator'] = fan_type_intf_types.IsTwins
            },
            ['FrontMaxSpeed'] = {
                ['baseType'] = 'U32',
                ['readOnly'] = true,
                ['description'] = '前转子最大转速',
                ['usage'] = {'CSR'},
                ['validator'] = fan_type_intf_types.FrontMaxSpeed
            },
            ['RearMaxSpeed'] = {
                ['baseType'] = 'U32',
                ['readOnly'] = true,
                ['description'] = '后转子最大转速',
                ['usage'] = {'CSR'},
                ['validator'] = fan_type_intf_types.RearMaxSpeed
            },
            ['IdentifyRangeLow'] = {
                ['baseType'] = 'U32',
                ['readOnly'] = true,
                ['description'] = '风扇型号识别转速左区间',
                ['usage'] = {'CSR'},
                ['validator'] = fan_type_intf_types.IdentifyRangeLow
            },
            ['IdentifyRangeHigh'] = {
                ['baseType'] = 'U32',
                ['readOnly'] = true,
                ['description'] = '风扇型号识别转速右区间',
                ['usage'] = {'CSR'},
                ['validator'] = fan_type_intf_types.IdentifyRangeHigh
            },
            ['MatchedCount'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = true,
                ['description'] = '识别风扇数量',
                ['validator'] = fan_type_intf_types.MatchedCount
            },
            ['PartNumber'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '部件编码',
                ['usage'] = {'CSR'},
                ['validator'] = fan_type_intf_types.PartNumber
            },
            ['BOM'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = 'BOM编码',
                ['usage'] = {'CSR'},
                ['validator'] = fan_type_intf_types.BOM
            },
            ['SystemId'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = true,
                ['description'] = '系统Id',
                ['usage'] = {'CSR'},
                ['validator'] = fan_type_intf_types.SystemId
            },
            ['SpeedRange'] = {
                ['baseType'] = 'U8[]',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['description'] = '风扇转速和功率映射关系的风扇转速数组',
                ['usage'] = {'CSR'},
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = fan_type_intf_types.SpeedRange
            },
            ['PowerRange'] = {
                ['baseType'] = 'U16[]',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['description'] = '风扇转速和功率映射关系的功率数组',
                ['usage'] = {'CSR'},
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = fan_type_intf_types.PowerRange
            },
            ['FanDiameterMm'] = {
                ['baseType'] = 'U16',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'const'},
                ['description'] = '风扇组件的直径，单位毫米',
                ['usage'] = {'CSR'},
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = fan_type_intf_types.FanDiameterMm
            }
        },
        ['bmc.kepler.Object.Properties'] = {
            ['ClassName'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '对象类名',
                ['validator'] = properties_intf_types.ClassName
            },
            ['ObjectName'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '对象名',
                ['validator'] = properties_intf_types.ObjectName
            },
            ['ObjectIdentifier'] = {
                ['baseType'] = 'Struct',
                ['$ref'] = '#/defs/StructIdentifier',
                ['readOnly'] = true,
                ['description'] = '对象标志符',
                ['validator'] = properties_intf_types.ObjectIdentifier
            }
        }
    },
    ['mdb_method_configs'] = {
        ['bmc.kepler.Object.Properties'] = {
            ['GetOptions'] = {
                ['req'] = {
                    {
                        ['baseType'] = 'String',
                        ['description'] = '接口名',
                        ['param'] = 'Interface'
                    }, {
                        ['baseType'] = 'String',
                        ['description'] = '属性名',
                        ['param'] = 'Property'
                    }
                },
                ['rsp'] = {
                    {
                        ['baseType'] = 'Struct',
                        ['$ref'] = '#/defs/Options',
                        ['description'] = '属性能力选项，例如是否弃用、是否是易变属性等',
                        ['param'] = 'Options'
                    }
                },
                ['description'] = '按接口名和属性名查询属性的能力选项'
            },
            ['GetPropertiesByOptions'] = {
                ['req'] = {
                    {
                        ['baseType'] = 'String',
                        ['description'] = '接口名',
                        ['param'] = 'Interface'
                    }, {
                        ['baseType'] = 'Struct',
                        ['$ref'] = '#/defs/Options',
                        ['description'] = '属性能力选项，例如是否弃用、是否是易变属性等',
                        ['param'] = 'Options'
                    }
                },
                ['rsp'] = {
                    {
                        ['baseType'] = 'String[]',
                        ['description'] = '属性名列表',
                        ['param'] = 'Properties'
                    }
                },
                ['description'] = '按接口名和能力选项查询符合条件的所有属性'
            }
        }
    },
    ['mdb_classes'] = mdb.get_class_obj(
        '/bmc/kepler/Systems/:SystemId/Thermal/FanTypes/:Id'),
    ['new_mdb_objects'] = mdb.new_objects_builder({
        ['bmc.kepler.Systems.FanType'] = {
            ['property_defaults'] = {
                ['Name'] = fan_type_intf_types.Name.default[1],
                ['Index'] = fan_type_intf_types.Index.default[1],
                ['IsDefaultType'] = fan_type_intf_types.IsDefaultType.default[1],
                ['IsTwins'] = fan_type_intf_types.IsTwins.default[1],
                ['FrontMaxSpeed'] = fan_type_intf_types.FrontMaxSpeed.default[1],
                ['RearMaxSpeed'] = fan_type_intf_types.RearMaxSpeed.default[1],
                ['IdentifyRangeLow'] = fan_type_intf_types.IdentifyRangeLow
                    .default[1],
                ['IdentifyRangeHigh'] = fan_type_intf_types.IdentifyRangeHigh
                    .default[1],
                ['MatchedCount'] = fan_type_intf_types.MatchedCount.default[1],
                ['PartNumber'] = fan_type_intf_types.PartNumber.default[1],
                ['BOM'] = fan_type_intf_types.BOM.default[1],
                ['SystemId'] = fan_type_intf_types.SystemId.default[1],
                ['SpeedRange'] = fan_type_intf_types.SpeedRange.default[1],
                ['PowerRange'] = fan_type_intf_types.PowerRange.default[1],
                ['FanDiameterMm'] = fan_type_intf_types.FanDiameterMm.default[1]
            },
            ['privileges'] = {
                ['path'] = privilege.ReadOnly,
                ['props'] = {
                    ['SpeedRange'] = {['read'] = privilege.ReadOnly},
                    ['PowerRange'] = {['read'] = privilege.ReadOnly},
                    ['FanDiameterMm'] = {['read'] = privilege.ReadOnly}
                }
            },
            ['interface_types'] = fan_type_intf_types
        },
        ['bmc.kepler.Object.Properties'] = {
            ['property_defaults'] = {
                ['ClassName'] = properties_intf_types.ClassName.default[1],
                ['ObjectName'] = properties_intf_types.ObjectName.default[1],
                ['ObjectIdentifier'] = properties_intf_types.ObjectIdentifier
                    .default[1]
            },
            ['privileges'] = {['path'] = privilege.ReadOnly},
            ['interface_types'] = properties_intf_types
        }
    })
}

local FanInfo = {
    ['table_name'] = 't_fan_info',
    ['prop_configs'] = {
        ['FanId'] = {
            ['baseType'] = 'U16',
            ['default'] = 0,
            ['primaryKey'] = true,
            ['usage'] = {'ResetPer'},
            ['validator'] = fan_info_class_types.FanId
        },
        ['SystemId'] = {
            ['baseType'] = 'U8',
            ['default'] = 0,
            ['primaryKey'] = true,
            ['usage'] = {'ResetPer'},
            ['validator'] = fan_info_class_types.SystemId
        },
        ['FanPosition'] = {
            ['baseType'] = 'String',
            ['default'] = '',
            ['primaryKey'] = true,
            ['usage'] = {'ResetPer'},
            ['validator'] = fan_info_class_types.FanPosition
        },
        ['Type'] = {
            ['baseType'] = 'U8',
            ['default'] = 0,
            ['usage'] = {'ResetPer'},
            ['validator'] = fan_info_class_types.Type
        },
        ['Model'] = {
            ['baseType'] = 'String',
            ['default'] = '',
            ['usage'] = {'ResetPer'},
            ['validator'] = fan_info_class_types.Model
        },
        ['BOM'] = {
            ['baseType'] = 'String',
            ['default'] = 'NA',
            ['usage'] = {'ResetPer'},
            ['validator'] = fan_info_class_types.BOM
        },
        ['PartNumber'] = {
            ['baseType'] = 'String',
            ['default'] = 'NA',
            ['usage'] = {'ResetPer'},
            ['validator'] = fan_info_class_types.PartNumber
        },
        ['FrontMaxSpeed'] = {
            ['baseType'] = 'U32',
            ['default'] = 10000,
            ['usage'] = {'ResetPer'},
            ['validator'] = fan_info_class_types.FrontMaxSpeed
        },
        ['RearMaxSpeed'] = {
            ['baseType'] = 'U32',
            ['default'] = 10000,
            ['usage'] = {'ResetPer'},
            ['validator'] = fan_info_class_types.RearMaxSpeed
        },
        ['IsTwins'] = {
            ['baseType'] = 'Boolean',
            ['default'] = false,
            ['usage'] = {'ResetPer'},
            ['validator'] = fan_info_class_types.IsTwins
        }
    },
    ['default_props'] = {
        ['FanId'] = 0,
        ['SystemId'] = 0,
        ['FanPosition'] = '',
        ['Type'] = 0,
        ['Model'] = '',
        ['BOM'] = 'NA',
        ['PartNumber'] = 'NA',
        ['FrontMaxSpeed'] = 10000,
        ['RearMaxSpeed'] = 10000,
        ['IsTwins'] = false
    }
}

local ThermalConfiguration = {
    ['table_name'] = 't_thermal_configuration',
    ['prop_configs'] = {
        ['StandbyFan'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'U8',
            ['description'] = 'standby下风扇是否可以运转, 1:可以,0:不可以',
            ['default'] = 0,
            ['validator'] = thermal_configuration_class_types.StandbyFan
        },
        ['FanStartSlot'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'U8[]',
            ['description'] = '风扇起始槽位，下标为风扇板槽位，值为风扇起始槽位',
            ['validator'] = thermal_configuration_class_types.FanStartSlot
        },
        ['Id'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'U8',
            ['primaryKey'] = true,
            ['default'] = 1,
            ['validator'] = thermal_configuration_class_types.Id
        }
    },
    ['default_props'] = {
        ['StandbyFan'] = 0,
        ['FanStartSlot'] = thermal_configuration_class_types.FanStartSlot
            .default[1],
        ['Id'] = 1
    }
}

local PWMChannel = {
    ['table_name'] = 't_pwm_channel',
    ['prop_configs'] = {
        ['PWMChannelObjectName'] = {
            ['baseType'] = 'String',
            ['primaryKey'] = true,
            ['validator'] = pwm_channel_class_types.PWMChannelObjectName
        },
        ['ManageFans'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'U8[]',
            ['validator'] = pwm_channel_class_types.ManageFans
        }
    },
    ['default_props'] = {
        ['PWMChannelObjectName'] = pwm_channel_class_types.PWMChannelObjectName
            .default[1],
        ['ManageFans'] = pwm_channel_class_types.ManageFans.default[1]
    }
}

local SystemsFans = {
    ['table_name'] = 't_systems_fans',
    ['prop_configs'] = {
        ['SystemId'] = {
            ['baseType'] = 'U8',
            ['primaryKey'] = true,
            ['default'] = 1,
            ['validator'] = systems_fans_class_types.SystemId
        }
    },
    ['default_props'] = {['SystemId'] = 1},
    ['mdb_prop_configs'] = {
        ['bmc.kepler.Systems.Fans'] = {
            ['WorkInStandby'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = true,
                ['description'] = 'standby下风扇是否可以运转',
                ['usage'] = {'CSR'},
                ['validator'] = fans_intf_types.WorkInStandby
            },
            ['EstimatedTotalPowerWatts'] = {
                ['baseType'] = 'U16',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['description'] = '估算的整机风扇总功耗',
                ['validator'] = fans_intf_types.EstimatedTotalPowerWatts
            }
        },
        ['bmc.kepler.Object.Properties'] = {
            ['ClassName'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '对象类名',
                ['validator'] = properties_intf_types.ClassName
            },
            ['ObjectName'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '对象名',
                ['validator'] = properties_intf_types.ObjectName
            },
            ['ObjectIdentifier'] = {
                ['baseType'] = 'Struct',
                ['$ref'] = '#/defs/StructIdentifier',
                ['readOnly'] = true,
                ['description'] = '对象标志符',
                ['validator'] = properties_intf_types.ObjectIdentifier
            }
        }
    },
    ['mdb_method_configs'] = {
        ['bmc.kepler.Systems.Fans'] = {
            ['SetPWM'] = {
                ['description'] = '设置所有风扇转速',
                ['req'] = {
                    {
                        ['baseType'] = 'Double[]',
                        ['description'] = '风扇转速占空比数组',
                        ['param'] = 'PWM'
                    }
                },
                ['rsp'] = {
                    {
                        ['baseType'] = 'U8',
                        ['description'] = '返回结果，0：设置成功；1：设置失败',
                        ['param'] = 'Result'
                    }
                },
                ['privilege'] = {'BasicSetting'}
            }
        },
        ['bmc.kepler.Object.Properties'] = {
            ['GetOptions'] = {
                ['req'] = {
                    {
                        ['baseType'] = 'String',
                        ['description'] = '接口名',
                        ['param'] = 'Interface'
                    }, {
                        ['baseType'] = 'String',
                        ['description'] = '属性名',
                        ['param'] = 'Property'
                    }
                },
                ['rsp'] = {
                    {
                        ['baseType'] = 'Struct',
                        ['$ref'] = '#/defs/Options',
                        ['description'] = '属性能力选项，例如是否弃用、是否是易变属性等',
                        ['param'] = 'Options'
                    }
                },
                ['description'] = '按接口名和属性名查询属性的能力选项'
            },
            ['GetPropertiesByOptions'] = {
                ['req'] = {
                    {
                        ['baseType'] = 'String',
                        ['description'] = '接口名',
                        ['param'] = 'Interface'
                    }, {
                        ['baseType'] = 'Struct',
                        ['$ref'] = '#/defs/Options',
                        ['description'] = '属性能力选项，例如是否弃用、是否是易变属性等',
                        ['param'] = 'Options'
                    }
                },
                ['rsp'] = {
                    {
                        ['baseType'] = 'String[]',
                        ['description'] = '属性名列表',
                        ['param'] = 'Properties'
                    }
                },
                ['description'] = '按接口名和能力选项查询符合条件的所有属性'
            }
        }
    },
    ['mdb_classes'] = mdb.get_class_obj(
        '/bmc/kepler/Systems/:SystemId/Thermal/Fans'),
    ['new_mdb_objects'] = mdb.new_objects_builder({
        ['bmc.kepler.Systems.Fans'] = {
            ['property_defaults'] = {
                ['WorkInStandby'] = fans_intf_types.WorkInStandby.default[1],
                ['EstimatedTotalPowerWatts'] = fans_intf_types.EstimatedTotalPowerWatts
                    .default[1]
            },
            ['privileges'] = {
                ['path'] = privilege.ReadOnly,
                ['methods'] = {['SetPWM'] = privilege.BasicSetting}
            },
            ['interface_types'] = fans_intf_types
        },
        ['bmc.kepler.Object.Properties'] = {
            ['property_defaults'] = {
                ['ClassName'] = properties_intf_types.ClassName.default[1],
                ['ObjectName'] = properties_intf_types.ObjectName.default[1],
                ['ObjectIdentifier'] = properties_intf_types.ObjectIdentifier
                    .default[1]
            },
            ['privileges'] = {['path'] = privilege.ReadOnly},
            ['interface_types'] = properties_intf_types
        }
    })
}

local Fans = {
    ['table_name'] = 't_fans',
    ['prop_configs'] = {
        ['FansObjectName'] = {
            ['baseType'] = 'String',
            ['primaryKey'] = true,
            ['validator'] = fans_class_types.FansObjectName
        },
        ['PWMChip'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'U8[]',
            ['refInterface'] = 'bmc.kepler.Chip.BlockIO',
            ['validator'] = fans_class_types.PWMChip
        },
        ['SetPWMCmd'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'U32',
            ['validator'] = fans_class_types.SetPWMCmd
        },
        ['WorkInStandby'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'U8',
            ['description'] = 'standby下风扇是否可以运转, 1:可以,0:不可以',
            ['default'] = 0,
            ['validator'] = fans_class_types.WorkInStandby
        }
    },
    ['default_props'] = {
        ['FansObjectName'] = fans_class_types.FansObjectName.default[1],
        ['PWMChip'] = fans_class_types.PWMChip.default[1],
        ['SetPWMCmd'] = fans_class_types.SetPWMCmd.default[1],
        ['WorkInStandby'] = 0
    }
}

local Pumps = {
    ['table_name'] = 't_pumps',
    ['prop_configs'] = {
        ['PumpsObjectName'] = {
            ['baseType'] = 'String',
            ['primaryKey'] = true,
            ['validator'] = pumps_class_types.PumpsObjectName
        },
        ['PWMChip'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'U8[]',
            ['refInterface'] = 'bmc.kepler.Chip.BlockIO',
            ['validator'] = pumps_class_types.PWMChip
        },
        ['SetPWMCmd'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'U32',
            ['validator'] = pumps_class_types.SetPWMCmd
        }
    },
    ['default_props'] = {
        ['PumpsObjectName'] = pumps_class_types.PumpsObjectName.default[1],
        ['PWMChip'] = pumps_class_types.PWMChip.default[1],
        ['SetPWMCmd'] = pumps_class_types.SetPWMCmd.default[1]
    },
    ['mdb_prop_configs'] = {
        ['bmc.kepler.Systems.Pumps'] = {
            ['WorkInStandby'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'const'},
                ['description'] = 'standby下是否可以运转',
                ['validator'] = pumps_intf_types.WorkInStandby
            }
        },
        ['bmc.kepler.Object.Properties'] = {
            ['ClassName'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '对象类名',
                ['validator'] = properties_intf_types.ClassName
            },
            ['ObjectName'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '对象名',
                ['validator'] = properties_intf_types.ObjectName
            },
            ['ObjectIdentifier'] = {
                ['baseType'] = 'Struct',
                ['$ref'] = '#/defs/StructIdentifier',
                ['readOnly'] = true,
                ['description'] = '对象标志符',
                ['validator'] = properties_intf_types.ObjectIdentifier
            }
        }
    },
    ['mdb_method_configs'] = {
        ['bmc.kepler.Systems.Pumps'] = {
            ['SetPWM'] = {
                ['description'] = '设置所有泵转速',
                ['req'] = {
                    {
                        ['baseType'] = 'Double[]',
                        ['description'] = '要设置的转速占空比数组',
                        ['param'] = 'PWM'
                    }
                },
                ['rsp'] = {
                    {
                        ['baseType'] = 'U8',
                        ['description'] = '返回结果，0：设置成功；1：设置失败',
                        ['param'] = 'Result'
                    }
                },
                ['privilege'] = {'BasicSetting'}
            }
        },
        ['bmc.kepler.Object.Properties'] = {
            ['GetOptions'] = {
                ['req'] = {
                    {
                        ['baseType'] = 'String',
                        ['description'] = '接口名',
                        ['param'] = 'Interface'
                    }, {
                        ['baseType'] = 'String',
                        ['description'] = '属性名',
                        ['param'] = 'Property'
                    }
                },
                ['rsp'] = {
                    {
                        ['baseType'] = 'Struct',
                        ['$ref'] = '#/defs/Options',
                        ['description'] = '属性能力选项，例如是否弃用、是否是易变属性等',
                        ['param'] = 'Options'
                    }
                },
                ['description'] = '按接口名和属性名查询属性的能力选项'
            },
            ['GetPropertiesByOptions'] = {
                ['req'] = {
                    {
                        ['baseType'] = 'String',
                        ['description'] = '接口名',
                        ['param'] = 'Interface'
                    }, {
                        ['baseType'] = 'Struct',
                        ['$ref'] = '#/defs/Options',
                        ['description'] = '属性能力选项，例如是否弃用、是否是易变属性等',
                        ['param'] = 'Options'
                    }
                },
                ['rsp'] = {
                    {
                        ['baseType'] = 'String[]',
                        ['description'] = '属性名列表',
                        ['param'] = 'Properties'
                    }
                },
                ['description'] = '按接口名和能力选项查询符合条件的所有属性'
            }
        }
    },
    ['mdb_classes'] = mdb.get_class_obj(
        '/bmc/kepler/Systems/:SystemId/Thermal/Pumps'),
    ['new_mdb_objects'] = mdb.new_objects_builder({
        ['bmc.kepler.Systems.Pumps'] = {
            ['property_defaults'] = {
                ['WorkInStandby'] = pumps_intf_types.WorkInStandby.default[1]
            },
            ['privileges'] = {
                ['path'] = privilege.ReadOnly,
                ['methods'] = {['SetPWM'] = privilege.BasicSetting}
            },
            ['interface_types'] = pumps_intf_types
        },
        ['bmc.kepler.Object.Properties'] = {
            ['property_defaults'] = {
                ['ClassName'] = properties_intf_types.ClassName.default[1],
                ['ObjectName'] = properties_intf_types.ObjectName.default[1],
                ['ObjectIdentifier'] = properties_intf_types.ObjectIdentifier
                    .default[1]
            },
            ['privileges'] = {['path'] = privilege.ReadOnly},
            ['interface_types'] = properties_intf_types
        }
    })
}

local Pump = {
    ['table_name'] = 't_pump',
    ['prop_configs'] = {
        ['PowerGood'] = {
            ['baseType'] = 'U8',
            ['usage'] = {'CSR'},
            ['validator'] = pump_class_types.PowerGood
        }
    },
    ['default_props'] = {['PowerGood'] = pump_class_types.PowerGood.default[1]},
    ['mdb_prop_configs'] = {
        ['bmc.kepler.Systems.Pump'] = {
            ['Id'] = {
                ['baseType'] = 'U16',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'const'},
                ['description'] = '泵ID',
                ['usage'] = {'CSR'},
                ['primaryKey'] = true,
                ['validator'] = pump_intf_types.Id
            },
            ['Slot'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'const'},
                ['description'] = '槽位',
                ['usage'] = {'CSR'},
                ['validator'] = pump_intf_types.Slot
            },
            ['Model'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'const'},
                ['description'] = '型号',
                ['usage'] = {'CSR'},
                ['validator'] = pump_intf_types.Model
            },
            ['PartNumber'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['description'] = '部件号',
                ['usage'] = {'CSR'},
                ['validator'] = pump_intf_types.PartNumber
            },
            ['ExpectedPWM'] = {
                ['baseType'] = 'Double',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['description'] = '预期的PWM值',
                ['usage'] = {'CSR'},
                ['validator'] = pump_intf_types.ExpectedPWM
            },
            ['ActualPWM'] = {
                ['baseType'] = 'Double',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['description'] = '实际PWM值',
                ['usage'] = {'CSR'},
                ['validator'] = pump_intf_types.ActualPWM
            },
            ['MaxSupportedPWM'] = {
                ['baseType'] = 'U32',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['description'] = '泵全速额定PWM值',
                ['usage'] = {'CSR'},
                ['validator'] = pump_intf_types.MaxSupportedPWM
            },
            ['SpeedRPM'] = {
                ['baseType'] = 'U16',
                ['readOnly'] = true,
                ['options'] = {
                    ['emitsChangedSignal'] = 'false',
                    ['volatile'] = true
                },
                ['description'] = '泵转速(转/分钟）',
                ['usage'] = {'CSR'},
                ['validator'] = pump_intf_types.SpeedRPM
            },
            ['MaxSpeedRPM'] = {
                ['baseType'] = 'U32',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['description'] = '泵全速额定转速(转/分钟）',
                ['usage'] = {'CSR'},
                ['validator'] = pump_intf_types.MaxSpeedRPM
            },
            ['Presence'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = true,
                ['description'] = '1在位，0不在位',
                ['usage'] = {'CSR'},
                ['validator'] = pump_intf_types.Presence
            },
            ['Status'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = true,
                ['description'] = '泵状态，0：正常，1：转速异常，2：在位异常，3：停转',
                ['usage'] = {'CSR', 'SHM'},
                ['validator'] = pump_intf_types.Status
            }
        },
        ['bmc.kepler.Object.Properties'] = {
            ['ClassName'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '对象类名',
                ['validator'] = properties_intf_types.ClassName
            },
            ['ObjectName'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '对象名',
                ['validator'] = properties_intf_types.ObjectName
            },
            ['ObjectIdentifier'] = {
                ['baseType'] = 'Struct',
                ['$ref'] = '#/defs/StructIdentifier',
                ['readOnly'] = true,
                ['description'] = '对象标志符',
                ['validator'] = properties_intf_types.ObjectIdentifier
            }
        }
    },
    ['mdb_method_configs'] = {
        ['bmc.kepler.Object.Properties'] = {
            ['GetOptions'] = {
                ['req'] = {
                    {
                        ['baseType'] = 'String',
                        ['description'] = '接口名',
                        ['param'] = 'Interface'
                    }, {
                        ['baseType'] = 'String',
                        ['description'] = '属性名',
                        ['param'] = 'Property'
                    }
                },
                ['rsp'] = {
                    {
                        ['baseType'] = 'Struct',
                        ['$ref'] = '#/defs/Options',
                        ['description'] = '属性能力选项，例如是否弃用、是否是易变属性等',
                        ['param'] = 'Options'
                    }
                },
                ['description'] = '按接口名和属性名查询属性的能力选项'
            },
            ['GetPropertiesByOptions'] = {
                ['req'] = {
                    {
                        ['baseType'] = 'String',
                        ['description'] = '接口名',
                        ['param'] = 'Interface'
                    }, {
                        ['baseType'] = 'Struct',
                        ['$ref'] = '#/defs/Options',
                        ['description'] = '属性能力选项，例如是否弃用、是否是易变属性等',
                        ['param'] = 'Options'
                    }
                },
                ['rsp'] = {
                    {
                        ['baseType'] = 'String[]',
                        ['description'] = '属性名列表',
                        ['param'] = 'Properties'
                    }
                },
                ['description'] = '按接口名和能力选项查询符合条件的所有属性'
            }
        }
    },
    ['mdb_classes'] = mdb.get_class_obj(
        '/bmc/kepler/Systems/:SystemId/Thermal/Pumps/:Id'),
    ['new_mdb_objects'] = mdb.new_objects_builder({
        ['bmc.kepler.Systems.Pump'] = {
            ['property_defaults'] = {
                ['Id'] = pump_intf_types.Id.default[1],
                ['Slot'] = pump_intf_types.Slot.default[1],
                ['Model'] = pump_intf_types.Model.default[1],
                ['PartNumber'] = pump_intf_types.PartNumber.default[1],
                ['ExpectedPWM'] = pump_intf_types.ExpectedPWM.default[1],
                ['ActualPWM'] = pump_intf_types.ActualPWM.default[1],
                ['MaxSupportedPWM'] = pump_intf_types.MaxSupportedPWM.default[1],
                ['SpeedRPM'] = pump_intf_types.SpeedRPM.default[1],
                ['MaxSpeedRPM'] = pump_intf_types.MaxSpeedRPM.default[1],
                ['Presence'] = pump_intf_types.Presence.default[1],
                ['Status'] = pump_intf_types.Status.default[1]
            },
            ['privileges'] = {['path'] = privilege.ReadOnly},
            ['interface_types'] = pump_intf_types
        },
        ['bmc.kepler.Object.Properties'] = {
            ['property_defaults'] = {
                ['ClassName'] = properties_intf_types.ClassName.default[1],
                ['ObjectName'] = properties_intf_types.ObjectName.default[1],
                ['ObjectIdentifier'] = properties_intf_types.ObjectIdentifier
                    .default[1]
            },
            ['privileges'] = {['path'] = privilege.ReadOnly},
            ['interface_types'] = properties_intf_types
        }
    })
}

local Valves = {
    ['table_name'] = 't_valves',
    ['prop_configs'] = {
        ['Id'] = {
            ['primaryKey'] = true,
            ['baseType'] = 'String',
            ['usage'] = {'PoweroffPer'},
            ['default'] = '0',
            ['validator'] = valves_class_types.Id
        },
        ['PatrolType'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'U8',
            ['description'] = '巡检类型: 0-不巡检, 1-例行巡检（仅支持月度巡检）',
            ['default'] = 0,
            ['validator'] = valves_class_types.PatrolType
        },
        ['InvalidLocationId'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'U8',
            ['description'] = '无效槽位号',
            ['default'] = 0,
            ['validator'] = valves_class_types.InvalidLocationId
        }
    },
    ['default_props'] = {
        ['Id'] = '0',
        ['PatrolType'] = 0,
        ['InvalidLocationId'] = 0
    },
    ['mdb_prop_configs'] = {
        ['bmc.kepler.Chassis.Valves'] = {
            ['LastPatrolTimestamp'] = {
                ['baseType'] = 'U32',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['description'] = '最近一次巡检时间',
                ['usage'] = {'PoweroffPer'},
                ['validator'] = valves_intf_types.LastPatrolTimestamp
            },
            ['PatrolState'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['enum'] = {'Idle', 'Ready', 'Running'},
                ['description'] = '巡检状态',
                ['validator'] = valves_intf_types.PatrolState
            }
        },
        ['bmc.kepler.Object.Properties'] = {
            ['ClassName'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '对象类名',
                ['validator'] = properties_intf_types.ClassName
            },
            ['ObjectName'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '对象名',
                ['validator'] = properties_intf_types.ObjectName
            },
            ['ObjectIdentifier'] = {
                ['baseType'] = 'Struct',
                ['$ref'] = '#/defs/StructIdentifier',
                ['readOnly'] = true,
                ['description'] = '对象标志符',
                ['validator'] = properties_intf_types.ObjectIdentifier
            }
        }
    },
    ['mdb_method_configs'] = {
        ['bmc.kepler.Chassis.Valves'] = {
            ['StartPatrol'] = {
                ['description'] = '启动关断阀巡检',
                ['req'] = {
                    {
                        ['baseType'] = 'U32',
                        ['description'] = '巡检开始等待时间（秒）',
                        ['param'] = 'DelaySeconds'
                    }
                },
                ['rsp'] = {},
                ['privilege'] = {'BasicSetting'}
            }
        },
        ['bmc.kepler.Object.Properties'] = {
            ['GetOptions'] = {
                ['req'] = {
                    {
                        ['baseType'] = 'String',
                        ['description'] = '接口名',
                        ['param'] = 'Interface'
                    }, {
                        ['baseType'] = 'String',
                        ['description'] = '属性名',
                        ['param'] = 'Property'
                    }
                },
                ['rsp'] = {
                    {
                        ['baseType'] = 'Struct',
                        ['$ref'] = '#/defs/Options',
                        ['description'] = '属性能力选项，例如是否弃用、是否是易变属性等',
                        ['param'] = 'Options'
                    }
                },
                ['description'] = '按接口名和属性名查询属性的能力选项'
            },
            ['GetPropertiesByOptions'] = {
                ['req'] = {
                    {
                        ['baseType'] = 'String',
                        ['description'] = '接口名',
                        ['param'] = 'Interface'
                    }, {
                        ['baseType'] = 'Struct',
                        ['$ref'] = '#/defs/Options',
                        ['description'] = '属性能力选项，例如是否弃用、是否是易变属性等',
                        ['param'] = 'Options'
                    }
                },
                ['rsp'] = {
                    {
                        ['baseType'] = 'String[]',
                        ['description'] = '属性名列表',
                        ['param'] = 'Properties'
                    }
                },
                ['description'] = '按接口名和能力选项查询符合条件的所有属性'
            }
        }
    },
    ['mdb_classes'] = mdb.get_class_obj(
        '/bmc/kepler/Chassis/:ChassisId/Thermal/Valves'),
    ['new_mdb_objects'] = mdb.new_objects_builder({
        ['bmc.kepler.Chassis.Valves'] = {
            ['property_defaults'] = {
                ['LastPatrolTimestamp'] = valves_intf_types.LastPatrolTimestamp
                    .default[1],
                ['PatrolState'] = valves_intf_types.PatrolState.default[1]
            },
            ['privileges'] = {
                ['path'] = privilege.ReadOnly,
                ['methods'] = {['StartPatrol'] = privilege.BasicSetting}
            },
            ['interface_types'] = valves_intf_types
        },
        ['bmc.kepler.Object.Properties'] = {
            ['property_defaults'] = {
                ['ClassName'] = properties_intf_types.ClassName.default[1],
                ['ObjectName'] = properties_intf_types.ObjectName.default[1],
                ['ObjectIdentifier'] = properties_intf_types.ObjectIdentifier
                    .default[1]
            },
            ['privileges'] = {['path'] = privilege.ReadOnly},
            ['interface_types'] = properties_intf_types
        }
    })
}

local Valve = {
    ['table_name'] = 't_valve',
    ['mdb_prop_configs'] = {
        ['bmc.kepler.Chassis.Valve'] = {
            ['Id'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'const'},
                ['description'] = '关断阀Id',
                ['usage'] = {'CSR'},
                ['primaryKey'] = true,
                ['validator'] = valve_intf_types.Id
            },
            ['Slot'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'const'},
                ['description'] = '关断阀槽位',
                ['usage'] = {'CSR'},
                ['validator'] = valve_intf_types.Slot
            },
            ['Presence'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = true,
                ['description'] = '关断阀在位。1在位，0不在位',
                ['usage'] = {'CSR'},
                ['validator'] = valve_intf_types.Presence
            },
            ['OpeningDegree'] = {
                ['baseType'] = 'U32',
                ['readOnly'] = false,
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['description'] = '关断阀开度',
                ['usage'] = {'CSR'},
                ['privilege'] = {
                    ['read'] = {'ReadOnly'},
                    ['write'] = {'BasicSetting'}
                },
                ['validator'] = valve_intf_types.OpeningDegree
            },
            ['StandardOpeningDegree'] = {
                ['baseType'] = 'U32',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['description'] = '关断阀标称开度',
                ['usage'] = {'CSR'},
                ['validator'] = valve_intf_types.StandardOpeningDegree
            },
            ['Status'] = {
                ['baseType'] = 'U16',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'true'},
                ['description'] = '关断阀故障状态: 0-正常, 非0-关断阀故障',
                ['usage'] = {'CSR'},
                ['validator'] = valve_intf_types.Status
            },
            ['OpeningDegreeState'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'true'},
                ['description'] = '关断阀开度状态:0-正常, 1-异常',
                ['usage'] = {'CSR', 'ResetPer'},
                ['validator'] = valve_intf_types.OpeningDegreeState
            },
            ['PatrolResult'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'true'},
                ['description'] = '关断阀巡检结果: 0-成功, 1-失败',
                ['usage'] = {'CSR', 'ResetPer'},
                ['validator'] = valve_intf_types.PatrolResult
            }
        },
        ['bmc.kepler.Object.Properties'] = {
            ['ClassName'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '对象类名',
                ['validator'] = properties_intf_types.ClassName
            },
            ['ObjectName'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '对象名',
                ['validator'] = properties_intf_types.ObjectName
            },
            ['ObjectIdentifier'] = {
                ['baseType'] = 'Struct',
                ['$ref'] = '#/defs/StructIdentifier',
                ['readOnly'] = true,
                ['description'] = '对象标志符',
                ['validator'] = properties_intf_types.ObjectIdentifier
            }
        }
    },
    ['mdb_method_configs'] = {
        ['bmc.kepler.Object.Properties'] = {
            ['GetOptions'] = {
                ['req'] = {
                    {
                        ['baseType'] = 'String',
                        ['description'] = '接口名',
                        ['param'] = 'Interface'
                    }, {
                        ['baseType'] = 'String',
                        ['description'] = '属性名',
                        ['param'] = 'Property'
                    }
                },
                ['rsp'] = {
                    {
                        ['baseType'] = 'Struct',
                        ['$ref'] = '#/defs/Options',
                        ['description'] = '属性能力选项，例如是否弃用、是否是易变属性等',
                        ['param'] = 'Options'
                    }
                },
                ['description'] = '按接口名和属性名查询属性的能力选项'
            },
            ['GetPropertiesByOptions'] = {
                ['req'] = {
                    {
                        ['baseType'] = 'String',
                        ['description'] = '接口名',
                        ['param'] = 'Interface'
                    }, {
                        ['baseType'] = 'Struct',
                        ['$ref'] = '#/defs/Options',
                        ['description'] = '属性能力选项，例如是否弃用、是否是易变属性等',
                        ['param'] = 'Options'
                    }
                },
                ['rsp'] = {
                    {
                        ['baseType'] = 'String[]',
                        ['description'] = '属性名列表',
                        ['param'] = 'Properties'
                    }
                },
                ['description'] = '按接口名和能力选项查询符合条件的所有属性'
            }
        }
    },
    ['mdb_classes'] = mdb.get_class_obj(
        '/bmc/kepler/Chassis/:ChassisId/Thermal/Valves/:Id'),
    ['new_mdb_objects'] = mdb.new_objects_builder({
        ['bmc.kepler.Chassis.Valve'] = {
            ['property_defaults'] = {
                ['Id'] = valve_intf_types.Id.default[1],
                ['Slot'] = valve_intf_types.Slot.default[1],
                ['Presence'] = valve_intf_types.Presence.default[1],
                ['OpeningDegree'] = valve_intf_types.OpeningDegree.default[1],
                ['StandardOpeningDegree'] = valve_intf_types.StandardOpeningDegree
                    .default[1],
                ['Status'] = valve_intf_types.Status.default[1],
                ['OpeningDegreeState'] = valve_intf_types.OpeningDegreeState
                    .default[1],
                ['PatrolResult'] = valve_intf_types.PatrolResult.default[1]
            },
            ['privileges'] = {
                ['path'] = privilege.ReadOnly,
                ['props'] = {
                    ['OpeningDegree'] = {
                        ['read'] = privilege.ReadOnly,
                        ['write'] = privilege.BasicSetting
                    }
                }
            },
            ['interface_types'] = valve_intf_types
        },
        ['bmc.kepler.Object.Properties'] = {
            ['property_defaults'] = {
                ['ClassName'] = properties_intf_types.ClassName.default[1],
                ['ObjectName'] = properties_intf_types.ObjectName.default[1],
                ['ObjectIdentifier'] = properties_intf_types.ObjectIdentifier
                    .default[1]
            },
            ['privileges'] = {['path'] = privilege.ReadOnly},
            ['interface_types'] = properties_intf_types
        }
    })
}

local BasicCoolingConfig = {
    ['table_name'] = 't_basic_cooling_config',
    ['prop_configs'] = {
        ['FanGroupSpeedDiffThresholdPercent'] = {
            ['baseType'] = 'S16',
            ['usage'] = {'CSR'},
            ['description'] = '风扇组转速差阈值百分比,默认值表示不进行转速差计算',
            ['default'] = 32767,
            ['validator'] = basic_cooling_config_class_types.FanGroupSpeedDiffThresholdPercent
        },
        ['PsuFanSpeedCalibration'] = {
            ['baseType'] = 'S16',
            ['usage'] = {'CSR'},
            ['description'] = 'psu风扇转速校准值，默认值表示不进行psu转速下发',
            ['default'] = 32767,
            ['validator'] = basic_cooling_config_class_types.PsuFanSpeedCalibration
        },
        ['Id'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'U8',
            ['primaryKey'] = true,
            ['default'] = 1,
            ['validator'] = basic_cooling_config_class_types.Id
        }
    },
    ['default_props'] = {
        ['FanGroupSpeedDiffThresholdPercent'] = 32767,
        ['PsuFanSpeedCalibration'] = 32767,
        ['Id'] = 1
    }
}

local FanGroup = {
    ['table_name'] = 't_fan_group',
    ['prop_configs'] = {
        ['ResetSpeedPercent'] = {
            ['default'] = 100,
            ['usage'] = {'CSR'},
            ['baseType'] = 'U8',
            ['description'] = 'BMC重启转速比',
            ['validator'] = fan_group_class_types.ResetSpeedPercent
        }
    },
    ['default_props'] = {['ResetSpeedPercent'] = 100},
    ['mdb_prop_configs'] = {
        ['bmc.kepler.Chassis.FanGroup'] = {
            ['Id'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'const'},
                ['description'] = '风扇组Id',
                ['usage'] = {'CSR'},
                ['primaryKey'] = true,
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = fan_group_intf_types.Id
            },
            ['FanSlots'] = {
                ['baseType'] = 'U8[]',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['description'] = '风扇组内槽位号',
                ['usage'] = {'CSR'},
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = fan_group_intf_types.FanSlots
            },
            ['SpeedPercent'] = {
                ['baseType'] = 'Double',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['description'] = '基于风扇组内风扇修正后的转速，并统一下发至所有风扇',
                ['usage'] = {'CSR'},
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = fan_group_intf_types.SpeedPercent
            },
            ['ExpectedSpeedPercent'] = {
                ['baseType'] = 'Double',
                ['readOnly'] = false,
                ['options'] = {['emitsChangedSignal'] = 'true'},
                ['description'] = '风扇组分组下发转速',
                ['usage'] = {'ResetPer'},
                ['privilege'] = {
                    ['read'] = {'ReadOnly'},
                    ['write'] = {'BasicSetting'}
                },
                ['validator'] = fan_group_intf_types.ExpectedSpeedPercent
            }
        },
        ['bmc.kepler.Object.Properties'] = {
            ['ClassName'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '对象类名',
                ['validator'] = properties_intf_types.ClassName
            },
            ['ObjectName'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '对象名',
                ['validator'] = properties_intf_types.ObjectName
            },
            ['ObjectIdentifier'] = {
                ['baseType'] = 'Struct',
                ['$ref'] = '#/defs/StructIdentifier',
                ['readOnly'] = true,
                ['description'] = '对象标志符',
                ['validator'] = properties_intf_types.ObjectIdentifier
            }
        }
    },
    ['mdb_method_configs'] = {
        ['bmc.kepler.Object.Properties'] = {
            ['GetOptions'] = {
                ['req'] = {
                    {
                        ['baseType'] = 'String',
                        ['description'] = '接口名',
                        ['param'] = 'Interface'
                    }, {
                        ['baseType'] = 'String',
                        ['description'] = '属性名',
                        ['param'] = 'Property'
                    }
                },
                ['rsp'] = {
                    {
                        ['baseType'] = 'Struct',
                        ['$ref'] = '#/defs/Options',
                        ['description'] = '属性能力选项，例如是否弃用、是否是易变属性等',
                        ['param'] = 'Options'
                    }
                },
                ['description'] = '按接口名和属性名查询属性的能力选项'
            },
            ['GetPropertiesByOptions'] = {
                ['req'] = {
                    {
                        ['baseType'] = 'String',
                        ['description'] = '接口名',
                        ['param'] = 'Interface'
                    }, {
                        ['baseType'] = 'Struct',
                        ['$ref'] = '#/defs/Options',
                        ['description'] = '属性能力选项，例如是否弃用、是否是易变属性等',
                        ['param'] = 'Options'
                    }
                },
                ['rsp'] = {
                    {
                        ['baseType'] = 'String[]',
                        ['description'] = '属性名列表',
                        ['param'] = 'Properties'
                    }
                },
                ['description'] = '按接口名和能力选项查询符合条件的所有属性'
            }
        }
    },
    ['mdb_classes'] = mdb.get_class_obj(
        '/bmc/kepler/Chassis/:ChassisId/ThermalSubsystem/FanGroups/:Id'),
    ['new_mdb_objects'] = mdb.new_objects_builder({
        ['bmc.kepler.Chassis.FanGroup'] = {
            ['property_defaults'] = {
                ['Id'] = fan_group_intf_types.Id.default[1],
                ['FanSlots'] = fan_group_intf_types.FanSlots.default[1],
                ['SpeedPercent'] = fan_group_intf_types.SpeedPercent.default[1],
                ['ExpectedSpeedPercent'] = fan_group_intf_types.ExpectedSpeedPercent
                    .default[1]
            },
            ['privileges'] = {
                ['props'] = {
                    ['Id'] = {['read'] = privilege.ReadOnly},
                    ['FanSlots'] = {['read'] = privilege.ReadOnly},
                    ['SpeedPercent'] = {['read'] = privilege.ReadOnly},
                    ['ExpectedSpeedPercent'] = {
                        ['read'] = privilege.ReadOnly,
                        ['write'] = privilege.BasicSetting
                    }
                }
            },
            ['interface_types'] = fan_group_intf_types
        },
        ['bmc.kepler.Object.Properties'] = {
            ['property_defaults'] = {
                ['ClassName'] = properties_intf_types.ClassName.default[1],
                ['ObjectName'] = properties_intf_types.ObjectName.default[1],
                ['ObjectIdentifier'] = properties_intf_types.ObjectIdentifier
                    .default[1]
            },
            ['interface_types'] = properties_intf_types
        }
    })
}

local FanGroupPolicy = {
    ['table_name'] = 't_fan_group_policy',
    ['prop_configs'] = {
        ['Id'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'U8',
            ['primaryKey'] = true,
            ['validator'] = fan_group_policy_class_types.Id
        },
        ['PolicyType'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'U8',
            ['description'] = '策略类型:1:FanGroupIds中各风扇组之间的转速差不超过SpeedPercentDifference' ..
                '; 2:FanGroupIds中各风扇组的转速比RelativeGroupIds的转速高至少SpeedPercentDifference',
            ['default'] = 0,
            ['validator'] = fan_group_policy_class_types.PolicyType
        },
        ['FanGroupIds'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'U8[]',
            ['description'] = '风扇组id列表',
            ['validator'] = fan_group_policy_class_types.FanGroupIds
        },
        ['RelativeGroupIds'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'U8[]',
            ['description'] = '相关风扇组id列表',
            ['validator'] = fan_group_policy_class_types.RelativeGroupIds
        },
        ['SpeedPercentDifference'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'S16',
            ['description'] = '转速差',
            ['default'] = 32767,
            ['validator'] = fan_group_policy_class_types.SpeedPercentDifference
        }
    },
    ['default_props'] = {
        ['Id'] = fan_group_policy_class_types.Id.default[1],
        ['PolicyType'] = 0,
        ['FanGroupIds'] = fan_group_policy_class_types.FanGroupIds.default[1],
        ['RelativeGroupIds'] = fan_group_policy_class_types.RelativeGroupIds
            .default[1],
        ['SpeedPercentDifference'] = 32767
    }
}

local PumpGroup = {
    ['table_name'] = 't_pump_group',
    ['mdb_prop_configs'] = {
        ['bmc.kepler.Chassis.PumpGroup'] = {
            ['Id'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'const'},
                ['description'] = '泵组Id',
                ['usage'] = {'CSR'},
                ['primaryKey'] = true,
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = pump_group_intf_types.Id
            },
            ['PumpSlots'] = {
                ['baseType'] = 'U8[]',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['description'] = '泵组内槽位号',
                ['usage'] = {'CSR'},
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = pump_group_intf_types.PumpSlots
            },
            ['SpeedPercent'] = {
                ['baseType'] = 'Double',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['description'] = '泵修正后的实际转速百分比',
                ['usage'] = {'CSR'},
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = pump_group_intf_types.SpeedPercent
            },
            ['ExpectedSpeedPercent'] = {
                ['baseType'] = 'Double',
                ['readOnly'] = false,
                ['options'] = {['emitsChangedSignal'] = 'true'},
                ['description'] = '泵组分组下发转速百分比',
                ['usage'] = {'ResetPer'},
                ['privilege'] = {
                    ['read'] = {'ReadOnly'},
                    ['write'] = {'BasicSetting'}
                },
                ['validator'] = pump_group_intf_types.ExpectedSpeedPercent
            }
        },
        ['bmc.kepler.Object.Properties'] = {
            ['ClassName'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '对象类名',
                ['validator'] = properties_intf_types.ClassName
            },
            ['ObjectName'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '对象名',
                ['validator'] = properties_intf_types.ObjectName
            },
            ['ObjectIdentifier'] = {
                ['baseType'] = 'Struct',
                ['$ref'] = '#/defs/StructIdentifier',
                ['readOnly'] = true,
                ['description'] = '对象标志符',
                ['validator'] = properties_intf_types.ObjectIdentifier
            }
        }
    },
    ['mdb_method_configs'] = {
        ['bmc.kepler.Object.Properties'] = {
            ['GetOptions'] = {
                ['req'] = {
                    {
                        ['baseType'] = 'String',
                        ['description'] = '接口名',
                        ['param'] = 'Interface'
                    }, {
                        ['baseType'] = 'String',
                        ['description'] = '属性名',
                        ['param'] = 'Property'
                    }
                },
                ['rsp'] = {
                    {
                        ['baseType'] = 'Struct',
                        ['$ref'] = '#/defs/Options',
                        ['description'] = '属性能力选项，例如是否弃用、是否是易变属性等',
                        ['param'] = 'Options'
                    }
                },
                ['description'] = '按接口名和属性名查询属性的能力选项'
            },
            ['GetPropertiesByOptions'] = {
                ['req'] = {
                    {
                        ['baseType'] = 'String',
                        ['description'] = '接口名',
                        ['param'] = 'Interface'
                    }, {
                        ['baseType'] = 'Struct',
                        ['$ref'] = '#/defs/Options',
                        ['description'] = '属性能力选项，例如是否弃用、是否是易变属性等',
                        ['param'] = 'Options'
                    }
                },
                ['rsp'] = {
                    {
                        ['baseType'] = 'String[]',
                        ['description'] = '属性名列表',
                        ['param'] = 'Properties'
                    }
                },
                ['description'] = '按接口名和能力选项查询符合条件的所有属性'
            }
        }
    },
    ['mdb_classes'] = mdb.get_class_obj(
        '/bmc/kepler/Chassis/:ChassisId/ThermalSubsystem/PumpGroups/:Id'),
    ['new_mdb_objects'] = mdb.new_objects_builder({
        ['bmc.kepler.Chassis.PumpGroup'] = {
            ['property_defaults'] = {
                ['Id'] = pump_group_intf_types.Id.default[1],
                ['PumpSlots'] = pump_group_intf_types.PumpSlots.default[1],
                ['SpeedPercent'] = pump_group_intf_types.SpeedPercent.default[1],
                ['ExpectedSpeedPercent'] = pump_group_intf_types.ExpectedSpeedPercent
                    .default[1]
            },
            ['privileges'] = {
                ['path'] = privilege.ReadOnly,
                ['props'] = {
                    ['Id'] = {['read'] = privilege.ReadOnly},
                    ['PumpSlots'] = {['read'] = privilege.ReadOnly},
                    ['SpeedPercent'] = {['read'] = privilege.ReadOnly},
                    ['ExpectedSpeedPercent'] = {
                        ['read'] = privilege.ReadOnly,
                        ['write'] = privilege.BasicSetting
                    }
                }
            },
            ['interface_types'] = pump_group_intf_types
        },
        ['bmc.kepler.Object.Properties'] = {
            ['property_defaults'] = {
                ['ClassName'] = properties_intf_types.ClassName.default[1],
                ['ObjectName'] = properties_intf_types.ObjectName.default[1],
                ['ObjectIdentifier'] = properties_intf_types.ObjectIdentifier
                    .default[1]
            },
            ['privileges'] = {['path'] = privilege.ReadOnly},
            ['interface_types'] = properties_intf_types
        }
    })
}

local CoolingConfig = {
    ['table_name'] = 't_cooling_config',
    ['prop_configs'] = {
        ['Id'] = {
            ['baseType'] = 'U8',
            ['primaryKey'] = true,
            ['usage'] = {'PoweroffPer'},
            ['notAllowNull'] = true,
            ['validator'] = cooling_config_class_types.Id
        },
        ['MinimalLevel'] = {
            ['baseType'] = 'U8',
            ['default'] = 20,
            ['validator'] = cooling_config_class_types.MinimalLevel
        },
        ['MaxLimitLevel'] = {
            ['baseType'] = 'U8',
            ['default'] = 100,
            ['validator'] = cooling_config_class_types.MaxLimitLevel
        },
        ['FanLevel'] = {
            ['baseType'] = 'U8',
            ['default'] = 20,
            ['validator'] = cooling_config_class_types.FanLevel
        },
        ['FanCtrlEnable'] = {
            ['baseType'] = 'String',
            ['default'] = 'Enabled',
            ['pattern'] = [=[^(Enabled|Disabled)$]=],
            ['validator'] = cooling_config_class_types.FanCtrlEnable
        },
        ['CoolingWay'] = {
            ['baseType'] = 'String',
            ['default'] = 'Proactive',
            ['pattern'] = [=[^(Proactive|Passive)$]=],
            ['validator'] = cooling_config_class_types.CoolingWay
        },
        ['FanBoardNum'] = {
            ['baseType'] = 'U8',
            ['usage'] = {'CSR'},
            ['default'] = 1,
            ['validator'] = cooling_config_class_types.FanBoardNum
        },
        ['OriginalSmartCoolingMode'] = {
            ['baseType'] = 'String',
            ['usage'] = {'PoweroffPer'},
            ['default'] = '',
            ['validator'] = cooling_config_class_types.OriginalSmartCoolingMode
        },
        ['InitLevelInStartup'] = {
            ['usage'] = {'CSR', 'PoweroffPer'},
            ['baseType'] = 'U8',
            ['minimum'] = 0,
            ['maximum'] = 100,
            ['default'] = 100,
            ['notAllowNull'] = true,
            ['validator'] = cooling_config_class_types.InitLevelInStartup
        }
    },
    ['default_props'] = {
        ['Id'] = cooling_config_class_types.Id.default[1],
        ['MinimalLevel'] = 20,
        ['MaxLimitLevel'] = 100,
        ['FanLevel'] = 20,
        ['FanCtrlEnable'] = 'Enabled',
        ['CoolingWay'] = 'Proactive',
        ['FanBoardNum'] = 1,
        ['OriginalSmartCoolingMode'] = '',
        ['InitLevelInStartup'] = 100
    },
    ['mdb_prop_configs'] = {
        ['bmc.kepler.Systems.CoolingConfig'] = {
            ['SmartCoolingState'] = {
                ['baseType'] = 'String',
                ['default'] = 'Enabled',
                ['readOnly'] = true,
                ['enum'] = {'Enabled', 'Disabled'},
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['description'] = '智能调速使能状态',
                ['usage'] = {'CSR', 'PoweroffPer'},
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = cooling_config_intf_types.SmartCoolingState
            },
            ['SmartCoolingMode'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['default'] = 'EnergySaving',
                ['description'] = '智能调速模式',
                ['usage'] = {'CSR', 'PoweroffPer'},
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = cooling_config_intf_types.SmartCoolingMode
            },
            ['Medium'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['default'] = 'Air',
                ['enum'] = {'Air', 'Liquid', 'Air/Liquid'},
                ['description'] = '散热介质（风/液/风液混合）',
                ['usage'] = {'PoweroffPer'},
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = cooling_config_intf_types.Medium
            },
            ['CtrlMode'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['default'] = 'Auto',
                ['enum'] = {'Auto', 'Manual', 'Mixed'},
                ['options'] = {['emitsChangedSignal'] = 'true'},
                ['description'] = '冷却单元的控制模式（自动/手动/混合）',
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = cooling_config_intf_types.CtrlMode
            },
            ['TimeOut'] = {
                ['baseType'] = 'U32',
                ['readOnly'] = true,
                ['default'] = 30,
                ['options'] = {
                    ['emitsChangedSignal'] = 'false',
                    ['volatile'] = true
                },
                ['description'] = '手动模式下的风扇超时时间',
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = cooling_config_intf_types.TimeOut
            },
            ['ManualLevel'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'true'},
                ['default'] = 10,
                ['description'] = '手动模式下的风扇转速级别',
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = cooling_config_intf_types.ManualLevel
            },
            ['LevelPercentRange'] = {
                ['baseType'] = 'U8[]',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'const'},
                ['description'] = '手动设置转速级别允许范围',
                ['usage'] = {'CSR'},
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = cooling_config_intf_types.LevelPercentRange
            },
            ['SensorLocationSupported'] = {
                ['baseType'] = 'Boolean',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'const'},
                ['default'] = false,
                ['description'] = '是否支持温度海洋界面显示',
                ['usage'] = {'CSR'},
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = cooling_config_intf_types.SensorLocationSupported
            },
            ['MinAllowedFanSpeedPercent'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = false,
                ['default'] = 255,
                ['options'] = {['emitsChangedSignal'] = 'true'},
                ['description'] = '失联状态场景风扇转速级别',
                ['usage'] = {'PoweroffPer'},
                ['privilege'] = {
                    ['read'] = {'ReadOnly'},
                    ['write'] = {'BasicSetting'}
                },
                ['validator'] = cooling_config_intf_types.MinAllowedFanSpeedPercent
            },
            ['MixedModeSupported'] = {
                ['baseType'] = 'Boolean',
                ['readOnly'] = true,
                ['default'] = false,
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['description'] = '是否支持混合模式场景，true：支持混合模式，false：不支持混合模式',
                ['usage'] = {'CSR'},
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = cooling_config_intf_types.MixedModeSupported
            }
        },
        ['bmc.kepler.Systems.DiskCoolingConfig'] = {
            ['DiskRowTemperatureAvailable'] = {
                ['baseType'] = 'Boolean',
                ['default'] = false,
                ['readOnly'] = true,
                ['description'] = '背板上硬盘温度是否能正常获取',
                ['usage'] = {'CSR'},
                ['validator'] = disk_cooling_config_intf_types.DiskRowTemperatureAvailable
            },
            ['SysHDDsMaxTemperature'] = {
                ['baseType'] = 'Double',
                ['default'] = 32768,
                ['readOnly'] = true,
                ['description'] = 'HDD硬盘最大温度, 单位:摄氏度',
                ['usage'] = {'CSR'},
                ['validator'] = disk_cooling_config_intf_types.SysHDDsMaxTemperature
            },
            ['SysSSDsMaxTemperature'] = {
                ['baseType'] = 'Double',
                ['default'] = 32768,
                ['readOnly'] = true,
                ['description'] = 'SSD硬盘最大温度(仅SAS/SATA), 单位:摄氏度',
                ['usage'] = {'CSR'},
                ['validator'] = disk_cooling_config_intf_types.SysSSDsMaxTemperature
            },
            ['SysM2sMaxTemperature'] = {
                ['baseType'] = 'Double',
                ['default'] = 32768,
                ['readOnly'] = true,
                ['description'] = 'M.2硬盘最大温度, 单位:摄氏度',
                ['usage'] = {'CSR'},
                ['validator'] = disk_cooling_config_intf_types.SysM2sMaxTemperature
            },
            ['SysAllSSDsMaxTemperature'] = {
                ['baseType'] = 'Double',
                ['default'] = 32768,
                ['readOnly'] = true,
                ['description'] = '所有SDD介质硬盘的最大温度, 单位:摄氏度',
                ['usage'] = {'CSR'},
                ['validator'] = disk_cooling_config_intf_types.SysAllSSDsMaxTemperature
            }
        },
        ['bmc.kepler.Object.Properties'] = {
            ['ClassName'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '对象类名',
                ['validator'] = properties_intf_types.ClassName
            },
            ['ObjectName'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '对象名',
                ['validator'] = properties_intf_types.ObjectName
            },
            ['ObjectIdentifier'] = {
                ['baseType'] = 'Struct',
                ['$ref'] = '#/defs/StructIdentifier',
                ['readOnly'] = true,
                ['description'] = '对象标志符',
                ['validator'] = properties_intf_types.ObjectIdentifier
            }
        }
    },
    ['mdb_method_configs'] = {
        ['bmc.kepler.Systems.CoolingConfig'] = {
            ['SetCtrlMode'] = {
                ['description'] = '设置冷却单元控制模式',
                ['req'] = {
                    {
                        ['description'] = '冷却单元控制模式',
                        ['baseType'] = 'String',
                        ['param'] = 'CtrlMode'
                    },
                    {
                        ['description'] = '超时时长',
                        ['baseType'] = 'U32',
                        ['param'] = 'Timeout'
                    }
                },
                ['privilege'] = {'BasicSetting'}
            },
            ['SetManualLevel'] = {
                ['description'] = '设置手动模式冷却级别',
                ['req'] = {
                    {
                        ['description'] = '冷却单元Id',
                        ['baseType'] = 'U8',
                        ['param'] = 'UnitId'
                    }, {
                        ['description'] = '设置的转速级别',
                        ['baseType'] = 'U8',
                        ['param'] = 'Level'
                    }
                },
                ['privilege'] = {'BasicSetting'}
            },
            ['SetMedium'] = {
                ['description'] = '设置散热介质类型',
                ['req'] = {
                    {
                        ['baseType'] = 'String',
                        ['pattern'] = [=[^(Air|Liquid)$]=],
                        ['description'] = '散热介质类型：Air或Liquid',
                        ['param'] = 'Medium'
                    }
                },
                ['privilege'] = {'BasicSetting'}
            },
            ['SetSmartCoolingMode'] = {
                ['description'] = '设置智能调速模式',
                ['req'] = {
                    {
                        ['baseType'] = 'String',
                        ['description'] = '智能调速模式，取值为：Custom、HighPerformance、LowNoise、EnergySaving或LiquidCooling',
                        ['param'] = 'Mode'
                    }
                },
                ['privilege'] = {'BasicSetting'}
            },
            ['GetAbnormalPolicyEffectiveStatus'] = {
                ['description'] = '获取异常调速策略生效状态',
                ['req'] = {
                    {
                        ['description'] = '异常调速类型, Fan, Pump, Temperature, All',
                        ['baseType'] = 'String',
                        ['enum'] = {'Fan', 'Pump', 'Temperature', 'All'},
                        ['param'] = 'PolicyType'
                    }
                },
                ['rsp'] = {
                    {
                        ['description'] = '异常调速策略生效状态, true:触发异常调速, false:未触发异常调速',
                        ['baseType'] = 'Boolean',
                        ['param'] = 'EffectiveStatus'
                    }
                },
                ['privilege'] = {'ReadOnly'}
            },
            ['SetMinPWM'] = {
                ['description'] = '设置转速下限值',
                ['req'] = {
                    {
                        ['baseType'] = 'String',
                        ['pattern'] = [=[^(Fan|Pump)$]=],
                        ['enum'] = {'Fan', 'Pump'},
                        ['description'] = '散热设备类型',
                        ['param'] = 'DeviceType'
                    }, {
                        ['baseType'] = 'U8[]',
                        ['description'] = '散热设备Id数组',
                        ['param'] = 'DeviceIds'
                    }, {
                        ['baseType'] = 'U8[]',
                        ['description'] = '散热设备转速数组',
                        ['param'] = 'DeviceSpeeds'
                    }
                },
                ['rsp'] = {},
                ['privilege'] = {'BasicSetting'}
            },
            ['GetComponentThermalZone'] = {
                ['description'] = '获取指定温度点器件类型与散热器件对应关系',
                ['req'] = {
                    {
                        ['baseType'] = 'String',
                        ['description'] = '温度器件类型',
                        ['param'] = 'ComponentType'
                    }
                },
                ['rsp'] = {
                    {
                        ['baseType'] = 'Array',
                        ['items'] = {['$ref'] = '#/defs/ComponentThermalZone'},
                        ['description'] = '指定温度器件对应散热器件数组',
                        ['param'] = 'ComponentThermalZone'
                    }
                },
                ['privilege'] = {'ReadOnly'}
            },
            ['GetCustomTargetTemperatures'] = {
                ['description'] = '获取自定义目标温度点',
                ['privilege'] = {'ReadOnly'},
                ['req'] = {},
                ['rsp'] = {
                    {
                        ['baseType'] = 'Array',
                        ['items'] = {
                            ['$ref'] = '#/defs/CustomTargetTemperatureItem'
                        },
                        ['description'] = '自定义目标温度点数组',
                        ['param'] = 'CustomTargetTemperatures'
                    }
                }
            }
        },
        ['bmc.kepler.Object.Properties'] = {
            ['GetOptions'] = {
                ['req'] = {
                    {
                        ['baseType'] = 'String',
                        ['description'] = '接口名',
                        ['param'] = 'Interface'
                    }, {
                        ['baseType'] = 'String',
                        ['description'] = '属性名',
                        ['param'] = 'Property'
                    }
                },
                ['rsp'] = {
                    {
                        ['baseType'] = 'Struct',
                        ['$ref'] = '#/defs/Options',
                        ['description'] = '属性能力选项，例如是否弃用、是否是易变属性等',
                        ['param'] = 'Options'
                    }
                },
                ['description'] = '按接口名和属性名查询属性的能力选项'
            },
            ['GetPropertiesByOptions'] = {
                ['req'] = {
                    {
                        ['baseType'] = 'String',
                        ['description'] = '接口名',
                        ['param'] = 'Interface'
                    }, {
                        ['baseType'] = 'Struct',
                        ['$ref'] = '#/defs/Options',
                        ['description'] = '属性能力选项，例如是否弃用、是否是易变属性等',
                        ['param'] = 'Options'
                    }
                },
                ['rsp'] = {
                    {
                        ['baseType'] = 'String[]',
                        ['description'] = '属性名列表',
                        ['param'] = 'Properties'
                    }
                },
                ['description'] = '按接口名和能力选项查询符合条件的所有属性'
            }
        }
    },
    ['mdb_classes'] = mdb.get_class_obj(
        '/bmc/kepler/Systems/:SystemId/CoolingConfig'),
    ['new_mdb_objects'] = mdb.new_objects_builder({
        ['bmc.kepler.Systems.CoolingConfig'] = {
            ['property_defaults'] = {
                ['SmartCoolingState'] = 'Enabled',
                ['SmartCoolingMode'] = 'EnergySaving',
                ['Medium'] = 'Air',
                ['CtrlMode'] = 'Auto',
                ['TimeOut'] = 30,
                ['ManualLevel'] = 10,
                ['LevelPercentRange'] = cooling_config_intf_types.LevelPercentRange
                    .default[1],
                ['SensorLocationSupported'] = false,
                ['MinAllowedFanSpeedPercent'] = 255,
                ['MixedModeSupported'] = false
            },
            ['privileges'] = {
                ['path'] = privilege.ReadOnly,
                ['props'] = {
                    ['SmartCoolingState'] = {['read'] = privilege.ReadOnly},
                    ['SmartCoolingMode'] = {['read'] = privilege.ReadOnly},
                    ['Medium'] = {['read'] = privilege.ReadOnly},
                    ['CtrlMode'] = {['read'] = privilege.ReadOnly},
                    ['TimeOut'] = {['read'] = privilege.ReadOnly},
                    ['ManualLevel'] = {['read'] = privilege.ReadOnly},
                    ['LevelPercentRange'] = {['read'] = privilege.ReadOnly},
                    ['SensorLocationSupported'] = {
                        ['read'] = privilege.ReadOnly
                    },
                    ['MinAllowedFanSpeedPercent'] = {
                        ['read'] = privilege.ReadOnly,
                        ['write'] = privilege.BasicSetting
                    },
                    ['MixedModeSupported'] = {['read'] = privilege.ReadOnly}
                },
                ['methods'] = {
                    ['SetCtrlMode'] = privilege.BasicSetting,
                    ['SetManualLevel'] = privilege.BasicSetting,
                    ['SetMedium'] = privilege.BasicSetting,
                    ['SetSmartCoolingMode'] = privilege.BasicSetting,
                    ['GetAbnormalPolicyEffectiveStatus'] = privilege.ReadOnly,
                    ['SetMinPWM'] = privilege.BasicSetting,
                    ['GetComponentThermalZone'] = privilege.ReadOnly,
                    ['GetCustomTargetTemperatures'] = privilege.ReadOnly
                }
            },
            ['interface_types'] = cooling_config_intf_types
        },
        ['bmc.kepler.Systems.DiskCoolingConfig'] = {
            ['property_defaults'] = {
                ['DiskRowTemperatureAvailable'] = false,
                ['SysHDDsMaxTemperature'] = 32768,
                ['SysSSDsMaxTemperature'] = 32768,
                ['SysM2sMaxTemperature'] = 32768,
                ['SysAllSSDsMaxTemperature'] = 32768
            },
            ['privileges'] = {
                ['path'] = privilege.ReadOnly,
                ['interface'] = privilege.ReadOnly
            },
            ['interface_types'] = disk_cooling_config_intf_types
        },
        ['bmc.kepler.Object.Properties'] = {
            ['property_defaults'] = {
                ['ClassName'] = properties_intf_types.ClassName.default[1],
                ['ObjectName'] = properties_intf_types.ObjectName.default[1],
                ['ObjectIdentifier'] = properties_intf_types.ObjectIdentifier
                    .default[1]
            },
            ['privileges'] = {['path'] = privilege.ReadOnly},
            ['interface_types'] = properties_intf_types
        }
    })
}

local AirCoolingConfig = {
    ['table_name'] = 't_cooling_fans_config',
    ['prop_configs'] = {
        ['Id'] = {
            ['baseType'] = 'U8',
            ['primaryKey'] = true,
            ['usage'] = {'PoweroffPer'},
            ['validator'] = air_cooling_config_class_types.Id
        }
    },
    ['default_props'] = {['Id'] = air_cooling_config_class_types.Id.default[1]},
    ['mdb_prop_configs'] = {
        ['bmc.kepler.Systems.AirCoolingConfig'] = {
            ['CtrlMode'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['default'] = 'Auto',
                ['enum'] = {'Auto', 'Manual', 'Mixed'},
                ['options'] = {['emitsChangedSignal'] = 'true'},
                ['description'] = '风扇控制模式（自动/手动/混合）',
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = air_cooling_config_intf_types.CtrlMode
            },
            ['TimeOut'] = {
                ['baseType'] = 'U32',
                ['readOnly'] = true,
                ['default'] = 30,
                ['options'] = {
                    ['emitsChangedSignal'] = 'false',
                    ['volatile'] = true
                },
                ['description'] = '手动模式下的超时时间',
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = air_cooling_config_intf_types.TimeOut
            },
            ['ManualSpeedPercent'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'true'},
                ['minimum'] = 0,
                ['maximum'] = 100,
                ['default'] = 10,
                ['description'] = '手动模式下的转速级别',
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = air_cooling_config_intf_types.ManualSpeedPercent
            },
            ['SpeedPercentRange'] = {
                ['baseType'] = 'U8[]',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'const'},
                ['description'] = '手动设置转速级别允许范围',
                ['usage'] = {'CSR'},
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = air_cooling_config_intf_types.SpeedPercentRange
            },
            ['MinAllowedSpeedPercent'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = false,
                ['default'] = 255,
                ['options'] = {['emitsChangedSignal'] = 'true'},
                ['description'] = '失联状态场景风扇转速级别',
                ['usage'] = {'PoweroffPer'},
                ['privilege'] = {
                    ['read'] = {'ReadOnly'},
                    ['write'] = {'BasicSetting'}
                },
                ['validator'] = air_cooling_config_intf_types.MinAllowedSpeedPercent
            },
            ['InitialSpeedPercent'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = false,
                ['default'] = 100,
                ['minimum'] = 0,
                ['maximum'] = 100,
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['description'] = '开机风扇初始转速百分比',
                ['usage'] = {'CSR', 'PoweroffPer'},
                ['privilege'] = {
                    ['read'] = {'ReadOnly'},
                    ['write'] = {'BasicSetting'}
                },
                ['validator'] = air_cooling_config_intf_types.InitialSpeedPercent
            }
        },
        ['bmc.kepler.Systems.FanSnapshot'] = {},
        ['bmc.kepler.Object.Properties'] = {
            ['ClassName'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '对象类名',
                ['validator'] = properties_intf_types.ClassName
            },
            ['ObjectName'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '对象名',
                ['validator'] = properties_intf_types.ObjectName
            },
            ['ObjectIdentifier'] = {
                ['baseType'] = 'Struct',
                ['$ref'] = '#/defs/StructIdentifier',
                ['readOnly'] = true,
                ['description'] = '对象标志符',
                ['validator'] = properties_intf_types.ObjectIdentifier
            }
        }
    },
    ['mdb_method_configs'] = {
        ['bmc.kepler.Systems.AirCoolingConfig'] = {
            ['SetCtrlMode'] = {
                ['description'] = '设置风扇控制模式',
                ['privilege'] = {'BasicSetting'},
                ['req'] = {
                    {
                        ['description'] = '风扇控制模式',
                        ['baseType'] = 'String',
                        ['enum'] = {'Auto', 'Manual', 'Mixed'},
                        ['param'] = 'CtrlMode'
                    },
                    {
                        ['description'] = '超时时长',
                        ['baseType'] = 'U32',
                        ['param'] = 'Timeout'
                    }
                }
            },
            ['SetManualSpeedPercent'] = {
                ['description'] = '设置风扇手动模式转速百分比',
                ['privilege'] = {'BasicSetting'},
                ['req'] = {
                    {
                        ['description'] = '风扇Id',
                        ['baseType'] = 'U8',
                        ['param'] = 'FanId'
                    }, {
                        ['description'] = '风扇转速百分比',
                        ['baseType'] = 'U8',
                        ['param'] = 'SpeedPercent'
                    }
                }
            }
        },
        ['bmc.kepler.Systems.FanSnapshot'] = {
            ['GetActivatedPolicyFactors'] = {
                ['description'] = '获取已激活的风扇转速最高的调速策略因子',
                ['req'] = {},
                ['rsp'] = {
                    {
                        ['baseType'] = 'Struct',
                        ['$ref'] = '#/defs/FanSnapshot',
                        ['description'] = '返回的数据，数据内容包括：ValidFlag、ActivatedType、PWM和FactorName',
                        ['param'] = 'RetData'
                    }
                },
                ['privilege'] = {'ReadOnly'}
            }
        },
        ['bmc.kepler.Object.Properties'] = {
            ['GetOptions'] = {
                ['req'] = {
                    {
                        ['baseType'] = 'String',
                        ['description'] = '接口名',
                        ['param'] = 'Interface'
                    }, {
                        ['baseType'] = 'String',
                        ['description'] = '属性名',
                        ['param'] = 'Property'
                    }
                },
                ['rsp'] = {
                    {
                        ['baseType'] = 'Struct',
                        ['$ref'] = '#/defs/Options',
                        ['description'] = '属性能力选项，例如是否弃用、是否是易变属性等',
                        ['param'] = 'Options'
                    }
                },
                ['description'] = '按接口名和属性名查询属性的能力选项'
            },
            ['GetPropertiesByOptions'] = {
                ['req'] = {
                    {
                        ['baseType'] = 'String',
                        ['description'] = '接口名',
                        ['param'] = 'Interface'
                    }, {
                        ['baseType'] = 'Struct',
                        ['$ref'] = '#/defs/Options',
                        ['description'] = '属性能力选项，例如是否弃用、是否是易变属性等',
                        ['param'] = 'Options'
                    }
                },
                ['rsp'] = {
                    {
                        ['baseType'] = 'String[]',
                        ['description'] = '属性名列表',
                        ['param'] = 'Properties'
                    }
                },
                ['description'] = '按接口名和能力选项查询符合条件的所有属性'
            }
        }
    },
    ['mdb_classes'] = mdb.get_class_obj(
        '/bmc/kepler/Systems/:SystemId/AirCoolingConfig'),
    ['new_mdb_objects'] = mdb.new_objects_builder({
        ['bmc.kepler.Systems.AirCoolingConfig'] = {
            ['property_defaults'] = {
                ['CtrlMode'] = 'Auto',
                ['TimeOut'] = 30,
                ['ManualSpeedPercent'] = 10,
                ['SpeedPercentRange'] = air_cooling_config_intf_types.SpeedPercentRange
                    .default[1],
                ['MinAllowedSpeedPercent'] = 255,
                ['InitialSpeedPercent'] = 100
            },
            ['privileges'] = {
                ['path'] = privilege.ReadOnly,
                ['props'] = {
                    ['CtrlMode'] = {['read'] = privilege.ReadOnly},
                    ['TimeOut'] = {['read'] = privilege.ReadOnly},
                    ['ManualSpeedPercent'] = {['read'] = privilege.ReadOnly},
                    ['SpeedPercentRange'] = {['read'] = privilege.ReadOnly},
                    ['MinAllowedSpeedPercent'] = {
                        ['read'] = privilege.ReadOnly,
                        ['write'] = privilege.BasicSetting
                    },
                    ['InitialSpeedPercent'] = {
                        ['read'] = privilege.ReadOnly,
                        ['write'] = privilege.BasicSetting
                    }
                },
                ['methods'] = {
                    ['SetCtrlMode'] = privilege.BasicSetting,
                    ['SetManualSpeedPercent'] = privilege.BasicSetting
                }
            },
            ['interface_types'] = air_cooling_config_intf_types
        },
        ['bmc.kepler.Systems.FanSnapshot'] = {
            ['property_defaults'] = {},
            ['privileges'] = {
                ['path'] = privilege.ReadOnly,
                ['methods'] = {
                    ['GetActivatedPolicyFactors'] = privilege.ReadOnly
                }
            },
            ['interface_types'] = fan_snapshot_intf_types
        },
        ['bmc.kepler.Object.Properties'] = {
            ['property_defaults'] = {
                ['ClassName'] = properties_intf_types.ClassName.default[1],
                ['ObjectName'] = properties_intf_types.ObjectName.default[1],
                ['ObjectIdentifier'] = properties_intf_types.ObjectIdentifier
                    .default[1]
            },
            ['privileges'] = {['path'] = privilege.ReadOnly},
            ['interface_types'] = properties_intf_types
        }
    })
}

local LiquidCoolingConfig = {
    ['prop_configs'] = {
        ['MaxPumpNum'] = {
            ['baseType'] = 'U8',
            ['usage'] = {'CSR'},
            ['default'] = 0,
            ['validator'] = liquid_cooling_config_class_types.MaxPumpNum
        }
    },
    ['default_props'] = {['MaxPumpNum'] = 0},
    ['mdb_prop_configs'] = {
        ['bmc.kepler.Systems.LiquidCoolingConfig'] = {
            ['CtrlMode'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['default'] = 'Auto',
                ['enum'] = {'Auto', 'Manual', 'Mixed'},
                ['options'] = {['emitsChangedSignal'] = 'true'},
                ['description'] = '冷却单元的控制模式（自动/手动/混合）',
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = liquid_cooling_config_intf_types.CtrlMode
            },
            ['TimeOut'] = {
                ['baseType'] = 'U32',
                ['readOnly'] = true,
                ['default'] = 30,
                ['options'] = {
                    ['emitsChangedSignal'] = 'false',
                    ['volatile'] = true
                },
                ['description'] = '手动模式下的超时时间',
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = liquid_cooling_config_intf_types.TimeOut
            },
            ['ManualLevel'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'true'},
                ['default'] = 25,
                ['description'] = '手动模式下的转速级别',
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = liquid_cooling_config_intf_types.ManualLevel
            },
            ['LevelPercentRange'] = {
                ['baseType'] = 'U8[]',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'const'},
                ['description'] = '手动设置转速级别允许范围',
                ['usage'] = {'CSR'},
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = liquid_cooling_config_intf_types.LevelPercentRange
            }
        },
        ['bmc.kepler.Object.Properties'] = {
            ['ClassName'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '对象类名',
                ['validator'] = properties_intf_types.ClassName
            },
            ['ObjectName'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '对象名',
                ['validator'] = properties_intf_types.ObjectName
            },
            ['ObjectIdentifier'] = {
                ['baseType'] = 'Struct',
                ['$ref'] = '#/defs/StructIdentifier',
                ['readOnly'] = true,
                ['description'] = '对象标志符',
                ['validator'] = properties_intf_types.ObjectIdentifier
            }
        }
    },
    ['mdb_method_configs'] = {
        ['bmc.kepler.Systems.LiquidCoolingConfig'] = {
            ['SetManualLevel'] = {
                ['description'] = '设置手动模式冷却级别',
                ['privilege'] = {'BasicSetting'},
                ['req'] = {
                    {
                        ['description'] = '冷却单元Id',
                        ['baseType'] = 'U8',
                        ['param'] = 'UnitId'
                    }, {
                        ['description'] = '设置的转速级别',
                        ['baseType'] = 'U8',
                        ['param'] = 'Level'
                    }
                }
            },
            ['SetCtrlMode'] = {
                ['description'] = '设置冷却单元控制模式',
                ['privilege'] = {'BasicSetting'},
                ['req'] = {
                    {
                        ['description'] = '冷却单元控制模式',
                        ['baseType'] = 'String',
                        ['param'] = 'CtrlMode'
                    },
                    {
                        ['description'] = '超时时长',
                        ['baseType'] = 'U32',
                        ['param'] = 'Timeout'
                    }
                }
            }
        },
        ['bmc.kepler.Object.Properties'] = {
            ['GetOptions'] = {
                ['req'] = {
                    {
                        ['baseType'] = 'String',
                        ['description'] = '接口名',
                        ['param'] = 'Interface'
                    }, {
                        ['baseType'] = 'String',
                        ['description'] = '属性名',
                        ['param'] = 'Property'
                    }
                },
                ['rsp'] = {
                    {
                        ['baseType'] = 'Struct',
                        ['$ref'] = '#/defs/Options',
                        ['description'] = '属性能力选项，例如是否弃用、是否是易变属性等',
                        ['param'] = 'Options'
                    }
                },
                ['description'] = '按接口名和属性名查询属性的能力选项'
            },
            ['GetPropertiesByOptions'] = {
                ['req'] = {
                    {
                        ['baseType'] = 'String',
                        ['description'] = '接口名',
                        ['param'] = 'Interface'
                    }, {
                        ['baseType'] = 'Struct',
                        ['$ref'] = '#/defs/Options',
                        ['description'] = '属性能力选项，例如是否弃用、是否是易变属性等',
                        ['param'] = 'Options'
                    }
                },
                ['rsp'] = {
                    {
                        ['baseType'] = 'String[]',
                        ['description'] = '属性名列表',
                        ['param'] = 'Properties'
                    }
                },
                ['description'] = '按接口名和能力选项查询符合条件的所有属性'
            }
        }
    },
    ['mdb_classes'] = mdb.get_class_obj(
        '/bmc/kepler/Systems/:SystemId/LiquidCoolingConfig'),
    ['new_mdb_objects'] = mdb.new_objects_builder({
        ['bmc.kepler.Systems.LiquidCoolingConfig'] = {
            ['property_defaults'] = {
                ['CtrlMode'] = 'Auto',
                ['TimeOut'] = 30,
                ['ManualLevel'] = 25,
                ['LevelPercentRange'] = liquid_cooling_config_intf_types.LevelPercentRange
                    .default[1]
            },
            ['privileges'] = {
                ['path'] = privilege.ReadOnly,
                ['props'] = {
                    ['CtrlMode'] = {['read'] = privilege.ReadOnly},
                    ['TimeOut'] = {['read'] = privilege.ReadOnly},
                    ['ManualLevel'] = {['read'] = privilege.ReadOnly},
                    ['LevelPercentRange'] = {['read'] = privilege.ReadOnly}
                },
                ['methods'] = {
                    ['SetManualLevel'] = privilege.BasicSetting,
                    ['SetCtrlMode'] = privilege.BasicSetting
                }
            },
            ['interface_types'] = liquid_cooling_config_intf_types
        },
        ['bmc.kepler.Object.Properties'] = {
            ['property_defaults'] = {
                ['ClassName'] = properties_intf_types.ClassName.default[1],
                ['ObjectName'] = properties_intf_types.ObjectName.default[1],
                ['ObjectIdentifier'] = properties_intf_types.ObjectIdentifier
                    .default[1]
            },
            ['privileges'] = {['path'] = privilege.ReadOnly},
            ['interface_types'] = properties_intf_types
        }
    })
}

local CoolingFan = {
    ['prop_configs'] = {
        ['Slot'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'U8',
            ['validator'] = cooling_fan_class_types.Slot
        },
        ['MaxSupportedPWM'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'U32',
            ['validator'] = cooling_fan_class_types.MaxSupportedPWM
        }
    },
    ['default_props'] = {
        ['Slot'] = cooling_fan_class_types.Slot.default[1],
        ['MaxSupportedPWM'] = cooling_fan_class_types.MaxSupportedPWM.default[1]
    },
    ['mdb_prop_configs'] = {
        ['bmc.kepler.Systems.CoolingFan'] = {
            ['FanId'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['description'] = '风扇Id',
                ['usage'] = {'CSR'},
                ['validator'] = cooling_fan_intf_types.FanId
            },
            ['HardwarePWM'] = {
                ['baseType'] = 'Double',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['description'] = '风扇硬件占空比',
                ['usage'] = {'CSR'},
                ['validator'] = cooling_fan_intf_types.HardwarePWM
            },
            ['FrontPresence'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = true,
                ['default'] = 1,
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['description'] = '前转子在位状态',
                ['usage'] = {'CSR'},
                ['validator'] = cooling_fan_intf_types.FrontPresence
            },
            ['RearPresence'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = true,
                ['default'] = 1,
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['description'] = '后转子在位状态',
                ['usage'] = {'CSR'},
                ['validator'] = cooling_fan_intf_types.RearPresence
            },
            ['FrontStatus'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = true,
                ['default'] = 0,
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['description'] = '风扇前转子状态',
                ['usage'] = {'CSR'},
                ['validator'] = cooling_fan_intf_types.FrontStatus
            },
            ['RearStatus'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = true,
                ['default'] = 0,
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['description'] = '风扇后转子状态',
                ['usage'] = {'CSR'},
                ['validator'] = cooling_fan_intf_types.RearStatus
            },
            ['FrontSpeed'] = {
                ['baseType'] = 'U16',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['description'] = '前转子转速',
                ['usage'] = {'CSR'},
                ['validator'] = cooling_fan_intf_types.FrontSpeed
            },
            ['RearSpeed'] = {
                ['baseType'] = 'U16',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['description'] = '后转子转速',
                ['usage'] = {'CSR'},
                ['validator'] = cooling_fan_intf_types.RearSpeed
            },
            ['Level'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['description'] = '风扇转速级别',
                ['validator'] = cooling_fan_intf_types.Level
            }
        },
        ['bmc.kepler.Object.Properties'] = {
            ['ClassName'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '对象类名',
                ['validator'] = properties_intf_types.ClassName
            },
            ['ObjectName'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '对象名',
                ['validator'] = properties_intf_types.ObjectName
            },
            ['ObjectIdentifier'] = {
                ['baseType'] = 'Struct',
                ['$ref'] = '#/defs/StructIdentifier',
                ['readOnly'] = true,
                ['description'] = '对象标志符',
                ['validator'] = properties_intf_types.ObjectIdentifier
            }
        }
    },
    ['mdb_method_configs'] = {
        ['bmc.kepler.Object.Properties'] = {
            ['GetOptions'] = {
                ['req'] = {
                    {
                        ['baseType'] = 'String',
                        ['description'] = '接口名',
                        ['param'] = 'Interface'
                    }, {
                        ['baseType'] = 'String',
                        ['description'] = '属性名',
                        ['param'] = 'Property'
                    }
                },
                ['rsp'] = {
                    {
                        ['baseType'] = 'Struct',
                        ['$ref'] = '#/defs/Options',
                        ['description'] = '属性能力选项，例如是否弃用、是否是易变属性等',
                        ['param'] = 'Options'
                    }
                },
                ['description'] = '按接口名和属性名查询属性的能力选项'
            },
            ['GetPropertiesByOptions'] = {
                ['req'] = {
                    {
                        ['baseType'] = 'String',
                        ['description'] = '接口名',
                        ['param'] = 'Interface'
                    }, {
                        ['baseType'] = 'Struct',
                        ['$ref'] = '#/defs/Options',
                        ['description'] = '属性能力选项，例如是否弃用、是否是易变属性等',
                        ['param'] = 'Options'
                    }
                },
                ['rsp'] = {
                    {
                        ['baseType'] = 'String[]',
                        ['description'] = '属性名列表',
                        ['param'] = 'Properties'
                    }
                },
                ['description'] = '按接口名和能力选项查询符合条件的所有属性'
            }
        }
    },
    ['mdb_classes'] = mdb.get_class_obj(
        '/bmc/kepler/Systems/:SystemId/CoolingFan/:Id'),
    ['new_mdb_objects'] = mdb.new_objects_builder({
        ['bmc.kepler.Systems.CoolingFan'] = {
            ['property_defaults'] = {
                ['FanId'] = cooling_fan_intf_types.FanId.default[1],
                ['HardwarePWM'] = cooling_fan_intf_types.HardwarePWM.default[1],
                ['FrontPresence'] = 1,
                ['RearPresence'] = 1,
                ['FrontStatus'] = 0,
                ['RearStatus'] = 0,
                ['FrontSpeed'] = cooling_fan_intf_types.FrontSpeed.default[1],
                ['RearSpeed'] = cooling_fan_intf_types.RearSpeed.default[1],
                ['Level'] = cooling_fan_intf_types.Level.default[1]
            },
            ['privileges'] = {['path'] = privilege.ReadOnly},
            ['interface_types'] = cooling_fan_intf_types
        },
        ['bmc.kepler.Object.Properties'] = {
            ['property_defaults'] = {
                ['ClassName'] = properties_intf_types.ClassName.default[1],
                ['ObjectName'] = properties_intf_types.ObjectName.default[1],
                ['ObjectIdentifier'] = properties_intf_types.ObjectIdentifier
                    .default[1]
            },
            ['privileges'] = {['path'] = privilege.ReadOnly},
            ['interface_types'] = properties_intf_types
        }
    })
}

local CoolingPump = {
    ['mdb_prop_configs'] = {
        ['bmc.kepler.Systems.CoolingPump'] = {
            ['Id'] = {
                ['baseType'] = 'U16',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'const'},
                ['description'] = '泵Id',
                ['usage'] = {'CSR'},
                ['validator'] = cooling_pump_intf_types.Id
            },
            ['Slot'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'const'},
                ['description'] = '泵槽位号',
                ['usage'] = {'CSR'},
                ['validator'] = cooling_pump_intf_types.Slot
            },
            ['ActualPWM'] = {
                ['baseType'] = 'Double',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['description'] = '泵占空比',
                ['usage'] = {'CSR'},
                ['validator'] = cooling_pump_intf_types.ActualPWM
            },
            ['Speed'] = {
                ['baseType'] = 'U16',
                ['readOnly'] = true,
                ['options'] = {
                    ['emitsChangedSignal'] = 'false',
                    ['volatile'] = true
                },
                ['description'] = '泵转速',
                ['usage'] = {'CSR'},
                ['validator'] = cooling_pump_intf_types.Speed
            },
            ['Presence'] = {
                ['baseType'] = 'U8',
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['default'] = 1,
                ['readOnly'] = true,
                ['description'] = '泵在位状态',
                ['usage'] = {'CSR'},
                ['validator'] = cooling_pump_intf_types.Presence
            },
            ['Status'] = {
                ['baseType'] = 'U8',
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['default'] = 0,
                ['readOnly'] = true,
                ['description'] = '泵状态',
                ['usage'] = {'CSR'},
                ['validator'] = cooling_pump_intf_types.Status
            },
            ['Level'] = {
                ['baseType'] = 'U8',
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['readOnly'] = true,
                ['description'] = '手动模式下的转速级别',
                ['validator'] = cooling_pump_intf_types.Level
            }
        },
        ['bmc.kepler.Object.Properties'] = {
            ['ClassName'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '对象类名',
                ['validator'] = properties_intf_types.ClassName
            },
            ['ObjectName'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '对象名',
                ['validator'] = properties_intf_types.ObjectName
            },
            ['ObjectIdentifier'] = {
                ['baseType'] = 'Struct',
                ['$ref'] = '#/defs/StructIdentifier',
                ['readOnly'] = true,
                ['description'] = '对象标志符',
                ['validator'] = properties_intf_types.ObjectIdentifier
            }
        }
    },
    ['mdb_method_configs'] = {
        ['bmc.kepler.Object.Properties'] = {
            ['GetOptions'] = {
                ['req'] = {
                    {
                        ['baseType'] = 'String',
                        ['description'] = '接口名',
                        ['param'] = 'Interface'
                    }, {
                        ['baseType'] = 'String',
                        ['description'] = '属性名',
                        ['param'] = 'Property'
                    }
                },
                ['rsp'] = {
                    {
                        ['baseType'] = 'Struct',
                        ['$ref'] = '#/defs/Options',
                        ['description'] = '属性能力选项，例如是否弃用、是否是易变属性等',
                        ['param'] = 'Options'
                    }
                },
                ['description'] = '按接口名和属性名查询属性的能力选项'
            },
            ['GetPropertiesByOptions'] = {
                ['req'] = {
                    {
                        ['baseType'] = 'String',
                        ['description'] = '接口名',
                        ['param'] = 'Interface'
                    }, {
                        ['baseType'] = 'Struct',
                        ['$ref'] = '#/defs/Options',
                        ['description'] = '属性能力选项，例如是否弃用、是否是易变属性等',
                        ['param'] = 'Options'
                    }
                },
                ['rsp'] = {
                    {
                        ['baseType'] = 'String[]',
                        ['description'] = '属性名列表',
                        ['param'] = 'Properties'
                    }
                },
                ['description'] = '按接口名和能力选项查询符合条件的所有属性'
            }
        }
    },
    ['mdb_classes'] = mdb.get_class_obj(
        '/bmc/kepler/Systems/:SystemId/CoolingPumps/:Id'),
    ['new_mdb_objects'] = mdb.new_objects_builder({
        ['bmc.kepler.Systems.CoolingPump'] = {
            ['property_defaults'] = {
                ['Id'] = cooling_pump_intf_types.Id.default[1],
                ['Slot'] = cooling_pump_intf_types.Slot.default[1],
                ['ActualPWM'] = cooling_pump_intf_types.ActualPWM.default[1],
                ['Speed'] = cooling_pump_intf_types.Speed.default[1],
                ['Presence'] = 1,
                ['Status'] = 0,
                ['Level'] = cooling_pump_intf_types.Level.default[1]
            },
            ['privileges'] = {['path'] = privilege.ReadOnly},
            ['interface_types'] = cooling_pump_intf_types
        },
        ['bmc.kepler.Object.Properties'] = {
            ['property_defaults'] = {
                ['ClassName'] = properties_intf_types.ClassName.default[1],
                ['ObjectName'] = properties_intf_types.ObjectName.default[1],
                ['ObjectIdentifier'] = properties_intf_types.ObjectIdentifier
                    .default[1]
            },
            ['privileges'] = {['path'] = privilege.ReadOnly},
            ['interface_types'] = properties_intf_types
        }
    })
}

local CoolingRequirement = {
    ['table_name'] = 't_cooling_requirement',
    ['prop_configs'] = {
        ['BaseId'] = {
            ['usage'] = {},
            ['baseType'] = 'U8',
            ['description'] = '同一种类型器件的调速点占据一个唯一的Id',
            ['validator'] = cooling_requirement_class_types.BaseId
        },
        ['Slot'] = {
            ['usage'] = {},
            ['baseType'] = 'U8',
            ['description'] = '槽位号,硬盘和卡等器件槽位需要配置于RequirementId的后8位,代码中赋值给Slot',
            ['validator'] = cooling_requirement_class_types.Slot
        },
        ['Enabled'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'Boolean',
            ['default'] = true,
            ['description'] = '用户自定义温度点生效条件,true有效,false无效',
            ['validator'] = cooling_requirement_class_types.Enabled
        },
        ['IsValid'] = {
            ['usage'] = {},
            ['baseType'] = 'U8',
            ['default'] = 1,
            ['description'] = '当前温度点是否有效,1有效,0无效',
            ['validator'] = cooling_requirement_class_types.IsValid
        },
        ['BackupRequirementIdx'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'U64',
            ['description'] = '备份温度点索引',
            ['validator'] = cooling_requirement_class_types.BackupRequirementIdx
        },
        ['IsBackupRequirement'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'Boolean',
            ['default'] = false,
            ['description'] = '是否作为备份温度点',
            ['validator'] = cooling_requirement_class_types.IsBackupRequirement
        },
        ['ObtainTempFaildToValid'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'Boolean',
            ['validator'] = cooling_requirement_class_types.ObtainTempFaildToValid
        },
        ['CoolingMedium'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'String',
            ['pattern'] = [=[^(Air|Liquid)$]=],
            ['default'] = 'Air',
            ['validator'] = cooling_requirement_class_types.CoolingMedium
        },
        ['LiquidFailedValue'] = {
            ['privilege'] = {['read'] = {'ReadOnly'}},
            ['usage'] = {'CSR'},
            ['baseType'] = 'U64',
            ['validator'] = cooling_requirement_class_types.LiquidFailedValue
        },
        ['SensorName'] = {
            ['privilege'] = {['read'] = {'ReadOnly'}},
            ['usage'] = {'CSR'},
            ['baseType'] = 'String',
            ['default'] = '',
            ['validator'] = cooling_requirement_class_types.SensorName
        },
        ['OriginTargetTemperatureCelsius'] = {
            ['usage'] = {},
            ['baseType'] = 'U8',
            ['validator'] = cooling_requirement_class_types.OriginTargetTemperatureCelsius
        },
        ['OriginFailedValue'] = {
            ['usage'] = {},
            ['baseType'] = 'U64',
            ['validator'] = cooling_requirement_class_types.OriginFailedValue
        },
        ['OriginMaxAllowedTemperatureCelsius'] = {
            ['usage'] = {},
            ['baseType'] = 'U8',
            ['validator'] = cooling_requirement_class_types.OriginMaxAllowedTemperatureCelsius
        },
        ['OriginSmartCoolingTargetTemperature'] = {
            ['usage'] = {},
            ['baseType'] = 'U8[]',
            ['validator'] = cooling_requirement_class_types.OriginSmartCoolingTargetTemperature
        },
        ['SmartCoolingTargetTemperature'] = {
            ['usage'] = {'CSR', 'PoweroffPer'},
            ['baseType'] = 'S16[]',
            ['description'] = '存放节能、高性能、低噪三种模式下的目标值温度',
            ['validator'] = cooling_requirement_class_types.SmartCoolingTargetTemperature
        }
    },
    ['default_props'] = {
        ['BaseId'] = cooling_requirement_class_types.BaseId.default[1],
        ['Slot'] = cooling_requirement_class_types.Slot.default[1],
        ['Enabled'] = true,
        ['IsValid'] = 1,
        ['BackupRequirementIdx'] = cooling_requirement_class_types.BackupRequirementIdx
            .default[1],
        ['IsBackupRequirement'] = false,
        ['ObtainTempFaildToValid'] = cooling_requirement_class_types.ObtainTempFaildToValid
            .default[1],
        ['CoolingMedium'] = 'Air',
        ['LiquidFailedValue'] = cooling_requirement_class_types.LiquidFailedValue
            .default[1],
        ['SensorName'] = '',
        ['OriginTargetTemperatureCelsius'] = cooling_requirement_class_types.OriginTargetTemperatureCelsius
            .default[1],
        ['OriginFailedValue'] = cooling_requirement_class_types.OriginFailedValue
            .default[1],
        ['OriginMaxAllowedTemperatureCelsius'] = cooling_requirement_class_types.OriginMaxAllowedTemperatureCelsius
            .default[1],
        ['OriginSmartCoolingTargetTemperature'] = cooling_requirement_class_types.OriginSmartCoolingTargetTemperature
            .default[1],
        ['SmartCoolingTargetTemperature'] = cooling_requirement_class_types.SmartCoolingTargetTemperature
            .default[1]
    },
    ['mdb_prop_configs'] = {
        ['bmc.kepler.Systems.CoolingRequirement'] = {
            ['RequirementId'] = {
                ['baseType'] = 'U64',
                ['options'] = {['emitsChangedSignal'] = 'const'},
                ['readOnly'] = true,
                ['description'] = '目标调速策略Id',
                ['usage'] = {'CSR', 'PoweroffPer'},
                ['primaryKey'] = true,
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['notAllowNull'] = true,
                ['validator'] = cooling_requirement_intf_types.RequirementId
            },
            ['TemperatureType'] = {
                ['baseType'] = 'U32',
                ['readOnly'] = true,
                ['default'] = 4294967295,
                ['options'] = {['emitsChangedSignal'] = 'const'},
                ['description'] = '温度点类型',
                ['usage'] = {'CSR'},
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = cooling_requirement_intf_types.TemperatureType
            },
            ['ActiveInStandby'] = {
                ['baseType'] = 'Boolean',
                ['readOnly'] = true,
                ['default'] = false,
                ['options'] = {['emitsChangedSignal'] = 'const'},
                ['description'] = 'Standby下调速是否生效',
                ['usage'] = {'CSR'},
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = cooling_requirement_intf_types.ActiveInStandby
            },
            ['TargetTemperatureCelsius'] = {
                ['baseType'] = 'U8',
                ['default'] = 127,
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['description'] = '目标调速的目标值',
                ['usage'] = {'CSR', 'PoweroffPer'},
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = cooling_requirement_intf_types.TargetTemperatureCelsius
            },
            ['MaxAllowedTemperatureCelsius'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'const'},
                ['description'] = '最大允许的工作温度,即满转温度',
                ['usage'] = {'CSR', 'PoweroffPer'},
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = cooling_requirement_intf_types.MaxAllowedTemperatureCelsius
            },
            ['CustomSupported'] = {
                ['baseType'] = 'Boolean',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['description'] = '是否支持自定义目标温度值',
                ['usage'] = {'CSR'},
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = cooling_requirement_intf_types.CustomSupported
            },
            ['CustomTargetTemperatureCelsius'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = true,
                ['default'] = 255,
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['description'] = '用户自定义温度值',
                ['usage'] = {'CSR', 'PoweroffPer'},
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = cooling_requirement_intf_types.CustomTargetTemperatureCelsius
            },
            ['TargetTemperatureRangeCelsius'] = {
                ['baseType'] = 'U8[]',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'const'},
                ['description'] = '自定义温度允许范围',
                ['usage'] = {'CSR'},
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = cooling_requirement_intf_types.TargetTemperatureRangeCelsius
            },
            ['MonitoringStatus'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = true,
                ['description'] = '温度点状态 0正常 1异常',
                ['usage'] = {'CSR'},
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = cooling_requirement_intf_types.MonitoringStatus
            },
            ['MonitoringValue'] = {
                ['baseType'] = 'Double',
                ['readOnly'] = true,
                ['options'] = {
                    ['volatile'] = true,
                    ['emitsChangedSignal'] = 'false'
                },
                ['description'] = '温度点状态',
                ['usage'] = {'CSR'},
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = cooling_requirement_intf_types.MonitoringValue
            },
            ['FailedValue'] = {
                ['baseType'] = 'U64',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['description'] = '温度点失效调速值',
                ['usage'] = {'CSR', 'PoweroffPer'},
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = cooling_requirement_intf_types.FailedValue
            },
            ['ThresholdValue'] = {
                ['baseType'] = 'U8[]',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'const'},
                ['description'] = '温度点告警阈值',
                ['usage'] = {'CSR'},
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = cooling_requirement_intf_types.ThresholdValue
            },
            ['AlarmSpeed'] = {
                ['baseType'] = 'U8[]',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'const'},
                ['description'] = '告警调速策略',
                ['usage'] = {'CSR'},
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = cooling_requirement_intf_types.AlarmSpeed
            },
            ['SmartCoolingTargetTemperatureCelsius'] = {
                ['baseType'] = 'S16[]',
                ['readOnly'] = false,
                ['options'] = {['emitsChangedSignal'] = 'true'},
                ['description'] = 'SmartCooling目标值数组',
                ['usage'] = {'CSR', 'PoweroffPer'},
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = cooling_requirement_intf_types.SmartCoolingTargetTemperatureCelsius
            }
        },
        ['bmc.kepler.Object.Properties'] = {
            ['ClassName'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '对象类名',
                ['validator'] = properties_intf_types.ClassName
            },
            ['ObjectName'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '对象名',
                ['validator'] = properties_intf_types.ObjectName
            },
            ['ObjectIdentifier'] = {
                ['baseType'] = 'Struct',
                ['$ref'] = '#/defs/StructIdentifier',
                ['readOnly'] = true,
                ['description'] = '对象标志符',
                ['validator'] = properties_intf_types.ObjectIdentifier
            }
        }
    },
    ['mdb_method_configs'] = {
        ['bmc.kepler.Systems.CoolingRequirement'] = {
            ['SetTargetTemperature'] = {
                ['description'] = '自定义目标温度',
                ['req'] = {
                    {
                        ['description'] = '目标温度值',
                        ['baseType'] = 'U8',
                        ['param'] = 'TemperatureCelsius'
                    }
                },
                ['privilege'] = {'BasicSetting'}
            },
            ['SetSmartCoolingTargetTemperature'] = {
                ['description'] = '设置SmartCooling目标值数组',
                ['req'] = {
                    {
                        ['description'] = 'SmartCooling目标值数组',
                        ['baseType'] = 'S16[]',
                        ['param'] = 'SmartCoolingTargetTemperature'
                    }
                },
                ['privilege'] = {'BasicSetting'}
            },
            ['SetBasicCoolingTargetTemperature'] = {
                ['description'] = '设置目标温度',
                ['req'] = {
                    {
                        ['description'] = '目标温度值',
                        ['baseType'] = 'U8',
                        ['param'] = 'BasicCoolingTargetTemperature'
                    }
                },
                ['privilege'] = {'BasicSetting'}
            },
            ['SetMaxAllowedTemperature'] = {
                ['description'] = '设置全速阈值',
                ['req'] = {
                    {
                        ['description'] = '全速阈值',
                        ['baseType'] = 'U8',
                        ['param'] = 'MaxAllowedTemperature'
                    }
                },
                ['privilege'] = {'BasicSetting'}
            },
            ['SetFailedValue'] = {
                ['description'] = '设置温度失效转速',
                ['req'] = {
                    {
                        ['description'] = '温度失效转速',
                        ['baseType'] = 'U64',
                        ['param'] = 'FailedValue'
                    }
                },
                ['privilege'] = {'BasicSetting'}
            },
            ['SetBackupTemperatureCelsius'] = {
                ['description'] = '设置备用温度点温度值',
                ['req'] = {
                    {
                        ['description'] = '目标温度值',
                        ['baseType'] = 'Double',
                        ['param'] = 'TemperatureCelsius'
                    }
                }
            },
            ['SetBackupTemperatureStatus'] = {
                ['description'] = '设置备用温度点状态',
                ['req'] = {
                    {
                        ['description'] = '目标温度值',
                        ['baseType'] = 'U8',
                        ['param'] = 'Status'
                    }
                }
            }
        },
        ['bmc.kepler.Object.Properties'] = {
            ['GetOptions'] = {
                ['req'] = {
                    {
                        ['baseType'] = 'String',
                        ['description'] = '接口名',
                        ['param'] = 'Interface'
                    }, {
                        ['baseType'] = 'String',
                        ['description'] = '属性名',
                        ['param'] = 'Property'
                    }
                },
                ['rsp'] = {
                    {
                        ['baseType'] = 'Struct',
                        ['$ref'] = '#/defs/Options',
                        ['description'] = '属性能力选项，例如是否弃用、是否是易变属性等',
                        ['param'] = 'Options'
                    }
                },
                ['description'] = '按接口名和属性名查询属性的能力选项'
            },
            ['GetPropertiesByOptions'] = {
                ['req'] = {
                    {
                        ['baseType'] = 'String',
                        ['description'] = '接口名',
                        ['param'] = 'Interface'
                    }, {
                        ['baseType'] = 'Struct',
                        ['$ref'] = '#/defs/Options',
                        ['description'] = '属性能力选项，例如是否弃用、是否是易变属性等',
                        ['param'] = 'Options'
                    }
                },
                ['rsp'] = {
                    {
                        ['baseType'] = 'String[]',
                        ['description'] = '属性名列表',
                        ['param'] = 'Properties'
                    }
                },
                ['description'] = '按接口名和能力选项查询符合条件的所有属性'
            }
        }
    },
    ['mdb_classes'] = mdb.get_class_obj(
        '/bmc/kepler/Systems/:SystemId/CoolingRequirement/:Id'),
    ['new_mdb_objects'] = mdb.new_objects_builder({
        ['bmc.kepler.Systems.CoolingRequirement'] = {
            ['property_defaults'] = {
                ['RequirementId'] = cooling_requirement_intf_types.RequirementId
                    .default[1],
                ['TemperatureType'] = 4294967295,
                ['ActiveInStandby'] = false,
                ['TargetTemperatureCelsius'] = 127,
                ['MaxAllowedTemperatureCelsius'] = cooling_requirement_intf_types.MaxAllowedTemperatureCelsius
                    .default[1],
                ['CustomSupported'] = cooling_requirement_intf_types.CustomSupported
                    .default[1],
                ['CustomTargetTemperatureCelsius'] = 255,
                ['TargetTemperatureRangeCelsius'] = cooling_requirement_intf_types.TargetTemperatureRangeCelsius
                    .default[1],
                ['MonitoringStatus'] = cooling_requirement_intf_types.MonitoringStatus
                    .default[1],
                ['MonitoringValue'] = cooling_requirement_intf_types.MonitoringValue
                    .default[1],
                ['FailedValue'] = cooling_requirement_intf_types.FailedValue
                    .default[1],
                ['ThresholdValue'] = cooling_requirement_intf_types.ThresholdValue
                    .default[1],
                ['AlarmSpeed'] = cooling_requirement_intf_types.AlarmSpeed
                    .default[1],
                    ['SmartCoolingTargetTemperatureCelsius'] =
                    cooling_requirement_intf_types.SmartCoolingTargetTemperatureCelsius.default[1]
            },
            ['privileges'] = {
                ['path'] = privilege.ReadOnly,
                ['props'] = {
                    ['RequirementId'] = {['read'] = privilege.ReadOnly},
                    ['TemperatureType'] = {['read'] = privilege.ReadOnly},
                    ['ActiveInStandby'] = {['read'] = privilege.ReadOnly},
                    ['TargetTemperatureCelsius'] = {
                        ['read'] = privilege.ReadOnly
                    },
                    ['MaxAllowedTemperatureCelsius'] = {
                        ['read'] = privilege.ReadOnly
                    },
                    ['CustomSupported'] = {['read'] = privilege.ReadOnly},
                    ['CustomTargetTemperatureCelsius'] = {
                        ['read'] = privilege.ReadOnly
                    },
                    ['TargetTemperatureRangeCelsius'] = {
                        ['read'] = privilege.ReadOnly
                    },
                    ['MonitoringStatus'] = {['read'] = privilege.ReadOnly},
                    ['MonitoringValue'] = {['read'] = privilege.ReadOnly},
                    ['FailedValue'] = {['read'] = privilege.ReadOnly},
                    ['ThresholdValue'] = {['read'] = privilege.ReadOnly},
                    ['AlarmSpeed'] = {['read'] = privilege.ReadOnly},
                    ['SmartCoolingTargetTemperatureCelsius'] = {
                        ['read'] = privilege.ReadOnly
                    }
                },
                ['methods'] = {
                    ['SetTargetTemperature'] = privilege.BasicSetting,
                    ['SetSmartCoolingTargetTemperature'] = privilege.BasicSetting,
                    ['SetBasicCoolingTargetTemperature'] = privilege.BasicSetting,
                    ['SetMaxAllowedTemperature'] = privilege.BasicSetting,
                    ['SetFailedValue'] = privilege.BasicSetting
                }
            },
            ['interface_types'] = cooling_requirement_intf_types
        },
        ['bmc.kepler.Object.Properties'] = {
            ['property_defaults'] = {
                ['ClassName'] = properties_intf_types.ClassName.default[1],
                ['ObjectName'] = properties_intf_types.ObjectName.default[1],
                ['ObjectIdentifier'] = properties_intf_types.ObjectIdentifier
                    .default[1]
            },
            ['privileges'] = {['path'] = privilege.ReadOnly},
            ['interface_types'] = properties_intf_types
        }
    })
}

local CoolingPolicy = {
    ['table_name'] = 't_cooling_policy',
    ['prop_configs'] = {
        ['TemperatureArray'] = {
            ['usage'] = {'PoweroffPer'},
            ['baseType'] = 'String',
            ['notAllowNull'] = false,
            ['validator'] = cooling_policy_class_types.TemperatureArray
        },
        ['FanSpeedArray'] = {
            ['usage'] = {'PoweroffPer'},
            ['baseType'] = 'String',
            ['notAllowNull'] = false,
            ['validator'] = cooling_policy_class_types.FanSpeedArray
        },
        ['FanType'] = {
            ['description'] = '生效前提是加载了风扇列表中的一种',
            ['usage'] = {'CSR'},
            ['baseType'] = 'String[]',
            ['validator'] = cooling_policy_class_types.FanType
        },
        ['DiskTempUnavailableToValid'] = {
            ['description'] = '生效前提是硬盘温度获取失败',
            ['usage'] = {'CSR'},
            ['baseType'] = 'Boolean',
            ['validator'] = cooling_policy_class_types.DiskTempUnavailableToValid
        },
        ['HDDBackPlaneName'] = {
            ['description'] = '生效前提是加载了前置硬盘背板列表中的一种',
            ['usage'] = {'CSR'},
            ['baseType'] = 'String[]',
            ['validator'] = cooling_policy_class_types.HDDBackPlaneName
        },
        ['HDDRearBackPlaneName'] = {
            ['description'] = '生效前提是加载了后置硬盘背板列表中的一种',
            ['usage'] = {'CSR'},
            ['baseType'] = 'String[]',
            ['validator'] = cooling_policy_class_types.HDDRearBackPlaneName
        },
        ['HDDBackPlaneType'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'String',
            ['pattern'] = [=[^(FrontPosition|MiddlePosition|RearPosition)$]=],
            ['validator'] = cooling_policy_class_types.HDDBackPlaneType
        },
        ['PCIeCardName'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'String[]',
            ['validator'] = cooling_policy_class_types.PCIeCardName
        },
        ['CoolingMedium'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'String',
            ['pattern'] = [=[^(Air|Liquid)$]=],
            ['default'] = 'Air',
            ['validator'] = cooling_policy_class_types.CoolingMedium
        },
        ['OriginTemperatureRangeLow'] = {
            ['usage'] = {},
            ['baseType'] = 'S16[]',
            ['validator'] = cooling_policy_class_types.OriginTemperatureRangeLow
        },
        ['OriginTemperatureRangeHigh'] = {
            ['usage'] = {},
            ['baseType'] = 'S16[]',
            ['validator'] = cooling_policy_class_types.OriginTemperatureRangeHigh
        },
        ['OriginSpeedRangeLow'] = {
            ['usage'] = {},
            ['baseType'] = 'S16[]',
            ['validator'] = cooling_policy_class_types.OriginSpeedRangeLow
        },
        ['OriginSpeedRangeHigh'] = {
            ['usage'] = {},
            ['baseType'] = 'S16[]',
            ['validator'] = cooling_policy_class_types.OriginSpeedRangeHigh
        }
    },
    ['default_props'] = {
        ['TemperatureArray'] = cooling_policy_class_types.TemperatureArray
            .default[1],
        ['FanSpeedArray'] = cooling_policy_class_types.FanSpeedArray.default[1],
        ['FanType'] = cooling_policy_class_types.FanType.default[1],
        ['DiskTempUnavailableToValid'] = cooling_policy_class_types.DiskTempUnavailableToValid
            .default[1],
        ['HDDBackPlaneName'] = cooling_policy_class_types.HDDBackPlaneName
            .default[1],
        ['HDDRearBackPlaneName'] = cooling_policy_class_types.HDDRearBackPlaneName
            .default[1],
        ['HDDBackPlaneType'] = cooling_policy_class_types.HDDBackPlaneType
            .default[1],
        ['PCIeCardName'] = cooling_policy_class_types.PCIeCardName.default[1],
        ['CoolingMedium'] = 'Air',
        ['OriginTemperatureRangeLow'] = cooling_policy_class_types.OriginTemperatureRangeLow
            .default[1],
        ['OriginTemperatureRangeHigh'] = cooling_policy_class_types.OriginTemperatureRangeHigh
            .default[1],
        ['OriginSpeedRangeLow'] = cooling_policy_class_types.OriginSpeedRangeLow
            .default[1],
        ['OriginSpeedRangeHigh'] = cooling_policy_class_types.OriginSpeedRangeHigh
            .default[1]
    },
    ['mdb_prop_configs'] = {
        ['bmc.kepler.Systems.CoolingPolicy'] = {
            ['PolicyIdx'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'const'},
                ['description'] = '线性调速策略ID',
                ['usage'] = {'CSR', 'PoweroffPer'},
                ['primaryKey'] = true,
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = cooling_policy_intf_types.PolicyIdx
            },
            ['PolicyType'] = {
                ['baseType'] = 'U32',
                ['readOnly'] = true,
                ['default'] = 4294967295,
                ['options'] = {['emitsChangedSignal'] = 'const'},
                ['description'] = 'Policy类型，用于标识特定Policy对象',
                ['usage'] = {'CSR'},
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = cooling_policy_intf_types.PolicyType
            },
            ['IsValid'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = true,
                ['default'] = 1,
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['description'] = '策略是否生效，1生效,0不生效',
                ['usage'] = {'CSR'},
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = cooling_policy_intf_types.IsValid
            },
            ['ExpCondVal'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['description'] = '预期生效条件',
                ['usage'] = {'CSR'},
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = cooling_policy_intf_types.ExpCondVal
            },
            ['ActualCondVal'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['description'] = '实际生效条件',
                ['usage'] = {'CSR'},
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = cooling_policy_intf_types.ActualCondVal
            },
            ['CustomSupported'] = {
                ['baseType'] = 'Boolean',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'const'},
                ['description'] = '是否支持自定义调速曲线',
                ['usage'] = {'CSR'},
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = cooling_policy_intf_types.CustomSupported
            },
            ['FanSpeedRangePercents'] = {
                ['baseType'] = 'U8[]',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'const'},
                ['description'] = '自定义调速曲线风扇速度范围',
                ['usage'] = {'CSR'},
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = cooling_policy_intf_types.FanSpeedRangePercents
            },
            ['Hysteresis'] = {
                ['baseType'] = 'U8',
                ['default'] = 0,
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'const'},
                ['description'] = '迟滞量',
                ['usage'] = {'CSR', 'PoweroffPer'},
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = cooling_policy_intf_types.Hysteresis
            },
            ['TemperatureRangeLow'] = {
                ['baseType'] = 'S16[]',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['description'] = '线性调速策略温度区间左值',
                ['usage'] = {'CSR', 'PoweroffPer'},
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = cooling_policy_intf_types.TemperatureRangeLow
            },
            ['TemperatureRangeHigh'] = {
                ['baseType'] = 'S16[]',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['description'] = '线性调速策略温度区间右值',
                ['usage'] = {'CSR', 'PoweroffPer'},
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = cooling_policy_intf_types.TemperatureRangeHigh
            },
            ['SpeedRangeLow'] = {
                ['baseType'] = 'S16[]',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['description'] = '线性调速策略转速区间左值',
                ['usage'] = {'CSR', 'PoweroffPer'},
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = cooling_policy_intf_types.SpeedRangeLow
            },
            ['SpeedRangeHigh'] = {
                ['baseType'] = 'S16[]',
                ['readOnly'] = true,
                ['options'] = {['emitsChangedSignal'] = 'false'},
                ['description'] = '线性调速策略温度区间右值',
                ['usage'] = {'CSR', 'PoweroffPer'},
                ['privilege'] = {['read'] = {'ReadOnly'}},
                ['validator'] = cooling_policy_intf_types.SpeedRangeHigh
            }
        },
        ['bmc.kepler.Object.Properties'] = {
            ['ClassName'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '对象类名',
                ['validator'] = properties_intf_types.ClassName
            },
            ['ObjectName'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '对象名',
                ['validator'] = properties_intf_types.ObjectName
            },
            ['ObjectIdentifier'] = {
                ['baseType'] = 'Struct',
                ['$ref'] = '#/defs/StructIdentifier',
                ['readOnly'] = true,
                ['description'] = '对象标志符',
                ['validator'] = properties_intf_types.ObjectIdentifier
            }
        }
    },
    ['mdb_method_configs'] = {
        ['bmc.kepler.Systems.CoolingPolicy'] = {
            ['SetCustomCoolingPolicy'] = {
                ['description'] = '设置自定义调速策略',
                ['req'] = {
                    {
                        ['baseType'] = 'U8[]',
                        ['description'] = '温度数组',
                        ['param'] = 'TemperatureArray'
                    }, {
                        ['baseType'] = 'U8[]',
                        ['description'] = '风扇速度数组',
                        ['param'] = 'FanSpeedArray'
                    }
                },
                ['privilege'] = {'BasicSetting'}
            },
            ['SetHysteresis'] = {
                ['description'] = '设置迟滞量',
                ['req'] = {
                    {
                        ['baseType'] = 'U8',
                        ['description'] = '迟滞量',
                        ['param'] = 'Hysteresis'
                    }
                },
                ['privilege'] = {'BasicSetting'}
            }
        },
        ['bmc.kepler.Object.Properties'] = {
            ['GetOptions'] = {
                ['req'] = {
                    {
                        ['baseType'] = 'String',
                        ['description'] = '接口名',
                        ['param'] = 'Interface'
                    }, {
                        ['baseType'] = 'String',
                        ['description'] = '属性名',
                        ['param'] = 'Property'
                    }
                },
                ['rsp'] = {
                    {
                        ['baseType'] = 'Struct',
                        ['$ref'] = '#/defs/Options',
                        ['description'] = '属性能力选项，例如是否弃用、是否是易变属性等',
                        ['param'] = 'Options'
                    }
                },
                ['description'] = '按接口名和属性名查询属性的能力选项'
            },
            ['GetPropertiesByOptions'] = {
                ['req'] = {
                    {
                        ['baseType'] = 'String',
                        ['description'] = '接口名',
                        ['param'] = 'Interface'
                    }, {
                        ['baseType'] = 'Struct',
                        ['$ref'] = '#/defs/Options',
                        ['description'] = '属性能力选项，例如是否弃用、是否是易变属性等',
                        ['param'] = 'Options'
                    }
                },
                ['rsp'] = {
                    {
                        ['baseType'] = 'String[]',
                        ['description'] = '属性名列表',
                        ['param'] = 'Properties'
                    }
                },
                ['description'] = '按接口名和能力选项查询符合条件的所有属性'
            }
        }
    },
    ['mdb_classes'] = mdb.get_class_obj(
        '/bmc/kepler/Systems/:SystemId/CoolingPolicy/:Id'),
    ['new_mdb_objects'] = mdb.new_objects_builder({
        ['bmc.kepler.Systems.CoolingPolicy'] = {
            ['property_defaults'] = {
                ['PolicyIdx'] = cooling_policy_intf_types.PolicyIdx.default[1],
                ['PolicyType'] = 4294967295,
                ['IsValid'] = 1,
                ['ExpCondVal'] = cooling_policy_intf_types.ExpCondVal.default[1],
                ['ActualCondVal'] = cooling_policy_intf_types.ActualCondVal
                    .default[1],
                ['CustomSupported'] = cooling_policy_intf_types.CustomSupported
                    .default[1],
                ['FanSpeedRangePercents'] = cooling_policy_intf_types.FanSpeedRangePercents
                    .default[1],
                ['Hysteresis'] = 0,
                ['TemperatureRangeLow'] = cooling_policy_intf_types.TemperatureRangeLow
                    .default[1],
                ['TemperatureRangeHigh'] = cooling_policy_intf_types.TemperatureRangeHigh
                    .default[1],
                ['SpeedRangeLow'] = cooling_policy_intf_types.SpeedRangeLow
                    .default[1],
                ['SpeedRangeHigh'] = cooling_policy_intf_types.SpeedRangeHigh
                    .default[1]
            },
            ['privileges'] = {
                ['path'] = privilege.ReadOnly,
                ['props'] = {
                    ['PolicyIdx'] = {['read'] = privilege.ReadOnly},
                    ['PolicyType'] = {['read'] = privilege.ReadOnly},
                    ['IsValid'] = {['read'] = privilege.ReadOnly},
                    ['ExpCondVal'] = {['read'] = privilege.ReadOnly},
                    ['ActualCondVal'] = {['read'] = privilege.ReadOnly},
                    ['CustomSupported'] = {['read'] = privilege.ReadOnly},
                    ['FanSpeedRangePercents'] = {['read'] = privilege.ReadOnly},
                    ['Hysteresis'] = {['read'] = privilege.ReadOnly},
                    ['TemperatureRangeLow'] = {['read'] = privilege.ReadOnly},
                    ['TemperatureRangeHigh'] = {['read'] = privilege.ReadOnly},
                    ['SpeedRangeLow'] = {['read'] = privilege.ReadOnly},
                    ['SpeedRangeHigh'] = {['read'] = privilege.ReadOnly}
                },
                ['methods'] = {
                    ['SetCustomCoolingPolicy'] = privilege.BasicSetting,
                    ['SetHysteresis'] = privilege.BasicSetting
                }
            },
            ['interface_types'] = cooling_policy_intf_types
        },
        ['bmc.kepler.Object.Properties'] = {
            ['property_defaults'] = {
                ['ClassName'] = properties_intf_types.ClassName.default[1],
                ['ObjectName'] = properties_intf_types.ObjectName.default[1],
                ['ObjectIdentifier'] = properties_intf_types.ObjectIdentifier
                    .default[1]
            },
            ['privileges'] = {['path'] = privilege.ReadOnly},
            ['interface_types'] = properties_intf_types
        }
    })
}

local CoolingArea = {
    ['prop_configs'] = {
        ['LiquidCoolingDeviceGroup'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'U8[]',
            ['default'] = {},
            ['validator'] = cooling_area_class_types.LiquidCoolingDeviceGroup
        },
        ['Priority'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'U8',
            ['default'] = 1,
            ['validator'] = cooling_area_class_types.Priority
        }
    },
    ['default_props'] = {['LiquidCoolingDeviceGroup'] = {}, ['Priority'] = 1},
    ['mdb_prop_configs'] = {
        ['bmc.kepler.Systems.CoolingArea'] = {
            ['AreaId'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = true,
                ['description'] = '调速域Id',
                ['usage'] = {'CSR'},
                ['validator'] = cooling_area_intf_types.AreaId
            },
            ['RequirementIdx'] = {
                ['baseType'] = 'U8',
                ['readOnly'] = true,
                ['description'] = '目标调速策略Id',
                ['usage'] = {'CSR'},
                ['validator'] = cooling_area_intf_types.RequirementIdx
            },
            ['PolicyIdxGroup'] = {
                ['baseType'] = 'U8[]',
                ['readOnly'] = true,
                ['description'] = '线性调速策略Id组',
                ['usage'] = {'CSR'},
                ['validator'] = cooling_area_intf_types.PolicyIdxGroup
            },
            ['FanIdxGroup'] = {
                ['baseType'] = 'U8[]',
                ['readOnly'] = true,
                ['description'] = '调速域风扇组',
                ['usage'] = {'CSR'},
                ['validator'] = cooling_area_intf_types.FanIdxGroup
            }
        },
        ['bmc.kepler.Object.Properties'] = {
            ['ClassName'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '对象类名',
                ['validator'] = properties_intf_types.ClassName
            },
            ['ObjectName'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '对象名',
                ['validator'] = properties_intf_types.ObjectName
            },
            ['ObjectIdentifier'] = {
                ['baseType'] = 'Struct',
                ['$ref'] = '#/defs/StructIdentifier',
                ['readOnly'] = true,
                ['description'] = '对象标志符',
                ['validator'] = properties_intf_types.ObjectIdentifier
            }
        }
    },
    ['mdb_method_configs'] = {
        ['bmc.kepler.Object.Properties'] = {
            ['GetOptions'] = {
                ['req'] = {
                    {
                        ['baseType'] = 'String',
                        ['description'] = '接口名',
                        ['param'] = 'Interface'
                    }, {
                        ['baseType'] = 'String',
                        ['description'] = '属性名',
                        ['param'] = 'Property'
                    }
                },
                ['rsp'] = {
                    {
                        ['baseType'] = 'Struct',
                        ['$ref'] = '#/defs/Options',
                        ['description'] = '属性能力选项，例如是否弃用、是否是易变属性等',
                        ['param'] = 'Options'
                    }
                },
                ['description'] = '按接口名和属性名查询属性的能力选项'
            },
            ['GetPropertiesByOptions'] = {
                ['req'] = {
                    {
                        ['baseType'] = 'String',
                        ['description'] = '接口名',
                        ['param'] = 'Interface'
                    }, {
                        ['baseType'] = 'Struct',
                        ['$ref'] = '#/defs/Options',
                        ['description'] = '属性能力选项，例如是否弃用、是否是易变属性等',
                        ['param'] = 'Options'
                    }
                },
                ['rsp'] = {
                    {
                        ['baseType'] = 'String[]',
                        ['description'] = '属性名列表',
                        ['param'] = 'Properties'
                    }
                },
                ['description'] = '按接口名和能力选项查询符合条件的所有属性'
            }
        }
    },
    ['mdb_classes'] = mdb.get_class_obj(
        '/bmc/kepler/Systems/:SystemId/CoolingArea/:Id'),
    ['new_mdb_objects'] = mdb.new_objects_builder({
        ['bmc.kepler.Systems.CoolingArea'] = {
            ['property_defaults'] = {
                ['AreaId'] = cooling_area_intf_types.AreaId.default[1],
                ['RequirementIdx'] = cooling_area_intf_types.RequirementIdx
                    .default[1],
                ['PolicyIdxGroup'] = cooling_area_intf_types.PolicyIdxGroup
                    .default[1],
                ['FanIdxGroup'] = cooling_area_intf_types.FanIdxGroup.default[1]
            },
            ['privileges'] = {['path'] = privilege.ReadOnly},
            ['interface_types'] = cooling_area_intf_types
        },
        ['bmc.kepler.Object.Properties'] = {
            ['property_defaults'] = {
                ['ClassName'] = properties_intf_types.ClassName.default[1],
                ['ObjectName'] = properties_intf_types.ObjectName.default[1],
                ['ObjectIdentifier'] = properties_intf_types.ObjectIdentifier
                    .default[1]
            },
            ['privileges'] = {['path'] = privilege.ReadOnly},
            ['interface_types'] = properties_intf_types
        }
    })
}

local AbnormalFan = {
    ['prop_configs'] = {
        ['Id'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'U32',
            ['validator'] = abnormal_fan_class_types.Id
        },
        ['FanIdx'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'U32',
            ['validator'] = abnormal_fan_class_types.FanIdx
        },
        ['Status'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'String',
            ['pattern'] = [=[^(AbnormalRotation|NotInPosition)$]=],
            ['validator'] = abnormal_fan_class_types.Status
        },
        ['FanGroup'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'U32[]',
            ['validator'] = abnormal_fan_class_types.FanGroup
        },
        ['SpeedPercentage'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'U8',
            ['default'] = 80,
            ['validator'] = abnormal_fan_class_types.SpeedPercentage
        },
        ['Priority'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'U8',
            ['default'] = 1,
            ['validator'] = abnormal_fan_class_types.Priority
        }
    },
    ['default_props'] = {
        ['Id'] = abnormal_fan_class_types.Id.default[1],
        ['FanIdx'] = abnormal_fan_class_types.FanIdx.default[1],
        ['Status'] = abnormal_fan_class_types.Status.default[1],
        ['FanGroup'] = abnormal_fan_class_types.FanGroup.default[1],
        ['SpeedPercentage'] = 80,
        ['Priority'] = 1
    }
}

local AbnormalPump = {
    ['prop_configs'] = {
        ['Id'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'U32',
            ['validator'] = abnormal_pump_class_types.Id
        },
        ['DeviceId'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'U32',
            ['validator'] = abnormal_pump_class_types.DeviceId
        },
        ['Models'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'String',
            ['pattern'] = [=[^(AbnormalRotation|NotInPosition|StopWorking)$]=],
            ['validator'] = abnormal_pump_class_types.Models
        },
        ['LiquidCoolingIds'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'U32[]',
            ['validator'] = abnormal_pump_class_types.LiquidCoolingIds
        },
        ['AirCoolingIds'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'U32[]',
            ['validator'] = abnormal_pump_class_types.AirCoolingIds
        },
        ['LiquidCoolingPWMs'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'U8[]',
            ['validator'] = abnormal_pump_class_types.LiquidCoolingPWMs
        },
        ['AirCoolingPWMs'] = {
            ['usage'] = {'CSR'},
            ['baseType'] = 'U8[]',
            ['validator'] = abnormal_pump_class_types.AirCoolingPWMs
        }
    },
    ['default_props'] = {
        ['Id'] = abnormal_pump_class_types.Id.default[1],
        ['DeviceId'] = abnormal_pump_class_types.DeviceId.default[1],
        ['Models'] = abnormal_pump_class_types.Models.default[1],
        ['LiquidCoolingIds'] = abnormal_pump_class_types.LiquidCoolingIds
            .default[1],
        ['AirCoolingIds'] = abnormal_pump_class_types.AirCoolingIds.default[1],
        ['LiquidCoolingPWMs'] = abnormal_pump_class_types.LiquidCoolingPWMs
            .default[1],
        ['AirCoolingPWMs'] = abnormal_pump_class_types.AirCoolingPWMs.default[1]
    }
}

local CoolingPolicies = {
    ['mdb_prop_configs'] = {
        ['bmc.kepler.Chassis.CoolingPolicies'] = {},
        ['bmc.kepler.Object.Properties'] = {
            ['ClassName'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '对象类名',
                ['validator'] = properties_intf_types.ClassName
            },
            ['ObjectName'] = {
                ['baseType'] = 'String',
                ['readOnly'] = true,
                ['description'] = '对象名',
                ['validator'] = properties_intf_types.ObjectName
            },
            ['ObjectIdentifier'] = {
                ['baseType'] = 'Struct',
                ['$ref'] = '#/defs/StructIdentifier',
                ['readOnly'] = true,
                ['description'] = '对象标志符',
                ['validator'] = properties_intf_types.ObjectIdentifier
            }
        }
    },
    ['mdb_method_configs'] = {
        ['bmc.kepler.Chassis.CoolingPolicies'] = {
            ['GetSpecificPWM'] = {
                ['description'] = '获取指定条件下环温策略控制PWM',
                ['req'] = {
                    {
                        ['baseType'] = 'String',
                        ['enum'] = {'Air', 'Liquid'},
                        ['description'] = '介质:风冷、液冷',
                        ['param'] = 'Medium'
                    }, {
                        ['baseType'] = 'U8',
                        ['enum'] = {1, 2},
                        ['description'] = '曲线类型 1:Inlet 2:Disk',
                        ['param'] = 'PolicyType'
                    }, {
                        ['baseType'] = 'String',
                        ['enum'] = {
                            'EnergySaving', 'LowNoise', 'HighPerformance',
                            'Custom', 'LiquidCooling'
                        },
                        ['description'] = 'SmartCooling模式：节能、低噪、高性能、自定义、液冷',
                        ['param'] = 'SmartCoolingMode'
                    }, {
                        ['baseType'] = 'S16',
                        ['description'] = '温度值',
                        ['param'] = 'Temperature'
                    }
                },
                ['rsp'] = {
                    {
                        ['baseType'] = 'U8',
                        ['description'] = '控制占空比',
                        ['param'] = 'ControlPWM'
                    }
                },
                ['privilege'] = {'ReadOnly'}
            }
        },
        ['bmc.kepler.Object.Properties'] = {
            ['GetOptions'] = {
                ['req'] = {
                    {
                        ['baseType'] = 'String',
                        ['description'] = '接口名',
                        ['param'] = 'Interface'
                    }, {
                        ['baseType'] = 'String',
                        ['description'] = '属性名',
                        ['param'] = 'Property'
                    }
                },
                ['rsp'] = {
                    {
                        ['baseType'] = 'Struct',
                        ['$ref'] = '#/defs/Options',
                        ['description'] = '属性能力选项，例如是否弃用、是否是易变属性等',
                        ['param'] = 'Options'
                    }
                },
                ['description'] = '按接口名和属性名查询属性的能力选项'
            },
            ['GetPropertiesByOptions'] = {
                ['req'] = {
                    {
                        ['baseType'] = 'String',
                        ['description'] = '接口名',
                        ['param'] = 'Interface'
                    }, {
                        ['baseType'] = 'Struct',
                        ['$ref'] = '#/defs/Options',
                        ['description'] = '属性能力选项，例如是否弃用、是否是易变属性等',
                        ['param'] = 'Options'
                    }
                },
                ['rsp'] = {
                    {
                        ['baseType'] = 'String[]',
                        ['description'] = '属性名列表',
                        ['param'] = 'Properties'
                    }
                },
                ['description'] = '按接口名和能力选项查询符合条件的所有属性'
            }
        }
    },
    ['mdb_classes'] = mdb.get_class_obj(
        '/bmc/kepler/Chassis/:ChassisId/ThermalSubsystem/CoolingPolicies'),
    ['new_mdb_objects'] = mdb.new_objects_builder({
        ['bmc.kepler.Chassis.CoolingPolicies'] = {
            ['property_defaults'] = {},
            ['privileges'] = {
                ['methods'] = {['GetSpecificPWM'] = privilege.ReadOnly}
            },
            ['interface_types'] = cooling_policies_intf_types
        },
        ['bmc.kepler.Object.Properties'] = {
            ['property_defaults'] = {
                ['ClassName'] = properties_intf_types.ClassName.default[1],
                ['ObjectName'] = properties_intf_types.ObjectName.default[1],
                ['ObjectIdentifier'] = properties_intf_types.ObjectIdentifier
                    .default[1]
            },
            ['interface_types'] = properties_intf_types
        }
    })
}

local M = {}

function M.init(bus)
    class('Fan', Fan):set_bus(bus)
    class('FanType', FanType):set_bus(bus)
    class('FanInfo', FanInfo):set_bus(bus)
    class('ThermalConfiguration', ThermalConfiguration):set_bus(bus)
    class('PWMChannel', PWMChannel):set_bus(bus)
    class('SystemsFans', SystemsFans):set_bus(bus)
    class('Fans', Fans):set_bus(bus)
    class('Pumps', Pumps):set_bus(bus)
    class('Pump', Pump):set_bus(bus)
    class('Valves', Valves):set_bus(bus)
    class('Valve', Valve):set_bus(bus)
    class('BasicCoolingConfig', BasicCoolingConfig):set_bus(bus)
    class('FanGroup', FanGroup):set_bus(bus)
    class('FanGroupPolicy', FanGroupPolicy):set_bus(bus)
    class('PumpGroup', PumpGroup):set_bus(bus)
    class('CoolingConfig', CoolingConfig):set_bus(bus)
    class('AirCoolingConfig', AirCoolingConfig):set_bus(bus)
    class('LiquidCoolingConfig', LiquidCoolingConfig):set_bus(bus)
    class('CoolingFan', CoolingFan):set_bus(bus)
    class('CoolingPump', CoolingPump):set_bus(bus)
    class('CoolingRequirement', CoolingRequirement):set_bus(bus)
    class('CoolingPolicy', CoolingPolicy):set_bus(bus)
    class('CoolingArea', CoolingArea):set_bus(bus)
    class('AbnormalFan', AbnormalFan):set_bus(bus)
    class('AbnormalPump', AbnormalPump):set_bus(bus)
    class('CoolingPolicies', CoolingPolicies):set_bus(bus)
end

-- The callback needs to be registered during app initialization
function M.ImplFanFanSetFanPWM(cb)
    class('Fan')['bmc.kepler.Systems.Fan'].SetFanPWM =
        function(obj, ctx, ...)
            local req =
                fan_intf_types.SetFanPWMReq.new(...):validate(nil, nil, true)
            local rsp =
                fan_intf_types.SetFanPWMRsp.new(cb(obj, ctx, req:unpack())):validate()
            return rsp:unpack(true)
        end
end

-- The callback needs to be registered during app initialization
function M.ImplFanMetricGetData(cb)
    class('Fan')['bmc.kepler.Metric'].GetData =
        function(obj, ctx, ...)
            local req = metric_intf_types.GetDataReq.new(...):validate(nil, nil,
                                                                       true)
            local rsp =
                metric_intf_types.GetDataRsp.new(cb(obj, ctx, req:unpack())):validate()
            return rsp:unpack(true)
        end
end

-- The callback needs to be registered during app initialization
function M.ImplFanMetricGetItems(cb)
    class('Fan')['bmc.kepler.Metric'].GetItems =
        function(obj, ctx, ...)
            local req =
                metric_intf_types.GetItemsReq.new(...):validate(nil, nil, true)
            local rsp = metric_intf_types.GetItemsRsp
                            .new(cb(obj, ctx, req:unpack())):validate()
            return rsp:unpack(true)
        end
end

-- The callback needs to be registered during app initialization
function M.ImplFanMetricSynDataAcquisitionEnable(cb)
    class('Fan')['bmc.kepler.Metric'].SynDataAcquisitionEnable = function(obj,
                                                                          ctx, ...)
        local req =
            metric_intf_types.SynDataAcquisitionEnableReq.new(...):validate(nil,
                                                                            nil,
                                                                            true)
        local rsp = metric_intf_types.SynDataAcquisitionEnableRsp.new(cb(obj,
                                                                         ctx,
                                                                         req:unpack())):validate()
        return rsp:unpack(true)
    end
end

-- The callback needs to be registered during app initialization
function M.ImplFanPropertiesGetOptions(cb)
    class('Fan')['bmc.kepler.Object.Properties'].GetOptions =
        function(obj, ctx, ...)
            local req =
                properties_intf_types.GetOptionsReq.new(...):validate(nil, nil,
                                                                      true)
            local rsp = properties_intf_types.GetOptionsRsp.new(cb(obj, ctx,
                                                                   req:unpack())):validate()
            return rsp:unpack(true)
        end
end

-- The callback needs to be registered during app initialization
function M.ImplFanPropertiesGetPropertiesByOptions(cb)
    class('Fan')['bmc.kepler.Object.Properties'].GetPropertiesByOptions =
        function(obj, ctx, ...)
            local req =
                properties_intf_types.GetPropertiesByOptionsReq.new(...):validate(
                    nil, nil, true)
            local rsp =
                properties_intf_types.GetPropertiesByOptionsRsp.new(cb(obj, ctx,
                                                                       req:unpack())):validate()
            return rsp:unpack(true)
        end
end

-- The callback needs to be registered during app initialization
function M.ImplFanTypePropertiesGetOptions(cb)
    class('FanType')['bmc.kepler.Object.Properties'].GetOptions = function(obj,
                                                                           ctx, ...)
        local req = properties_intf_types.GetOptionsReq.new(...):validate(nil,
                                                                          nil,
                                                                          true)
        local rsp = properties_intf_types.GetOptionsRsp.new(cb(obj, ctx,
                                                               req:unpack())):validate()
        return rsp:unpack(true)
    end
end

-- The callback needs to be registered during app initialization
function M.ImplFanTypePropertiesGetPropertiesByOptions(cb)
    class('FanType')['bmc.kepler.Object.Properties'].GetPropertiesByOptions =
        function(obj, ctx, ...)
            local req =
                properties_intf_types.GetPropertiesByOptionsReq.new(...):validate(
                    nil, nil, true)
            local rsp =
                properties_intf_types.GetPropertiesByOptionsRsp.new(cb(obj, ctx,
                                                                       req:unpack())):validate()
            return rsp:unpack(true)
        end
end

-- The callback needs to be registered during app initialization
function M.ImplSystemsFansFansSetPWM(cb)
    class('SystemsFans')['bmc.kepler.Systems.Fans'].SetPWM =
        function(obj, ctx, ...)
            local req =
                fans_intf_types.SetPWMReq.new(...):validate(nil, nil, true)
            local rsp =
                fans_intf_types.SetPWMRsp.new(cb(obj, ctx, req:unpack())):validate()
            return rsp:unpack(true)
        end
end

-- The callback needs to be registered during app initialization
function M.ImplSystemsFansPropertiesGetOptions(cb)
    class('SystemsFans')['bmc.kepler.Object.Properties'].GetOptions = function(
        obj, ctx, ...)
        local req = properties_intf_types.GetOptionsReq.new(...):validate(nil,
                                                                          nil,
                                                                          true)
        local rsp = properties_intf_types.GetOptionsRsp.new(cb(obj, ctx,
                                                               req:unpack())):validate()
        return rsp:unpack(true)
    end
end

-- The callback needs to be registered during app initialization
function M.ImplSystemsFansPropertiesGetPropertiesByOptions(cb)
    class('SystemsFans')['bmc.kepler.Object.Properties'].GetPropertiesByOptions =
        function(obj, ctx, ...)
            local req =
                properties_intf_types.GetPropertiesByOptionsReq.new(...):validate(
                    nil, nil, true)
            local rsp =
                properties_intf_types.GetPropertiesByOptionsRsp.new(cb(obj, ctx,
                                                                       req:unpack())):validate()
            return rsp:unpack(true)
        end
end

-- The callback needs to be registered during app initialization
function M.ImplPumpsPumpsSetPWM(cb)
    class('Pumps')['bmc.kepler.Systems.Pumps'].SetPWM =
        function(obj, ctx, ...)
            local req =
                pumps_intf_types.SetPWMReq.new(...):validate(nil, nil, true)
            local rsp =
                pumps_intf_types.SetPWMRsp.new(cb(obj, ctx, req:unpack())):validate()
            return rsp:unpack(true)
        end
end

-- The callback needs to be registered during app initialization
function M.ImplPumpsPropertiesGetOptions(cb)
    class('Pumps')['bmc.kepler.Object.Properties'].GetOptions = function(obj,
                                                                         ctx, ...)
        local req = properties_intf_types.GetOptionsReq.new(...):validate(nil,
                                                                          nil,
                                                                          true)
        local rsp = properties_intf_types.GetOptionsRsp.new(cb(obj, ctx,
                                                               req:unpack())):validate()
        return rsp:unpack(true)
    end
end

-- The callback needs to be registered during app initialization
function M.ImplPumpsPropertiesGetPropertiesByOptions(cb)
    class('Pumps')['bmc.kepler.Object.Properties'].GetPropertiesByOptions =
        function(obj, ctx, ...)
            local req =
                properties_intf_types.GetPropertiesByOptionsReq.new(...):validate(
                    nil, nil, true)
            local rsp =
                properties_intf_types.GetPropertiesByOptionsRsp.new(cb(obj, ctx,
                                                                       req:unpack())):validate()
            return rsp:unpack(true)
        end
end

-- The callback needs to be registered during app initialization
function M.ImplPumpPropertiesGetOptions(cb)
    class('Pump')['bmc.kepler.Object.Properties'].GetOptions =
        function(obj, ctx, ...)
            local req =
                properties_intf_types.GetOptionsReq.new(...):validate(nil, nil,
                                                                      true)
            local rsp = properties_intf_types.GetOptionsRsp.new(cb(obj, ctx,
                                                                   req:unpack())):validate()
            return rsp:unpack(true)
        end
end

-- The callback needs to be registered during app initialization
function M.ImplPumpPropertiesGetPropertiesByOptions(cb)
    class('Pump')['bmc.kepler.Object.Properties'].GetPropertiesByOptions =
        function(obj, ctx, ...)
            local req =
                properties_intf_types.GetPropertiesByOptionsReq.new(...):validate(
                    nil, nil, true)
            local rsp =
                properties_intf_types.GetPropertiesByOptionsRsp.new(cb(obj, ctx,
                                                                       req:unpack())):validate()
            return rsp:unpack(true)
        end
end

-- The callback needs to be registered during app initialization
function M.ImplValvesValvesStartPatrol(cb)
    class('Valves')['bmc.kepler.Chassis.Valves'].StartPatrol =
        function(obj, ctx, ...)
            local req =
                valves_intf_types.StartPatrolReq.new(...):validate(nil, nil,
                                                                   true)
            local rsp = valves_intf_types.StartPatrolRsp.new(cb(obj, ctx,
                                                                req:unpack())):validate()
            return rsp:unpack(true)
        end
end

-- The callback needs to be registered during app initialization
function M.ImplValvesPropertiesGetOptions(cb)
    class('Valves')['bmc.kepler.Object.Properties'].GetOptions = function(obj,
                                                                          ctx, ...)
        local req = properties_intf_types.GetOptionsReq.new(...):validate(nil,
                                                                          nil,
                                                                          true)
        local rsp = properties_intf_types.GetOptionsRsp.new(cb(obj, ctx,
                                                               req:unpack())):validate()
        return rsp:unpack(true)
    end
end

-- The callback needs to be registered during app initialization
function M.ImplValvesPropertiesGetPropertiesByOptions(cb)
    class('Valves')['bmc.kepler.Object.Properties'].GetPropertiesByOptions =
        function(obj, ctx, ...)
            local req =
                properties_intf_types.GetPropertiesByOptionsReq.new(...):validate(
                    nil, nil, true)
            local rsp =
                properties_intf_types.GetPropertiesByOptionsRsp.new(cb(obj, ctx,
                                                                       req:unpack())):validate()
            return rsp:unpack(true)
        end
end

-- The callback needs to be registered during app initialization
function M.ImplValvePropertiesGetOptions(cb)
    class('Valve')['bmc.kepler.Object.Properties'].GetOptions = function(obj,
                                                                         ctx, ...)
        local req = properties_intf_types.GetOptionsReq.new(...):validate(nil,
                                                                          nil,
                                                                          true)
        local rsp = properties_intf_types.GetOptionsRsp.new(cb(obj, ctx,
                                                               req:unpack())):validate()
        return rsp:unpack(true)
    end
end

-- The callback needs to be registered during app initialization
function M.ImplValvePropertiesGetPropertiesByOptions(cb)
    class('Valve')['bmc.kepler.Object.Properties'].GetPropertiesByOptions =
        function(obj, ctx, ...)
            local req =
                properties_intf_types.GetPropertiesByOptionsReq.new(...):validate(
                    nil, nil, true)
            local rsp =
                properties_intf_types.GetPropertiesByOptionsRsp.new(cb(obj, ctx,
                                                                       req:unpack())):validate()
            return rsp:unpack(true)
        end
end

-- The callback needs to be registered during app initialization
function M.ImplFanGroupPropertiesGetOptions(cb)
    class('FanGroup')['bmc.kepler.Object.Properties'].GetOptions = function(obj,
                                                                            ctx, ...)
        local req = properties_intf_types.GetOptionsReq.new(...):validate(nil,
                                                                          nil,
                                                                          true)
        local rsp = properties_intf_types.GetOptionsRsp.new(cb(obj, ctx,
                                                               req:unpack())):validate()
        return rsp:unpack(true)
    end
end

-- The callback needs to be registered during app initialization
function M.ImplFanGroupPropertiesGetPropertiesByOptions(cb)
    class('FanGroup')['bmc.kepler.Object.Properties'].GetPropertiesByOptions =
        function(obj, ctx, ...)
            local req =
                properties_intf_types.GetPropertiesByOptionsReq.new(...):validate(
                    nil, nil, true)
            local rsp =
                properties_intf_types.GetPropertiesByOptionsRsp.new(cb(obj, ctx,
                                                                       req:unpack())):validate()
            return rsp:unpack(true)
        end
end

-- The callback needs to be registered during app initialization
function M.ImplPumpGroupPropertiesGetOptions(cb)
    class('PumpGroup')['bmc.kepler.Object.Properties'].GetOptions = function(
        obj, ctx, ...)
        local req = properties_intf_types.GetOptionsReq.new(...):validate(nil,
                                                                          nil,
                                                                          true)
        local rsp = properties_intf_types.GetOptionsRsp.new(cb(obj, ctx,
                                                               req:unpack())):validate()
        return rsp:unpack(true)
    end
end

-- The callback needs to be registered during app initialization
function M.ImplPumpGroupPropertiesGetPropertiesByOptions(cb)
    class('PumpGroup')['bmc.kepler.Object.Properties'].GetPropertiesByOptions =
        function(obj, ctx, ...)
            local req =
                properties_intf_types.GetPropertiesByOptionsReq.new(...):validate(
                    nil, nil, true)
            local rsp =
                properties_intf_types.GetPropertiesByOptionsRsp.new(cb(obj, ctx,
                                                                       req:unpack())):validate()
            return rsp:unpack(true)
        end
end

-- The callback needs to be registered during app initialization
function M.ImplCoolingConfigCoolingConfigSetCtrlMode(cb)
    class('CoolingConfig')['bmc.kepler.Systems.CoolingConfig'].SetCtrlMode =
        function(obj, ctx, ...)
            local req =
                cooling_config_intf_types.SetCtrlModeReq.new(...):validate(nil,
                                                                           nil,
                                                                           true)
            local rsp =
                cooling_config_intf_types.SetCtrlModeRsp.new(cb(obj, ctx,
                                                                req:unpack())):validate()
            return rsp:unpack(true)
        end
end

-- The callback needs to be registered during app initialization
function M.ImplCoolingConfigCoolingConfigSetManualLevel(cb)
    class('CoolingConfig')['bmc.kepler.Systems.CoolingConfig'].SetManualLevel =
        function(obj, ctx, ...)
            local req =
                cooling_config_intf_types.SetManualLevelReq.new(...):validate(
                    nil, nil, true)
            local rsp =
                cooling_config_intf_types.SetManualLevelRsp.new(cb(obj, ctx,
                                                                   req:unpack())):validate()
            return rsp:unpack(true)
        end
end

-- The callback needs to be registered during app initialization
function M.ImplCoolingConfigCoolingConfigSetMedium(cb)
    class('CoolingConfig')['bmc.kepler.Systems.CoolingConfig'].SetMedium =
        function(obj, ctx, ...)
            local req =
                cooling_config_intf_types.SetMediumReq.new(...):validate(nil,
                                                                         nil,
                                                                         true)
            local rsp = cooling_config_intf_types.SetMediumRsp.new(cb(obj, ctx,
                                                                      req:unpack())):validate()
            return rsp:unpack(true)
        end
end

-- The callback needs to be registered during app initialization
function M.ImplCoolingConfigCoolingConfigSetSmartCoolingMode(cb)
    class('CoolingConfig')['bmc.kepler.Systems.CoolingConfig']
        .SetSmartCoolingMode = function(obj, ctx, ...)
        local req =
            cooling_config_intf_types.SetSmartCoolingModeReq.new(...):validate(
                nil, nil, true)
        local rsp = cooling_config_intf_types.SetSmartCoolingModeRsp.new(cb(obj,
                                                                            ctx,
                                                                            req:unpack())):validate()
        return rsp:unpack(true)
    end
end

-- The callback needs to be registered during app initialization
function M.ImplCoolingConfigCoolingConfigGetAbnormalPolicyEffectiveStatus(cb)
    class('CoolingConfig')['bmc.kepler.Systems.CoolingConfig']
        .GetAbnormalPolicyEffectiveStatus =
        function(obj, ctx, ...)
            local req =
                cooling_config_intf_types.GetAbnormalPolicyEffectiveStatusReq
                    .new(...):validate(nil, nil, true)
            local rsp =
                cooling_config_intf_types.GetAbnormalPolicyEffectiveStatusRsp
                    .new(cb(obj, ctx, req:unpack())):validate()
            return rsp:unpack(true)
        end
end

-- The callback needs to be registered during app initialization
function M.ImplCoolingConfigCoolingConfigSetMinPWM(cb)
    class('CoolingConfig')['bmc.kepler.Systems.CoolingConfig'].SetMinPWM =
        function(obj, ctx, ...)
            local req =
                cooling_config_intf_types.SetMinPWMReq.new(...):validate(nil,
                                                                         nil,
                                                                         true)
            local rsp = cooling_config_intf_types.SetMinPWMRsp.new(cb(obj, ctx,
                                                                      req:unpack())):validate()
            return rsp:unpack(true)
        end
end

-- The callback needs to be registered during app initialization
function M.ImplCoolingConfigCoolingConfigGetComponentThermalZone(cb)
    class('CoolingConfig')['bmc.kepler.Systems.CoolingConfig']
        .GetComponentThermalZone = function(obj, ctx, ...)
        local req = cooling_config_intf_types.GetComponentThermalZoneReq
                        .new(...):validate(nil, nil, true)
        local rsp = cooling_config_intf_types.GetComponentThermalZoneRsp.new(cb(
                                                                                 obj,
                                                                                 ctx,
                                                                                 req:unpack())):validate()
        return rsp:unpack(true)
    end
end

-- The callback needs to be registered during app initialization
function M.ImplCoolingConfigCoolingConfigGetCustomTargetTemperatures(cb)
    class('CoolingConfig')['bmc.kepler.Systems.CoolingConfig']
        .GetCustomTargetTemperatures = function(obj, ctx, ...)
        local req = cooling_config_intf_types.GetCustomTargetTemperaturesReq
                        .new(...):validate(nil, nil, true)
        local rsp = cooling_config_intf_types.GetCustomTargetTemperaturesRsp
                        .new(cb(obj, ctx, req:unpack())):validate()
        return rsp:unpack(true)
    end
end

-- The callback needs to be registered during app initialization
function M.ImplCoolingConfigPropertiesGetOptions(cb)
    class('CoolingConfig')['bmc.kepler.Object.Properties'].GetOptions =
        function(obj, ctx, ...)
            local req =
                properties_intf_types.GetOptionsReq.new(...):validate(nil, nil,
                                                                      true)
            local rsp = properties_intf_types.GetOptionsRsp.new(cb(obj, ctx,
                                                                   req:unpack())):validate()
            return rsp:unpack(true)
        end
end

-- The callback needs to be registered during app initialization
function M.ImplCoolingConfigPropertiesGetPropertiesByOptions(cb)
    class('CoolingConfig')['bmc.kepler.Object.Properties']
        .GetPropertiesByOptions = function(obj, ctx, ...)
        local req =
            properties_intf_types.GetPropertiesByOptionsReq.new(...):validate(
                nil, nil, true)
        local rsp = properties_intf_types.GetPropertiesByOptionsRsp.new(cb(obj,
                                                                           ctx,
                                                                           req:unpack())):validate()
        return rsp:unpack(true)
    end
end

-- The callback needs to be registered during app initialization
function M.ImplAirCoolingConfigAirCoolingConfigSetCtrlMode(cb)
    class('AirCoolingConfig')['bmc.kepler.Systems.AirCoolingConfig'].SetCtrlMode =
        function(obj, ctx, ...)
            local req =
                air_cooling_config_intf_types.SetCtrlModeReq.new(...):validate(
                    nil, nil, true)
            local rsp = air_cooling_config_intf_types.SetCtrlModeRsp.new(cb(obj,
                                                                            ctx,
                                                                            req:unpack())):validate()
            return rsp:unpack(true)
        end
end

-- The callback needs to be registered during app initialization
function M.ImplAirCoolingConfigAirCoolingConfigSetManualSpeedPercent(cb)
    class('AirCoolingConfig')['bmc.kepler.Systems.AirCoolingConfig']
        .SetManualSpeedPercent = function(obj, ctx, ...)
        local req = air_cooling_config_intf_types.SetManualSpeedPercentReq.new(
                        ...):validate(nil, nil, true)
        local rsp = air_cooling_config_intf_types.SetManualSpeedPercentRsp.new(
                        cb(obj, ctx, req:unpack())):validate()
        return rsp:unpack(true)
    end
end

-- The callback needs to be registered during app initialization
function M.ImplAirCoolingConfigFanSnapshotGetActivatedPolicyFactors(cb)
    class('AirCoolingConfig')['bmc.kepler.Systems.FanSnapshot']
        .GetActivatedPolicyFactors = function(obj, ctx, ...)
        local req = fan_snapshot_intf_types.GetActivatedPolicyFactorsReq
                        .new(...):validate(nil, nil, true)
        local rsp = fan_snapshot_intf_types.GetActivatedPolicyFactorsRsp.new(cb(
                                                                                 obj,
                                                                                 ctx,
                                                                                 req:unpack())):validate()
        return rsp:unpack(true)
    end
end

-- The callback needs to be registered during app initialization
function M.ImplAirCoolingConfigPropertiesGetOptions(cb)
    class('AirCoolingConfig')['bmc.kepler.Object.Properties'].GetOptions =
        function(obj, ctx, ...)
            local req =
                properties_intf_types.GetOptionsReq.new(...):validate(nil, nil,
                                                                      true)
            local rsp = properties_intf_types.GetOptionsRsp.new(cb(obj, ctx,
                                                                   req:unpack())):validate()
            return rsp:unpack(true)
        end
end

-- The callback needs to be registered during app initialization
function M.ImplAirCoolingConfigPropertiesGetPropertiesByOptions(cb)
    class('AirCoolingConfig')['bmc.kepler.Object.Properties']
        .GetPropertiesByOptions = function(obj, ctx, ...)
        local req =
            properties_intf_types.GetPropertiesByOptionsReq.new(...):validate(
                nil, nil, true)
        local rsp = properties_intf_types.GetPropertiesByOptionsRsp.new(cb(obj,
                                                                           ctx,
                                                                           req:unpack())):validate()
        return rsp:unpack(true)
    end
end

-- The callback needs to be registered during app initialization
function M.ImplLiquidCoolingConfigLiquidCoolingConfigSetManualLevel(cb)
    class('LiquidCoolingConfig')['bmc.kepler.Systems.LiquidCoolingConfig']
        .SetManualLevel = function(obj, ctx, ...)
        local req =
            liquid_cooling_config_intf_types.SetManualLevelReq.new(...):validate(
                nil, nil, true)
        local rsp = liquid_cooling_config_intf_types.SetManualLevelRsp.new(cb(
                                                                               obj,
                                                                               ctx,
                                                                               req:unpack())):validate()
        return rsp:unpack(true)
    end
end

-- The callback needs to be registered during app initialization
function M.ImplLiquidCoolingConfigLiquidCoolingConfigSetCtrlMode(cb)
    class('LiquidCoolingConfig')['bmc.kepler.Systems.LiquidCoolingConfig']
        .SetCtrlMode = function(obj, ctx, ...)
        local req =
            liquid_cooling_config_intf_types.SetCtrlModeReq.new(...):validate(
                nil, nil, true)
        local rsp = liquid_cooling_config_intf_types.SetCtrlModeRsp.new(cb(obj,
                                                                           ctx,
                                                                           req:unpack())):validate()
        return rsp:unpack(true)
    end
end

-- The callback needs to be registered during app initialization
function M.ImplLiquidCoolingConfigPropertiesGetOptions(cb)
    class('LiquidCoolingConfig')['bmc.kepler.Object.Properties'].GetOptions =
        function(obj, ctx, ...)
            local req =
                properties_intf_types.GetOptionsReq.new(...):validate(nil, nil,
                                                                      true)
            local rsp = properties_intf_types.GetOptionsRsp.new(cb(obj, ctx,
                                                                   req:unpack())):validate()
            return rsp:unpack(true)
        end
end

-- The callback needs to be registered during app initialization
function M.ImplLiquidCoolingConfigPropertiesGetPropertiesByOptions(cb)
    class('LiquidCoolingConfig')['bmc.kepler.Object.Properties']
        .GetPropertiesByOptions = function(obj, ctx, ...)
        local req =
            properties_intf_types.GetPropertiesByOptionsReq.new(...):validate(
                nil, nil, true)
        local rsp = properties_intf_types.GetPropertiesByOptionsRsp.new(cb(obj,
                                                                           ctx,
                                                                           req:unpack())):validate()
        return rsp:unpack(true)
    end
end

-- The callback needs to be registered during app initialization
function M.ImplCoolingFanPropertiesGetOptions(cb)
    class('CoolingFan')['bmc.kepler.Object.Properties'].GetOptions = function(
        obj, ctx, ...)
        local req = properties_intf_types.GetOptionsReq.new(...):validate(nil,
                                                                          nil,
                                                                          true)
        local rsp = properties_intf_types.GetOptionsRsp.new(cb(obj, ctx,
                                                               req:unpack())):validate()
        return rsp:unpack(true)
    end
end

-- The callback needs to be registered during app initialization
function M.ImplCoolingFanPropertiesGetPropertiesByOptions(cb)
    class('CoolingFan')['bmc.kepler.Object.Properties'].GetPropertiesByOptions =
        function(obj, ctx, ...)
            local req =
                properties_intf_types.GetPropertiesByOptionsReq.new(...):validate(
                    nil, nil, true)
            local rsp =
                properties_intf_types.GetPropertiesByOptionsRsp.new(cb(obj, ctx,
                                                                       req:unpack())):validate()
            return rsp:unpack(true)
        end
end

-- The callback needs to be registered during app initialization
function M.ImplCoolingPumpPropertiesGetOptions(cb)
    class('CoolingPump')['bmc.kepler.Object.Properties'].GetOptions = function(
        obj, ctx, ...)
        local req = properties_intf_types.GetOptionsReq.new(...):validate(nil,
                                                                          nil,
                                                                          true)
        local rsp = properties_intf_types.GetOptionsRsp.new(cb(obj, ctx,
                                                               req:unpack())):validate()
        return rsp:unpack(true)
    end
end

-- The callback needs to be registered during app initialization
function M.ImplCoolingPumpPropertiesGetPropertiesByOptions(cb)
    class('CoolingPump')['bmc.kepler.Object.Properties'].GetPropertiesByOptions =
        function(obj, ctx, ...)
            local req =
                properties_intf_types.GetPropertiesByOptionsReq.new(...):validate(
                    nil, nil, true)
            local rsp =
                properties_intf_types.GetPropertiesByOptionsRsp.new(cb(obj, ctx,
                                                                       req:unpack())):validate()
            return rsp:unpack(true)
        end
end

-- The callback needs to be registered during app initialization
function M.ImplCoolingRequirementCoolingRequirementSetTargetTemperature(cb)
    class('CoolingRequirement')['bmc.kepler.Systems.CoolingRequirement']
        .SetTargetTemperature = function(obj, ctx, ...)
        local req = cooling_requirement_intf_types.SetTargetTemperatureReq.new(
                        ...):validate(nil, nil, true)
        local rsp = cooling_requirement_intf_types.SetTargetTemperatureRsp.new(
                        cb(obj, ctx, req:unpack())):validate()
        return rsp:unpack(true)
    end
end

-- The callback needs to be registered during app initialization
function M.ImplCoolingRequirementCoolingRequirementSetSmartCoolingTargetTemperature(
    cb)
    class('CoolingRequirement')['bmc.kepler.Systems.CoolingRequirement']
        .SetSmartCoolingTargetTemperature =
        function(obj, ctx, ...)
            local req =
                cooling_requirement_intf_types.SetSmartCoolingTargetTemperatureReq
                    .new(...):validate(nil, nil, true)
            local rsp =
                cooling_requirement_intf_types.SetSmartCoolingTargetTemperatureRsp
                    .new(cb(obj, ctx, req:unpack())):validate()
            return rsp:unpack(true)
        end
end

-- The callback needs to be registered during app initialization
function M.ImplCoolingRequirementCoolingRequirementSetBasicCoolingTargetTemperature(
    cb)
    class('CoolingRequirement')['bmc.kepler.Systems.CoolingRequirement']
        .SetBasicCoolingTargetTemperature =
        function(obj, ctx, ...)
            local req =
                cooling_requirement_intf_types.SetBasicCoolingTargetTemperatureReq
                    .new(...):validate(nil, nil, true)
            local rsp =
                cooling_requirement_intf_types.SetBasicCoolingTargetTemperatureRsp
                    .new(cb(obj, ctx, req:unpack())):validate()
            return rsp:unpack(true)
        end
end

-- The callback needs to be registered during app initialization
function M.ImplCoolingRequirementCoolingRequirementSetMaxAllowedTemperature(cb)
    class('CoolingRequirement')['bmc.kepler.Systems.CoolingRequirement']
        .SetMaxAllowedTemperature = function(obj, ctx, ...)
        local req = cooling_requirement_intf_types.SetMaxAllowedTemperatureReq
                        .new(...):validate(nil, nil, true)
        local rsp = cooling_requirement_intf_types.SetMaxAllowedTemperatureRsp
                        .new(cb(obj, ctx, req:unpack())):validate()
        return rsp:unpack(true)
    end
end

-- The callback needs to be registered during app initialization
function M.ImplCoolingRequirementCoolingRequirementSetFailedValue(cb)
    class('CoolingRequirement')['bmc.kepler.Systems.CoolingRequirement']
        .SetFailedValue = function(obj, ctx, ...)
        local req =
            cooling_requirement_intf_types.SetFailedValueReq.new(...):validate(
                nil, nil, true)
        local rsp = cooling_requirement_intf_types.SetFailedValueRsp.new(cb(obj,
                                                                            ctx,
                                                                            req:unpack())):validate()
        return rsp:unpack(true)
    end
end

-- The callback needs to be registered during app initialization
function M.ImplCoolingRequirementCoolingRequirementSetBackupTemperatureCelsius(
    cb)
    class('CoolingRequirement')['bmc.kepler.Systems.CoolingRequirement']
        .SetBackupTemperatureCelsius = function(obj, ctx, ...)
        local req =
            cooling_requirement_intf_types.SetBackupTemperatureCelsiusReq.new(
                ...):validate(nil, nil, true)
        local rsp =
            cooling_requirement_intf_types.SetBackupTemperatureCelsiusRsp.new(
                cb(obj, ctx, req:unpack())):validate()
        return rsp:unpack(true)
    end
end

-- The callback needs to be registered during app initialization
function M.ImplCoolingRequirementCoolingRequirementSetBackupTemperatureStatus(cb)
    class('CoolingRequirement')['bmc.kepler.Systems.CoolingRequirement']
        .SetBackupTemperatureStatus = function(obj, ctx, ...)
        local req = cooling_requirement_intf_types.SetBackupTemperatureStatusReq
                        .new(...):validate(nil, nil, true)
        local rsp = cooling_requirement_intf_types.SetBackupTemperatureStatusRsp
                        .new(cb(obj, ctx, req:unpack())):validate()
        return rsp:unpack(true)
    end
end

-- The callback needs to be registered during app initialization
function M.ImplCoolingRequirementPropertiesGetOptions(cb)
    class('CoolingRequirement')['bmc.kepler.Object.Properties'].GetOptions =
        function(obj, ctx, ...)
            local req =
                properties_intf_types.GetOptionsReq.new(...):validate(nil, nil,
                                                                      true)
            local rsp = properties_intf_types.GetOptionsRsp.new(cb(obj, ctx,
                                                                   req:unpack())):validate()
            return rsp:unpack(true)
        end
end

-- The callback needs to be registered during app initialization
function M.ImplCoolingRequirementPropertiesGetPropertiesByOptions(cb)
    class('CoolingRequirement')['bmc.kepler.Object.Properties']
        .GetPropertiesByOptions = function(obj, ctx, ...)
        local req =
            properties_intf_types.GetPropertiesByOptionsReq.new(...):validate(
                nil, nil, true)
        local rsp = properties_intf_types.GetPropertiesByOptionsRsp.new(cb(obj,
                                                                           ctx,
                                                                           req:unpack())):validate()
        return rsp:unpack(true)
    end
end

-- The callback needs to be registered during app initialization
function M.ImplCoolingPolicyCoolingPolicySetCustomCoolingPolicy(cb)
    class('CoolingPolicy')['bmc.kepler.Systems.CoolingPolicy']
        .SetCustomCoolingPolicy = function(obj, ctx, ...)
        local req =
            cooling_policy_intf_types.SetCustomCoolingPolicyReq.new(...):validate(
                nil, nil, true)
        local rsp = cooling_policy_intf_types.SetCustomCoolingPolicyRsp.new(cb(
                                                                                obj,
                                                                                ctx,
                                                                                req:unpack())):validate()
        return rsp:unpack(true)
    end
end

-- The callback needs to be registered during app initialization
function M.ImplCoolingPolicyCoolingPolicySetHysteresis(cb)
    class('CoolingPolicy')['bmc.kepler.Systems.CoolingPolicy'].SetHysteresis =
        function(obj, ctx, ...)
            local req =
                cooling_policy_intf_types.SetHysteresisReq.new(...):validate(
                    nil, nil, true)
            local rsp =
                cooling_policy_intf_types.SetHysteresisRsp.new(cb(obj, ctx,
                                                                  req:unpack())):validate()
            return rsp:unpack(true)
        end
end

-- The callback needs to be registered during app initialization
function M.ImplCoolingPolicyPropertiesGetOptions(cb)
    class('CoolingPolicy')['bmc.kepler.Object.Properties'].GetOptions =
        function(obj, ctx, ...)
            local req =
                properties_intf_types.GetOptionsReq.new(...):validate(nil, nil,
                                                                      true)
            local rsp = properties_intf_types.GetOptionsRsp.new(cb(obj, ctx,
                                                                   req:unpack())):validate()
            return rsp:unpack(true)
        end
end

-- The callback needs to be registered during app initialization
function M.ImplCoolingPolicyPropertiesGetPropertiesByOptions(cb)
    class('CoolingPolicy')['bmc.kepler.Object.Properties']
        .GetPropertiesByOptions = function(obj, ctx, ...)
        local req =
            properties_intf_types.GetPropertiesByOptionsReq.new(...):validate(
                nil, nil, true)
        local rsp = properties_intf_types.GetPropertiesByOptionsRsp.new(cb(obj,
                                                                           ctx,
                                                                           req:unpack())):validate()
        return rsp:unpack(true)
    end
end

-- The callback needs to be registered during app initialization
function M.ImplCoolingAreaPropertiesGetOptions(cb)
    class('CoolingArea')['bmc.kepler.Object.Properties'].GetOptions = function(
        obj, ctx, ...)
        local req = properties_intf_types.GetOptionsReq.new(...):validate(nil,
                                                                          nil,
                                                                          true)
        local rsp = properties_intf_types.GetOptionsRsp.new(cb(obj, ctx,
                                                               req:unpack())):validate()
        return rsp:unpack(true)
    end
end

-- The callback needs to be registered during app initialization
function M.ImplCoolingAreaPropertiesGetPropertiesByOptions(cb)
    class('CoolingArea')['bmc.kepler.Object.Properties'].GetPropertiesByOptions =
        function(obj, ctx, ...)
            local req =
                properties_intf_types.GetPropertiesByOptionsReq.new(...):validate(
                    nil, nil, true)
            local rsp =
                properties_intf_types.GetPropertiesByOptionsRsp.new(cb(obj, ctx,
                                                                       req:unpack())):validate()
            return rsp:unpack(true)
        end
end

-- The callback needs to be registered during app initialization
function M.ImplCoolingPoliciesCoolingPoliciesGetSpecificPWM(cb)
    class('CoolingPolicies')['bmc.kepler.Chassis.CoolingPolicies']
        .GetSpecificPWM = function(obj, ctx, ...)
        local req =
            cooling_policies_intf_types.GetSpecificPWMReq.new(...):validate(nil,
                                                                            nil,
                                                                            true)
        local rsp = cooling_policies_intf_types.GetSpecificPWMRsp.new(cb(obj,
                                                                         ctx,
                                                                         req:unpack())):validate()
        return rsp:unpack(true)
    end
end

-- The callback needs to be registered during app initialization
function M.ImplCoolingPoliciesPropertiesGetOptions(cb)
    class('CoolingPolicies')['bmc.kepler.Object.Properties'].GetOptions =
        function(obj, ctx, ...)
            local req =
                properties_intf_types.GetOptionsReq.new(...):validate(nil, nil,
                                                                      true)
            local rsp = properties_intf_types.GetOptionsRsp.new(cb(obj, ctx,
                                                                   req:unpack())):validate()
            return rsp:unpack(true)
        end
end

-- The callback needs to be registered during app initialization
function M.ImplCoolingPoliciesPropertiesGetPropertiesByOptions(cb)
    class('CoolingPolicies')['bmc.kepler.Object.Properties']
        .GetPropertiesByOptions = function(obj, ctx, ...)
        local req =
            properties_intf_types.GetPropertiesByOptionsReq.new(...):validate(
                nil, nil, true)
        local rsp = properties_intf_types.GetPropertiesByOptionsRsp.new(cb(obj,
                                                                           ctx,
                                                                           req:unpack())):validate()
        return rsp:unpack(true)
    end
end

-- The callback needs to be registered during app initialization
function M.ImplCustomTarTempCtrInit(cb)
    Feature1:set_default_callback("CustomTarTempCtrInit", cb)
end

function M.CustomTarTempCtrInit(...)
    local req = private_class_types.CustomTarTempCtrInitReq.new(...):validate(
                    nil, nil, true)
    local rsp = private_class_types.CustomTarTempCtrInitRsp.new(
                    Feature1:CustomTarTempCtrInit(req:unpack())):validate()
    return rsp:unpack(true)
end

-- The callback needs to be registered during app initialization
function M.ImplCustomPidUpdateSensorValue(cb)
    Feature1:set_default_callback("CustomPidUpdateSensorValue", cb)
end

function M.CustomPidUpdateSensorValue(...)
    local req =
        private_class_types.CustomPidUpdateSensorValueReq.new(...):validate(nil,
                                                                            nil,
                                                                            true)
    local rsp = private_class_types.CustomPidUpdateSensorValueRsp.new(
                    Feature1:CustomPidUpdateSensorValue(req:unpack())):validate()
    return rsp:unpack(true)
end

-- The callback needs to be registered during app initialization
function M.ImplCustomPidCountValue(cb)
    Feature1:set_default_callback("CustomPidCountValue", cb)
end

function M.CustomPidCountValue(...)
    local req = private_class_types.CustomPidCountValueReq.new(...):validate(
                    nil, nil, true)
    local rsp = private_class_types.CustomPidCountValueRsp.new(
                    Feature1:CustomPidCountValue(req:unpack())):validate()
    return rsp:unpack(true)
end

-- The callback needs to be registered during app initialization
function M.ImplCustomSetTargetTempConfig(cb)
    Feature1:set_default_callback("CustomSetTargetTempConfig", cb)
end

function M.CustomSetTargetTempConfig(...)
    local req =
        private_class_types.CustomSetTargetTempConfigReq.new(...):validate(nil,
                                                                           nil,
                                                                           true)
    local rsp = private_class_types.CustomSetTargetTempConfigRsp.new(
                    Feature1:CustomSetTargetTempConfig(req:unpack())):validate()
    return rsp:unpack(true)
end

-- The callback needs to be registered during app initialization
function M.ImplCustomSetFanConfig(cb)
    Feature1:set_default_callback("CustomSetFanConfig", cb)
end

function M.CustomSetFanConfig(...)
    local req = private_class_types.CustomSetFanConfigReq.new(...):validate(nil,
                                                                            nil,
                                                                            true)
    local rsp = private_class_types.CustomSetFanConfigRsp.new(
                    Feature1:CustomSetFanConfig(req:unpack())):validate()
    return rsp:unpack(true)
end

-- The callback needs to be registered during app initialization
function M.ImplCustomSetRealTimeTemp(cb)
    Feature1:set_default_callback("CustomSetRealTimeTemp", cb)
end

function M.CustomSetRealTimeTemp(...)
    local req = private_class_types.CustomSetRealTimeTempReq.new(...):validate(
                    nil, nil, true)
    local rsp = private_class_types.CustomSetRealTimeTempRsp.new(
                    Feature1:CustomSetRealTimeTemp(req:unpack())):validate()
    return rsp:unpack(true)
end

-- The callback needs to be registered during app initialization
function M.ImplCustomSetEnvTempConfig(cb)
    Feature1:set_default_callback("CustomSetEnvTempConfig", cb)
end

function M.CustomSetEnvTempConfig(...)
    local req = private_class_types.CustomSetEnvTempConfigReq.new(...):validate(
                    nil, nil, true)
    local rsp = private_class_types.CustomSetEnvTempConfigRsp.new(
                    Feature1:CustomSetEnvTempConfig(req:unpack())):validate()
    return rsp:unpack(true)
end

-- The callback needs to be registered during app initialization
function M.ImplCustomSetFanAlarmSpeed(cb)
    Feature1:set_default_callback("CustomSetFanAlarmSpeed", cb)
end

function M.CustomSetFanAlarmSpeed(...)
    local req = private_class_types.CustomSetFanAlarmSpeedReq.new(...):validate(
                    nil, nil, true)
    local rsp = private_class_types.CustomSetFanAlarmSpeedRsp.new(
                    Feature1:CustomSetFanAlarmSpeed(req:unpack())):validate()
    return rsp:unpack(true)
end

-- The callback needs to be registered during app initialization
function M.ImplCustomReadInfo(cb)
    Feature1:set_default_callback("CustomReadInfo", cb)
end

function M.CustomReadInfo(...)
    local req = private_class_types.CustomReadInfoReq.new(...):validate(nil,
                                                                        nil,
                                                                        true)
    local rsp = private_class_types.CustomReadInfoRsp.new(
                    Feature1:CustomReadInfo(req:unpack())):validate()
    return rsp:unpack(true)
end

return M
