Extensibility ============= Edge Infrastructure Manager is designed to be extensible and customizable. The system can be adapted to meet unique requirements, integrate with external systems, and support new features. This document provides an overview of the extensibility options available in the Edge Infrastructure Manager. The typical way to extend the system is by adding new resources in the Inventory datamodel (see :doc:`/developer_guide/infra_manager/arch/data_model`). Modeling is done using the `Protocol Buffer `_ serialization format that is language independent, and then presented to other services using gRPC. The protobuf format is the canonical format for data in Edge Infrastructure Manager. Once new abstractions have been added to Inventory including the Data Access Layer (DAL) business logic, the next step is to define the REST APIs through which users and external components can consume those resources. The REST APIs are defined in the Edge Infrastructure Manager `OpenAPI `_ specification (see `API documentation `_). Edge Infrastructure Manager northbound APIs are designed to be declarative: the consumer express an Intent that gets translated into a `desired` field in the affected Inventory resource. Resource Managers are responsible for reconciling user intents with the actual state of the infrastructure (reported as `current` field). They can be customized to support new resources, workflows, or integrations with external systems. The system provides modular integration points and plugin options to support these extensibility scenarios. Multiple different vendors may each have their own Resource Manager, each supporting different Provider API types: a bare-metal provider would have a different Resource Manager than a VM provider, and similarly. As an example see the following diagram that shows the integration with Lenovo* Open Cloud Automation and the `extensions `_ we introduced in Edge Infrastructure Manager. .. figure:: ./images/eim_loca.png :alt: Integration with Lenovo* Open Cloud Automation Finally, the last integration dimension implies introducing an Edge Infrastructure Manager Exporter, a Controller or a new set of components which perform very tailored tasks and act as a bridge between Edge Infrastructure Manager and other Edge Manageability Framework platform services.