Feature: "Integrations". Move most code from Automate

I propose what would be a significant paradigm shift in the way custom code is integrated into MIQ. Specifically, that most code move from the automate model, to a new point, for sake of discussions “integrations”.

An Integration is a bundle of installable generic code, which provides a high level point for Automate code to access external systems, or provide other generic functionality.

An Integration would be installed/managed as a unit of code, and be configured as zero or more Integrations points within a given installation, in a similar fashion to Cloud/Infrastructure Providers. e.g. An administrator could install the “Mice & Men” IPAM Integration, and configure it twice, for their own production and lab systems.

Configuration would be with an integration instance, and from a structured UI defined by the integration itself, (mostly) not adhoc textfileds or within Automate code.

All Integrations would implement specific, well known, interfaces. Potentially related Integrations could implement common interfaces, for example, all IPAM Integrations would implement the same basic set of method calls. For example: custom Automate code might lookup which IPAM Integration to use, but the actual getNextIP() call would be the same for M&M and Bluecat.

Minimally, Integrations would provide the generic library functionality, and friendlier configuration UI, to installation-specific automate code.

Integrations could optionally have a lifecyle to be run outside of calls from Automate. Minimally, a configuration validation callback from the UI (“can you login with this acces”). Scheduled tasks could update caches, or monitor events.

Integrations could potentially provide UI beyond configuration: reports on IP utilization, list of available Ansible playbooks, etc.

Thanks @jeffwarnica for your contribution!

@Fryguy @gmccullough @bdunne @chessbyte FYI and review.