. The getInventory method modifies the values supplied by the data source and populates the template with the modified values. This method will return the modified inventory input to the template. The InventoryHandler implementation can be invoked for implementation of any task, data source including implementation at the attribute level. Flexibility has been provided in CMS to use a particular InventoryHandler instantiation merely for a specific attribute. This can be achieved by writing a class and passing that class as the parameter for the addInventoryInput method of DataSourceGenerator When this is done, while being filled by the data source, val- ues are assigned to the attributes by the task that is passed by the InventoryHandler instance to the addInventoryInput method. 11.2.4.7 Task Auditing Auditing allows administrators to know about the tasks that have been executed, the devices over which the configurations have been executed, the attributes changed during the configurations and when the device configurations were executed. It is possible to define the tasks that can be performed over any given set of devices. When the device list is selected and the task executed, each configuration that has been performed over a device is logged in the database. 11 Configuration Management There are three types of auditing: 1. Task-level auditing: shows which tasks have been performed. 2. Device-level auditing: shows which tasks have been carried out at the device level. 3. Attribute-level auditing: records details of the attributes that have been configured. 11.2.4.7.1 Audit Details Audit details are stored in tables corresponding to each of the three types of auditing. For example, the task level audit table contains the information shown in Table 11.3. The audit level is a measure of the type of auditing needed for administering the configuration carried out over a device: Level 0 means to suppress auditing, so that there will be no auditing of the config- uration details. Level 1 means to audit only device and 