Configuration properties inheritance and override
The following diagram illustrates a portion of the standard device class hierarchy. A device class is a type of organizer that manages how the system models and monitors devices. At the root of the device hierarchy is the Devices object, under which all device class configuration properties are defined. Property values at the root level provide 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 at a lower level of the hierarchy without changing 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, for the device named dev.zenoss.com, the value of SNMPCommunity set to private. This value overrides the root value of public.
If you change the SNMPCommunity 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.