###
###  Copyright 2000-2007 University of Illinois Board of Trustees
###  All rights reserved. 
###
###  psgconf-intro - introduction to psgconf
###
###  Campus Information Technologies and Educational Services
###  University of Illinois at Urbana-Champaign
###

=head1 NAME

psgconf-intro - introduction to psgconf

=head1 DESCRIPTION

B<psgconf> is a modular, object-oriented framework for automating system
configuration tasks.  It is designed to meet the needs of both the
day-to-day system manager and the experienced infrastructure architect.

There are several types of objects in the B<psgconf> system, each of
which serve a specific purpose.

=head2 The B<PSGConf> Object

The central object in the B<psgconf> system is provided by the B<PSGConf>
module.  The B<PSGConf> object is extremely simple; it's primary function
is to coordinate the activity of the other objects, which are where most
of the work is actually done.

=head2 Data Objects

Instead of storing configuration data in static variables, B<psgconf>
encapsulates data in objects.  This provides a great deal of flexibility
in configuring the system, because each data object can provide whatever
methods are appropriate for the encapsulated data.  These methods can
then be called from a data store (e.g., a config file; see below) to
manipulate the data, which configures the system.

The B<psgconf> system includes several useful modules that provide classes
that can be instantiated to create new Data objects.  However, new Data
object classes can also be written to encapsulate more specialized data.
For more information, see L<PSGConf::Data>.

=head2 DataStore Objects

Instead of providing a fixed mechanism for manipulating configuration data
(such as a config file format), B<psgconf> delegates this functionality
to a special object, called a DataStore object.  Because this mechanism
is implemented in a seperate module, new data stores can easily be
implemented.

DataStore objects are instantiated direcly by the B<PSGConf> object,
based on entries in the F<psgconf_modules> file.

The B<psgconf> system includes a sample DataStore implementation called
B<PSGConf::DataStore::ConfigFile> that reads configuration data from a
local configuration file.  For more information, see
L<PSGConf::DataStore::ConfigFile>.

=head2 Action Objects

Action objects represent an action that may need to be performed on the
system.  They provide methods for checking whether the action is necessary,
displaying details about the changes that would be made to the system,
and actually performing the action.

The B<psgconf> system includes several useful modules that provide
classes that can be instantiated to create new Action objects.  However,
new Action object classes can also be written to represent more
specialized actions.  For more information, see L<PSGConf::Action>.

=head2 Control Objects

Control objects are the real workhorse of the B<psgconf> system.  They are
responsible for directing the overall process of configuring the system.
They can instantiate and register new Data objects, modify Data objects
provided by other Control objects, and instantiate and register new
Action objects.

Control objects are instantiated direcly by the B<PSGConf> object,
based on entries in the F<psgconf_modules> file.

The B<psgconf> system includes Control modules for configuring many common
tools.  These modules are located in the B<PSGConf::Control::*> tree.

=head2 The Big Picture

The following pseudocode illustrates how the B<PSGConf> object
coordinates the activities of the other objects:

  instantiate_datastore_and_control_objects()
  foreach datastore_object
    datastore_object->read_config()
  foreach policy_method
    control_object->policy_method()
  foreach control_object
    control_object->decide()
  foreach action_object
    action_object->check()
  foreach action_object
  {
    if (action_object->changed())
    {
      if (diff_mode)
        action_object->diff()
      if (fix_mode)
        action_object->fix()
    }
  }
  foreach control_object
    control_object->cleanup()

=head1 SEE ALSO

L<perl>

L<PSGConf>

=cut



syntax highlighted by Code2HTML, v. 0.9.1