Initial commit
This commit is contained in:
@@ -0,0 +1,328 @@
|
||||
# Air cooled Witherspoon fan policy for PDM.
|
||||
#
|
||||
# An air cooled Witherspoon requires a minimum of three functional fans
|
||||
# enclosures or six functional fan rotors across all enclosures.
|
||||
# If the number of functional fan enclosures is below three, soft poweroff
|
||||
# the system, whereas if the number of fan rotors drop below six, an
|
||||
# immediate hard poweroff of the system occurs.
|
||||
|
||||
- name: fan enclosures
|
||||
description: >
|
||||
'An air cooled Witherspoon has four fan enclosures to monitor.'
|
||||
class: group
|
||||
group: path
|
||||
members:
|
||||
- meta: FAN
|
||||
path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan0
|
||||
- meta: FAN
|
||||
path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan1
|
||||
- meta: FAN
|
||||
path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan2
|
||||
- meta: FAN
|
||||
path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan3
|
||||
|
||||
- name: fan rotors
|
||||
description: >
|
||||
'An air cooled Witherspoon has eight fan rotors to monitor.'
|
||||
class: group
|
||||
group: path
|
||||
members:
|
||||
- meta: FAN
|
||||
path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan0/fan0_0
|
||||
- meta: FAN
|
||||
path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan0/fan0_1
|
||||
- meta: FAN
|
||||
path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan1/fan1_0
|
||||
- meta: FAN
|
||||
path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan1/fan1_1
|
||||
- meta: FAN
|
||||
path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan2/fan2_0
|
||||
- meta: FAN
|
||||
path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan2/fan2_1
|
||||
- meta: FAN
|
||||
path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan3/fan3_0
|
||||
- meta: FAN
|
||||
path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan3/fan3_1
|
||||
|
||||
- name: chassis state
|
||||
description: >
|
||||
'Witherspoon has a single chassis to monitor.'
|
||||
class: group
|
||||
group: path
|
||||
members:
|
||||
- meta: CHASSISSTATE
|
||||
path: /xyz/openbmc_project/state/chassis0
|
||||
|
||||
- name: chassis
|
||||
description: >
|
||||
'Witherspoon has a single chassis to monitor.'
|
||||
class: group
|
||||
group: path
|
||||
members:
|
||||
- meta: CHASSIS
|
||||
path: /xyz/openbmc_project/inventory/system/chassis
|
||||
|
||||
- name: fan present
|
||||
description: >
|
||||
'Monitor the presence state of each fan.'
|
||||
class: group
|
||||
group: property
|
||||
type: boolean
|
||||
members:
|
||||
- interface: xyz.openbmc_project.Inventory.Item
|
||||
meta: PRESENT
|
||||
property: Present
|
||||
|
||||
- name: fan functional
|
||||
description: >
|
||||
'Monitor the functional state of each fan.'
|
||||
class: group
|
||||
group: property
|
||||
type: boolean
|
||||
members:
|
||||
- interface: xyz.openbmc_project.State.Decorator.OperationalStatus
|
||||
meta: FUNCTIONAL
|
||||
property: Functional
|
||||
|
||||
- name: chassis powered
|
||||
description: >
|
||||
'Monitor the chassis power state.'
|
||||
class: group
|
||||
group: property
|
||||
type: string
|
||||
members:
|
||||
- interface: xyz.openbmc_project.State.Chassis
|
||||
meta: CHASSIS_STATE
|
||||
property: CurrentPowerState
|
||||
|
||||
- name: chassis air cooled
|
||||
description: >
|
||||
'Monitor the chassis cooling type.'
|
||||
class: group
|
||||
group: property
|
||||
type: boolean
|
||||
members:
|
||||
- interface: xyz.openbmc_project.Inventory.Decorator.CoolingType
|
||||
meta: COOLING_TYPE
|
||||
property: WaterCooled
|
||||
|
||||
- name: watch fan present
|
||||
description: >
|
||||
'Trigger logic on fan enclosure presence state changes.'
|
||||
class: watch
|
||||
watch: property
|
||||
paths: fan enclosures
|
||||
properties: fan present
|
||||
callback: check cooling type
|
||||
|
||||
- name: watch fan functional
|
||||
description: >
|
||||
'Trigger logic on fan enclosure functional state changes.'
|
||||
class: watch
|
||||
watch: property
|
||||
paths: fan enclosures
|
||||
properties: fan functional
|
||||
callback: check cooling type
|
||||
|
||||
- name: watch fan rotor functional
|
||||
description: >
|
||||
'Trigger logic on fan rotor functional state changes.'
|
||||
class: watch
|
||||
watch: property
|
||||
paths: fan rotors
|
||||
properties: fan functional
|
||||
callback: check cooling type
|
||||
|
||||
- name: watch chassis state
|
||||
description: >
|
||||
'Trigger logic on chassis power state changes.'
|
||||
class: watch
|
||||
watch: property
|
||||
paths: chassis state
|
||||
properties: chassis powered
|
||||
callback: check cooling type
|
||||
|
||||
- name: watch cooling type
|
||||
description: >
|
||||
'Maintain a cache of the chassis cooling type.'
|
||||
class: watch
|
||||
watch: property
|
||||
paths: chassis
|
||||
properties: chassis air cooled
|
||||
|
||||
- name: check cooling type
|
||||
description: >
|
||||
'If this condition passes the chassis is air cooled.'
|
||||
class: condition
|
||||
condition: count
|
||||
paths: chassis
|
||||
properties: chassis air cooled
|
||||
callback: check power
|
||||
countop: '=='
|
||||
countbound: 0
|
||||
op: '=='
|
||||
bound: true
|
||||
|
||||
- name: check power
|
||||
description: >
|
||||
'If the chassis has power, check fans.'
|
||||
class: condition
|
||||
condition: count
|
||||
paths: chassis state
|
||||
properties: chassis powered
|
||||
callback: check fans
|
||||
countop: '>'
|
||||
countbound: 0
|
||||
op: '=='
|
||||
bound: xyz.openbmc_project.State.Chassis.PowerState.On
|
||||
|
||||
- name: check fans
|
||||
description: >
|
||||
'Verify there are at least three functional fan enclosures and at least
|
||||
six functional fan rotors, power off if not.'
|
||||
class: callback
|
||||
callback: group
|
||||
members:
|
||||
- check group presence
|
||||
- check group functional enclosures
|
||||
- check group functional rotors
|
||||
|
||||
- name: check group presence
|
||||
description: >
|
||||
'If this condition passes more than one fan has been unplugged
|
||||
for more than 25 seconds. Shut the system down. Count present
|
||||
fans rather than non-present fans since the latter would pass
|
||||
if the fan has not been created for some reason.
|
||||
|
||||
For a more detailed definition of unplugged, consult the documentation
|
||||
of xyz.openbmc_project.Inventory.Item and/or the documentation
|
||||
of the fan inventory object implementation.'
|
||||
class: condition
|
||||
condition: count
|
||||
paths: fan enclosures
|
||||
properties: fan present
|
||||
defer: 25000000us
|
||||
callback: log and shutdown
|
||||
countop: '<'
|
||||
countbound: 3
|
||||
op: '=='
|
||||
bound: true
|
||||
|
||||
- name: check group functional enclosures
|
||||
description: >
|
||||
'If this condition passes more than one fan enclosure in the group has been
|
||||
marked as nonfunctional for five seconds. Shut the system down.
|
||||
|
||||
For a more detailed definition of nonfunctional, consult the documentation
|
||||
of xyz.openbmc_project.State.Decorator.OperationalStatus and/or the
|
||||
documentation of the fan inventory object implementation.'
|
||||
class: condition
|
||||
condition: count
|
||||
paths: fan enclosures
|
||||
properties: fan functional
|
||||
defer: 5000000us
|
||||
callback: log and shutdown
|
||||
countop: '>'
|
||||
countbound: 1
|
||||
op: '=='
|
||||
bound: false
|
||||
|
||||
- name: check group functional rotors
|
||||
description: >
|
||||
'If this condition passes more than two fan rotors in the group have been
|
||||
marked as nonfunctional for five seconds. Immediately power off.
|
||||
|
||||
For a more detailed definition of nonfunctional, consult the documentation
|
||||
of xyz.openbmc_project.State.Decorator.OperationalStatus and/or the
|
||||
documentation of the fan inventory object implementation.'
|
||||
class: condition
|
||||
condition: count
|
||||
paths: fan rotors
|
||||
properties: fan functional
|
||||
defer: 5000000us
|
||||
callback: log and poweroff
|
||||
countop: '>'
|
||||
countbound: 2
|
||||
op: '=='
|
||||
bound: false
|
||||
|
||||
- name: log and poweroff
|
||||
description: >
|
||||
'Immediately poweroff, log an event in the journal, and create an
|
||||
error log.'
|
||||
class: callback
|
||||
callback: group
|
||||
members:
|
||||
- hard poweroff
|
||||
- log hard poweroff
|
||||
- create shutdown error
|
||||
|
||||
- name: log and shutdown
|
||||
description: >
|
||||
'Shut the system down, log an event in the journal, and create an
|
||||
error log.'
|
||||
class: callback
|
||||
callback: group
|
||||
members:
|
||||
- shutdown
|
||||
- log shutdown
|
||||
- create shutdown error
|
||||
|
||||
- name: hard poweroff
|
||||
description: >
|
||||
'Immediately power off the system.'
|
||||
class: callback
|
||||
callback: method
|
||||
service: org.freedesktop.systemd1
|
||||
path: /org/freedesktop/systemd1
|
||||
interface: org.freedesktop.systemd1.Manager
|
||||
method: StartUnit
|
||||
args:
|
||||
- value: obmc-chassis-hard-poweroff@0.target
|
||||
type: string
|
||||
- value: replace
|
||||
type: string
|
||||
|
||||
- name: shutdown
|
||||
description: >
|
||||
'Shut down the system.'
|
||||
class: callback
|
||||
callback: method
|
||||
service: org.freedesktop.systemd1
|
||||
path: /org/freedesktop/systemd1
|
||||
interface: org.freedesktop.systemd1.Manager
|
||||
method: StartUnit
|
||||
args:
|
||||
- value: obmc-host-shutdown@0.target
|
||||
type: string
|
||||
- value: replace
|
||||
type: string
|
||||
|
||||
- name: log hard poweroff
|
||||
description: >
|
||||
'Log a hard poweroff event to the systemd journal.'
|
||||
class: callback
|
||||
callback: journal
|
||||
paths: chassis state
|
||||
properties: chassis powered
|
||||
severity: ERR
|
||||
message: Immediate poweroff of system. There are not enough functional fans.
|
||||
|
||||
- name: log shutdown
|
||||
description: >
|
||||
'Log a shutdown event to the systemd journal.'
|
||||
class: callback
|
||||
callback: journal
|
||||
paths: chassis state
|
||||
properties: chassis powered
|
||||
severity: ERR
|
||||
message: Request shutdown of system. There are not enough functional fans.
|
||||
|
||||
- name: create shutdown error
|
||||
description: >
|
||||
'Create a Fan Shutdown Error log.'
|
||||
class: callback
|
||||
callback: elog
|
||||
paths: chassis state
|
||||
properties: chassis powered
|
||||
error: xyz::openbmc_project::State::Shutdown::Inventory::Error::Fan
|
||||
Reference in New Issue
Block a user