When it came to choose a project for which to apply in Outreachy, I was looking for 3 things: mentors are in about the same timezone as me, the project is in tech stack I'm familiar with and want to expand my skills in it, and last but but not least, the project's domain is something interesting and completely new to me.
With the last point I set myself up for a lot of reading (and some videos).
At first I felt like that dog in meme 'I have no idea what I'm doing'. To wrap my head around this, I started to draw a picture with some boxes. Here is the result:
The project I'm working on is
sushy is related to, but not exactly part of, OpenStack Ironic project which deals with bare metal provisioning. Usually when talking about clouds, talk about virtual machines (VM), but there are cases where VMs do not provide necessary performance, so non-virtualized environment is necessary. Here comes Ironic project to manage bare metal servers in cloud environment - remotely. Ironic can be used independently or together with other OpenStack projects with whom it integrates.
sushy is written in a way that it does not depend on Ironic and can be used by other projects. And Ironic can decide to use something else instead of
sushy. But what does
sushy do? Time to introduce Redfish.
Redfish is a standard API to work with bare metal servers. It lives in BMC (Baseboard Management Controller) which is a microcontroller (small computer) attached to motherboard of industrial servers. BMC allows to manage servers remotely and Redfish is one of the protocols to do it. The Redfish standard is managed by DMTF (Distributed Management Task Force).
sushy is a client library in Python for Redfish RESTful web services communicating in JSON.
sushy and uses it as one of the drivers.
sushy is not the only Python library to consume Redfish API, there are alternatives named very similarly:
sushy there is also project
sushy-tools which contains emulators for testing
sushy. Otherwise it is challenging for developers to test Redfish as real server with BMC and Redfish is necessary. There are 2 emulators:
sushy-static which serves static JSON files provided by Redfish project. Mockups can be found at White Papers and Technical Notes section looking for DSP2043. There is Redfish Mockup Creator to generate mockup files from a real Redfish service. But this is little use to me as I don't have access to real Redfish service, but nice to know just in case.
Static mockup file emulator is OK for read only testing, but it does not help much when want to test actions where some changes are necessary. In this case there is
sushy-emulator which uses
libvirt driver connecting to virtual machine mimicking real server.
DMTF also provides similar emulators, both static mockup files and dynamic. I haven't tried these yet, but might try them out later. With all the alternatives available, it appears that each project takes different approach, so it is not like they are copies of each other and in the end there is choice.
Lastly, there are some acronyms that I've seen floating around in relation to Ironic that are not directly related to sushy, but I had to find out what they are and how they are related.
PXE (Preboot eXecution Environment) is way to boot up servers from network. Computers supporting PXE has NIC (network interface controller) that is up and listening to commands from network even when server itself is turned off.
IPMI (Intelligent Platform Management Interface) is a way how to manage and monitor servers remotely.
PXE and IPMI have been used together to deploy servers, but they are supposed to be replaced by newer technologies addressing some of their drawbacks - HTTP Boot and Redfish .
libvirt, already mentioned above, is API to manage virtualization, supporting wide range of hypervisors, including VirtualBox, VMWare, Hyper-V.
As always, in hindsight this all speaks for itself, but then again while writing this I discovered new places to go though I can avoid them now - this is just enough for
sushy. It will be interesting to revisit this at the end of project and see what has changed in my point of view.
Next time I will write about first tasks I'm working on that should allow me to tell more about
sushy and Redfish.
-  Ironic project wiki - openstack.org
-  Ironic User Guide - openstack.org
-  Sushy documentation - openstack.org
-  Redfish API docs - dmtf.org
-  python-redfish - github.com
-  python-redfish-library - github.com
-  Redfish Mockup Creator - github.com
-  Redfish Mockup Server - github.com
-  Redfish Interface Emulator - github.com
-  Talk from 2015 UEFI Plugfest. Firmware in the Data Center: Goodbye PXE and IPMI. Welcome HTTP Boot and Redfish! - youtube.com
-  In-browser Mockup file explorer - dmtf.org
-  Intro videos about Redfish API - dmtf.org
-  BMC - wikipedia.org
-  Microcontroller - wikipedia.org
-  Preboot Execution Environment - wikipedia.org
-  Libvirt - wikipedia.org