Intelligent Magic Application

If you don't make a product that's good for developers then the developers won't make a good product.

In a Nutshell

Origins

IMA was developed at the very early experiments on getting the MME to run on Kubernetes.

Primarily back then the focus was on experimenting with the configuration of Kubernetes and the host to be able to run on it.


commit 0db01acfdfa669dedd5a3e4dbc142de7f1581f0b
Author: Alexander Wingård <alexander.wingard@ericsson.com>
Date:   Mon Jan 15 14:57:13 2018 +0100

Initial commit

.gitignore       |  4 ++++
Makefile         |  9 +++++++++
ama              |  2 ++
main.py          | 18 ++++++++++++++++++
requirements.txt |  1 +
util.py          | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6 files changed, 108 insertions(+)
                
Fig.1 - The First Commit of IMA

Design Goals

Implementation Details

The core of IMA functionallity is the ability to write scripts that executes code on different machines.


gateway = Ssh("gateway.com")
vm = Ssh("192.168.0.1", proxy=gateway)

email = run_grep_one(gateway, "git config --list", r"user.email=(.*)")
run(vm, f"git config user.email {email}")
                
Fig.2 - Example IMA script

And to try to be as transparent as possible both in the source code and in the logging.


2020-10-19 17:00:38,120    cmd | git config --list
2020-10-19 17:00:38,130    out | user.name=Alexander Wingård
2020-10-19 17:00:38,130    out | user.email=alexander.wingard@ericsson.com
2020-10-19 17:00:38,131    out | core.pager=less -FXRS
2020-10-19 17:00:38,132   exit | 0
2020-10-19 17:00:38,133    cmd | git config user.email alexander.wingard@ericsson.com
2020-10-19 17:00:38,280   exit | 0
                
Fig.3 - Example IMA log

This is how the typical IMA instance is allocated:

Fig.4 - IMA execution overview

Other Tools

In this table I try to describe other tools that exists in this space and try to map out what they are in charge of deciding.

IMAMesosEVRTDIMATECdeploy_to_clusterBeetsTacosRoadrunner
What machine to run onXXX
Cluster configurationXXX
Making PCC buildXXX
PCC configurationXXXXX
Traffic configurationXXXXX
TestcasesXXXX

Code

IMA source code is quite mature, not growing rapidly.

Fig.5 - Count of non whitespace characters in IMA source over time

Contributors

  • Aleksander Zhitnyakov
  • Aleksandra Kulakova
  • Alexander Wingård
  • Colin Taylor
  • George Zachariadis
  • Hanbing Zhang
  • Henrik Johansson
  • Johan Sandstig
  • Johan Svahn
  • Juan Ricart
  • Karl Eberth
  • Karol Ostrovsky
  • Kirill Malinin
  • Marco Zhang
  • Martin Tengklint
  • Mats Jansborg
  • Miguel Gargallo
  • Oliver Kjellman
  • Patrik Stoppenbach
  • Per Bohlin
  • Pierre Krafft
  • Sveinn Finnsson
  • Syafiq Atiiq
  • Urban Boquist
  • Yohanes Kuma