# OpenLMI

OpenLMI (abbreviated from Open Linux Management Infrastructure) provides a common management infrastructure for Linux systems. Available operations include configuration of various operating system parameters and services, hardware components configuration, and monitoring of system resources. Services provided by OpenLMI can be accessed both locally and remotely, using multiple programming languages and standardized APIs.
Project's source code is distributed under the GNU Lesser General Public License (LGPL) and Simplified BSD License.

## Overview

OpenLMI distinguishes agents, controllers and client applications:
* OpenLMI agents perform the actual operations; they are installed and run on managed Linux systems.
* OpenLMI controllers manage the OpenLMI agents.
* Client applications talk to the OpenLMI controllers through well-defined interfaces and language bindings, which are based on open industry standards for the management of remote systems.
Thus, instead of delivering a complete management solution, OpenLMI provides low-level functions and APIs that can be used by, or integrated into, various management platforms, applications or configuration scripts.
OpenLMI extends the already existing Linux infrastructure by providing management agents which also perform system configuration tasks, in addition to monitoring and reporting functions. By exporting those operations through standard-based interfaces, and by providing agents performing the actual operations, OpenLMI creates a management framework that various applications can use – both for system configuration, and for monitoring resources and performance. Usage targets for OpenLMI include bare-metal production servers, on which it can perform initial configurations through a set of predefined "recipes".
As of December 2013, implemented agents primarily perform operations related to storage, networking and local user accounts. Plans exist to expand the variety of implemented agents, aiming at providing complete coverage of Linux management and configuration tasks.
The OpenLMI's source code is licensed under the GNU Lesser General Public License (LGPL) and Simplified BSD License (also known as the FreeBSD License).

## Architecture

Based on their placement and usage role, OpenLMI architecture contains two major components: management modules (also known as agents), and management tools. A set of management modules is installed and running on each of the managed systems, performing the configuration and monitoring tasks. Management tools are running on a management system, performing aggregation of the collected monitoring data, and dispatching the requests to management modules. The agents are talking to the outside world through an OpenLMI Object Broker, which is also known as a controller. This object request broker provides a standard-based communications protocol, handles the security and access control, and provides deployment methods for the agents.
Each agent implements an object model that specifies the attributes (information), methods (functions), and associations (links to other objects). Through the controller, this object model is interoperably made available to client applications. While it is possible to build all required logic into an agent, the general approach is to use and invoke existing Linux tools; for example, OpenLMI's network agent uses the NetworkManager, and the storage agent uses the Blivet storage library.
The actual communication protocol is using XML data transferred over HTTPS. While it is possible to use XML directly, a set of client libraries provides native interfaces for a number of programming languages; client libraries supplied by OpenLMI provide support for C, C++, Python and Java. These interfaces are implemented as language bindings to the operations in underlying system agents, with all supplied libraries providing the same feature sets. Support for command-line interface (CLI) utilities is also provided.
Internally, OpenLMI is based on the Distributed Management Task Force (DMTF) Common Information Model (CIM), with internal functions exposed in form of CIM namespaces. A few open-source CIM clients are available, as an additional way for using data and operations exported through OpenLMI.

### Agents

OpenLMI agents, also called providers, do the actual work. OpenLMI distribution includes a set of standard management agents, and also includes a set of development resources required for developing new agents. Standard OpenLMI agents, as of April 2014, are the following:

#### Storage

    Storage Agent configures and manages local and remote storage. The ability to enumerate (discover) and configure local storage devices is built-in. As of December 2013, remote storage devices can be configured, with no support for their discovery or provisioning. Thus, remote storage must be already provisioned using other approaches, and the resulting logical unit number (LUN) made available to this agent. Support for provisioning of remote storage is planned for future releases.

#### Networking

    Networking Agent configures and manages network interface controllers (NICs) and Linux networking configuration in general. It has the ability to enumerate (discover) and configure devices, including configuration of IPv4 and IPv6 addresses, default gateways, DNS servers, management of static routes, and configuration of interfaces bridging and bonding.

#### System Services

    System Services Agent performs the management operations associated with the system services and underlying background processes, by exposing the ability for services to be, for example, started, stopped or restarted through the standard OpenLMI interface. This agent also has the ability to enumerate (discover) available system services, using the systemd's D-Bus interface.

#### User Accounts

    User Accounts Agent configures and manages local user accounts, local user groups, groups membership, and accounts parameters such as the default shell, home directory, password, and password expiration. This agent also has the ability to enumerate (discover) available local user accounts and local user groups.

#### Software

    Software Agent configures and manages software packages on a managed system. It has the ability to list the software installed on a system, install new software, update existing software, and remove installed software. It also has the ability to verify integrity of installed packages and their files, while using all configured repositories.

#### Hardware

    Hardware Agent manages hardware components, providing detailed information on their presence and associated configurations. Provided information includes the CPU-related data (number of cores, clock and FSB speeds, cache sizes, etc.), system memory (size, speed, available memory slots, installed modules, etc.), physical asset data (chassis info, available ports and slots, etc.), battery (available capacity, running voltage, etc.), and PCI devices and bridges (available buses, IDs of devices, device vendors, etc.)

#### Logging

    Journald Agent provides access to logging records through the standard OpenLMI interface. It is a client of systemd's journald service, accessing the journald records in several ways and providing a way to store new log records. Journald, as a structured logging system, stores supplemental information along each record, making it easier to find and extract information from the resulting log files.

#### Performance CoPilot

    Performance CoPilot Agent provides access to various system statistics and performance monitoring data collected by the Performance Co-Pilot (PCP) service running locally on a monitored host. PCP is capable of providing monitoring data for various services, including web, email and database servers, and virtualization environments. Collected data may have any type of value, including integers, strings, floating point numbers, and arbitrary composite data structures.

## Comparison

OpenLMI is different from other configuration management systems like Puppet or Bcfg2, in a way that OpenLMI does not require details of the system configuration to be already known in order for appropriate configuration recipes to be created. This nature of the OpenLMI may provide advantages in case initial configuration is to be performed on a broader variety of systems having different hardware configurations.

## Reception

Red Hat Enterprise Linux 7.0 includes support for OpenLMI since the first beta release of this Linux distribution, which was made available on December 11, 2013. Fedora 20, released on December 17, 2013, also includes support for OpenLMI.