Configuration Properties Inheritance and Override
The following diagram illustrates a portion of the standard device class hierarchy. (A device class is a special type of organizer used to manage how the system models and monitors devices.)
At the root of the device hierarchy is the Devices object. All device class configuration properties are defined here. Their values are the default values for the entire hierarchy.
- zPingMonitorIgnore- Turns off all daemons that use ping. By default, its value at the root of the hierarchy is False.
- zSNMPMonitorIgnore - Turns off all daemons that use SNMP. By default, its value at the root of the hierarchy is True.
Through inheritance, properties that are defined at the root of the hierarchy apply to all objects beneath that node. So, at the /Devices/Server/Linux level of the device class hierarchy, the value of these two properties is the same as at /Devices, even though the property is not set explicitly at /Devices/Server/Linux. Inheritance simplifies system configuration because default values that are set at the root level apply to all devices regardless of their device class.
To further customize the system, you can change a specific configuration property further down the hierarchy without having to change the definitions of other configuration properties. As shown in the following illustration, the value of zPingMonitorIgnore is changed so that ping monitoring is performed at the /Devices/Server/Windows level.
This locally defined value for zPingMonitorIgnore overrides the value that is set at the root of the hierarchy. No other properties at this level are affected by this local change; they continue to inherit the value that is set at the root.
Configuration properties allow you to configure the system at a very granular level, down to a particular device. For example, in the following illustration, the device named dev.zenoss.com has the value of SNMP community set to private. This value overrides the root value of public.
If you change the SNMP Community value of dev.zenoss.com to public, it matches the value that is set at the root, but is still explicitly defined. Only if you remove the locally defined property does it again inherit the value of the property that is set at the root.