This is meant as a discussion piece that we can hopefully tune and refine into something that might go into developer guides on https://github.com/ManageIQ/guides. It’s important to point out that the world is changing underfoot, and a New World Order™ is coming for Provider Integrations. Nonetheless, the world can’t stop because of upcoming changes. In fact, several integrations are being asked for before the changes to Provider Integrations can be undertaken.
In light of that, this should serve as a way to teach about how Provider Integration are currently implemented in the ManageIQ codebase and help those who are interested take on integration work in the near term.
Adding New Providers
Adding a new Provider to ManageIQ is daunting. But, breaking down the process of adding a new provider into smaller, more consumable, parts can make it much easier to comprehend the actual work involved.
What’s a Provider
The first thing to point out is that there is no object in the ManageIQ data models called a “Provider”. In ManageIQ, a provider is called an External Management System (abbr. EMS). All other provider objects will relate back to an
ExtManagementSystem to indicate which provider owns the object. For instance,
Vm#ems_id is a reference to a Vm’s provider.
ManageIQ attempts to normalize data from different providers by grouping providers into various provider types. There are two provider types currently supported:
The Four Parts of Provider Integration
Provider integrations are broken down into four major areas:
Understanding Provider Inventory
ManageIQ collects inventory from providers in order to create a single pane of glass view of all providers’ data together. When trying to determine how to collect inventory for a new provider, it’s important to understand the model objects that will be collected.
<< Data Model from EMS down >>
Mapping the provider’s objects to ManageIQ objects will sometimes be a perfect fit, and other times will require completely new model object in ManageIQ. When adding Cloud providers of Virtual Infrastructure providers, most provider objects should map to preexisting ManageIQ objects.
Collecting inventory consists of grabbing data from the provider and building a predefined Ruby
Hash representing the ManageIQ representation of the data model objects for that provider type.