[openstack-dev] [Ironic] Proposal to add a new repository

Dmitry Tantsur dtantsur at redhat.com
Mon Jun 22 14:40:22 UTC 2015

On 06/22/2015 04:19 PM, Devananda van der Veen wrote:
> Hi John,
> Thanks for the excellent summary! I found it very helpful to get caught
> up. I'd like to make sure I understand the direction ahc is going. A
> couple questions...

Let me add my $0.5 :)

> I see that ahc is storing its information in swift. That's clever, but
> if Ironic provided a blob store for each node, would that be better?
> We discussed adding a search API to Ironic at the Vancouver summit,
> though no work has been done on that yet, afaik. If ahc is going to grow
> a REST API for searching for nodes based on specific criteria that it
> discovered, could/should we combine these within Ironic's API?

I think John meant having API to replace scripts, so I guess search 
won't help. When we're talking about advanced matching, we're talking 
about the following:
1. We have a ramdisk tool (based on [8]) to get some insane of facts 
from withing the ramdisk (say, 1000 of them)
2. We have an Inspector plugin to put them all in Swift (or Ironic blob 
storage as above)
3. We have config files (aka rules) written in special JSON-alike DSL to 
do matching (one of the weak points is that these are files - I'd like 
API endpoint to accept these rules instead).
4. We have a script to run this DSL and get some output (match/not match 
+ some matched variables - similar to what regexps do).
As I understood it John want the latter to become an API endpoint, 
accepting rules (and maybe node UUIDs) and outputting some result.

Not sure about benchmarking here, but again, it's probably an API 
endpoint that accepts some minimal expectations, and puts failed nodes 
to maintenance mode, if they fail to comply (again, that's how I 
understood it).

It's not hard to make these API endpoints part of Inspector, but it's 
somewhat undesirable to have them optional...

>  From a service coupling perspective, I like the approach that ahc is
> optional, and also that Ironic-inspector is optional, because this keeps
> the simple use-case for Ironic, well, simple! That said, this seems more
> like a configuration setting (should inspector do extra things?) than an
> entirely separate service, and separating them might be unnecessarily
> complicated.

We keep thinking about it as well. After all, right now it's just a 
couple of utilities. There are 2 more concerns that initially made me 
pull out this code:
1. ahc-tools currently depends on the library [8], which I wish would be 
developed much more openly
2. it's cool that inspector is pluggable, but it has its cost: there's a 
poor feedback loop from inspector processing plugins to a user - like 
with all highly asynchronous code
3. it's also not possible (at least for now) to request a set of 
processing plugins when starting introspection via inspector.

We solved the latter 2 problems by moving code to scripts. So now 
Inspector only puts some data to Swift, and scripts can do everything else.

So now we've left with
1. dependency on "hardware" library
2. not very stable interface, much less stable than one of Inspector

We still wonder how to solve these 2 without creating one more 
repository. Any ideas are welcome :)

> It sounds like this is the direction you'd like to go, and you took the
> current approach for expediency. If so, I'd like us to discuss a path to
> merge the functionality as it matures, and decide whether a separate
> repository is the right way to go long term.
> Thanks much,
> Devananda
> On Mon, Jun 22, 2015, 05:40 John Trowbridge <trown at redhat.com
> <mailto:trown at redhat.com>> wrote:
>     This is a proposal to add a new repository governed by the ironic
>     inspector subteam. The current repository is named ahc-tools[1], however
>     there is no attachment to this name. "ironic-inspector-extra" would seem
>     to fit if this is moved under the Ironic umbrella.
>     What is AHC?
>     ------------
>     * AHC as a term comes from the enovance edeploy installation method[2].
>     * The general concept is that we want to have a very granular picture of
>     the physical hardware being used in a deployment in order to be able to
>     match specific hardware to specific roles, as well as the ability to
>     find poor performing outliers before we attempt to deploy.
>     * For example: As a cloud operator, I want to make sure all logical
>     disks have random read IOPs within 15% variance of each other.
>     * The huge benefit of this tooling over current inspection is the number
>     of facts collected (~1000 depending on the hardware), all of which can
>     be used for matching.
>     * Another example: As an end user, I would like to request a bare metal
>     machine with a specific model GPU.
>     What is ahc-tools?
>     ------------------
>     * We first tried to place all of this logic into a plugin in
>     inspector[3] (discoverd at the time). [4]
>     * This worked fine for just collecting some of the simple facts, however
>     we now had a coupling between booting a ramdisk, and matching against
>     the collected data.
>     * ahc-tools started as a way to uncouple these two steps[5].
>     * We also added a wrapper around the enovance report tooling[6], as it
>     already had the ability to generate reports based on the collected data,
>     but was designed to read in the data from the filesystem.
>     * The report tool has two functions.
>     * First, it can group the systems by category (NICs, Firmware,
>     Processors, etc.).
>     * Second, it can use statistical analysis to find performance outliers.
>     Why is ahc-tools useful to Ironic?
>     ----------------------------------
>     * If we run benchmarks on hardware whenever it is turned back in by a
>     tenant, we can easily put nodes into maintenance if the hardware is
>     performing below some set threshold. This would allow us to have better
>     certainty that the end user is getting what we promised them.
>     * The advanced matching could also prove very useful. For VMs, I think
>     the pets vs cattle analogy holds up very well, however many use cases
>     for having cloud based bare metal involve access to specific hardware
>     capabilities. I think advanced matching could help bridge this gap.
>     Why not just put this code directly into inspector?
>     ---------------------------------------------------
>     * Clearly this code is 100% dependent on inspector. However, inspector
>     is quite stable, and works great without any of this extra tooling.
>     * ahc-tools is very immature, and will need many breaking changes to get
>     to the same stability level of inspector.
>     Why aren't you following the downstream->stackforge->openstack path?
>     --------------------------------------------------------------------
>     * This was the initial plan[7], however we were told that under the new
>     "big tent", that the openstack namespace is no longer meant to signify
>     maturity of a project.
>     * Instead, we were told we should propose the project directly to
>     Ironic, or make a new separate project.
>     What is the plan to make ahc-tools better?
>     ------------------------------------------
>     * The first major overhaul we would like to do is to put the reporting
>     and matching functionality behind a REST API.
>     * Reporting in particular will require significant work, as the current
>     wrapper script wraps code that was never designed to be a library (Its
>     output is just a series of print statements). One option is to improve
>     the library[8] to be more library like, and the other is to reimplement
>     the logic itself. Personally, while reimplementing the library is a
>     large amount of work, I think it is probably worth the effort.
>     * We would also like to add an API endpoint to coordinate distributed
>     checks. For instance, if we want to confirm that there is physical
>     network connectivity between a set of nodes, or if we would like to
>     confirm the bandwidth of those connections.
>     * The distributed checks and REST API will hopefully be completed in the
>     Liberty timeframe.
>     * Overhaul of the reporting will likely be an M target, unless there is
>     interest from new contributors in working on this feature.
>     * We are planning a talk for Tokyo on inspector that will also include
>     details about this project.
>     Thank you very much for your consideration.
>     Respectfully,
>     John Trowbridge
>     [1] https://github.com/rdo-management/ahc-tools
>     [2] https://github.com/enovance/edeploy/blob/master/docs/AHC.rst
>     [3]
>     https://github.com/openstack/ironic-inspector/commit/22a0e24efbef149377ea1e020f2d81968c10b58c
>     [4] We can have out-of-tree plugins for the inspector, so some of this
>     code might become a plugin again, but within the new repository tree.
>     [5]
>     https://github.com/openstack/ironic-inspector/commit/eaad7e09b99ab498e080e6e0ab71e69d00275422
>     [6]
>     https://github.com/rdo-management/ahc-tools/blob/master/ahc_tools/report.py
>     [7] https://review.openstack.org/#/c/193392/
>     [8] https://github.com/enovance/hardware
>     __________________________________________________________________________
>     OpenStack Development Mailing List (not for usage questions)
>     Unsubscribe:
>     OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
>     <http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe>
>     http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
> __________________________________________________________________________
> OpenStack Development Mailing List (not for usage questions)
> Unsubscribe: OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

More information about the OpenStack-dev mailing list