Architecture

Bcfg2 provides a declarative interface to system configuration. It was designed and implemented in-house at Argonne National Laboratory, but has matured to the point that external sites have begun using it. Its configuration specifications describe a literal configuration goal state for clients. In this architecture, the Bcfg2 client tool is responsible for determining what, if any, configuration operations must occur and then performing those operations. The client also uploads statistics and client configuration state information. The design and implementation of the reporting system is described in a separate page.

Server

The role of the bcfg2 server is rendering a client-specific target configuration description from a global specification. The specification consists of a directory structure containing data for a variety of server plugins. The bcfg2 server has a plugin interface that can be used to interpret parts configuration specification.

Client

The Bcfg2 client is responsible for determining what reconfiguration operations must be undertaking on the client, but does not perform any processing of the target configuration description. We chose this architecture, as opposed to one with a smarter client, for a few reasons:

  • Client failure forces administrators perform an O(n) reconfiguration operation. Simpler code is easier to debug and maintain.
  • Minimize the bootstrap size; a complicated client can require more aspects of the system to function in order for reconfiguration to work.
  • Isolate configuration generation functionality on the server, where it can be readily observed. This is the most complicated task that Bcfg2 performs.
  • The results of the configuration process fit a fairly simple model. We wanted to validate it. The result is that Bcfg2 has a programmable deployment engine that can be driven by anything that writes a compatible configuration description.