blob: bfdcd1bb602bf16803109fcee1e7446ee0f57fd1 [file] [log] [blame]
# Air cooled Swift fan policy for PDM.
#
# An air cooled Swift requires a minimum of three functional fan enclosures.
# If the number of functional fan enclosures is below three, soft poweroff
# the system.
- name: fan enclosures
description: >
'An air cooled Swift 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: chassis state
description: >
'Swift has a single chassis to monitor.'
class: group
group: path
members:
- meta: CHASSISSTATE
path: /xyz/openbmc_project/state/chassis0
- name: chassis
description: >
'Swift 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 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,
power off if not.'
class: callback
callback: group
members:
- check group presence
- check group functional enclosures
- 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: 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