Nuxeo was recently handed a challenge in the context of a client prospect. They needed to handle configuration management. At Nuxeo, we like challenges, and even more, we like the opportunity to demonstrate that the Nuxeo Platform is so flexible and customizable that it can adapt to many different types of projects.
(Resources mentioned during this article are regrouped in a specific section at the end).
Many different reasons lead more and more companies to take the path of setting up a configuration management system. Historically, CM was used in military engineering organizations but it is now seen in many civil domains. It can be required for regulatory compliance, i.e. in aeronautics or medical device development, but can also be a choice for quality certifications and process improvement systems.
Configuration management applies to a wide range of domains, from huge mechanical systems to electronic devices to software, a system being very often a mix of a mechanical systems with electronic devices and software to control and monitor everything (a car for instance).
There are many standards for configuration management, depending on the business area. A few of them are:
- CMMI for Development, version 1.2 Configuration Management
- ANSI/EIA-649-1998 National Consensus Standard for Configuration Management
- EIA-649-A 2004 National Consensus Standard for Configuration Management
- TechAmerica/ANSI EIA-649-B 2011 Configuration Management Standard
- ISO 10007:2003 Quality management systems - Guidelines for configuration management
- Federal Standard 1037C
- STANAG 4159 NATO Materiel Configuration Management Policy and Procedures for Multinational Joint Projects
- STANAG 4427 Introduction of Allied Configuration Management Publications (ACMPs)
For a first introduction to configuration management principles and vocabulary, you can refer to the configuration management wikipedia page : http://en.wikipedia.org/wiki/Configuration_management
If you are in the software industry, CMMI (Capability Maturity Model Integration) for development is one of the references.
As stated by the CMMI approach, "The purpose of Configuration Management (CM) is to establish and maintain the integrity of work products using configuration identification, configuration control, configuration status accounting, and configuration audits."
Nuxeo offers many tools and features that just need to be leveraged and adapted for a configuration management project. As part of a proof of concept, we developed some custom features to handle a configuration management project, using Nuxeo Studio and Nuxeo IDE.
The result is a Nuxeo Studio Application Template and a custom operation developed with Nuxeo IDE. Although this first template is not a complete configuration management application, it shows how Nuxeo can be used to handle concepts like configuration, configuration items, and baselines from creation, manipulation, to audit and verification.
The Studio Application Template
In Nuxeo Studio, you will find an Application Template (Settings and Versioning) called Configuration_Management.
The logic of the template is to provide tools to manage project documentation through configuration management from creation to audit and control.
Our Approach to a Configuration Management Template
A documentation tree to be managed by the application is called a Configuration. Every file and folder created in it will be under configuration management control.
For that, they have specific metadata inherited from the schema "configuration_management". For example, every file is linked to its parent configuration and has a unique reference given on creation. If a document is copied into another configuration, the parent configuration is updated, but the reference stays the same. It enables to watch a file throughout its configurations and evolutions (a specific tab is added on the type File to display every location and configuration of the file copies).
The versioning system of Nuxeo is used to manage and know which files are validated or working versions. By choice, every minor version is know as a reviewing and working version whereas major version are used only for validated version of the document. Please note that no specific validation process, such as a RACI, has been configured for this first version.
So working under configuration management with Nuxeo starts by creating a Configuration (one per project or product typically). Then create the project tree and the project files. These files can be new files or can be copied (forked) from other projects. The File minor and major versions are used to know which are validated or not, and the Configuration tab on Files gives a look to all major version and copies of this file throughout the system.
One very important aspect of configuration management is to track the state of the documentation set at key moments of the project, for example at client releases. These snapshots of the configuration state are called baselines. A baseline reflects the state of the configuration at a specific moment -- it's a view of latest validated versions of all documents of the configuration.
To manage baselines, a doc type called Baseline can be created into a Baseline_library. By default, a Baseline is in pending state as the baseline can be prepared and then generated only when needed. A user action is provided on the Baseline Folder Toolbar to actually baseline the configuration.
It launches the baselineConfiguration automation chain, whose role is to set to the baseline to the generated state and actually generate the baseline using a specific automation operation.
The specific operation is called "Baseline Configuration" and has been implemented with Nuxeo IDE.
The operation calls a recursive method that will copy the configuration tree into the baseline and will also create a virtual copy of the latest validated version of the document.
This virtual copy is called a proxy in Nuxeo and it's a read only copy of the latest major version of the document. (A proxy is very much like a symbolic link on an Unix-like OS: a proxy points to a document and will look like a document from the user point of view) . Proxies are used to be able to see the same document from several places without duplicating data -- exactly what is needed when generating a baseline. We do not want to duplicate the document, just create a link to it. (more info on proxies here)
In the end, when a baseline is generated, it shows the same tree as the parent configuration, but each folder only contain proxies of latest validated version of the files.
If you take a look at the baseline operation source code, you will see that it gets the configuration parent folder, the baseline parent folder and call a recursive method (baselineFolder) with those 2 folders as parameters. BaselineFolder gets the children of the configuration node:
if they are folderish (an attribute in Nuxeo meaning a document type can have children), it copies them into the baseline node and recall itself on each new child node if the node is not folderish, it looks for the latest major version and create a proxy of the document into the baseline node.
Configuration management is a complex process, but using the right tool can ease up things.
There are many keys to a successful configuration management system, one of them is identification and control of the configuration and its configuration items, and another one is managing the different roles in your system. We decided to focus this proof of concept on the identification and control of the items throughout their evolutions in the system. To do so, we used Nuxeo features such as versioning, proxies, content views and extensibility. In a final application, other Nuxeo features such as relation, document locking and workflows would probably leveraged too.
Please do not hesitate to try today's example and give us feedback -- we are also very interested to discuss how you may have set up configuration management process in your organization.
Here is the documentation page of the Studio Application templates, on this page you will find more detailed information about the application template, you will also find links to the market place package, the github project and other interesting ressources.